GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

Deep Learningに関して私が知り得た全て

 http://www.sakurai.comp.ae.keio.ac.jp/classes/infosem-class/2012/15DeepLearning.pdf

 リンクは昨日と同じのを再掲。会社の休み時間に印刷して持って行ったのを読んでいました。

 んで、ボンヤリと理解出来てきたんでまとめてみます。
(私は教師有り学習器として使用する前提で書いてるんで、その用語を使用します。)

そもそもDeep Learningとは

 特定のアルゴリズムを指すものではなく、ある種の性質を持った学習アルゴリズムを指す単語らしい。「ある性質」とは

  1. 基本的には教師有り学習器である事。
  2. 複数の学習器の階層構造によって、より精度の高い学習器を構築する事。
  3. 抽象度の低い特徴を学習し、それを元に抽象度の高い特徴を学習出来る。

という感じだと思う。

 んで、以下は上記PDFの記載をザクっとまとめたもの。Deep Learningの一アルゴリズムの解説だと思う。

従来の多層パーセプトロンMLP)との違い

 どちらもパーセプトロンを多層構造にしているという点では同じ。なので、学習後の(関数近似時の)動作はDeep LearningMLPでは同じになる。違うのは学習時のアルゴリズム

 バックプロパゲーションを用いたMLPでは、入力層に近いレイヤーまで誤差が伝播しづらく、出力層に近いレイヤーしか有効に学習出来ないという問題があったらしい*1

 これに対して、Deep Learningは出力層の直近のレイヤーのみ教師あり学習を行い、それ以外のレイヤーは教師なし学習を行う。

 この為、教師なし学習を行うレイヤーでは「誤差を小さくする為の出力」ではなく「入力*2をより良く表現出来る出力」を学習する。

 言い方を変えると、これらのレイヤーは関数近似の精度向上を無視し、入力から特徴を抽出する事を重視して学習する。

学習アルゴリズムの例

  1. N層の内部レイヤーを持つパーセプトロンのネットワークを構築し、適当な値で結合の重みを初期化する。
  2. 第1層*3の学習を教師なしで行う。
  3. 第1層の重みを固定し、第2層の学習を同じく教師なし学習で行う。以降、第N-1層まで同じ。
  4. 第N層の重みを教師あり学習で調整する。

 教師なし学習のフェーズでは、入力と出力のレイヤーのノード数を同じにして、入力と出力が同じになる関数*4を近似出来る様に学習する。

コンピュータ将棋の評価関数として使用する場合に期待出来る事

 入力層近辺では「駒割」や「駒の位置評価」程度の抽象度の低い特徴しか抽出出来ないが、出力層に近くなるにつれ「複数の駒の位置関係」とか「囲い」を認識出来る様になり、出力はそれらの特徴を総合的に判断して評価値を出せる様になる…ハズ。

 利点としては、特徴量抽出のルーチンをハードコーディングする必要が無いので、評価関数の実装に開発者の棋力が不要になる可能性がある事。しかし、評価関数が完全にブラックボックス化するので、それは欠点かも。

 ただし、Deep Learningはバッチ学習前提なので、TDLeaf(λ)やBonanza Methodとそのまま組み合わせるのはおそらく不可能。

 TDLeaf(λ)と組み合わせるなら、サンプリング(対局し、局面と評価値の目標値のペアを複数個生成する)と学習を交互に行う等の工夫が必要だと思われる。

その他色々

 アンサンブル学習や合議は複数の学習器を並列に並べて、それらの出力を何らかの方法で合算する。それに対してDeep Learningは複数の学習器を直列に並べ、ある学習器の出力を次の学習器の入力とする。この2つは「並べ方」が異なるが「複数の学習器を組み合わせてより高精度の学習器を実現する」という点では同じなので、一方で有効な手法を他方に持ち込めるかも。

 実装にあたり、同一レイヤーの複数のノードが似た様な特徴を学習してしまうのを防ぐのが重要らしい。Negative Correlation Learningを用いれば、この辺のバランスをうまく取れる可能性があるかも。一度やってみるべし。

 第N層をパーセプトロンではなく他の手法(例えばSVM)に置き換えるのも可能らしい。夢が広がりング。

 1≦n

*1:ただし、時間をかければちゃんと学習するという結果もある。

*2:第1層では説明変数そのもの。第n層ではn-1層の出力

*3:入力層の直近のレイヤー

*4:恒等関数と言うらしい