機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

ボルツマンマシンについて勉強した その5

はじめに

RBMの最適化におけるサンプリング方法について勉強したのでメモ.教科書はいつも通り.

機械学習スタートアップシリーズ これならわかる深層学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ これならわかる深層学習入門 (KS情報科学専門書)

  • 作者:瀧 雅人
  • 出版社/メーカー: 講談社
  • 発売日: 2017/10/21
  • メディア: 単行本(ソフトカバー)

これでひとまずボルツマンマシンは終了

ブロック化ギブスサンプリング

RBMの条件付き独立性を有効に活用して可視変数と隠れ変数を交互にギブスサンプリングしようというもの. なので基本的にはギブスサンプリングを行うだけ.具体的には可視変数\mathbf{v}をランダムに初期化してh_jP(h_j|\mathbf{v},\theta)からサンプリング.全ての隠れ変数がサンプリングできたらそれらを用いてv_iP(v_i|\mathbf{h},\theta)サンプリング.以下,この手順を繰り返して連鎖を走らせた後にサンプルを取得する.各々の分布からサンプリングは,ギブスサンプリングで説明した一様乱数を使う方法で行う.

コントラスティブ・ダイバージェンス法(CD法)

RBMになったからといって連鎖を走らせる時間が短くなるわけではないので相変わらずギブスサンプリングの計算コストは高い.実は嬉しいことにRBMではギブスサンプリングの改良版であるCD法が適用できるとのこと.

ブロック化ギブスサンプリングとの違いの一つは,\mathbf{v}の初期値をランダムではなくデータの経験分布q(\mathbf{v})からのサンプル(つまりは適当に選んだ訓練サンプル)にするというもの.つまり,

 \displaystyle
\mathbf{v}(0)\sim q(\mathbf{v}),\mathbf{h}(0)\sim P(\mathbf{h}|\mathbf{v}^{(n)},\theta),...\\ \displaystyle
\mathbf{h}(T-1)\sim P(\mathbf{h}|\mathbf{v}(T-1),\theta),\mathbf{v}(T)\sim P(\mathbf{v}|\mathbf{h}(T-1),\theta)

と0からTまでサンプリングする.ただし,上記の式ではサンプリングされた回数を括弧で表していることと,各変数一つ一つについてサンプリングを書くと煩雑なのでベクトル表記でまとめてることに注意.で,どうやらこうすると連鎖を長く走らせなくても実用上は問題ない精度でサンプリングができるらしい.なんならT=1でもいいとのこと.

ギブスサンプリングとのもう一つの違いとして,RBMの学習方程式のモデルに関する期待値の計算方法がある.CD法ではモデルの期待値を

\displaystyle
\langle v_ih_h\rangle_{model}\approx \mathbb{E}_{P(\mathbf{h}|\mathbf{v}(T),\theta)}[ v_ih_j]

と計算する.さらにすごいことに勾配を求めるのにサンプリング平均\mathbb{E}_{P(\mathbf{v}(T)|\mathbf{v}^{(n)})}を計算する必要がなく一つのサンプルから計算しても良いらしい.以上から,CD法における各学習係数の勾配をまとめると

\displaystyle
\delta b_i\propto v_i^{(n)}-v_i(T) \\ \displaystyle
\delta c_j\propto P(h_j=1|\mathbf{v}^{(n)},\theta)-P(h_j=1|\mathbf{v}(T),\theta) \\ \displaystyle
\delta w_{ij}\propto v_i^{(n)}P(h_j=1|\mathbf{v}^{(n)},\theta)-v_i(T)P(h_j=1|\mathbf{v}(T),\theta)

となる.CD法ではモデルに対する期待値が,P(\mathbf{h}|\mathbf{v}(T),\theta)による期待値に変わっていることから条件付き独立性が成り立ち,見通しが良くなっている.具体的には\delta b_iでは\sum_\mathbf{h}P(\mathbf{h}|\mathbf{v}(T),\theta)=\prod_j\sum_{h_j}P(h_j|\mathbf{v}(T),\theta)=1の関係を用いており,その他二つにおいては前の記事で解説したRBMの学習方程式の導出過程で出てきた変換を使った.あとは勾配上昇法を使って学習を行えばいい.

教科書に載っていたこととして,文献によって重みに関する勾配の右辺第2項におけるv_i(T)P(v_i=1|h(T-1),\theta)としてv_i(T)を直接使わない場合もあるらしい.また,ミニバッチでやる場合にはミニバッチ分だけ初期値と連鎖を用意してサンプリングを行うとのこと.

まとめ

長かったボルツマンマシンの勉強も終わり.ちなみに,ブログにまとめるのは疲れたので割愛しているが.教科書にはこんなに思い切った近似しているCD法がなぜうまくいくかについても解説している.