Deep Learningに関して私が知り得た全て
http://www.sakurai.comp.ae.keio.ac.jp/classes/infosem-class/2012/15DeepLearning.pdf
リンクは昨日と同じのを再掲。会社の休み時間に印刷して持って行ったのを読んでいました。
んで、ボンヤリと理解出来てきたんでまとめてみます。
(私は教師有り学習器として使用する前提で書いてるんで、その用語を使用します。)
そもそもDeep Learningとは
特定のアルゴリズムを指すものではなく、ある種の性質を持った学習アルゴリズムを指す単語らしい。「ある性質」とは
- 基本的には教師有り学習器である事。
- 複数の学習器の階層構造によって、より精度の高い学習器を構築する事。
- 抽象度の低い特徴を学習し、それを元に抽象度の高い特徴を学習出来る。
という感じだと思う。
んで、以下は上記PDFの記載をザクっとまとめたもの。Deep Learningの一アルゴリズムの解説だと思う。
従来の多層パーセプトロン(MLP)との違い
どちらもパーセプトロンを多層構造にしているという点では同じ。なので、学習後の(関数近似時の)動作はDeep LearningとMLPでは同じになる。違うのは学習時のアルゴリズム。
バックプロパゲーションを用いたMLPでは、入力層に近いレイヤーまで誤差が伝播しづらく、出力層に近いレイヤーしか有効に学習出来ないという問題があったらしい*1。
これに対して、Deep Learningは出力層の直近のレイヤーのみ教師あり学習を行い、それ以外のレイヤーは教師なし学習を行う。
この為、教師なし学習を行うレイヤーでは「誤差を小さくする為の出力」ではなく「入力*2をより良く表現出来る出力」を学習する。
言い方を変えると、これらのレイヤーは関数近似の精度向上を無視し、入力から特徴を抽出する事を重視して学習する。
学習アルゴリズムの例
- N層の内部レイヤーを持つパーセプトロンのネットワークを構築し、適当な値で結合の重みを初期化する。
- 第1層*3の学習を教師なしで行う。
- 第1層の重みを固定し、第2層の学習を同じく教師なし学習で行う。以降、第N-1層まで同じ。
- 第N層の重みを教師あり学習で調整する。
教師なし学習のフェーズでは、入力と出力のレイヤーのノード数を同じにして、入力と出力が同じになる関数*4を近似出来る様に学習する。
コンピュータ将棋の評価関数として使用する場合に期待出来る事
入力層近辺では「駒割」や「駒の位置評価」程度の抽象度の低い特徴しか抽出出来ないが、出力層に近くなるにつれ「複数の駒の位置関係」とか「囲い」を認識出来る様になり、出力はそれらの特徴を総合的に判断して評価値を出せる様になる…ハズ。
利点としては、特徴量抽出のルーチンをハードコーディングする必要が無いので、評価関数の実装に開発者の棋力が不要になる可能性がある事。しかし、評価関数が完全にブラックボックス化するので、それは欠点かも。
ただし、Deep Learningはバッチ学習前提なので、TDLeaf(λ)やBonanza Methodとそのまま組み合わせるのはおそらく不可能。
TDLeaf(λ)と組み合わせるなら、サンプリング(対局し、局面と評価値の目標値のペアを複数個生成する)と学習を交互に行う等の工夫が必要だと思われる。
その他色々
アンサンブル学習や合議は複数の学習器を並列に並べて、それらの出力を何らかの方法で合算する。それに対してDeep Learningは複数の学習器を直列に並べ、ある学習器の出力を次の学習器の入力とする。この2つは「並べ方」が異なるが「複数の学習器を組み合わせてより高精度の学習器を実現する」という点では同じなので、一方で有効な手法を他方に持ち込めるかも。
実装にあたり、同一レイヤーの複数のノードが似た様な特徴を学習してしまうのを防ぐのが重要らしい。Negative Correlation Learningを用いれば、この辺のバランスをうまく取れる可能性があるかも。一度やってみるべし。
第N層をパーセプトロンではなく他の手法(例えばSVM)に置き換えるのも可能らしい。夢が広がりング。
1≦n