最大似然估计和交叉熵损失

这篇日志厘清一下我之前理解的不是很清晰的一个概念。

机器学习算法 4 大部分:data、model、loss、optimization。对于 loss,最大似然估计和交叉熵损失都是经常听见的。但对于一个算法来说,最终只会有一个损失,那最大似然估计和交叉熵损失之间有什么关系呢?下面的内容主要来自于 Ian Goodfellow 的 Deep Learning 一书的 5.5 节,按照我个人的理解重新梳理一下(倒叙 2333)。

最大似然估计

首先是最大似然估计这个词,似然嘛,肯定是两个东西相似,那是哪两个呢?书里给了答案,是数据的经验分布 $\hat{p}{\textrm{data}}(\mathbf{x})$ 和我们要估计且是由参数 $\theta$ 刻画的模型分布 $p{\textrm{model}}(\mathbf{x};\theta)$ 之间的相似程度。虽然书里没说,但数据的经验分布 $\hat{p}_{\textrm{data}}(\mathbf{x})$ 应该如下

$$\hat{p}_{\textrm{data}}(\mathbf{X}) = \frac{1}{N} \sum_i^{i = N} \delta(\mathbf{x_i})$$

两个分布之间的相似程度用 KL 散度来衡量,我们有

因为数据的经验分布 $\hat{p}{\textrm{data}}(\mathbf{x})$ 与模型分布 $p{\textrm{model}}(\mathbf{x};\theta)$ 的参数 $\theta$ 没有关系,所以最小化上面的 KL 散度就等价于最小化负似然函数

也就是最大化似然函数

我上面给出的经验分布公式代入上式就可以得到

与交叉熵损失的关系

好了,目前为止,我们似乎只有抽象的 $p_{\textrm{model}}(\mathbf{x};\theta)$ 与交叉熵似乎没有任何关系,别急,其实交叉熵损失是 最大似然估计分类问题判别模型 的很自然的具体形式。

在 Bishop 的 PRML 的第一章就提到,model 有三种,generative model,discriminative model 和 discriminant function。在这里我们要用的是 discriminative model 的 likelihood function,也就是形如 $p(y | x; \theta)$,注意哦,只有 discriminative model 的 likelihood function 是这样的形式,别认为所有 likelihood 都是这样的。

为了简便起见,先把 $\theta$ 省去不写,判别模型的最大似然估计就变成了

上面这个式子其实设定了 $y_i$ 是那个正确的 label,此时 $P(y_i | x_i)$ 才不是 0,也就不会出现 $\ln{0}$ 这种问题了。我们定义一个分布

那么上面的判别模型的最大似然估计就可以重写成

按照交叉熵的定义 $H(p,q) = -\sum_x p(x)\ln{q(x)}$,上面的就是交叉熵损失的形式。所以 交叉熵损失 是 最大似然估计分类问题判别模型 且 label 用 1-of-K 编码时候的的具体形式。

不过说回来当我们写代码的时候,其实是用上面照设定了 $y_i$ 是那个正确的 label 时候的写的。如果不那么写,

1
2
def cross_entropy(yhat, y):
return - nd.pick(nd.log(yhat), y)

对于一个长度为 K label 向量,每个样本要计算 K 次 log,而用了上面的公式只计算正确时候的情况,每个样本只要计算 1 次 log,代码如下

1
2
def cross_entropy(yhat, y):
return - nd.log(nd.pick(yhat, y))

与均方误差估计的关系

同理,均方误差损失最大似然估计回归问题 下 采用高斯分布来刻画 判别模型 时的具体化体现。Deep Learning 书里的 5.5.1 小节讲得很清楚了。


如果您觉得我的文章对您有所帮助,不妨小额捐助一下,您的鼓励是我长期坚持的动力。

Alipay_Middle Wechat_Middle