機械学習入門(ボルツマン機械学習から深層学習まで)を読んで、覚えておきたいと思ったこと

平易な言葉で本質を教えてくれる本書のような情報源は貴重。
この類の本をどんどん読んで吸収していきたい。
鏡に美しさを示す関数を教えよう、というところから始まるのだが、
鏡が博識&有能すぎて教えるどころではないというところ。

機械学習入門 ボルツマン機械学習から深層学習まで

順問題と逆問題

  • 順問題
    • 「関数が与えられているから、何か入力して出力される値を計算しろ」
    • y = f(x) の y を求める
  • 逆問題
    • 「入力と出力の関係があるから、それに矛盾しない関係を探してこい、みつけろ」
    • y = f(x) の f を考える

教師あり学習と教師なし学習

子供はおそらく最初は教師なし学習をしている。
周りの風景を見渡して、世の中の風景や聞こえる音、匂いなどを学習して雰囲気を学ぶ。
そのものが何なのかは知らないけど、こういうものだということを学んで、記憶の中で整理している。

だんだん成長するにつれ、周りの大人の言うことや本などを読むことにより、それが何だったのかという理解をすることで教師あり学習を行っている。

線形な計算だけだと、複雑にならない

Aという変数を2倍したものとBという変数を3倍したものを足す。
Aという変数を3倍したものとBという変数を2倍したものを足す。

これらをそのまま足し合わせると、
Aという変数を5倍したものとBという変数を5倍したものとなり、
結局1度の掛け算と足し算で表現できてしまい、複雑にならない。表現力が上がらない。

そこで非線形変換を施すことで、複雑さを作れる。
非線形変換を施す関数のことを活性化関数と呼ぶ。

バッチ学習とオンライン学習

  • バッチ学習
    • データを全部貰い受けて、それを訓練データにして学習する
  • オンライン学習
    • 次から次へとデータがきて、学習する
    • 毎回異なるデータがくるため、汎化性能がよくなる傾向がある

分離超平面とは?

特徴量に重みを掛けて足し上げて0になるところと、1になるところの境。

SVMサポートベクターマシン)?

識別面をデータの点からの距離、マージンが大きくなるように調整する。
そのマージンをできるだけ広げるように分離超平面を動かす方法をサポートベクターマシンと呼ぶ。
サポートベクターマシンはそれなりに汎化性能が良い。

ただ分けるだけを目的にすれば、そんなことは考える必要はない。
分けるために識別の誤差を最小にするわけだが、サポートベクターマシンは識別の誤差だけでなく、マージン最大化、データが示す点と分離超平面の間の距離を最大化するという両者の要素を考慮する。

非線形変換のイメージ

線形変換は伸縮させたり、回転させたり。
非線形変換はグシャッと変形するイメージ。

特徴量をそのまま使うのではなく、非線形変換でグシャッと変形して使うというのがカーネル法のアイデア

スパースモデリング

回帰や識別に使った特徴量の中から本当に大事なものは何か?
ということを念頭に置いて、あまり重要でない特徴量にかかる重みをゼロにする工夫の仕方がある。
そうして残った特徴量、その組み合わせだけが重要であるという特徴量選択が実現する。

データの本質をつかむためにゼロを探す。
そうやってほとんどゼロになっている状況をスパースという。
そのように仕向ける方法論をスパースモデリングという。

ボルツマン機械(ボルツマンマシン)

場所ごとの関係性を設定したモデルをボルツマンマシンと呼ぶ。
ボルツマンマシンに、画像のデータを見せて、そのデータに合わせていくことで、実際の画像の特徴、どのピクセルには何色が出やすいか、隣同士の関係性がどういう傾向にあるのか、それを学ぶ学習をボルツマン機械学習という。

ボルツマン機械学習では双方向型のニューラルネットワークを利用する。

自然は何かしらの最適化問題を解いている

最適化問題を解いた後の世界の姿が私たちが目にする世界

隠れ変数

データとして得ることができない、見えない部分を隠れ変数という。
データとして取得可能な部分を可視変数という。

可視変数をピクセル
可視変数同士を結びつける関係、それが隠れ変数のスイッチとしての役割とする。
可視変数同士、つまりピクセル同士にも関係がないように制限して、
さらに隠れ変数同士、スイッチ同士にも関係がないように制限したものを制約ありボルツマン機械という。

制限ありボルツマン機械の場合はサンプリングが簡単。
可視変数のサンプリングをして、その後、隠れ変数のサンプリングをして、と交互に繰り返すだけで良い。

http://postd.cc/a-beginners-guide-to-restricted-boltzmann-machines/

自己符号化

中間層は入力を反映した何かになる。
もともと入力されたものをグシャッと変形させたものだが、もとに戻せる程度。

入力から重要な部分だけを抽出する。
こうやって特徴量の下図を減らすことを次元圧縮という
重要な特徴量をあぶり出すことを、自己符号化を利用した事前学習で行う。

教師データがたくさんある場合は、事前学習なしでよい。
事前学習は教師なし学習なので、答えが分かってないデータも利用できる。
こうすることで多層ニューラルネット潜在的な性能を引き上げられる。