ボルツマンマシンについて勉強した その2
はじめに
ボルツマンマシンについて勉強したのでメモその2.主にボルツマンマシンの学習におけるサンプリングについて. 教科書は以下.機械学習プロフェッショナルシリーズの深層学習に比べてサンプリングに関わる説明が手厚くサンプリングを初めて学ぶ身としてはありがたい.
機械学習スタートアップシリーズ これならわかる深層学習入門 (KS情報科学専門書)
- 作者: 瀧雅人
- 出版社/メーカー: 講談社
- 発売日: 2017/10/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
サンプリングについて
基本的にはサンプリングを使う意味として,ボルツマンマシンの学習時に期待値計算がしんどいので,分布からサンプリングしてその平均を期待値とすれば計算量が減って嬉しいというもの. サンプリングで得られたサンプルの平均を期待値として使うには各サンプルがi.i.dに所望の分布からサンプルされてないと真の期待値から大きく外れて役に立たないのでそのようなサンプルを生成するうまいやり方がないかというのがサンプリング手法のポイントとなるところ. 基本的にサンプルがi.i.dに得られていたら大数の法則からサンプル数が無限大の時に真の期待値に収束する.
マルコフ連鎖
ここではモンテカルロ法の一種のマルコフ連鎖モンテカルロ法(Markov Chain Monte Carlo method, MCMC)について考える.
まずMCMCで重要なマルコフ連鎖について.マルコフ連鎖はマルコフ性を満たす確率過程のことで,現在の状態が1時刻前の状態だけから決定されるというもの.つまりというもの. マルコフ過程においてある時刻の確率分布は周辺化を用いてと表現できる.さらに同時分布はマルコフ性からと表される.
教科書ではマルコフ連鎖の応用としてページランクが紹介されていたが今回の勉強目的とは関係ないのでここでは割愛.
ここで,確率変数が取りうる状態をとすると,のように時刻における各状態の実現確率を並べたベクトルを考える.このベクトルを状態確率分布と呼ぶ.同様に状態から状態への遷移確率を成分とする行列を遷移確率行列と呼ぶ.すると時刻の状態確率分布はの状態分布を用いて,
と表現できる.ここで均一なマルコフ連鎖(遷移確率行列が時刻によらない)を考えれば,ある時刻における状態確率分布はとなる.ここでの時,もはや遷移確率行列により状態確率分布が変化しなくなった場合,その分布を平衡分布と呼ぶ.マルコフ連鎖は必ず平衡分布に収束するわけではなく規約性と非周期性を満たす時に収束する(詳細は教科書参照).収束の条件式として以下の詳細つり合い条件が与えられる.
2行目は1行目の両辺をについて和を取ることでの関係を用いて得られる.
マルコフ連鎖モンテカルロ法
ようやく本題のMCMC.MCMCはサンプリングしたい分布が複雑でサンプリングが難しい時に,に収束するマルコフ連鎖からサンプリングしようというもの.そうすればマルコフ連鎖が収束した時には,欲しい分布からサンプリングしているのと同じとみなせる.問題はマルコフ連鎖をどう設計するかで,収束が早いほど嬉しいのは言うまでもない.ここでは例としてギブスサンプリングを考える.
ギブスサンプリングは簡素な方法でマルコフ連鎖を設計するため,アルゴリズムも単純で汎用性が非常に高い.いまボルツマンマシンの確率変数がと定義されている時,ギブスサンプリングでは以下の条件つき分布からサンプリングを行う.
要は,全ての確率変数を一気にサンプリングするのではなく,他の確率変数を条件として一つの確率変数のみをサンプリングしようというもの.全ての変数を一気にサンプリングするのは難しいが,一つずつなら楽にできるというのがギブスサンプリングのいいところ.この時サンプリングする順番は任意.
今,確率変数以外の変数の値をとすると,ギブスサンプリングで必要な条件つき分布は
となる.ただし分母はについての周辺化を表している.この式を陽に書くと
と変形ができる.3行目から4行目はと関係ない項を約分しており,最後の行はを代入することで求まる.ここで,両辺のはノードに隣接しているノードのみでの足し合わせになっているため,ノードに隣接するノードの状態からが決まることがわかる.すなわちボルツマンマシンの局所マルコフ性のおかげで,を知らなくても周辺のノードのみでを求めることができ,それにより効率的に計算が可能である.また,ここで上記の式をよく見ると,であることからシグモイド関数の形になっていることがわかる.そのため,サンプリングも非常に単純に行うことができ,区間から発生させた一様乱数がより大きければ,を,それ以外にはをサンプリング値とすればいい.
ギブスサンプリングの問題点
サンプリングのための条件つき分布とそのサンプリング方法がわかったので,あとはギブスサンプリングの枠組みに当てはめて全ての確率変数をサンプリングすれば良い.また,簡単な計算で連鎖が定常状態になれば元の分布になることを示せる(教科書に丁寧な証明があるので割愛).ただし,ギブスサンプリングには一つ問題がある.当然,一番最初の変数をサンプリングする際には他の値はわからないため適当な値で初期化を行う.そこから平衡状態になるまで(初期値の影響が完全に消え去るまで)サンプリングを繰り返す必要があるが(この繰り返しをburn-inと呼ぶらしい),どれくらいサンプリングを繰り返せば平衡状態になるかを見積もる明確な方法がない.もう一つ問題として,burn-inをしたのち1つサンプルを得た直後に別なサンプルを得るとそのサンプルは直前のサンプルと強い相関を持つため独立なサンプルとして使うことができない.そのため,ある程度時間をあけてサンプルを取得する必要があるため,全てのサンプルが得られるまでに時間が必要となる.
実践的なサンプリング方法
上記の最後に挙げたように,ギブスサンプリングにはサンプルを連続して取得すると相関を持ってしまう問題がある.そこで連鎖を複数作ってそれぞれの連鎖からサンプリングする方法を考える.これは,サンプリングしたい数だけ連鎖を用意すればサンプル間の独立性を保証できる.ただし,連鎖の数だけburn-inが必要なので計算コストはかかる(処理を並列化すれば解決は可能?).そのため実践的には,連鎖の本数と計算時間のトレードオフを考えて,複数の連鎖を使って各連鎖から複数のサンプルを取得する方法が取られる.
まとめ
ギブスサンプリングにより分布の期待値を近似する方法を勉強した.これでボルツマンマシンの学習に必要な期待値を近似的に求めることができる.ただし,隠れ変数が入ってくるとモデルだけでなくデータに関する期待値の計算が困難なってくるためサンプリングが必要になり嬉しくない.そこで構造に制約を加えて計算をしやすくしようということで制約ボルツマンマシンができたようなので次回はそこら辺を勉強予定.
ちなみに教科書にはギブスサンプリングではなく平均場近似を使って近似する方法についての解説があったのでそっちも勉強してまとめたい.