制限ボルツマンマシン (RBM) の導出 (1)
ボルツマンマシン(隠れ変数あり)の導出(2016/3/12)のつづき。Deep Learningの基礎モデルとして有名な制限ボルツマンマシン(Restricted Boltzmann Machine: RBM)を導出したい。深層学習の2.7節に当たる。前回と同様に表記法はこの本に準拠する。
深層学習 Deep Learning (監修:人工知能学会)
- 作者: 麻生英樹,安田宗樹,前田新一,岡野原大輔,岡谷貴之,久保陽太郎,ボレガラダヌシカ,人工知能学会,神嶌敏弘
- 出版社/メーカー: 近代科学社
- 発売日: 2015/11/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 可視変数のみのボルツマンマシンの導出(2.4節)
- 隠れ変数ありのボルツマンマシンの導出(2.5節)
- 制限ボルツマンマシンの導出(2.7節)
この本の説明も十分わかりやすいが制限ボルツマンマシンのよい解説をいくつか見つけたので参考にしたサイトを上げておく。
- 制限付きボルツマンマシンの初心者向けガイド
- RBMから考えるDeep Learning ~黒魔術を添えて~
- Restricted Boltzmann Machine の導出に至る自分用まとめ (PDF)
- Theano 入門
- Theano で Deep Learning <6>: 制約付きボルツマンマシン <前編>
- RBMのtheanoコード解説
- コンストラスティブ・ダイバージェンス法を用いた制限ボルツマンマシン(RBM)の実装
- scikit-learnのRBM
- An Introduction to Restricted Boltzmann Machines (PDF)
- Learning Deep Architecture for AI Chapter 5 Energy-Based Models and Boltzmann Machines (PDF)
- A Practical Guide to Training Restricted Boltzmann Machines (PDF)
ほとんどの資料は最終的な式しか書かれておらずどうやって導出したのかぱっと見ではわからなかった。この記事ではその導出過程をまとめておきたい。
定義
エネルギー関数
可視層と隠れ層のバイアス項を分けている。
ボルツマン分布
分配関数
可視層を固定した上での隠れ層の条件付き分布 (2.42) の導出
RBMの特殊なグラフ構造で成り立つ下の式 (2.42) を導出する。
この式は可視層のユニットを固定すると隠れ軸のユニット間で条件付き独立性が成り立つことを意味している。実際は、RBMを無向グラフィカルモデルとみなすと二つの隠れユニット間の経路を可視層が遮断するので条件付き独立が成り立つことは数式がなくてもグラフ構造を見るだけですぐにわかる。
さっそく導出しよう。
まず分子から展開する。
この段階では何でこんな展開が必要なのか意味不明だがあとできいてくる。
次に分母を展開。分子とほとんど同じだが周辺化のための がついてまわる。
この式の後半部分をさらに細かく展開する。
ここで隠れユニットの数はm個でバイナリユニット(0または1の値を取る)と仮定している。この展開では2式目から3式目への変換に気付けるかがキモな気がする。下のように同じ構造でもっと簡単な式で確認すると納得できる。
これまでの分母の展開をまとめると結局
となる。さらに分子と分母の結果をまとめると
分子と分母の前半部分はまったく同じなのでばっさり消える。ここで
と置く。2つめの式はシグモイド信念(sigmoid belief)と呼ばれる式とのこと。この本以外ではお目にかかったことないけど。最終的に
となり、式 (2.42) が得られた。証明終了!
この本には載っていないが、ついでに隠れ層のj番目のユニットが1を取る確率も導出しておこう。この式はユニットから値をサンプリングするときに重要になる。
隠れ層を固定した上での可視層の条件付き分布 (2.43) の導出
次に式 (2.43) を導出する。これが最終目標。
先ほどは可視層を固定したときの隠れ層の分布だったが、今回は逆で隠れ層を固定したときの可視層の分布だ。こちらはhとvが逆なだけでほとんど同じだけど導出しておこう。途中は少しはしょる。
分子は
分母は
分子と分母から
ここで
と置くと
となり、式 (2.43) が導出できた!
ついでに可視層のi番目のユニットが1を取る確率も導出しておこう。
長くなったのでいったんここで切る。次はRBMの対数尤度関数とパラメータでの偏微分の式を導出したい。
ボルツマンマシン(隠れ変数あり)の導出
ボルツマンマシン(可視変数のみ)の導出(2016/3/11)のつづき。前回はボルツマンマシンを構成するノードがすべて可視変数(観測データが与えられる)ケースだったけれど今回は一部のノードが隠れ変数(観測データが与えられない)ケースのボルツマンマシンの学習方程式を導出する。これは深層学習の2.5節に当たる。前回と同様に表記法はこの本に準拠する。
深層学習 Deep Learning (監修:人工知能学会)
- 作者: 麻生英樹,安田宗樹,前田新一,岡野原大輔,岡谷貴之,久保陽太郎,ボレガラダヌシカ,人工知能学会,神嶌敏弘
- 出版社/メーカー: 近代科学社
- 発売日: 2015/11/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
- 可視変数のみのボルツマンマシンの導出(2.4節)
- 隠れ変数ありのボルツマンマシンの導出(2.5節)
- 制限ボルツマンマシンの導出(2.7節)
定義
エネルギー関数
ここで、は可視変数、は隠れ変数を表す。はi番目のノードが可視変数か隠れ変数かによって変換される表記法。数式では特に具体的なグラフ構造を想定しないのでこの表記法をしておくと何かと便利。
ボルツマン分布
可視変数と隠れ変数の同時分布で表されるのがポイント。
分配関数
対数尤度関数
尤度関数を定義するにあたって観測データが与えられる可視変数のみの分布が必要になるため隠れ変数を周辺化して削除する。
尤度関数
対数尤度関数
隠れ変数があると周辺化による がくっつくため可視変数のみの場合と比べると少し複雑になる。今回はエネルギー関数はこれ以上展開しないでそのままにしておく。
対数尤度関数のバイアスパラメータに対する勾配(2.27)の導出
偏微分の項が2つあるので1つずつ展開していこう。まずは1つ目の偏微分。
最初の展開は という塊で合成関数の微分をしている。3つ目の展開は という塊で合成関数の微分をしている。エネルギー関数のバイアスパラメータに対する微分は下のようにに対応するしか残らない。ここでは、グラフのi番目のノードが可視変数なのか隠れ変数なのかわからないのでを使っている。
一番最後の展開が今回の導出で個人的に一番わかりづらかったポイントだがで下のように導出できる。ここでは観測データのインデックスは省略。実際は逆にたどって当てはめる。
次は2つ目の偏微分を展開していこう。vとhの記号がだぶるのでv'とh'も使っている。
以上の2つの展開結果をもとの式に代入すると
やった導出終わったーと思いきや、式 (2.27)と比べてみるとまだ少し違う。1項目が微妙に違う。
実際はここで終わったほうがよりわかりやすいと個人的に思うが、さらに経験分布(観測データのヒストグラム)を使って書き直そう。経験分布を使うと下のように観測データのインデックスを使わない形式に変形できる。
よって第1項目は下のように変形できる。
これを代入すると式 (2.27) が得られる。やったね!
対数尤度関数のバイアスパラメータに対する勾配(2.28)の導出
といきたいところだけどこれまでとほとんど同じなので省略。エネルギー関数の偏微分の対象が異なるので出てくる変数が変わるだけ。まあ練習でやってもよいと思う。
ボルツマンマシンの学習方程式
あとは前回と一緒。対数尤度関数の最大点では下の条件を満たす
よって、左辺にこれまでの結果を代入するとボルツマンマシンの学習方程式
が得られる。式 (2.29) と式 (2.30) が導出できた!
次回はいよいよDeep Learningで使われる制限ボルツマンマシンを導出していきたい。
ボルツマンマシン(可視変数のみ)の導出
制限ボルツマンマシンのアルゴリズムの導出が難しかったので忘れないようにまとめておいた。今回から数回にわたって
- 可視変数のみのボルツマンマシンの導出(2.4節)
- 隠れ変数ありのボルツマンマシンの導出(2.5節)
- 制限ボルツマンマシンの導出(2.7節)
の順番に書いてみる予定。表記法は下の深層学習に準じた。この本は紙面の都合か教育的配慮かわからないが最終結果しか書いてない。この記事ではなるべく1ステップずつ展開していって無理なく理解できるレベルにまで落とし込みたいと思っている。ボルツマンマシン自体の説明は非常にわかりやすいこの本に譲ってここでは純粋に式展開とポイントだけをまとめる。
深層学習 Deep Learning (監修:人工知能学会)
- 作者: 麻生英樹,安田宗樹,前田新一,岡野原大輔,岡谷貴之,久保陽太郎,ボレガラダヌシカ,人工知能学会,神嶌敏弘
- 出版社/メーカー: 近代科学社
- 発売日: 2015/11/05
- メディア: 単行本
- この商品を含むブログ (1件) を見る
今回は可視変数のみのボルツマンマシンの学習方程式(式2.17・2.18)の導出が目標!
定義
エネルギー関数(energy function)
bは各ノードに割り当てられたバイアスパラメータ、Wは各結合に割り当てられた重みパラメータ。
ボルツマン分布(Boltzmann distribution)
分配関数(partition function)
このvは観測データとは無関係でノードが取り得るあらゆるパターンの集合を表す。ノード数が多いボルツマンマシンでは、この「ノードが取り得るあらゆるパターン」が爆発的に増加することで厳密な計算が困難になる。
データ集合
対数尤度関数
尤度関数
データはi.i.d.なので各データの生成確率をすべて掛け算したものがデータ全体を生成する確率になる。
なぜインデックスに を使うんだー入力が面倒だーと愚痴りたくなった。
対数尤度関数
尤度関数のままだとアンダーフローして扱いにくいため対数を取って足し算に変換する。対数をとっても尤度関数を最大化するパラメータは変わらない。
ここは一番最後の展開がポイント。
の自然対数に関する公式を使った。
対数尤度関数のバイアスパラメータに対する勾配(2.14)の導出
先の対数尤度関数をバイアスパラメータ で偏微分する。対数尤度関数は3つの項があった。1項目は に対応する しか残らない。2項目は とは無関係の定数なので消えてしまう。ここで3項目が曲者で をパラメータに対する定数だと思ってはいけない! は を含むので偏微分の対象なのだ。最後の展開は合成関数の微分。
上の式の第2項の偏微分をさらに展開していく。ここのvは観測データではなく、可能なあらゆるvを表すためはつかない。
2式目から3式目は合成関数の微分だが の微分はそのまま なので消えない。中身のAの微分は に対応する 以外は残らない。
以上の結果をまとめると
となり、式 (2.14) が導出できた。最後は期待値の定義
による。
対数尤度関数の重みパラメータに対する勾配(2.15)の導出
こちらもバイアスパラメータのときとほとんど同じように進めればよい。偏微分するパラメータが異なるので残る変数が異なるだけ。
上の式の第2項の偏微分をさらに展開していく。
よって、
となり式 (2.15) が導出できた。
ボルツマンマシンの学習方程式
対数尤度関数の最大点では下の条件を満たす
よって、左辺にこれまでの結果を代入するとボルツマンマシンの学習方程式
が得られる。式 (2.17) と式 (2.18) が導出できた。やったね!
何か誤りを見つけたり、ここの展開は不明だという点があったらぜひ指摘してほしいです。
次回は隠れ変数があるボルツマンマシンを導出していきたい。