04.2 Boltzmann 機器與 softmax#
本章導讀#
Hopfield 網路有個問題:它總是「確定地」滾進窪地,學到的分布太僵硬。 1985 年,Hinton 與 Sejnowski 加上一味調味料——溫度。 有溫度,確定性變成機率;能量景觀變成機率分布;回憶變成「生成」。生成式 AI 就從這裡開始。
淺顯說明#
溫度讓小球不再老老實實滾下坡:
- 溫度高:小球亂跳,什麼窪地都去——探索。
- 溫度低:小球乖乖滾下坡——收斂。
- 中間溫度:小球「大致」待在低處,偶爾跳一下——這是熱平衡。
把溫度調到 0,就回到 Hopfield;溫度不為 0,每個狀態都有出現機率, 機率與能量由一條物理公式綁定: \(P \propto e^{-E/T}\) 。 今天所有語言模型的 softmax,都是這條公式的直系後代。
正規理論#
Gibbs 分布#
給定能量函數 \(E(\mathbf{s})\) 與溫度 \(T\) ,Boltzmann 機器定義狀態機率:
\(Z\) 是配分函數(歸一化常數)。能量越低,機率越高;溫度 \(T \to 0\) 時機率集中在最低能態, \(T \to \infty\) 時趨於均勻。
狀態更新:Gibbs 採樣#
神經元 \(i\) 在其局部場 \(h_i = \sum_j W_{ij}s_j\) 條件下放電的機率:
重複採樣,狀態分布收斂到 Gibbs 分布——這是馬可夫鏈蒙地卡羅(MCMC)的應用。
softmax:溫度公式的多類版#
把單一神經元推廣到 \(K\) 類。給定 logits \(\mathbf{z}\) ,softmax 定義:
這正是 Gibbs 分布離散形式:logits 是「負能量」,softmax 是「有溫度的歸一化」。 語言模型生成時的溫度參數( \(T = 0\) 貪心、 \(T > 0\) 採樣),就是這條公式。
學習:最大化對數概似#
訓練目標是讓資料的對數概似最大:
對 \(W\) 求梯度( \(T = 1\) 記):
意義:學習 = 讓「資料裡一起放電的頻率」等於「模型裡一起放電的頻率」——Hebb 律(正項)減去「夢裡的 Hebb 律」(負項)。 \(\log Z\) 需要對模型分布採樣,這是最困難的部分。
受限波茲曼機(RBM)#
把連接限制為「可見層—隱藏層」二部圖,採樣可分層進行(block Gibbs), \(Z\) 的估計變得可行:
2006 年 Hinton 用層疊 RBM(深度信念網路)預訓練深網路,開啟深度學習時代。
簡易範例:兩狀態溫度#
狀態 \(s \in \{+1, -1\}\) ,能量 \(E(+1) = 0\) , \(E(-1) = 4\) 。
- \(T = 1\) : \(P(+1) = \dfrac{e^0}{e^0 + e^{-4}} \approx 0.982\) , \(P(-1) \approx 0.018\) (低溫,集中在低能態)。
- \(T = 2\) : \(P(+1) = \dfrac{1}{1 + e^{-2}} \approx 0.881\) 。
- \(T \to \infty\) : \(P(+1) \to 0.5\) (高溫,趨於均勻)。
溫度就是「探索 vs 收斂」的旋鈕——語言模型的 temperature 參數完全同構。
歷史典故#
- 1985 年 Boltzmann 機器:見卷宗 ../1985-Boltzmann機器.md——Hinton 用物理的溫度,讓網路學會「做夢」。
- 2006 年深度信念網路:見 ../2006-Hinton深度信念網路.md——層疊 RBM 預訓練,深度學習的起點。
- 2022 年 ChatGPT 與 RLHF:見 ../2022-ChatGPT與RLHF.md——softmax 採樣 + 溫度,成為人機對話的介面(07 章細講 RL 部分)。
習題#
- 證明:Gibbs 條件機率 \(P(s_i = 1 \mid \mathbf{s}_{-i}) = \sigma(h_i)\) (取 \(T=1\) )。
- 對兩狀態例子求 \(P(+1) = 0.99\) 所需的溫度 \(T\) 。
- 解釋學習梯度的「data 減 model」兩項各對應 Hebb 律的哪個部分,以及為什麼負項需要採樣。
補充#
1. 數學推導證明#
證明(習題 1):Gibbs 條件機率 \(P(s_i = 1 \mid \mathbf{s}_{-i}) = \sigma(h_i)\) 。
能量可拆成含 \(i\) 與不含 \(i\) 兩部分: \(E(\mathbf{s}) = -s_i h_i + C(\mathbf{s}_{-i})\) ,其中 \(h_i = \sum_j W_{ij} s_j\) 、 \(C\) 只依賴其餘神經元。由 Gibbs 分布(取 \(T = 1\) ):
注意 04.1 節能量寫法 \(E = -\tfrac{1}{2}\mathbf{s}^\top W \mathbf{s}\) 下,翻轉 \(s_i\) 的能量改變量為 \(2 s_i h_i\) ,等價於局部場縮放一半;若定義 \(h_i = \tfrac{1}{2}\sum_j W_{ij} s_j\) 則恰為 \(\sigma(h_i / T)\) 。
意義:條件機率就是 sigmoid——活化函數在此獲得物理意義:它不是任意選的,而是 Gibbs 分布的必然結果。溫度 \(T\) 進場的方式只是把 \(h_i\) 縮放 \(h_i / T\) 。 \(\blacksquare\)
證明二(習題 2):兩狀態例子中 \(P(+1) = 0.99\) 的溫度。
\(P(+1) = \dfrac{1}{1 + e^{-\Delta E / T}}\) ,其中 \(\Delta E = E(-1) - E(+1) = 4\) 。要求
溫度低於 \(0.87\) 時低能態機率超過 99%——低溫就是「幾乎確定」。 \(\blacksquare\)
2. 簡易範例#
範例:softmax 溫度掃描。 程式見 _code/04.2-softmax-temperature.py:對 logits \(z = (2, 1, 0.5)\) 掃描溫度 \(T\) 從 0.1 到 10,印出每個溫度下的機率分布。輸出顯示: \(T = 0.1\) 時機率幾乎全集中在最大 logit(貪心); \(T = 1\) 時約 \(0.55/0.20/0.25\) ; \(T = 10\) 時趨近均勻——數值驗證了「溫度是探索 vs 收斂的旋鈕」。程式同時算出習題 2 的答案:兩狀態例子中 \(P(+1) = 0.99\) 需要 \(T \approx 0.87\) 。