机器学习中的玻尔兹曼分布——最小代价和极大似然.

看了一些机器学习的论文,我一直有一个困惑:有的文章训练时写的公式是最小化代价函数,有的文章训练时写的是一个跟自然对数有关的概率分布,这是为什么?经过一番学习,终于有了答案。在这个过程中,还有一个意外收获:那就是著名的逻辑斯第函数的由来。

物理上和统计上的玻尔兹曼分布

热平衡在物理学领域通常指温度在时间或空间上的稳定。在统计学习中,如果我们将需要学习的模型看成高温物体,将学习的过程看成一个降温达到热平衡的过程,最终模型的能量将会收敛为一个分布,并且在全局极小能量上下波动。这个过程称为“模拟退火”。而模型能量收敛到的分布称为玻尔兹曼分布(Boltzmann Distribution)。

在物理学中,玻尔兹曼分布,也称为吉布斯分布(Gibbs Distribution),描述了一个粒子系统处于各种状态的概率,其表达式如下:

F(state) \propto \exp{(-\frac{E}{kT})}

其中E是状态能量,kT是玻尔兹曼常数$k$与热力学温度T的乘积。

在统计学中,玻尔兹曼分布给出了一个系统在特定状态能量和系统温度下的概率分布:

p_i = \frac{\exp{(-E_i /kT)}}{\sum_{j=1}^M \exp{(-E_j /kT)}}

其中p_i是状态$i$出现的概率,E_i是状态能量,k是玻尔兹曼常数,T是系统的温度,M是系统的状态数量(系统状态是离散的,有限的;找到了一点高中物理原子的电子跃迁的感觉,那状态也是离散的!!!)。所以说,统计学中玻尔兹曼分布的使用是受到了物理中热力学的启发。

从玻尔兹曼分布的定义,我们可以发现系统的两个不同状态的概率之比仅与系统能量有关:

\frac{F(state2)}{F(state1)} = \exp{(\frac{E_1 - E_2}{kT})}

这个比值被称为玻尔兹曼因子(Boltzmann Factor)。

玻尔兹曼机

定义

玻尔兹曼分布在机器学习模型的设计中被广泛采用,我们就从玻尔兹曼机(Boltzmann Machine)说起。

玻尔兹曼机是一个对称连接的神经网络。它用于决定系统的状态是开(1)还是关(0)。玻尔兹曼机可以看成一个通过无向有权边全连接的网络。这个网络的能量函数定义为

E = - (\sum_{i < j} w_{ij} s_i s_j + \sum_i \theta_i s_i)

其中

  • w_{ij}是连接节点$i$和$j$的权重。
  • s_i是节点$i$的状态,且s_i \in \{0, 1\}
  • \theta_i是节点i的在全局能量函数中的偏倚。也就是说-\theta_i是节点i的激活阈值。

单个节点$i$的能量定义为

E_i = \theta_i + \sum_j w_{ij}s_j

节点状态的概率——逻辑斯第函数

玻尔兹曼机单个节点i状态从变为1造成的网络能量变化为

\Delta E_i = \sum_{j > i} w_{ij}s_j + \sum_{j<i}w_{ji} s_j + \theta_i

注意到系统的能量差与玻尔兹曼因子的关系,有

\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}

由此继续推导

\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}

可以解出

p_{i=\text{on}} = \frac{1}{1 + \exp(-\frac{\Delta E_i}{T})}

其中$T$是系统的温度。上式就是著名的逻辑斯第函数(Logistic Function)。机器学习最基本的逻辑斯第回归的依据也在于此。

如果我们将系统温度设定为T=1,关闭状态节点能量E_{i=\text{off}} = 0,记开启状态节点能量E_i = E_{i=\text{on}}。上式实际上告诉了我们节点i状态为1的概率为

p(s_i = 1) = \frac{1}{1 + \exp(-E_i)}

系统能量与状态概率的关系

如果系统处于稳态(“热平衡”),它的状态概率和能量应该服从玻尔兹曼分布。我们将系统状态的所有参数记为一个向量v,那么系统处于这个状态的概率为

p(v) = \frac{\exp(-E(v))}{\sum_u \exp(-E(u))}

状态v对应的能量定义为

E(v) = - (\sum_{i < j} w_{ij} s_i^v s_j^v + \sum_i \theta_i s_i^v)

其中s_i^v是状态向量v对应的节点$i$的二值状态。这种系统能量和状态概率的关系可以推广到一般的机器学习模型中。

机器学习模型训练中的最小代价和极大似然的等价性

在一般的机器学习中,我们有一些观察数据X和对应的分类Y,建立模型函数f,则对应的代价函数为

E(X) = \Vert f(X) - Y\Vert _2^2

我们希望模型输出f(X)逼近分类Y,就要最小化代价函数E(X)。这里的代价函数E(X)其实可以看成系统状态的能量,而最小化的E(X)就是系统的稳态能量了。按照前面所说,它应该服从玻尔兹曼分布。从而,系统获得观察数据X的概率可以估计为

\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}

从概率统计的角度看,常用极大似然的思想来估计参数。而在上式中,极大似然等价于最小化系统的能量函数。

许多机器学习的论文一来就把代价函数写成自然对数的指数,然后通过最大化求参数,其依据就是上式。也有很多论文用代价函数的形式求最小化。这两者通过玻尔兹曼分布联系在一起,是等价的。