Press "Enter" to skip to content

损失函数漫谈

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

作者: 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的爬虫解决方案

 

 

让我知道你在看

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注