看了一些机器学习的论文,我一直有一个困惑:有的文章训练时写的公式是最小化代价函数,有的文章训练时写的是一个跟自然对数有关的概率分布,这是为什么?经过一番学习,终于有了答案。在这个过程中,还有一个意外收获:那就是著名的逻辑斯第函数的由来。
物理上和统计上的玻尔兹曼分布
热平衡在物理学领域通常指温度在时间或空间上的稳定。在统计学习中,如果我们将需要学习的模型看成高温物体,将学习的过程看成一个降温达到热平衡的过程,最终模型的能量将会收敛为一个分布,并且在全局极小能量上下波动。这个过程称为“模拟退火”。而模型能量收敛到的分布称为玻尔兹曼分布(Boltzmann Distribution)。
在物理学中,玻尔兹曼分布,也称为吉布斯分布(Gibbs Distribution),描述了一个粒子系统处于各种状态的概率,其表达式如下:
F(state)∝exp(−EkT)(1)
F(state) \propto \exp{(-\frac{E}{kT})} \tag{1}
F(state)∝exp(−kTE)(1)
其中EEE是状态能量,kTkTkT是玻尔兹曼常数kkk与热力学温度TTT的乘积。
在统计学中,玻尔兹曼分布给出了一个系统在特定状态能量和系统温度下的概率分布:
pi=exp(−Ei/kT)∑j=1Mexp(−Ej/kT)(2)
p_i = \frac{\exp{(-E_i /kT)}}{\sum_{j=1}^M \exp{(-E_j /kT)}} \tag{2}
pi=∑j=1Mexp(−Ej/kT)exp(−Ei/kT)(2)
其中pip_ipi是状态iii出现的概率,EiE_iEi是状态能量,kkk是玻尔兹曼常数,TTT是系统的温度,MMM是系统的状态数量(系统状态是离散的,有限的;找到了一点高中物理原子的电子跃迁的感觉,那状态也是离散的!!!)。所以说,统计学中玻尔兹曼分布的使用是受到了物理中热力学的启发。
从玻尔兹曼分布的定义,我们可以发现系统的两个不同状态的概率之比仅与系统能量有关:
F(state2)F(state1)=exp(E1−E2kT)(3)
\frac{F(state2)}{F(state1)} = \exp{(\frac{E_1 - E_2}{kT})} \tag{3}
F(state1)F(state2)=exp(kTE1−E2)(3)
这个比值被称为玻尔兹曼因子(Boltzmann Factor)。
玻尔兹曼机
定义
玻尔兹曼分布在机器学习模型的设计中被广泛采用,我们就从玻尔兹曼机(Boltzmann Machine)说起。
玻尔兹曼机是一个对称连接的神经网络。它用于决定系统的状态是开(1)还是关(0)。玻尔兹曼机可以看成一个通过无向有权边全连接的网络。这个网络的能量函数定义为
E=−(∑i<jwijsisj+∑iθisi)(4)
E = - (\sum_{i < j} w_{ij} s_i s_j + \sum_i \theta_i s_i) \tag{4}
E=−(i<j∑wijsisj+i∑θisi)(4)
其中
- wijw_{ij}wij是连接节点iii和jjj的权重。
- sis_isi是节点iii的状态,且si∈{0,1}s_i \in \{0, 1\}si∈{0,1}。
- θi\theta_iθi是节点iii的在全局能量函数中的偏倚。也就是说−θi-\theta_i−θi是节点iii的激活阈值。
单个节点iii的能量定义为
Ei=θi+∑jwijsj(5)
E_i = \theta_i + \sum_j w_{ij}s_j \tag{5}
Ei=θi+j∑wijsj(5)
节点状态的概率——逻辑斯第函数
玻尔兹曼机单个节点iii状态从000变为111造成的网络能量变化为
ΔEi=∑j>iwijsj+∑j<iwjisj+θi(6)
\Delta E_i = \sum_{j > i} w_{ij}s_j + \sum_{j<i}w_{ji} s_j + \theta_i \tag{6}
ΔEi=j>i∑wijsj+j<i∑wjisj+θi(6)
注意到系统的能量差与玻尔兹曼因子的关系,有
ΔEi=Ei=off−Ei=on=−kTln(pi=off)−(−kTln(pi=on)(7)
\begin{aligned}
\Delta E_i &= E_{i=\text{off}} - E_{i=\text{on}}
& = -k T \ln(p_{i=\text{off}}) - (-k T \ln(p_{i=\text{on}})
\end{aligned} \tag{7}
ΔEi=Ei=off−Ei=on=−kTln(pi=off)−(−kTln(pi=on)(7)
由此继续推导
ΔEiT=ln(pi=on)−ln(pi=off)=ln(pi=on)−ln(1−pi=on)=ln(pi=on1−pi=on)(8)
\begin{aligned}
\frac{\Delta E_i}{T} &= \ln(p_{i=\text{on}}) - \ln(p_{i=\text{off}})\\
& =\ln(p_{i=\text{on}}) - \ln(1 - p_{i=\text{on}})\\
& = \ln(\frac{p_{i=\text{on}}}{1 - p_{i=\text{on}}})
\end{aligned} \tag{8}
TΔEi=ln(pi=on)−ln(pi=off)=ln(pi=on)−ln(1−pi=on)=ln(1−pi=onpi=on)(8)
可以解出
pi=on=11+exp(−ΔEiT)(9)
p_{i=\text{on}} = \frac{1}{1 + \exp(-\frac{\Delta E_i}{T})} \tag{9}
pi=on=1+exp(−TΔEi)1(9)
其中TTT是系统的温度。上式就是著名的逻辑斯第函数(Logistic Function)。机器学习最基本的逻辑斯第回归的依据也在于此。
如果我们将系统温度设定为T=1T=1T=1,关闭状态节点能量Ei=off=0E_{i=\text{off}} = 0Ei=off=0,记开启状态节点能量Ei=Ei=onE_i = E_{i=\text{on}}Ei=Ei=on。上式实际上告诉了我们节点iii状态为111的概率为
p(si=1)=11+exp(−Ei)(10)
p(s_i = 1) = \frac{1}{1 + \exp(-E_i)} \tag{10}
p(si=1)=1+exp(−Ei)1(10)
系统能量与状态概率的关系
如果系统处于稳态(“热平衡”),它的状态概率和能量应该服从玻尔兹曼分布。我们将系统状态的所有参数记为一个向量vvv,那么系统处于这个状态的概率为
p(v)=exp(−E(v))∑uexp(−E(u))(11)
p(v) = \frac{\exp(-E(v))}{\sum_u \exp(-E(u))} \tag{11}
p(v)=∑uexp(−E(u))exp(−E(v))(11)
状态vvv对应的能量定义为
E(v)=−(∑i<jwijsivsjv+∑iθisiv)(12)
E(v) = - (\sum_{i < j} w_{ij} s_i^v s_j^v + \sum_i \theta_i s_i^v) \tag{12}
E(v)=−(i<j∑wijsivsjv+i∑θisiv)(12)
其中sivs_i^vsiv是状态向量vvv对应的节点iii的二值状态。这种系统能量和状态概率的关系可以推广到一般的机器学习模型中。
机器学习模型训练中的最小代价和极大似然的等价性
在一般的机器学习中,我们有一些观察数据XXX和对应的分类YYY,建立模型函数fff,则对应的代价函数为
E(X)=∥f(X)−Y∥22(13)
E(X) = \Vert f(X) - Y\Vert _2^2 \tag{13}
E(X)=∥f(X)−Y∥22(13)
我们希望模型输出f(X)f(X)f(X)逼近分类YYY,就要最小化代价函数E(X)E(X)E(X)。这里的代价函数E(X)E(X)E(X)其实可以看成系统状态的能量,而最小化的E(X)E(X)E(X)就是系统的稳态能量了。按照前面所说,它应该服从玻尔兹曼分布。从而,系统获得观察数据XXX的概率可以估计为
p(X)=exp(−E(X))∑Zexp(−E(Z))∝exp(−E(X))∝exp(−∥f(X)−Y∥22)(14)
\begin{aligned}
p(X) &= \frac{\exp(-E(X))}{\sum_Z \exp(-E(Z))} \\
& \propto \exp(-E(X)) \\
& \propto \exp(-\Vert f(X) - Y\Vert _2^2)
\end{aligned} \tag{14}
p(X)=∑Zexp(−E(Z))exp(−E(X))∝exp(−E(X))∝exp(−∥f(X)−Y∥22)(14)
从概率统计的角度看,常用极大似然的思想来估计参数。而在上式中,极大似然等价于最小化系统的能量函数。
许多机器学习的论文一来就把代价函数写成自然常数eee的指数,然后通过最大化求参数,其依据就是上式。也有很多论文用代价函数的形式求最小化。这两者通过玻尔兹曼分布联系在一起,是等价的。