機械学習入門(書籍)

機械学習入門 ボルツマン機械学習から深層学習まで [[ 大関真之 ]], オーム社, 2016


  • 機械学習のコンセプトがざっとわかる
  • 若干古いけど人気っぽい
  • 読みやすかった

  • 「特徴量を作っていく」というプロセスはすでに物理学(特に統計力学)でなされている

  • 特徴量をいい感じに組み合わせて、あたらしい量を得たい(本文中では美しさ)
  • 組み合わせには、特徴量に重みをかけていく線型結合を使う方法と、非線形変換を施す方法がある。線型結合はわかりやすい。しかしその重みをどうしたらいいかわからない。
  • 教師あり学習の場合、ground truthと作ってみた量の遠さを表す誤差関数を考え、これを小さくするように重みを調整していく。調整の方法にはたとえば座標降下法、最急降下法がある。両方とも重みを少し動かして(微分して)誤差が小さくなる方向に調整していく。変分原理と関連する。
    • 座標降下法では重みを一つずつ、最急降下法ではgradの方向にずらす。
      • 座標降下法では一つの軸で動くので、普通の微分。
  • 当然微分が小さくなるところを探すとたまには極小にぶち当たって、最適にはならない(太陽光パネルの発電量にそんな話があった)。
  • 作ったモデルを試すには、交差検証を使う。これはたとえばデータを0〜9に10分割したら、まず0をテスト、それ以外を訓練に使う。次に1をテスト、それ以外を訓練に使う…を繰り返す。そして10個のモデルのインスタンス(?)を作って評価する。
  • 非線形変換の関数(活性化関数)には、シグモイド関数(ステップ関数をなめらかにしたやつ)やReLU(ランプ関数)が使われる。
    • シグモイドだと傾きがほとんどの範囲でゼロなのでいずれ勾配が消失して、調整しようがなくなる
  • 特徴量をつくるのを繰り返していくと、多層ニューラルネットワークができる。
    • 複雑にするとそのモデルの「表現力」が増して、過学習のおそれが強くなる
    • これを防ぐために、パラメータに恣意的な制限をかけたり(正則化)特徴量を適当に捨てたり(ドロップアウト)する
      • で、重みがゼロに近いのを捨てる正則化をかけていくと、最終的に意味ありげなのだけが生き残る。これをスパースという。
  • 一般に、データは時間が経つにつれて増えていくので、後からデータを追加して学習させたい。このようにインクリメンタルにやる方法をオンライン学習という(一気にドバっと学習させるのはバッチ学習)。インクリメンタルにやると汎化性能がよくなるので嬉しい。
  • したがってバッチ学習でもあえて事前にバラバラにわけて小さい単位について降下法していく(確率勾配法)。小さい単位のデータはランダムな順番で与える。それぞれのデータとデータ全体に適用するのではgradの方向が変わってくる。
    • こうするとある特徴量の軸では極小なんだけど、立体的に見れば鞍点だ!というケースにちゃんとずれて鞍点を降りていくことができる(gradがコロコロ変わるので)
    • 単にデータが小さいと嬉しいだけっぽい
  • このあたりの話はJIT/AOTコンパイラとインタプリタの区別のようなもので、現状ではあまり意味のない分類なのかもしれない。
  • 一方、ground truthが存在しない教師なし学習はデータの構造や関係性を調べるのに使う。クラスタリングとかはこれ(ラベリングは教師あり)。たぶん。よくわかんないデータから法則のヒントを得る。教師ありは、よくわかっているデータからなんとか予測識別させる。

  • データを(すでにわかっている分類に)分けるにはSVMを使える。データが地図上の点で示されるとするなら(座標が特徴量だ)、その2つの群のどまんなかを突っ切る直線(分離超平面)を描く。直線にせよ平面にせよ超平面にせよ、あくまで「まっすぐ」なのでぐねぐねした境界は描けない。だったらデータの地図を歪めればいいじゃんってことでこれにも非線形変換を施せる(線形変換だったら長方形の領域は平行四辺形にしかならない)。これをカーネル法という。軸を歪めるといってもいい。距離の定義をユークリッド距離からオレオレ測度系にするといってもいい。
    • あるいは点を別の地図の点にいい感じにマッピングして(座標を新たな特徴量にする)、SVMでまっすぐ切る方法もある。NNにがんばらせる。
  • 低ランク行列再構成
    • よくわかんない
    • とりあえず教師なし学習になるらしい
    • explainable?
  • ここまでの地図はあくまで(超平面・空間という意味での)比喩的な地図だった。ここからは二次元画像の話。ボルツマン機械学習では、隣り合うピクセル同士で特徴量を運び合って関連を見出す(MCMC)。計算量を減らすために、平均場近似法などを使う(情報を一方に流すのみ)。
    • 画像を作ってみて(サンプリング)、それらが総合してもとの画像に似ているかの尺度(尤度)を使って評価する。尤度は誤差関数と同義?
  • 隣り合うピクセル同士すべて考えると大変なので、ある要素がまとまって出てくるかを表現する隠れ変数を考えて、ピクセル同士・隠れ変数同士が独立しているとしたのが制限付きボルツマン機械
  • コントラスティブダイバージェンス法では、一度入力を入れて、対応する隠れ変数の値を作り出す。この隠れ変数から今度はピクセルを生成させると、サンプリングができる。これを繰り返していくと差がわかりやすいサンプリングができる。
  • 隠れ変数の隠れ変数(の隠れ変数…)を考えるとこれはディープボルツマン機械になる。多層NNの教師なしバージョン。

  • 教師ありのNNの出力層を除いた部分についても、まずはデータを与えて教師なし学習をさせてみるのもよい(プレトレーニング)。
  • ただし出力がないとうまくいっているかどうかわからない。そこで、たとええば入力層A→中間層BというNNがあったら、A→B→Aとなるようにつなげて、左のAに入れたデータが右のAからそのまま出てくるようにBを調整する方法がある(自己符号化)。

Backlinks