- Boltzmannマシンの構造と目的についての簡単な紹介
- エネルギー関数と確率分布を数式で定義
- 重みとバイアスの更新則を微分によって導出
- 正相・負相とGibbsサンプリングによるモデル期待値の近似方法を説明
- 最後に**対比発散(Contrastive Divergence)**アルゴリズムを全体的に整理
BoltzmannマシンとContrastive Divergenceの概念
- Boltzmannマシンでは、入力層(visible layer)と隠れ層(hidden layer)、そしてそれらをつなぐ重み行列と各層それぞれのバイアスベクトルを持つ
エネルギー関数と確率分布
-
エネルギー関数は行列形式で次のように定義される
E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
- v: 可視層ベクトル、h: 隠れ層ベクトル、w: 重み、b/c: 各層のバイアス
-
Boltzmannマシンの結合分布は
P(v, h) = (1/Z) * exp(-E(v, h))
対数尤度(log-likelihood)と微分
-
訓練データの尤度を最大化することで学習を進める
log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
-
重み wij に対する対数尤度の偏微分は
∂(log P(v))/∂wij = <vi hj>データ - <vi hj>モデル
- < · >データ: 実際のデータに対する期待値
- < · >モデル: モデルが生成したデータに対する期待値
重みとバイアスの学習則
- 重みとバイアスは次のように更新する
- Δwij = η(<vi hj>データ - <vi hj>モデル)
- Δbi = η(<vi>データ - <vi>モデル)
- Δcj = η(<hj>データ - <hj>モデル)
- η は学習率
Contrastive Divergenceアルゴリズム
- モデル期待値 < · >モデル は直接計算が難しいため、Gibbsサンプリングを用いる
- Contrastive Divergence は次の手順で近似する
- 正相: 隠れ層 h(0) を P(h | v(0)=データ) からサンプリングする
- 負相: k回の Gibbsサンプリングを反復する
- 交互に v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t)) としてサンプリングする
- 更新時点では、データ期待値とモデル期待値の差を用いる
- Δwij = η(<vi hj>データ - <vi hj>モデル)
- Δbi = η(<vi>データ - <vi>モデル)
- Δcj = η(<hj>データ - <hj>モデル)
要約
- Boltzmannマシンの学習の本質は、エネルギーベースモデルとして実データとモデルが生成した分布の間にある期待値の差を減らすことにある
- Contrastive Divergenceは、この差の近似を高速かつ効率的に可能にする中核的な訓練手法
- Gibbsサンプリングを通じてモデル分布と実データを結び付ける役割を果たし、この過程を反復することで、Boltzmannマシンがデータをうまく表現できるよう重みとバイアスを更新する
1件のコメント
Hacker Newsのコメント
私の理解では、Harmonium(Smolensky)が最初の restricted Boltzmann machine で、「energy」を最小化する代わりに「harmony」を最大化するという概念だった。Smolensky、Hinton、Rummelhart が共同研究していたときは、これを「goodness of fit」と呼んでいた。Harmonium の論文は本当に印象的な読み物だ。Hinton は AI 分野のスーパースターになり、Smolensky は言語学関連の長い本を執筆した。この歴史についてもっと知っている人がいるのか気になる
David Ackley に関する興味深い記事の紹介。T2 Tile Project も見てみる価値がある
筆者です。たくさんのコメントに感謝します。こんなに人気が出るとは思っていませんでした。誤字、余白、スクロールの問題などを修正中です。報告してくれてありがとう
タイトルを "A Tiny Boltzmann Brain" と読み間違えた。私の自然な脳は即座にこの混乱を解決した。ごく小さなモデルにランダムに重みを与えて、何か意味のあることができるか試す実験なのだろうと推測した。モデルが小さいほど、ランダム生成から面白いものが出てくる確率は相対的に高いのではないかと思った。私の推測は外れたが、それでもまだめげてはいない。"Unbiased-Architecture Instant Boltzmann Model"(UA-IBM)という新しいモデル系列を提案する。いつか十分に大きな量子コンピュータができれば、データセット全体をモデルの全パラメータとアーキテクチャの量子状態に重ね合わせて、一度に推論できるだろうという想像だ。こういう実験を試せる余っている qubit を持っている人はいないだろうか?(ちなみに、あらゆるものが量子的でありながら、現時点ではそれを実用的にうまく活用するのが難しいという現実は皮肉だ。そして、異星文明が単一の量子センサーから発展して、量子的な神経系全体を持つ存在になるとしたら、どんな社会や技術的経路をたどるのか想像してしまう)
説明がとても良い。参考までに言うと、マウススクロールが敏感すぎる(たぶんモバイルでは問題ないと思う)。スクロールするたびに最初のページと最後のページへ飛んでしまって不便だった。幸い、キーボード入力では正常に最後まで読めた
私の理解が正しければ、今日使われているニューラルネットワークとは違って、weight update のために gradient ベースの forward/backward pass ではなく gibbs sampling が必要になる。なぜそうなるのか知っている人がいれば気になる
この記事を見て昔を思い出した。1990年に void pointer でニューラルネットワークのノードを配列として作り、C で Boltzmann machine と perceptron を実装した。当時の「AI」の用途は、MIDI メロディから次の音を予測したり、5x9 のドット領域で minim、crotchet、quaver のような音符の形を認識したりすることだった。85% の認識率なら十分「良い」と見なされていた
文章が易しくて明快だった。いろいろ懐かしい気持ちになった。恥ずかしながら宣伝すると、RBM の学習過程を可視化した動画を昔作ったことがある
本当にすっきりしたデモだ。昔 Geoff Hinton のニューラルネットワーク講義で Boltzmann machine について何度も講義を聞いたのを思い出した。ひとつ指摘すると、「restricted Boltzmann machine では visible と hidden のニューロンが互いに接続されていない」というような説明は誤解を招く表現だ。visible ノードと hidden ノードが互いに接続されていないように見えてしまうからだ。正確には、同じタイプの中で、つまり visible 同士あるいは hidden 同士にだけ接続がないということだ。あるいは、visible ノードと hidden ノードには、それぞれ同種内の内部接続がないと説明できる