因为想申请 优快云 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验
- 大多数人应该都是在利用神经网络解分类问题时第一次接触 softmax,对它的印象也只停留在把实数域的输出转换为合法的概率分布这里,本文介绍 softmax 的本源 —— 玻尔兹曼分布
- 参考
文章目录
1. 理解玻尔兹曼分布
-
波尔兹曼分布是热力学与统计物理中的一个重要分布,它建立起 “宏观温度” 和 “微观粒子能量” 间的关系。具体而言,考虑一组理想状态下的粒子,要求
- 一个理想气体系统包含了巨大数量的以不同速度随机在各个方向上运动的全同气体分子
- 与分子间距相比,分子直径大小可以忽略不计
- 分子间除了相互间的完全弹性碰撞外别无其他相互作用
- 单个分子的运动遵循经典力学定律
- 在没有外势的情况下,当理想气体处在
平衡态
时气体分子均匀分布在系统中 - 在
平衡态
,分子的速度在各方向上均匀分布,即理想气体的分子速度是随机的,并不存在一个特别偏好的方向
将满足上述状态的理想气体(或理想状态的一组粒子)加热到一定温度(向系统内输入能量),各个微观粒子会以一定的速度进行随机运动和碰撞,在禁止一切能量交换和损失的情况下,各个粒子最终会稳定在一系列从低到高的不同能级上,即达到
平衡态
,此时系统的熵最大除了混乱程度外,熵也可以表示有多少种到达此状态的方法。系统总能量是一定的,一些粒子占有的能量高,其他粒子占有的就少
- 只有少量的方法能将能量只分配给少量粒子(而且由于碰撞作用这些能量也会很快被传递给其他粒子)
- 只有少量方法能让所有粒子能量一致(同样很快会由于碰撞导致能量转移,从而离开该状态)
因此最高熵时会呈现中等能级粒子多,高/低能级粒子少的状态,这就是
平衡态
将各个能级的粒子数除以系统种粒子总数就得到一个分布形式,平衡态时对应的就是
玻尔兹曼分布/吉布斯分布
(热力学中称最概然分布),这个分布是会随着系统温度变化的,形如下图所示
注意几个点- 理想气体几乎没有相互作用,那么它的能量(准确来说是哈密顿量)只有动能,因此可以用粒子速度表示,这里横轴是速度,其实是粒子能量
- 曲线越红,系统温度越高,粒子能达到的越高能量越高,玻尔兹曼分布曲线拉得越平,越接近均匀分布,系统熵越大
2. 推导玻尔兹曼分布
2.1 问题形式化
-
首先考虑粒子系统的表示形式,我们假设所有粒子只做平动不做转动,这样可以用xyz三个轴的位置 r x , r y , r z r_x,r_y,r_z rx,ry,rz 和动量 p x , p y , p z p_x,p_y,p_z px,py,pz 来刻画一个粒子,这六个维度 ( P , r ) = ( p x , p y , p z ; r x , r y , r z ) (\pmb{P},\pmb{r})=(p_x,p_y,p_z;r_x,r_y,r_z) (PP,rr)=(px,py,pz;rx,ry,rz) 构成了
μ相空间
,每个粒子都可以表示为其中的一个点,这样一个 N N N 粒子系统在某个时刻的微观状态就可以表示为 ( { P i } , { r i } ) (\{\pmb{P}_i\},\{\pmb{r}_i\}) ({PPi},{rri}) -
由于粒子太小太多,动量又是连续的物理量,我们不能分辨所有可能的状态,所以我们将相空间进行离散划分,只统计一个能级(一定能量区间)和一定空间区间内粒子的数目,同一个区间内的粒子我们认为是同质化的
这个跟GDP的统计一样,我们不考虑张三年薪多少、李四年薪多少,只计数年薪20万上下的人数有多少、年薪30万上下的人数有多少。这里也可以看出,年薪是连续变化的,我们统计的时候要切分区间,这就是粗粒化的思想
- 宏观来讲,此相空间体积元足够的小以至于可以在操作中认为是 “无穷小”
- 微观来看,此相空间体积元又必须大到能足够装下数量巨大的粒子
- 在第 i i i 个格子中的粒子具有共同的位置 r i \pmb{r}_i rri、动量 P i \pmb{P}_i PPi,及能量 ϵ i = P i 2 / 2 m \epsilon_i= \pmb{P}_i^2 /2m ϵi=PPi2/2m(只考虑动能,包含三个维度, m m m 是粒子质量)
-
这时我们要求的目标玻尔兹曼分布(本来是连续的概率密度函数,离散化后称分布函数) f ( P i , r i ) f(\pmb{P}_i,\pmb{r}_i) f(PPi,rri) 满足
f ( P i , r i ) △ τ = n i f(\pmb{P}_i,\pmb{r}_i) \triangle \tau = n_i f(PPi,rri)△τ=ni 其中 △ τ = △ p x △ p y △ p z △ r x △ r y △ r z \triangle \tau = \triangle p_x\triangle p_y\triangle p_z \triangle r_x \triangle r_y \triangle r_z △τ=△px△py△pz△rx△ry△rz 是体积元大小, n i n_i ni 是此格子包含的粒子数, f ( P i , r i ) f(\pmb{P}_i,\pmb{r}_i) f(PPi,rri) 就表示粒子落入此格子的概率 -
此外还有两个约束:对于孤立系统,粒子数守恒且能量守恒,即
∑ i n i = N ∑ i ϵ i = E \sum_i n_i = N \quad\quad \sum_i \epsilon_i = E i∑ni=Ni∑ϵi=E 对于没有外势的理想气体,在热力学极限下( N → ∞ N\to \infin N→∞),需要满足(六重积分)
∫ f ( P i , r i ) d 3 p d 3 r = N ∫ f ( P i , r i ) P 2 2 m d 3 p d 3 r = E \int f(\pmb{P}_i,\pmb{r}_i) d^3pd^3r = N \quad\quad \int f(\pmb{P}_i,\pmb{r}_i) \frac{\pmb{P}^2}{2m}d^3pd^3r = E ∫f(PPi,rri)d3pd3r=N∫f(PPi,rri)2mPP2d3pd3r=E
2.2 宏观状态与微观状态
- 在六维的
μ相空间
种,我们认为同一个体积元内的所有粒子是同质化的,在排列组合的语境下,我们认为这是一个无顺序的组合问题,我们不关心一个体积元内部粒子的微观顺序(微观状态
),只关心宏观上这个体积元内的粒子数(宏观状态
)
从这个角度看,平衡态 = 系统最大熵状态 = 到达方法最多的宏观状态 = 对应微观状态最多的宏观状态 = 最概然分布 等几率假设
:为了能通过除以总粒子数把一个宏观状态变形为概率分布,要求在一个能量恒定的孤立理想气体系统中,所有的微观状态出现的几率是相等的,这就是等几率假设- 最后考察宏观状态对应的微观状态数,假设
N
,
K
N,K
N,K 分别表示系统中的总粒子数和相空间中的体积元总数,宏观状态(分布)
( n 1 , n 2 , . . . , n K ) ≡ { n i } s . t . ∑ i K n i = N (n_1,n_2,...,n_K) \equiv \{n_i\} \quad s.t. \quad \sum_i^K n_i = N (n1,n2,...,nK)≡{ni}s.t.i∑Kni=N 对应的微观状态数是一个多重集的全排列问题
Ω ( { n i } ) = C N n 1 C N − n 1 n 2 . . . C N − n 1 − n 2 − . . . − n K − 1 n K = N ! n 1 ! n 2 ! . . . n K ! \Omega(\{n_i\}) =C_{N}^{n_1}C_{N-n_1}^{n_2}...C_{N-n_1-n_2-...-n_{K-1}}^{n_K} = \frac{N!}{n_1!n_2!...n_K!} Ω({ni})=CNn1CN−n1n2...CN−n1−n2−...−nK−1nK=n1!n2!...nK!N!
2.3 推导玻尔兹曼分布
- 根据上述分析,玻尔兹曼分布可以建模为以下约束优化问题的解:给定系统总能量
E
E
E 和总粒子数
N
N
N,相空间划分体积元总数为
K
K
K
max { n i } ln Ω ( { n i } ) s.t. ∑ i K n i = N ∑ i K ϵ i n i = E \begin{aligned} &\max_{\{n_i\}} &&\ln\Omega(\{n_i\}) \\ & \text{s.t.} &&\sum_i^K n_i = N \\ &&&\sum_i^K \epsilon_i n_i= E \end{aligned} {ni}maxs.t.lnΩ({ni})i∑Kni=Ni∑Kϵini=E 其中 max { n i } ln Ω ( { n i } ) \max_{\{n_i\}} \ln\Omega(\{n_i\}) max{ni}lnΩ({ni}) 等价于 max { n i } Ω ( { n i } ) \max_{\{n_i\}}\Omega(\{n_i\}) max{ni}Ω({ni}),通过取对数把连乘变成连加,从而简化计算 - 这是一个等式约束优化问题,用拉格朗日乘子法求解即可
2.3.1 斯特林(Stirling)公式
- 进行求解前先补充一个用于化简的数学工具,斯特林公式
ln n ! ≈ n ln n − n \ln n! \approx n\ln n - n lnn!≈nlnn−n 这个公式的简单推导过程可以用化累加为积分来理解
ln n ! = ∑ x = 1 n ln x ≈ ∫ 1 n ln x d x = n ln n − n + 1 ≈ n ln n − n \begin{aligned} \ln n! &= \sum_{x=1}^n \ln x \\ &\approx \int_1^n \ln x dx \\ & = n\ln n -n+1 \\ &\approx n\ln n -n \end{aligned} lnn!=x=1∑nlnx≈∫1nlnxdx=nlnn−n+1≈nlnn−n
2.3.2 用拉格朗日乘子法求解
-
引入拉格朗日乘子 α , β \alpha,\beta α,β,构造拉格朗日函数为
L = ln Ω ( { n i } ) − α ∑ i K n i − β ∑ i K ϵ i n i = ln N ! − ∑ i K ln n i ! − α ∑ i K n i − β ∑ i K ϵ i n i ≈ N ln N − N − ∑ i K n i ln n i + ∑ i K n i − α ∑ i K n i − β ∑ i K ϵ i n i = N ln N − N − ∑ i K [ n i ln n i + ( α − 1 ) n i + β ϵ i n i ] \begin{aligned} \mathcal{L} &= \ln \Omega(\{n_i\}) - \alpha\sum_i^K n_i - \beta \sum_i^K \epsilon_i n_i \\ &= \ln N! - \sum_i^K \ln n_i ! -\alpha\sum_i^K n_i - \beta \sum_i^K \epsilon_i n_i \\ &\approx N\ln N - N - \sum_i^K n_i\ln n_i +\sum_i^K n_i -\alpha\sum_i^K n_i - \beta \sum_i^K \epsilon_i n_i \\ & = N\ln N - N - \sum_i^K\big[n_i\ln n_i+(\alpha-1)n_i +\beta \epsilon_in_i\big] \end{aligned} L=lnΩ({ni})−αi∑Kni−βi∑Kϵini=lnN!−i∑Klnni!−αi∑Kni−βi∑Kϵini≈NlnN−N−i∑Knilnni+i∑Kni−αi∑Kni−βi∑Kϵini=NlnN−N−i∑K[nilnni+(α−1)ni+βϵini] -
然后令偏导为零 ∂ L ∂ n i = ln n i + α + β ϵ i = 0 \frac{\partial \mathcal{L}}{\partial n_i} = \ln n_i+\alpha+\beta\epsilon_i = 0 ∂ni∂L=lnni+α+βϵi=0 解出
n i = e − α e − β ϵ i (1) n_i =e^{-\alpha} e^{-\beta \epsilon_i} \tag{1} ni=e−αe−βϵi(1) 这时可以直接和两个约束联立解出 α , β \alpha,\beta α,β,但是那样比较复杂。我们可以如下计算
N = ∑ i K n i = e − α ∑ i K e − β ϵ i ⇒ e − α = N ∑ i e − β ϵ i N = \sum_i^K n_i = e^{-\alpha} \sum_i^K e^{-\beta \epsilon_i} \Rightarrow e^{-\alpha} = \frac{N}{\sum_i e^{-\beta \epsilon_i}} N=i∑Kni=e−αi∑Ke−βϵi⇒e−α=∑ie−βϵiN 带入 (1) 式得到
n i = e − α e − β ϵ i = N e − β ϵ i ∑ j e − β ϵ j (2) n_i = e^{-\alpha} e^{-\beta \epsilon_i} = N\frac{e^{-\beta \epsilon_i}}{\sum_j e^{-\beta \epsilon_j}} \tag{2} ni=e−αe−βϵi=N∑je−βϵje−βϵi(2) -
现在考察一个平动自由度上的能量(以 x x x 轴为例,注意这是相空间六个维度中的一维)
ϵ ˉ i x = ∑ i n i ϵ i x ∑ j n j = ∑ i n i ϵ i x N = ∑ i ϵ i x e − β ϵ i x ∑ j e − β ϵ j x (3) \bar{\epsilon}_{i_x} = \frac{\sum_i n_i \epsilon_{i_x}}{\sum_jn_j} = \frac{\sum_i n_i \epsilon_{i_x}}{N} = \frac{\sum_i \epsilon_{i_x} e^{-\beta \epsilon_{i_x}}}{\sum_j e^{-\beta \epsilon_{j_x}}} \tag{3} ϵˉix=∑jnj∑iniϵix=N∑iniϵix=∑je−βϵjx∑iϵixe−βϵix(3) 把能量展开为动能,再用动量表示
ϵ i x = 1 2 m v i x 2 = ( m v i x ) 2 2 m = p i x 2 2 m \epsilon_{i_x} = \frac{1}{2}m v_{i_x}^2 = \frac{(mv_{i_x})^2}{2m} = \frac{p_{i_x}^2}{2m} ϵix=21mvix2=2m(mvix)2=2mpix2 回代到 (3) 式,得到
ϵ ˉ i x = ∑ i p i x 2 2 m exp ( − β p i x 2 2 m ) ∑ j exp ( − β p j x 2 2 m ) \bar{\epsilon}_{i_x} = \frac{\sum_i \frac{p_{i_x}^2}{2m} \exp({-\beta \frac{p_{i_x}^2}{2m}})}{\sum_j \exp({-\beta \frac{p_{j_x}^2}{2m}})} ϵˉix=∑jexp(−β2mpjx2)∑i2mpix2exp(−β2mpix2) 动量是连续变化的,改成积分形式
ϵ ˉ i x = 1 2 m ∫ − ∞ ∞ p i x 2 exp ( − β p i x 2 2 m ) d p i x ∫ − ∞ ∞ exp ( − β p j x 2 2 m ) d p j x (4) \bar{\epsilon}_{i_x} = \frac{\frac{1}{2m} \int_{-\infin}^\infin p_{i_x}^2 \exp({-\beta \frac{p_{i_x}^2}{2m}})dp_{i_x}}{\int_{-\infin}^\infin \exp({-\beta \frac{p_{j_x}^2}{2m}})dp_{j_x}} \tag{4} ϵˉix=∫−∞∞exp(−β2mpjx2)dpjx2m1∫−∞∞pix2exp(−β2mpix2)dpix(4)这里要用两个积分公式(可以先自己乘自己,然后转换为极坐标求解)
∫ − ∞ + ∞ e − a x 2 d x = ( π a ) 1 / 2 ∫ − ∞ + ∞ x 2 ⋅ e − a x 2 d x = 1 2 ( π a 3 ) 1 / 2 \begin{aligned} &\int_{-\infty}^{+\infty} e^{-a x^2} d x=\left(\frac{\pi}{a}\right)^{1 / 2} \\ &\int_{-\infty}^{+\infty} x^2 \cdot e^{-a x^2} d x=\frac{1}{2}\left(\frac{\pi}{a^3}\right)^{1 / 2} \end{aligned} ∫−∞+∞e−ax2dx=(aπ)1/2∫−∞+∞x2⋅e−ax2dx=21(a3π)1/2分别对 (4) 中分母和分子应用上面的两个公式,解得
ϵ ˉ i x = 1 2 β \bar{\epsilon}_{i_x} = \frac{1}{2\beta} ϵˉix=2β1 根据气体分子动理论,一个粒子在一个(平动)自由度上的所分配的平均能量为 1 2 K B T \frac{1}{2}K_BT 21KBT(其中 K B K_B KB 是玻尔兹曼常数
),于是有
ϵ ˉ i x = 1 2 β = 1 2 K B T ⇒ β = 1 K B T \bar{\epsilon}_{i_x} = \frac{1}{2\beta} = \frac{1}{2}K_BT \Rightarrow \beta = \frac{1}{K_B T} ϵˉix=2β1=21KBT⇒β=KBT1 -
把 β \beta β 回代到 (2) 式,就解出了给定温度 T T T 下,各个相空间内粒子数为
n i = N e − ϵ i / K B T ∑ j e − ϵ j / K B T n_i = N\frac{e^{-\epsilon_i/K_BT}}{\sum_j e^{-\epsilon_j/K_BT}} ni=N∑je−ϵj/KBTe−ϵi/KBT 上式除以粒子总数 N N N 转换为概率,即得到玻尔兹曼分布
P i = e − ϵ i / K B T ∑ j e − ϵ j / K B T (5) P_i = \frac{e^{-\epsilon_i/K_BT}}{\sum_j e^{-\epsilon_j/K_BT}} \tag{5} Pi=∑je−ϵj/KBTe−ϵi/KBT(5) 其中 e − ϵ i / K B T e^{-\epsilon_i/K_BT} e−ϵi/KBT 称为玻尔兹曼因子
;分母部分 ∑ j e − ϵ j / K B T \sum_j e^{-\epsilon_j/K_BT} ∑je−ϵj/KBT 称为配分函数
,它是个归一化参数
2.4 得到 softmax
- 考察上面得到玻尔兹曼分布式,如果定义
f
(
i
)
=
−
ϵ
i
K
B
f(i) = -\frac{\epsilon_i}{K_B}
f(i)=−KBϵi,那么玻尔兹曼分布就变为 softmax 函数
P i = exp ( f ( i ) T ) ∑ j exp ( f ( j ) T ) P_i = \frac{\exp(\frac{f(i)}{T})}{\sum_j \exp(\frac{f(j)}{T})} Pi=∑jexp(Tf(j))exp(Tf(i)) 这里保留了温度系数 T T T 做进一步讨论- T → ∞ T\to\infin T→∞ 时,类似于随机选择状态,即每个状态的概率相等,这就是所谓的最大熵状态,也就是最混乱的状态;
- T → 0 T\to 0 T→0 时,趋向于选择最好的状态,其概率是1,其它状态概率为0( T T T 在分母上,因此不可能为0,物理学中绝对零度是不可能达到的。统计力学中温度反映所有粒子的总的动能,绝对零度意味着所有粒子全部处于静止状态,这是不可能的)
3. 基于能量的模型(Energy Based Model, EBM)
- 玻尔兹曼分布建立了从能量到概率的映射关系,而机器学习模型本质也是学一个映射,所以可以利用玻尔兹曼分布建立一种基于能量的机器学习模型。具体来说,对于监督学习中的一个训练样本 ( x , y ) (x,y) (x,y),我们可以把样本 x x x 和标记 y y y 的匹配度表示为能量 E ( x , y ) E(x,y) E(x,y),能量越小匹配度越高,这样就把我们所关心变量的各种组合和一个标量能量联系在一起,训练模型的过程就是不断改变标量能量的过程
- EBM 为许多概率和非概率的学习方法提供了一个统一的框架,特别是图模型和其他结构化模型的非概率训练,监督学习、生成对抗、自监督学习等等范式都能涵盖进去。基于能量的学习可以被看作是预测、分类或决策任务的概率估计的替代方法。由于不需要适当的归一化,基于能量的方法避免了概率模型中与估计归一化常数相关的问题。此外,由于没有标准化条件,在学习机器的设计中允许了更多的灵活性。大多数概率模型都可以看作是特殊类型的基于能量的模型,其中能量函数满足一定的归一化条件,损失函数通过学习优化,具有特定的形式
- 关于 Energy Based Model,可以进一步参考 综述:基于能量的模型