作者: 张黄斌

来源: 腾讯大讲堂

出处:https://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=2653455932&idx=1&sn=3ff98659ba79a6df780c8cc3aa749fe9

作者: tobynzhang 腾讯PCG算法工程师

| 导语 关于各类损失函数的由来,很多地方,如简书、知乎都有相关文章。 但是很少看到统一成一个体系的阐述,基本都是对一些公式的讲解。 实际上这一系列的损失函数都是有一整套数学体系的,可以互相推导互相转化的。 作者特地做了一些整理,水平有限,方便读者查阅。 水平有限,大佬勿喷,感激不尽~

一、概述

各类有监督算法的本质其实都是在于:用样本观察值去估计随机事件的实际分布。举个例子,推荐算法,其实就是使用观察到的用户行为,如点击行为,去估计用户点击这个随机事件的实际分布。通过估计出来的分布去预测用户下一次点击的概率。

概率分布估计过程就是各类损失函数的来源。对未知事件的分布进行各种假设,从而衍生出了不同的损失函数。

二、同分布评估

要想估计随机事件的实际分布,首先就需要定义两个分布之间的衡量方式,也就是如何定义两个分布之间的差异?这其实是一件非常麻烦的事情,要详细阐述这个问题的解决过程需要查阅很多资料,一篇文章的篇幅是写不完的。

感谢伟大的信息论之父香侬,这些麻烦的事情都可以统一在信息论的框架下,用概率论相关的原理进行推导和研究。所以我们下面直接使用相关的理论进行推演,而这些理论的来源感兴趣的读者可以查阅相关文献。

2.1 KL散度

KL散度又称相对信息熵,可以用来衡量两个分布之间的信息增益。

假设存在分布P和分布Q,分布P相对于分布Q具有的信息增益可以用下列式子表达

此处应注意:

损失函数的基本知识 损失函数漫谈(1)

2.2 交叉熵

此处有长得比较帅的读者就注意到了,KL散度和交叉熵公式长得很像, 他们是否有联系呢?

是的,交叉熵(cross-entropy)和 KL 散度联系很密切,以下以离散分布举例,对于连续分布是一样的。

交叉熵为:

损失函数的基本知识 损失函数漫谈(2)

KL散度推导:

损失函数的基本知识 损失函数漫谈(3)

H§是自信息,对于一个给定的分布而言,这是个常数。所以,在实际使用中,优化交叉熵实际就是优化KL散度。

在实际使用中,我们要衡量的是:对于给定的输入X,预测的分布和实际分布的差异。并希望优化这个差异,是的预测的分布和实际分布尽可能分布,用数学语言表示如下。

损失函数的基本知识 损失函数漫谈(4)

公式里的N是N个分类,P(y|X)是离散分布。一般来说,对于一个确定的输入,y(即label)是确定的,也即P(y=target|X) = 1, P(y=other|X) = 0。简单的说, 就是对于正确分类,p(y)=1,否则p(y) = 0。此时就是常见的从最大化似然函数推导出来的形式。

应该注意的是交叉熵里,log前的那一项是不该理解为label的,只是对于互斥的多分类而言,这个值恰巧和label一样而已。举个例子,对于二分类的交叉熵:

损失函数的基本知识 损失函数漫谈(5)

这个式子里的y 和(1- y)应该是概率,即在输入X的情况下,标签label=1的概率和label=0的概率。只是恰巧label也是1和0,看起来像是label而已。

三、参数估计

有了衡量两个分布的概率,那问题自然就来了。用什么参数才能使我们你和出来的分布尽可能地接近实际分布呢?这就是参数估计。常见的有矩估计、最大似然估计、贝叶斯估计等。其中和我们今天主旨最接近的是最大似然估计。

最大似然估计和最小KL散度估计是对偶问题(一般意义上,此处不讨论严格的数学约束条件)。以下是证明。

最大似然可以有如下推导。

对于一系列抽样,希望从观察值中推断隐藏的参数,将n个独立样本的概率表示如下:

损失函数的基本知识 损失函数漫谈(6)

为使系统达到最优,我们应挑选参数\theta使得P是最大的。对于连乘形式,在运算过程中容易出现数值极值,取其对数进行研究,最后该问题可描述为:

损失函数的基本知识 损失函数漫谈(7)

n个独立样本是从实际分布P里抽样出来的,它可以看做是对原始分布的一个抽样近似

损失函数的基本知识 损失函数漫谈(8)

同样的,考察最小化KL散度:

损失函数的基本知识 损失函数漫谈(9)

这个形式和最大化似然是一样的。最大化似然可以看做是通过抽样的形式,用样本进行最小化KL散度估计。

四、损失函数由来

通过以上的阐述,可以看到,无论是最大化似然还是最小化交叉熵,其实都可以统一在最小化KL散度这个框架下。通过这两种方法推导出来的损失函数,其实都是对原始分布P进行一定的假设的前提下推导出来的。互相之间是可以转化的。

4.1 二分类交叉熵

交叉熵函数如下:

损失函数的基本知识 损失函数漫谈(10)

当分类数N=2时,可以这样写:

损失函数的基本知识 损失函数漫谈(11)

由于只有两个分类,那么由 P(i=1) P(i=2) = 1,可以对上式做进一步简化。

模型输出一个在[0,1]之间的值(sigmoid激活)表示第一个分类P(i=1)的概率(就是label=1的概率),则第二个分类P(i=2)的概率(就是label=0的概率)就是 1 - P(i=1)。此处应注意,分类的类别号和label的区别。0-1分布准确的说法是,二分布,第一个分类标签是0,第二个标签是1。

这样就可以简化成

损失函数的基本知识 损失函数漫谈(12)

由于两个分类的互斥性,这时只需要一个输出就可以计算出两个分类的概率。

4.2 多分类交叉熵

对于多分类

交叉熵函数如下:

损失函数的基本知识 损失函数漫谈(13)

一般模型是同时输出N个结果,经过softmax后作为P(yi|X)的概率。

值得注意的是,当N=2时,这两种操作是等效的:

  1. 输出两个值,经过softmax操作后分别作为y=1和y=0的概率,计算交叉熵;
  2. 输出一个值,经过sigmoid操作后,作为y_{i=1}的概率,y=0的概率通过1-y_{i=1}计算得到,然后用这两个概率值计算交叉熵;

2操作其实是1操作的简化方案。

4.3 最大化均方误差

假设当数据分布服从高斯分布时,最大化似然函数有以下推导过程:

假定数据分布服从

损失函数的基本知识 损失函数漫谈(14)

方差一定,需要通过最大化似然去估计这个高斯分布的参数。

条件对数似然如下:

损失函数的基本知识 损失函数漫谈(15)

可以看到,最大化似然函数,其实就是最小化均方误差mse

损失函数的基本知识 损失函数漫谈(16)

可以看出,这就是我们常见的mse loss的由来。它的准确表示应该是:

当误差分布服从高斯分布时,通过抽样的方法近似的最小化KL散度,获得输出均值的模型参数。

也就是说,以下几种说法是等价的:

  1. mse估计是误差服从连续高斯分布时,最大化似然估计,获得输出均值的模型参数。
  2. mse估计是误差服从连续高斯分布时,以抽样的形式估计的最小化KL散度,获得输出均值的模型参数。
  3. mse估计是误差服从连续高斯分布时,以抽样的形式估计的最大化交叉熵,获得输出均值的模型参数。

值得注意的是,对于表述3。大部分人只使用了离散形式的交叉熵,实际上交叉熵是衡量两个分布之间的信息差的,是可以应用在连续分布中的。

作者: 张黄斌

来源: 腾讯大讲堂

出处:https://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=2653455932&idx=1&sn=3ff98659ba79a6df780c8cc3aa749fe9

,