极大似然估计和交叉熵

一、前言

对于一个多分类问题 (假设为 \(K\) 类), 有数据集 \(D = \{ \ (x_i,y_i \ ) \mid i \}\). 我们希望建立模型去建模概率分布 \(p_{\theta}(y \mid x)\), 模型参数为 \(\theta\).

我们使用损失函数评价模型的好坏, 可以采用两种方式来导出.

二、极大似然估计

由于是多分类问题, 在样本空间上的 \(p(y \mid x)\) 满足某个分类分布. 由分类分布定义可以知道.

\[ p (y \mid x ; \theta) = {\textstyle \prod_{k=1}^{K}} p_{k}^{y_k} \]

其中, \(p\) 是分布的输出概率向量 , \(\theta\) 是分布的参数. \(y\)\(\mathrm{one-hot}\) 编码的标签向量.

例如对于一个天气 4 分类问题, 输出概率向量如下:

1
p = {'rain' : 0.14 , 'snow' : 0.37 , 'sleet' : 0.03 , 'hail' : 0.46}

则分类为 \(\mathrm{snow}\) 的概率为 \(P(y = \mathrm{snow} = [0,1,0,0]) = (0.14)^0 * (0.37)^1 * (0.03)^0 * (0.46)^0 = 0.37\)

当使用极大似然估计去估计分布参数 \(\theta\).

假设有 \(n\) 个样本: \((x^{(i)},y^{(i)})\), 则似然函数为

\[ \mathcal{L} (x^{(i)},y^{(i)} ; \theta) = {\textstyle \prod_{i=1}^{n}} {\textstyle \prod_{k=1}^{K}} p_{k}^{y_k} \]

我们期待最大化似然估计, 即最小化负对数似然函数. 转换成对数是因为计算机常做乘法, 这样有利于计算.

\[ \min ( - {\textstyle \prod_{i=1}^{n}} {\textstyle \prod_{k=1}^{K}} y_k \log{p_k} ) \]

由于采用 \(\mathrm{one-hot}\) 编码, 故 \(y_k=0\) 的项乘积均为 0, 只需考虑 \(y_k=1\) 时. 故上述函数可变形为:

\[ \min ( - {\textstyle \prod_{i=1}^{n}} \log{P_k}(y_k = 1) ) \]

此时就可以推导出那个常见的损失函数

\[ \mathcal{L} (\theta) = -y\log{p(x;\theta)} - (1-y)\log(1-p(x;\theta)) \]

三、交叉熵

1. 信息论

信息一般可以被表述为不确定性的程度, 有如下特性

  • 一定发生的事件没有信息

  • 很有可能发生的事件几乎没有信息

  • 随机事件拥有更多的信息

  • 独立事件可以增加信息——抛两次正面的骰子的信息量大于抛一次正面骰子的信息量

事件的信息可以形式化为:

\[ I(x) = - \log(P(x)) \]

熵用于衡量信息的多少, 被定义为:

\[ H(x) = \mathbb{E}x \sim P(I(x)) = -\mathbb{E}x \sim p[\log{P(x)}] \]

离散随机变量 \(x\) 的熵即:

\[ H(x) = - {\textstyle \sum_{x}} P(x)\log{P(x)} \]

\(\log\) 以2为底, 则可以衡量编码信息的比特数多少. 在信息论中, 信息与随机性是正相关的. 高熵等于高随机性, 需要更多的比特来编码.

例如, 计算丢一枚硬币的熵:

\[ H(x) = -p(正面) \log_{2}p(正面) - p(反面)log_{2}p(反面) = - \log_{2}\frac{1}{2} = 1 \]

则我们可以用 1 位比特来编码.

\(\mathrm{KL}\) 散度用于衡量两个分布 \(P,Q\) 的距离, 被定义为

\[ D_{\mathrm{KL}}(P \parallel Q) = {\textstyle \sum_{x}} P(x)(\log{P(x)} - \log{Q(x)}) \]

在这里 \(\mathrm{KL}\) 距离不对称. 也就是 \(D_{\mathrm{KL}}(P \parallel Q) \neq D_{\mathrm{KL}}(Q \parallel P)\)

熵可以衡量编码信息的最少比特数, 交叉熵则可以衡量使用 \(\mathrm{Q}\) 的错误优化编码方案对具有分布 \(\mathrm{P}\)\(x\) 进行编码的最小比特数. 其被定义为:

\[ H(P,Q) = - {\textstyle \sum_{x}} P(x)\log{Q(x)} \]

同时, 其可以被写为:

\[ H(P,Q) = - \sum P\log{Q} = - \sum P\log{P} + \sum P\log{P} - \sum P\log{Q} = H(P) + \sum P\log{\frac{P}{Q}} = H(P) + D_{\mathrm{KL}}(Q \parallel P) \]

由于 \(H(P)\) 与模型参数无关, 可以视为常数. 所以最小化 \(\mathrm{KL}\) 距离等价于最小化交叉熵.

在深度学习中, \(P\) 一般为真实标签的分布, \(Q\) 一般为模型预测输出的分布.

2. 交叉熵损失函数

我们希望能够最小化真实分布 \(P(y \mid x)\) 与模型输出分布 \(P(\hat{y} \mid x)\) 的距离, 等价于最小化两者的交叉熵, 其被定义为:

\[ {\textstyle \sum_{y}} P(y \mid x) \log{Q(\hat{y} \mid x)} = - {\textstyle \sum_{k=1}^{K}} {y_k\log{\hat{y_k}}} \]

四、总结

最小化负对数似然函数和最小化交叉熵在形式上虽然看起来是一样的, 但是公式背后的含义不同.