Maximum Likelihood Estimation 和 Cross Entropy

自己知道在机器学习分类模型中可以使用交叉熵作为损失函数已经很长一段时间了,但是知道是一回事情,理解是另外一回事情。每次都要死记硬背这个东西,那是不能让人满意的。直到最近看了 Deep Learning 这本书的 5.5 小节: Maximum Likelihood Estimation,才算是把这个东西的来龙去脉搞清楚,以后再也不会忘掉了。下面说说我的理解。

Likelihood vs Probability

首先需要搞明白的就是 Likelihood 和 Probability 这两个词的区别。Probability 一般翻译为概率,Likelihood 可以翻译为可能性,但是仅从中文字面意思上是看不出来什么区别的,其实在统计学里它们有着明确的区分:

  • Probability 用于描述单个事件。
  • Likelihood 用于描述一组事件。

假定有如下一组训练数据:

(1)   \begin{equation*} X = \{x^1, x^2, ..., x^m\} \end{equation*}

那么针对单个事件 x^i 我们可以用 Probability 来描述其发生的可能性,即:

(2)   \begin{equation*} p(x^i) \end{equation*}

而针对这一组事件 X,我们可以用 Likelihood 来描述其发生的可能性。准确的说就是:

(3)   \begin{equation*} L(X) = \prod_{i=1}^{m} p(x^i) \end{equation*}

Maximum Likelihood Estimation

所谓 Maximum Likelihood Estimation,就是说用我们建立的模型去预测的话,那么训练数据的Likelihood应该最大。假定我们把模型的所有参数(Hyper Parameter)用 \theta来表示,那么 Maximum Likelihood Estimation 用数学公式可以描述如下:

(4)   \begin{equation*} \theta = \underset{\theta}{\operationname{argmax}} \prod_{i=1}^{m} p_{model}(x^i; \theta) \end{equation*}

不要被一大推数学符号绕晕了,上面公式的意思就是一个优化问题,表示找到所有可能的 \theta 中使得 X 的 Likelihood 最大的那一个。

Empirical Distribution

Empirical Distribution 用于描述一组观测数据的概率分布。为了避免复杂起见,我们只考虑离散的随机变量。在此前提下,一组数据的 Empirical Distribution Function 可以直接用这组数据的频率来描述。比如我们有数据集

(5)   \begin{equation*} X = \{1, 2, 1, 3, 4\} \end{equation*}

那么 X 的 Empirical Distribution Function 就是:

(6)   \begin{equation*} \begin{split} &p(1) = \frac{2}{5} = 0.4 \\ &p(2) = \frac{1}{5} = 0.2 \\ &p(3) = \frac{1}{5} = 0.2 \\ &p(4) = \frac{1}{5} = 0.2 \end{split} \end{equation*}

如果只考虑单个数据点而不合并相同值的话,那么每个数据点的概率就是常数 \dfrac{1}{m}。这个形式更方便于后面的讨论。

交叉熵(Cross Entropy)

Cross Entropy (中文翻译为交叉熵)是用来衡量两个用来描述同一随机事件的概率分布X和Y的相似程度,这个数字越小,两个概率分布就越相似。假定该随机事件一共有N个可能的取值,那么Cross Entropy的数学定义如下:

(7)   \begin{equation*} H(X,Y) = \sum_{i=1}^{N}p_x(i) \cdot \log \frac{p_x(i)}{p_y(i)} \end{equation*}

上式容易简化为:

(8)   \begin{equation*} \begin{split} H(X,Y) &= \sum_{i=1}^{N}p_x(i) \cdot \log p_x(i) +\sum_{i=1}^{N}p_x(i) \cdot \log \frac{1}{p_y(i)} \\ &= -H(X)+ \sum_{i=1}^{N}p_x(i) \cdot \log \frac{1}{p_y(i)} \end{split} \end{equation*}

在Supervised Machine Learning的前提下,X表示训练数据,本身不会跟着训练过程而发生变化,因此 H(X) 是一个固定的值,不会影响优化问题的解。所以在很多教程中,Cross Entropy 都被直接表示为后一部分:

(9)   \begin{equation*} \begin{split} H(X,Y) &= \sum_{i=1}^{N}p_x(i) \cdot \log \frac{1}{p_y(i)} \\ &= -\sum_{i=1}^{N}p_x(i) \cdot \log {p_y(i)} \end{split} \end{equation*}

最终联系

讨论到这个地方, 我们就可以把 Maximum Likelihood Estimation 和 Cross Entropy 两者联系起来了。首先考虑到对数函数是一个单调递增的函数,所以在 (4) 中,我们可以取 Likelihood 的对数,不影响最终的优化结果(也就是哪一个 \theta 是最优解)。取对数以后,(4) 将变化如下:

(10)   \begin{equation*} \theta = \underset{\theta}{\operationname{argmax}} \sum_{i=1}^{m} \log{p_{model}(x^i; \theta)} \end{equation*}

同样,因为训练样本的总数 m 是一个正整数,我们在上式中对于Likelihood还可以除以m,同样不影响最终的优化结果。两边同时除以m以后,我们得到下式:

(11)   \begin{equation*} \theta = \underset{\theta}{\operationname{argmax}}  \frac{1}{m} \cdot \sum_{i=1}^{m} \log{p_{model}(x^i; \theta)} \end{equation*}

最后,上面求出来的是使得 Likelihood 最大的 \theta 。在优化问题中我们常常使用 cost function 的概念,而优化目标是使得 cost function 取值最小。为了在习惯上统一,我们还可以给 Likelihood 加上一个负号,这样 argmax 就变成了 argmin,最终公式如下:

(12)   \begin{equation*} \theta = \underset{\theta}{\operationname{argmin}} -1 \cdot \frac{1}{m} \cdot \sum_{i=1}^{m} \log{p_{model}(x^i; \theta)} \end{equation*}

下来我们再处理交叉熵的部分。如果把训练数据的 Empirical Distribution Function 作为 (9) 中的 X,而把模型的概率分布作为 Y,那么 (9) 就转化为下式:

(13)   \begin{equation*} H(X,Y) = -\sum_{i=1}^{m}p_{empirical}(x^i) \cdot \log {p_{model}(x^i; \theta)} \end{equation*}

考虑到每一个数据点的概率(也就是 Empirical Distribution Possibility 的值)其实就是常数 \dfrac{1}{m},上面的公式可以化简如下:

(14)   \begin{equation*} H(X,Y) = -1 \cdot \dfrac{1}{m} \cdot \sum_{i=1}^{m} \log {p_{model}(x^i; \theta)} \end{equation*}

我们需要找到一个 \theta 使得 H(X, Y) 最小,如果用数学公式表示这个优化问题的话,那么就是:

(15)   \begin{equation*} \begin{split} \theta &= \underset{\theta}{\operationname{argmin}} H(X,Y) \\ &= \underset{\theta}{\operationname{argmin}} -1 \cdot \frac{1}{m} \cdot \sum_{i=1}^{m} \log{p_{model}(x^i; \theta)} \end{split} \end{equation*}

这个结果和 (12) 的形式一模一样,也就证明了最小化Cross Entropy 和 最大化样本数据的 Likelihood  其实是一回事情。