ボルツマンマシンはなぜボルツマンマシンというのか 名前の由来から仕組みまで

こんにちは。ゆうせいです。

G検定の勉強をしていると、ボルツマンマシンという用語が出てきます。人名が付いているのは分かりますが、なぜ物理学者の名前がニューラルネットワークに付いているのでしょうか。

答えは明快です。このモデルが、ボルツマンが作った確率分布をそのまま使っているからです。

そして、この由来を理解すると、生成AIで使われる温度パラメータの正体まで見えてきます。用語の暗記ではなく、つながりとして押さえてください。

結論

ボルツマンマシンという名前は、オーストリアの物理学者ルートヴィッヒ・ボルツマンに由来します。

理由は、このモデルにおける状態の出現確率が、統計力学のボルツマン分布とまったく同じ形をしているためです。

P = \frac{e^{-E/T}}{Z}

エネルギーが低い状態ほど現れやすく、温度が高いほど分布が平坦になる。物理学で気体分子の振る舞いを記述したこの式を、ニューラルネットワークにそのまま持ち込んだのがボルツマンマシンです。

提案したのは、ジェフリー・ヒントンらです。1985年の論文で発表されました。そしてヒントンは、この業績を含む貢献により、2024年のノーベル物理学賞をジョン・ホップフィールドとともに受賞しています。ニューラルネットワークの研究に物理学賞が授与されたのは、まさにこの物理学との結びつきがあったためです。

ルートヴィッヒ・ボルツマンとは

まず、名前の元になった人物を確認します。

ルートヴィッヒ・ボルツマンは、1844年生まれ、1906年没のオーストリアの物理学者です。統計力学の創始者の一人とされています。

何を成し遂げたのか

ボルツマンが取り組んだのは、次の問いでした。

目に見えない無数の分子の運動から、どうやって温度や圧力といった目に見える性質が生まれるのか。

一つひとつの分子を追いかけることは不可能です。しかし、集団としての統計的な振る舞いなら記述できる。この発想が統計力学を生みました。

彼の墓碑には、次の式が刻まれています。

S = k \log W

エントロピー S が、その状態を実現する場合の数 W の対数に比例するという関係です。

この「膨大な要素の集団を確率で扱う」という発想が、後にニューラルネットワークへ持ち込まれることになります。

ボルツマン分布とは何か

物理学での形

一定温度の環境に置かれた系が、エネルギー E の状態を取る確率は、次のように表されます。

P(E) = \frac{1}{Z} e^{-E / (k_B T)}

記号の意味を確認します。

記号意味
E その状態のエネルギー
T 絶対温度
k_B ボルツマン定数
Z 分配関数(すべての状態について足し合わせた値)

式が言っていること

三つのことを言っています。

一つ目です。エネルギーが低い状態ほど、現れやすくなります。指数の肩にマイナスが付いているためです。

二つ目です。温度が高いと、エネルギーの差があまり効かなくなります。分母の T が大きいと、指数の中身が0に近づくためです。

三つ目です。Z で割ることで、全体の合計が1になります。確率として成立させるための処理です。

身近な例

コップの水を考えてください。

低温では、分子はおとなしく、エネルギーの低い状態に留まります。高温では、分子が激しく動き回り、エネルギーの高い状態も頻繁に取ります。

同じ系でも、温度によって「どの状態がどれくらい現れるか」の分布が変わる。これがボルツマン分布の意味です。

ボルツマンマシンの定義

エネルギーを定義する

ボルツマンマシンでは、ユニットの状態の組み合わせに対して、エネルギーを次のように定義します。

E(\mathbf{x}) = -\sum_{i<j} w_{ij} x_i x_j - \sum_i b_i x_i

記号を確認します。

記号意味
x_i i 番目のユニットの状態(0または1)
w_{ij} ユニット i j の間の結合の重み
b_i ユニット i のバイアス

マイナスが付いている理由を説明します。

w_{ij} が正で、両方のユニットが1なら、-w_{ij} の分だけエネルギーが下がります。つまり、正の重みで結ばれたユニットは、一緒にオンになりたがります。

エネルギーが低い状態ほど安定である。物理学の直感がそのまま使えます。

確率を定義する

そして、状態の出現確率を次のように定めます。

P(\mathbf{x}) = \frac{e^{-E(\mathbf{x}) / T}}{Z}

Z は、すべての状態について分子を足し合わせたものです。

Z = \sum_{\mathbf{x}'} e^{-E(\mathbf{x}') / T}

物理学のボルツマン分布と、ほぼ同じ式です。違いは、ボルツマン定数 k_B が省かれていることだけです。単位の話なので、機械学習では不要です。

この一致が、名前の由来です。物理の分布をそのまま使ったから、物理学者の名前が付きました。

手計算で確かめる

言葉だけでは腑に落ちません。実際に計算します。

設定

ユニットを2つだけにします。パラメータは次の通りです。

w_{12} = 1.0, \quad b_1 = 0.5, \quad b_2 = -0.5

状態は、(x_1, x_2) の組み合わせで4通りあります。

各状態のエネルギー

状態 (0, 0) です。どの項も0になります。

E = 0

状態 (0, 1) です。x_1 = 0 なので、結合の項とバイアス1の項は消えます。

E = -b_2 \times 1 = -(-0.5) = 0.5

状態 (1, 0) です。

E = -b_1 \times 1 = -0.5

状態 (1, 1) です。すべての項が効きます。

E = -w_{12} - b_1 - b_2 = -1.0 - 0.5 - (-0.5) = -1.0

まとめます。

状態エネルギー
(0, 0) 0
(0, 1) 0.5
(1, 0) -0.5
(1, 1) -1.0

(1, 1) が最もエネルギーが低くなっています。正の重みで結ばれた2つが、両方オンになった状態です。

確率を求める(温度1のとき)

T = 1 とします。各状態について e^{-E/T} を計算します。

(0, 0) です。

e^{-0/1} = e^{0} = 1

(0, 1) です。

e^{-0.5/1} = e^{-0.5} \approx 0.6065

(1, 0) です。

e^{0.5/1} = e^{0.5} \approx 1.6487

(1, 1) です。

e^{1.0/1} = e^{1.0} \approx 2.7183

分配関数を計算します。

Z = 1 + 0.6065 + 1.6487 + 2.7183 = 5.9735

各状態の確率を求めます。

P(0,0) = \frac{1}{5.9735} \approx 0.1674

P(0,1) = \frac{0.6065}{5.9735} \approx 0.1015

P(1,0) = \frac{1.6487}{5.9735} \approx 0.2760

P(1,1) = \frac{2.7183}{5.9735} \approx 0.4551

合計を確認します。

0.1674 + 0.1015 + 0.2760 + 0.4551 = 1.0000

エネルギーが最も低い (1, 1) が、最も高い確率を持ちました。式の通りの結果です。

温度が何をしているか

同じネットワークで、温度だけを変えてみます。

温度0.5のとき

e^{-E/0.5} = e^{-2E} を計算します。

(0,0): e^{0} = 1

(0,1): e^{-1.0} \approx 0.3679

(1,0): e^{1.0} \approx 2.7183

(1,1): e^{2.0} \approx 7.3891

分配関数を求めます。

Z = 1 + 0.3679 + 2.7183 + 7.3891 = 11.4753

確率を求めます。

P(1,1) = \frac{7.3891}{11.4753} \approx 0.6439

P(1,0) = \frac{2.7183}{11.4753} \approx 0.2369

P(0,0) = \frac{1}{11.4753} \approx 0.0871

P(0,1) = \frac{0.3679}{11.4753} \approx 0.0321

温度2のとき

e^{-E/2} を計算します。

(0,0): e^{0} = 1

(0,1): e^{-0.25} \approx 0.7788

(1,0): e^{0.25} \approx 1.2840

(1,1): e^{0.5} \approx 1.6487

分配関数を求めます。

Z = 1 + 0.7788 + 1.2840 + 1.6487 = 4.7115

確率を求めます。

P(1,1) = \frac{1.6487}{4.7115} \approx 0.3499

P(1,0) = \frac{1.2840}{4.7115} \approx 0.2725

P(0,0) = \frac{1}{4.7115} \approx 0.2122

P(0,1) = \frac{0.7788}{4.7115} \approx 0.1653

三つを比較する

状態T=0.5T=1T=2
(1,1) 0.6440.4550.350
(1,0) 0.2370.2760.273
(0,0) 0.0870.1670.212
(0,1) 0.0320.1020.165

温度が低いほど、最有力の状態に集中します。温度が高いほど、平坦になります。

これは、物理現象の性質そのものです。低温では安定な状態に落ち着き、高温ではあちこち動き回る。

生成AIの温度と同じもの

ここで、以前扱ったロジットの話を思い出してください。

言語モデルで生成を制御する温度パラメータは、次の形でした。

p_i = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}}

ボルツマン分布と見比べてください。

P(\mathbf{x}) = \frac{e^{-E(\mathbf{x}) / T}}{\sum_{\mathbf{x}'} e^{-E(\mathbf{x}') / T}}

z_i = -E_i と置けば、まったく同じ式です。

つまり、ChatGPTの温度設定は、ボルツマン分布の温度です。ロジットは、符号を反転させたエネルギーだと解釈できます。

そして、この文脈ではSoftmax関数のことをボルツマン分布と呼ぶこともあります。呼び方が違うだけで、同じものです。

物理学者の名前が、生成AIの設定項目にまで生き残っている。この一貫性を知っておくと、両方の理解が深まります。

なぜシグモイド関数が現れるのか

ボルツマンマシンには、もう一つ重要な帰結があります。

1つのユニットの状態を決める

あるユニット i の状態を、他のユニットを固定したまま更新することを考えます。

x_i = 1 の場合と x_i = 0 の場合で、エネルギーの差を求めます。

\Delta E_i = \sum_j w_{ij} x_j + b_i

これは、そのユニットが受け取る入力の総和です。

確率の比を取る

\frac{P(x_i = 1)}{P(x_i = 0)} = \frac{e^{\Delta E_i / T}}{1} = e^{\Delta E_i / T}

分配関数は共通なので、割り算で消えます。

P(x_i = 1) + P(x_i = 0) = 1 を使って解くと、次のようになります。

P(x_i = 1) = \frac{e^{\Delta E_i / T}}{1 + e^{\Delta E_i / T}} = \frac{1}{1 + e^{-\Delta E_i / T}}

シグモイド関数が出てきました。

P(x_i = 1) = \sigma\left( \frac{\Delta E_i}{T} \right)

数値で確認する

先ほどの例で、x_2 = 1 が固定されているとき、x_1 が1になる確率を求めます。

\Delta E_1 = w_{12} x_2 + b_1 = 1.0 \times 1 + 0.5 = 1.5

温度1として計算します。

e^{-1.5} \approx 0.2231

\sigma(1.5) = \frac{1}{1 + 0.2231} = \frac{1}{1.2231} \approx 0.8176

約82%の確率で1になります。

先ほど求めた同時確率でも検算できます。

\frac{P(1,1)}{P(1,1) + P(0,1)} = \frac{0.4551}{0.4551 + 0.1015} = \frac{0.4551}{0.5566} \approx 0.8177

一致しました。

歴史的な意味

ニューラルネットワークでシグモイド関数がよく使われた理由の一つが、ここにあります。

単なる「なめらかなステップ関数」として選ばれたのではありません。ボルツマン分布から自然に導かれる、確率的な発火の式だったのです。

ホップフィールドネットワークとの違い

ボルツマンマシンを理解するには、その前身と比べるのが早道です。

ホップフィールドネットワーク

1982年にジョン・ホップフィールドが提案したモデルです。同じくエネルギー関数を持ちます。

しかし、更新は決定的です。入力の総和が正なら1、負なら0。迷いがありません。

何が問題だったか

決定的に更新すると、エネルギーが下がる方向にしか進めません。その結果、近くの窪みに落ちたら抜け出せなくなります。

山あいの谷を想像してください。ボールを転がすと、最初に見つけた谷で止まります。もっと深い谷が向こうにあっても、そこへ行くには一度登らなければならず、それができません。

これを局所最適解の問題といいます。

ボルツマンマシンの解決策

確率的に更新すればよい、というのが答えです。

温度が高ければ、エネルギーが上がる方向へも一定の確率で動きます。ボールが跳ねて、山を越えられます。

そして、温度を徐々に下げていけば、最終的に深い谷に落ち着きます。

この手法を焼きなまし法(シミュレーテッド・アニーリング)といいます。金属を高温から徐々に冷やして良い結晶構造を得る、冶金の技術に由来する名前です。

ここでも物理の発想が使われています。

項目ホップフィールドネットワークボルツマンマシン
更新決定的確率的
温度なしあり
局所解抜け出せない抜け出せる
用途連想記憶生成モデル

ちなみに、2024年のノーベル物理学賞は、ホップフィールドとヒントンの二人に授与されました。この二つのモデルが、並んで評価されたことになります。

学習則にも物理の発想がある

ボルツマンマシンの学習則は、次の形をしています。

\Delta w_{ij} \propto \langle x_i x_j \rangle_{\text{data}} - \langle x_i x_j \rangle_{\text{model}}

記号 \langle \cdot \rangle は期待値、つまり平均を表します。

二つの項の意味

第1項は、実際のデータを見せたときに、2つのユニットが同時に1になる頻度です。

第2項は、モデルが自由に動いたときに、2つのユニットが同時に1になる頻度です。

この差を取って重みを更新します。

直感的な解釈

データで一緒に発火しているのに、モデルではそうなっていない。ならば結合を強める。

逆に、モデルが勝手に一緒に発火しているのに、データではそうなっていない。ならば結合を弱める。

ヒントンは、この二つの項を覚醒時と睡眠時に例えて説明しました。データを見ている状態と、自分で自由に想像している状態。その差を埋めるのが学習だ、という見方です。

実用上の難点

美しい学習則ですが、大きな問題があります。第2項の計算です。

モデルの期待値を厳密に求めるには、すべての状態について足し合わせる必要があります。ユニットが n 個あれば、状態数は次のようになります。

2^n

ユニットが50個の場合を計算します。

2^{50} \approx 1.13 \times 10^{15}

約1,000兆通りです。現実的に計算できません。

そこで、サンプリングによる近似が使われますが、それでも計算量は膨大でした。この重さが、ボルツマンマシンの普及を妨げました。

制限ボルツマンマシン

計算量の問題を解決するために作られたのが、制限ボルツマンマシンです。英語ではRestricted Boltzmann Machine、略してRBMといいます。

何を制限したのか

ユニットを可視層と隠れ層の2つに分け、同じ層内の結合を禁止しました。

種類層内の結合層間の結合
ボルツマンマシンありあり
制限ボルツマンマシンなしあり

なぜ計算が楽になるのか

層内に結合がないと、同じ層のユニットどうしが互いに影響しません。したがって、可視層の状態が決まれば、隠れ層の各ユニットは独立に計算できます。

P(h_j = 1 \mid \mathbf{v}) = \sigma\left( \sum_i w_{ij} v_i + c_j \right)

一つずつ順番に更新する必要がなく、まとめて計算できます。

さらに、コントラスティブ・ダイバージェンスという近似手法が開発され、実用的な速度で学習できるようになりました。

深層学習への貢献

2006年、ヒントンらは制限ボルツマンマシンを積み重ねる手法を提案しました。ディープビリーフネットワークと呼ばれます。

当時、深いネットワークは勾配消失のために学習が困難でした。そこで、まず各層を制限ボルツマンマシンとして個別に学習させ、その結果を初期値として全体を調整する、という手順が考案されました。

これが事前学習です。深層学習が実用化される、最初の突破口となりました。

なお現在は、ReLUや適切な初期化、残差接続などによって、深いネットワークを直接学習できるようになりました。事前学習としての制限ボルツマンマシンは、あまり使われていません。

歴史的な役割を終えた技術ですが、その役割は決定的でした。

現在とのつながり

ボルツマンマシン自体は主流ではありませんが、発想は生き続けています。

現代の技術引き継いでいるもの
Softmaxの温度パラメータボルツマン分布そのもの
エネルギーベースモデルエネルギーで確率を定義する枠組み
拡散モデルノイズを加えて徐々に除去する、焼きなましに近い発想
強化学習の探索温度で探索と活用のバランスを取る

特に拡散モデルは興味深い例です。高いノイズの状態から徐々にノイズを減らして画像を生成する手順は、高温から徐々に冷やす焼きなまし法と構造がよく似ています。

物理学の発想が、形を変えて生き残っています。

カタカナ表記について

最後に、細かい点に触れておきます。

Boltzmann はドイツ語圏の姓で、tz の部分は日本語のツに近い音になります。したがって、ボルツマンが標準的な表記です。

ボルチマンと書かれることもありますが、試験や論文ではボルツマンが使われます。検索する際もボルツマンで探してください。

練習問題

理解度を確認してください。解答は各問題の直後にあります。

問題1

ボルツマンマシンという名前の由来を、次から選んでください。

ア 開発者の名前がボルツマンだったため イ 状態の確率分布が統計力学のボルツマン分布と同じ形だったため ウ ボルツマン定数を学習に使うため エ ボルツマンが最初にニューラルネットワークを考案したため

解答 イ

解説します。名前の由来は、確率分布の形が一致することにあります。

アは誤りです。提案したのはヒントンらであり、ボルツマンは1906年に亡くなっています。ウは誤りで、機械学習ではボルツマン定数は使いません。エも誤りで、ボルツマンは物理学者であり、ニューラルネットワークとは無関係です。

問題2

次のパラメータを持つ2ユニットのボルツマンマシンについて、各状態のエネルギーを求めてください。

w_{12} = -1.0, \quad b_1 = 0.5, \quad b_2 = 0.5

解答を示します。

(0,0) です。

E = 0

(0,1) です。

E = -b_2 = -0.5

(1,0) です。

E = -b_1 = -0.5

(1,1) です。

E = -w_{12} - b_1 - b_2 = 1.0 - 0.5 - 0.5 = 0

補足します。重みが負のため、両方が1になる状態のエネルギーが下がりません。片方だけがオンになる状態が安定します。負の重みは、互いを抑制する関係を表します。

問題3

問題2の結果を使い、温度1における各状態の確率を求めてください。

解答を示します。

e^{-E} を計算します。

(0,0): e^{0} = 1

(0,1): e^{0.5} \approx 1.6487

(1,0): e^{0.5} \approx 1.6487

(1,1): e^{0} = 1

分配関数を求めます。

Z = 1 + 1.6487 + 1.6487 + 1 = 5.2974

確率を求めます。

P(0,0) = \frac{1}{5.2974} \approx 0.1888

P(0,1) = \frac{1.6487}{5.2974} \approx 0.3112

P(1,0) = \frac{1.6487}{5.2974} \approx 0.3112

P(1,1) = \frac{1}{5.2974} \approx 0.1888

合計を確認します。

0.1888 + 0.3112 + 0.3112 + 0.1888 = 1.0000

補足します。片方だけがオンの2状態が、それぞれ約31%で最も高くなりました。エネルギーが等しい状態は、確率も等しくなります。

問題4

温度 T を限りなく0に近づけると、確率分布はどうなりますか。また、無限大に近づけるとどうなりますか。

解答を示します。

T \to 0 のとき、最もエネルギーの低い状態の確率が1に近づき、他はすべて0に近づきます。指数の中身 -E/T の差が無限に拡大するためです。この状態では、決定的な振る舞いになります。

T \to \infty のとき、-E/T がすべて0に近づくため、e^{0} = 1 となり、全状態が等確率になります。状態数を N とすると、各状態の確率は次の通りです。

P = \frac{1}{N}

エネルギーの情報が完全に無視される状態です。

補足します。生成AIで温度を0に設定すると同じ出力しか出なくなり、温度を上げると支離滅裂になる。その理由が、この極限から説明できます。

問題5

あるユニットが受け取る入力の総和が \Delta E = 2.0 のとき、温度1と温度4のそれぞれで、そのユニットが1になる確率を求めてください。

解答を示します。

温度1の場合です。

\sigma\left( \frac{2.0}{1} \right) = \sigma(2.0)

e^{-2.0} \approx 0.1353

\frac{1}{1 + 0.1353} = \frac{1}{1.1353} \approx 0.8808

約88%です。

温度4の場合です。

\sigma\left( \frac{2.0}{4} \right) = \sigma(0.5)

e^{-0.5} \approx 0.6065

\frac{1}{1 + 0.6065} = \frac{1}{1.6065} \approx 0.6225

約62%です。

補足します。温度が上がると、確率が0.5に近づきます。入力の情報があまり反映されなくなり、コイン投げに近づくということです。

問題6

ユニットが30個あるボルツマンマシンについて、全状態を数え上げる場合の状態数を求めてください。また、1秒間に1億通り計算できるとして、何年かかるか概算してください。

解答を示します。

状態数を計算します。

2^{30} \approx 1.07 \times 10^{9}

約10億7千万通りです。

計算時間を求めます。

\frac{1.07 \times 10^{9}}{10^{8}} \approx 10.7

約11秒です。この規模なら現実的です。

補足します。しかし、ユニットを60個にすると次のようになります。

2^{60} \approx 1.15 \times 10^{18}

\frac{1.15 \times 10^{18}}{10^{8}} = 1.15 \times 10^{10}

年に直します。

\frac{1.15 \times 10^{10}}{3.15 \times 10^{7}} \approx 365

約365年です。ユニットが2倍になっただけで、11秒が365年になりました。この爆発的な増加が、ボルツマンマシンの実用化を阻んだ壁です。

問題7

制限ボルツマンマシンが通常のボルツマンマシンより計算しやすい理由を説明してください。

解答を示します。

制限ボルツマンマシンでは、同じ層内のユニットどうしに結合がありません。

そのため、一方の層の状態が決まれば、他方の層の各ユニットは互いに独立して確率を計算できます。順番に一つずつ更新する必要がなく、まとめて処理できます。

通常のボルツマンマシンでは、すべてのユニットが相互に結合しているため、あるユニットの状態が他のすべてに影響します。独立に計算できず、収束するまで繰り返し更新する必要があります。

補足します。この制限によって、表現力は多少犠牲になります。しかし、計算可能になったことの利益のほうがはるかに大きく、実用的なモデルとして広まりました。

まとめと次の学習ステップ

ボルツマンマシンという名前は、ルートヴィッヒ・ボルツマンに由来します。状態の出現確率が、統計力学のボルツマン分布とまったく同じ形をしているためです。

エネルギーが低い状態ほど現れやすく、温度が高いほど分布が平坦になる。この物理の枠組みを、ニューラルネットワークにそのまま持ち込みました。

そして、この由来を知ると、いくつかのことが同時に理解できます。

シグモイド関数が使われた理由。それは、ボルツマン分布から導かれる確率的な発火の式だったからです。

焼きなまし法という手法名。それは、金属を徐々に冷やす技術に由来します。

生成AIの温度パラメータ。それは、ボルツマン分布の温度そのものです。

物理学者の名前が付いているのは、飾りではありません。中身が物理だからです。

次の学習ステップとしては、エネルギーベースモデルという枠組みに進むとよいでしょう。エネルギー関数で確率を定義するという発想を、より一般的に扱う分野です。ボルツマンマシンは、その最初期の例にあたります。

あわせて、拡散モデルの仕組みも見てみてください。ノイズの多い状態から徐々に整えていく手順は、温度を下げていく焼きなましと発想が重なります。数十年前の物理由来のアイデアが、現在の画像生成技術にどう受け継がれているかが見えてきます。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。