ボルツマンマシンについて勉強した その1
はじめに
ボルツマンマシンについて勉強したからメモ.きっかけは離散変数をつかったVAEの論文を掘っていったら出会ったから.教科書としては以下の2冊を使った(ボルツマンマシンに関して内容はモロ被りなので好み).
- 作者: 岡谷貴之
- 出版社/メーカー: 講談社
- 発売日: 2015/04/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る
機械学習スタートアップシリーズ これならわかる深層学習入門 (KS情報科学専門書)
- 作者: 瀧雅人
- 出版社/メーカー: 講談社
- 発売日: 2017/10/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
ここでは隠れ変数無し,あり2種類のボルツマンマシンの学習方程式の導出まで.
ボルツマンマシン(隠れ変数無し)
ボルツマンマシンは生成モデルの一つであり,無向グラフに対応した確率モデル.各ノードが確率変数を持っており,エッジは重みを持つ.ただし,無向グラフなためが成り立ち,自分自身とのコネクションは無し().
ボルツマンマシンの表現には様々なものがあるが,まずは隠れ変数が無く確率変数が2値()のボルツマンマシンを考える.ボルツマンマシンのモデルパラメータをとすると以下のように記述される.
はエネルギー関数と呼ばれるもので以下の形を取る.
はエッジの集合.2行目の式は内積を用いて書き直したもので,第2項は重み行列が対称行列であり変数の順序は考えない()ことと,対角成分が0であることを利用した.ただし,転置記号にを用いて,ベクトルを小文字のボールド体,行列を大文字のボールド体で記述してる. また,ベクトルは基本的に列ベクトルを考え,行ベクトルは列ベクトルの転置としている.
は規格化定数でのに対する和を1にしている.そのため,の右辺にある和は全てのに関する話になるので陽に書き下すと以下のようになる.
上記式から分かるように,は要素の和から成り立つ.
ボルツマンマシン(隠れ変数あり)
次に隠れ変数がある場合について.観測された変数を持つノードだけでなく,隠れ変数を持つノードが存在するグラフを考える.隠れ変数は内部状態を表すものなので観測データには関係がない.ここで観測データに対応した変数を可視変数とし,隠れ変数をとする. ここでこの二つの変数を一つにまとめたを導入すると,隠れ変数があるボルツマンマシンのエネルギー関数は隠れ変数が無い場合と同様に記述可能.
を使わず陽に書き表すと,
となる.ただし,可視変数と隠れ変数に対し別々にモデルパラメータを定義した.また最後の項にがかかっていないのはであるため. エネルギー関数が定義できたのでモデル分布は
となる.
ここで,隠れ変数を積分消去した周辺分布について考える.周辺分布は
となる.ここで式の見通しをよくするため,この周辺分布に対するエネルギー関数を以下の形で表現する.
すると周辺分布は
と表現でき見通しがよくなる.
学習について(隠れ変数無し)
最尤推定による学習について考える.対数尤度関数をとする.ただし,はサンプル数.最尤推定は尤度の最大化なのでを解くことになる. よってパラメータに関する微分に関する方程式の解を求めれば良い.バイアスに関する微分を計算すると,
正規化定数はサンプルに依存しないためがサンプル数倍としてかける. ここで両辺をサンプル数で割ると,
と書き直すことができ,それにより第1項はサンプル平均,第2項はモデル分布に対する期待値として表現できる. そこで第1項を,第2項をとして,と表す.
同様に重みに関する微分も計算するとに関する微分についてしか違いがないため,バイアルに関する微分の係数のみが変わって,
となる.以上から隠れ変数のないボルツマンマシンの学習方程式は
となり,サンプルとボルツマンマシンの各統計量が一致すればいいことが分かる.ちなみに隠れ変数のないボルツマンマシンの対数尤度は凸なため,大域的最適解に収束する.
学習について(隠れ変数あり)
次に隠れ変数を持つボルツマンマシンの学習方程式を導出する.基本的には隠れ変数なしと同様でを解くだけだが,隠れ変数は観測できない値なため周辺化した対数尤度について最尤推定を行う. ここでは隠れ変数と可視変数をまとめたを導入して,バイアスに関する微分を求める.
ここでのに関する微分は,隠れ変数と可視変数をまとめた変数を導入すれば
となる.これを元の式に代入すると,
ここで今後のために経験分布を導入する.ただし,はデルタ関数でとが一致するときに1を返す関数.
全体をで割ると最終的に対数尤度のバイアスに関する微分は
となる.ただし,第2項目がサンプルと無関係なためを独立に計算できることととなる関係を使った. 計算結果を見ると第1項目はという分布の期待値になっており,第2項目はとなっていることから,
となる.
バイアスと同様に重みに関する微分を計算すると,隠れ変数のないボルツマンマシンと同様の関係が成り立つことから,
と求まり,隠れ変数を持つボルツマンマシンの学習方程式は
となる.
計算コストについて
隠れ変数あるなしのボルツマンマシンの学習方程式が求まり後は方程式を満たすを実際に計算するだけだが,一つ大きな問題がある.両ボルツマンマシンの学習方程式の右辺はモデル分布に対する期待値になっている. これを計算するには変数に関する和を計算する必要があるが,それには個の要素の和を計算しなければならない.これを計算することは(変数の次元にもよるが)ほぼ不可能なため,一般的にはサンプリングを用いて近似的に求める.
ということで次の記事ではサンプリングにより近似的に求める方法から.
Concrete Distributionについて論文を読んだ
はじめに
The Concrete Distribution: A Continuous Relaxation of Discrete Random Variablesを読んだのでメモ. ICLR2017の論文でGumbel Max Trickをベースに離散分布を連続分布に緩和することでVAEなどに応用しようというもの.Gumbel Max Trickについては以前に記事を書いた.
Concrete: CONtinuous relaxation of disCRETE
VAEでは正規分からサンプリングする際,reparameterization trickを使って微分可能な形でサンプリングをすることで正規分布をデータの分布として仮定したautoencoderを学習した.今回読んだ論文では正規分布のような連続分布ではなく離散分布(カテゴリカル分布)をデータの分布として仮定したいというもの.
カテゴリカル分布からのサンプリングにはGumbel Max Trickを使った方法がある.Gumbel Max TrickではGumbel分布からサンプリングされた摂動をカテゴリカル分布に加え,argmaxを取ることでカテゴリカル分布からサンプリングを行う.しかしargmaxの処理が入ってしまうため,backpropで勾配を計算する際にargmaxが取られたインデックスにしか勾配が伝播しないので,分布を正しく学習することができないという問題がある.そこでカテゴリカル分布を連続になるように緩和することで解決しようというのがConcrete: CONtinuous relaxation of disCRETE.別な言い方をすれば,Gumbel Max Trickでサンプリングされた値はone-hotベクトルになってしまう,すなわち単体上の頂点に位置するため,これを単体の内部に行くようにしようと言うのがconcrete.以下が例.
どのように緩和するかという問題だが,argmaxの代わりにsoftmaxを使うだけ.とても単純.
はカテゴリカル分布のパラメータでは標準Gumbel分布からサンプリングされた値.重要なのが温度パラメータでこの値によって緩和の具合が変わる(上の図がを変化させた時の例.大きくなるほど単体の中心に近付く).上記緩和を使えばbackpropで勾配が伝播するので(誤解を招く言い方かもしれないが)分布の形状を正しく学習できる.上記の緩和を計算グラフにすると以下.このように確率分布からのサンプリングのノードが入った計算グラフをstochastic computation graphsというらしい.
ここで問題なのはargmaxを勝手にsoftmaxにしてしまったため,もはや確率変数はカテゴリカル分布に従わない.そこでをconcrete random variableとし,この確率変数が従う分布Concrete Distributionを導入する.Concrete Distributionの密度関数は以下で定義される.
この密度分布は以下のpropositionを満たす.
(a) (Reparametarization) がなら
(b) (Rounding)
(c) (Zero temperature)
(d) (Convex eventually) ならはlog-convex
(a)に関してはそもそもから定義されているので成り立つ.(b)と(c)も計算から求まって,元のカテゴリカル分布と一致する.(d)の証明に関してはスペースを使うので論文のAppendix参照.ただし(d)は重要で温度パラメータを決める一つの指標になる.
また,ここでは詳細は省くが,2クラスの場合(binary case)の導出も行なっており,その際には標準Gumbel分布ではなくLogistic分布からのサンプリング結果を摂動として与える(Gumbel分布の差がLogistic分布になるからとのこと).
VAEへの応用
VAEへの応用を考える.カテゴリカル分布を使った際の損失関数は以下のようになる.
は近似事後分布でをパラメータとしたカテゴリカル分布.分子はカテゴリとデータの同時分布を表しており,はをパラメータとするカテゴリカル分布.これをConcrete distributionを使って緩和することを考える.具体的にはをとすることを考える.問題は,backpropを行うことができればいいため損失関数の緩和の方法は以下のように複数考えられる.
はを満たすone-hotベクトル.上記において一番上のみが以下のlower boundを保証する.
基本的にはいずれかの緩和された損失を適用すればいいが,愚直に用いるとunderflowを起こしてしまうので実装の際には以下のようにlog-spaceで計算を行う方がいいらしい.
またこの確率変数の密度関数(log-density)は以下で定義される.
ということで実践的には上記のExpConcreteを使って緩和を行う.すると緩和された損失関数は以下のようになる.
この損失関数を使えばカテゴリカル分布をつかったVAEの学習ができる. 論文のAppendixの最後にここで説明したConcreteとExpConcreteのほかに2クラスの場合(Binary case)のBinConcreteや実験で使われた分布がまとまったチートシートが書かれているので便利.またその他Appendixに実装の際や問題に適用する際のTipsが色々書いてあるので参考に.
終わり
今回読んだ論文とほぼ同じコンセプトのGumbel-softmaxというものが同時期にarxivに投稿されており,同様にICLR2017に採択されている.どっちもgoogle(deepmindとbrain)でなんだかなという気持ち.
あと,softmax入っているから温度係数が小さいと容易に勾配消失する気がするけど論文で言及されてなかった.時間を見て確認がてら実装したい.
Gumbel Max Trickについて勉強した
はじめに
Gumbel Max Trickについて勉強したからメモ. Gumbel Max Trickのお気持ちとしてはカテゴリカル分布から効率よくサンプリングしたいというもの(多分。。。). 言ってしまえばカテゴリカル分布におけるreparameterization trick.
accept-rejectアルゴリズム
カテゴリカル分布からの基本的なサンプリング方法の一つにaccept-rejectアルゴリズムがある. カテゴリカル分布のパラメータ(各カテゴリがサンプリングされる確率)をとする.と{} を一様にサンプリングし,の時にを返し,の時にはまたサンプリングを繰り返すというもの.である限り二つの変数をサンプリングし続けなければならないから効率がわるい.
Gumbel Max Trick
Gumbel Max Trickでは標準Gumbel分布からカテゴリの数だけサンプリングを行い,得られた値を摂動としてカテゴリカル分布のパラメータに加えた後,argmaxを取ることでサンプリングをしようというもの.
これならサンプリングの回数がカテゴリ数になりaccept-rejectアルゴリズムに比べ効率が良い.
Gumbel分布とは
突然出てきたGumbel分布だが,Gumbel分布は極値分布と呼ばれる分布の一つで,確率変数の最大値や最小値が従う分布らしい.極値分布の詳しい性質等は教科書とかで勉強しないと理解できなさそうなので割愛. Gumbel分布の密度関数と分布関数は以下で定義される.
はlocation parameter,はscale parameterと呼ばれる分布のパラメータで,標準Gumbel分布の場合となる.
なぜGumbel分布
ここで疑問になるのはなぜGumbel分布を使ってサンプリングができるのかということ.証明の方法は色々あるようだけど一番分かり易かったのがこれ. 手順としては,location parameterが,scale parameterが1のGumbel分布からサンプリングされた値をとし,がもっとも大きくなる確率(すなわちiがサンプリングされる確率)が元のカテゴリカル分布のパラメータと一致すればいいでしょうというもの.すなわち
を証明する.location parameterがのgumbel分布に関して考えているのは,locaton parameterが正規分布の平均と同様の役割をするため,VAEの論文で使用されている正規分布のreparameterization trickと同様にと書けるから.はi.i.dにサンプリングされるため,と分解され,はGumble分布の分布関数であることから
と書直せる.さらにこれをに対して周辺化,すなわちを計算する.
ここでとのの項をくくるとでまとめて書ける.
4行目はがに関係ないこととの掛け算を足し算にして書き直した.後は出てきた積分を計算するだけ.ここはちょっとしたテクニックが必要でという変数変換をするとガンマ分布の確率密度関数の形になるから積分はclosed formに求まって最終的には
となり,元のカテゴリカル分布の値になる.素晴らしい.
Gumbel分布からサンプリング
Gumbel分布を使えばいいのは納得したとして,標準Gumbel分布からサンプリングするのは簡単なのかという疑問が残る.これは逆関数法を使って簡単にできる. 分布関数は広義単調増加関数で値が区間(0,1)に一様に分布するため,一般にある確率変数が従う分布関数はという関係を満たす.ただし,はによりから一意にきまりの範囲で値をとる.この時に関してとは一対一に対応するので分布関数には逆関数が存在する.するとからはによりから一意に決まることがわかる.よって,のように一様分布からサンプリングすることで任意の確率変数を一様分布からサンプリングできる.以上が逆関数法. 標準Gumbel分布の分布関数の逆関数はとなるため
として簡単にサンプリングが行える.
Gumbel Max Trickを応用した論文は最近Google中心にいっぱい出ているみたいなので読んで理解を深めていきたいという思い.