作者:tobynzhang 腾讯PCG算法工程师
|导语 关于各类损失函数的由来,很多地方,如简书、知乎都有相关文章。但是很少看到统一成一个体系的阐述,基本都是对一些公式的讲解。实际上这一系列的损失函数都是有一整套数学体系的,可以互相推导互相转化的。作者特地做了一些整理,水平有限,方便读者查阅。水平有限,大佬勿喷,感激不尽~
一、概述
各类有监督算法的本质其实都是在于:用样本观察值去估计随机事件的实际分布。举个例子,推荐算法,其实就是使用观察到的用户行为,如点击行为,去估计用户点击这个随机事件的实际分布。通过估计出来的分布去预测用户下一次点击的概率。
概率分布估计过程就是各类损失函数的来源。对未知事件的分布进行各种假设,从而衍生出了不同的损失函数。
二、同分布评估
要想估计随机事件的实际分布,首先就需要定义两个分布之间的衡量方式,也就是如何定义两个分布之间的差异?这其实是一件非常麻烦的事情,要详细阐述这个问题的解决过程需要查阅很多资料,一篇文章的篇幅是写不完的。
感谢伟大的信息论之父香侬,这些麻烦的事情都可以统一在信息论的框架下,用概率论相关的原理进行推导和研究。所以我们下面直接使用相关的理论进行推演,而这些理论的来源感兴趣的读者可以查阅相关文献。
2.1 KL散度
KL散度又称相对信息熵,可以用来衡量两个分布之间的信息增益。
假设存在分布P和分布Q,分布P相对于分布Q具有的信息增益可以用下列式子表达
此处应注意:
2.2 交叉熵
此处有长得比较帅的读者就注意到了,KL散度和交叉熵公式长得很像, 他们是否有联系呢?
是的,交叉熵(cross-entropy)和 KL 散度联系很密切,以下以离散分布举例,对于连续分布是一样的。
交叉熵为:
KL散度推导:
H§是自信息,对于一个给定的分布而言,这是个常数。所以,在实际使用中,优化交叉熵实际就是优化KL散度。
在实际使用中,我们要衡量的是:对于给定的输入X,预测的分布和实际分布的差异。并希望优化这个差异,是的预测的分布和实际分布尽可能分布,用数学语言表示如下。
公式里的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一样而已。举个例子,对于二分类的交叉熵:
这个式子里的y 和(1- y)应该是概率,即在输入X的情况下,标签label=1的概率和label=0的概率。只是恰巧label也是1和0,看起来像是label而已。
三、参数估计
有了衡量两个分布的概率,那问题自然就来了。用什么参数才能使我们你和出来的分布尽可能地接近实际分布呢?这就是参数估计。常见的有矩估计、最大似然估计、贝叶斯估计等。其中和我们今天主旨最接近的是最大似然估计。
最大似然估计和最小KL散度估计是对偶问题(一般意义上,此处不讨论严格的数学约束条件)。以下是证明。
最大似然可以有如下推导。
对于一系列抽样,希望从观察值中推断隐藏的参数,将n个独立样本的概率表示如下:
为使系统达到最优,我们应挑选参数theta使得P是最大的。对于连乘形式,在运算过程中容易出现数值极值,取其对数进行研究,最后该问题可描述为:
n个独立样本是从实际分布P里抽样出来的,它可以看做是对原始分布的一个抽样近似
同样的,考察最小化KL散度:
这个形式和最大化似然是一样的。最大化似然可以看做是通过抽样的形式,用样本进行最小化KL散度估计。
四、损失函数由来
通过以上的阐述,可以看到,无论是最大化似然还是最小化交叉熵,其实都可以统一在最小化KL散度这个框架下。通过这两种方法推导出来的损失函数,其实都是对原始分布P进行一定的假设的前提下推导出来的。互相之间是可以转化的。
4.1 二分类交叉熵
交叉熵函数如下:
当分类数N=2时,可以这样写:
由于只有两个分类,那么由 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。
这样就可以简化成
由于两个分类的互斥性,这时只需要一个输出就可以计算出两个分类的概率。
4.2 多分类交叉熵
对于多分类
交叉熵函数如下:
一般模型是同时输出N个结果,经过softmax后作为P(yi|X)的概率。
值得注意的是,当N=2时,这两种操作是等效的:
- 输出两个值,经过softmax操作后分别作为y=1和y=0的概率,计算交叉熵;
- 输出一个值,经过sigmoid操作后,作为y_{i=1}的概率,y=0的概率通过1-y_{i=1}计算得到,然后用这两个概率值计算交叉熵;
2操作其实是1操作的简化方案。
4.3 最大化均方误差
假设当数据分布服从高斯分布时,最大化似然函数有以下推导过程:
假定数据分布服从
方差一定,需要通过最大化似然去估计这个高斯分布的参数。
条件对数似然如下:
可以看到,最大化似然函数,其实就是最小化均方误差mse
可以看出,这就是我们常见的mse loss的由来。它的准确表示应该是:
当误差分布服从高斯分布时,通过抽样的方法近似的最小化KL散度,获得输出均值的模型参数。
也就是说,以下几种说法是等价的:
- mse估计是误差服从连续高斯分布时,最大化似然估计,获得输出均值的模型参数。
- mse估计是误差服从连续高斯分布时,以抽样的形式估计的最小化KL散度,获得输出均值的模型参数。
- mse估计是误差服从连续高斯分布时,以抽样的形式估计的最大化交叉熵,获得输出均值的模型参数。
值得注意的是,对于表述3。大部分人只使用了离散形式的交叉熵,实际上交叉熵是衡量两个分布之间的信息差的,是可以应用在连续分布中的。
近期热文
浅谈SWOT分析法
《QQ炫舞》十二年成熟游戏的求变思新之路
基于Scrapy的爬虫解决方案
让我知道你在看