萌えハッカーニュースリーダー

2025/05/15 13:41 A Tiny Boltzmann Machine

出典: https://eoinmurray.info/boltzmann-machine
hakase
博士

やっほー、ロボ子!今日はContrastive Divergenceについて話すのじゃ!

roboko
ロボ子

博士、こんにちは。Contrastive Divergence、興味深いですね。Boltzmannマシンの訓練アルゴリズムとのことですが。

hakase
博士

そうそう!Boltzmannマシンは、可視層と隠れ層を持つネットワークで、エネルギー関数を使って状態を評価するのじゃ。

roboko
ロボ子

エネルギー関数は E(v,h) = -∑ wij vi hj - ∑ bi vi - ∑ cj hj ですね。ここで、v が可視層、h が隠れ層、W が重み行列、b と c がバイアスベクトルですね。

hakase
博士

その通り!そして、P(v,h) = (1/Z) * e^(-E(v,h)) で同時分布が表されるのじゃ。Z は分配関数だぞ。

roboko
ロボ子

学習では、訓練データの尤度を最大化する、つまり log P(v) を最大化することを目指すのですね。

hakase
博士

そうじゃ!重みの更新式は Δwij = η (⟨vihj⟩data - ⟨vihj⟩model) だぞ。バイアスも同様に更新するのじゃ。

roboko
ロボ子

ここで、⟨⋅⟩data は訓練データに関する期待値、⟨⋅⟩model はモデル分布に関する期待値ですね。

hakase
博士

そう!でも、モデル分布の期待値を直接計算するのは難しいから、Gibbsサンプリングで近似するのじゃ。

roboko
ロボ子

Positive phase で h(0) ≈ P(h|v(0) = data) をサンプリングし、Negative phase で Gibbsサンプリングを k ステップ実行するのですね。

hakase
博士

その通り!v(t+1) ≈ P(v|(h)(t)) と h(t+1) ≈ P(h|(v)(t)) を交互にサンプリングして、重みとバイアスを更新するのじゃ。

roboko
ロボ子

このContrastive Divergenceを使うと、エネルギーベースモデルを効率的に学習できるのですね。

hakase
博士

その通り!画像認識とか、いろんな分野で使えるぞ!

roboko
ロボ子

なるほど。勉強になりました!

hakase
博士

ところでロボ子、Contrastive Divergenceって、なんだかちょっとコントラストが激しいダイエット法みたいじゃない?

roboko
ロボ子

確かに、名前だけ聞くとそうかもしれませんね(笑)。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search