损失函数总结

本文主要总结一下常见的损失函数。

损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。

1. 0-1损失函数(zero-one loss)


0-1损失是指:预测值和目标值不相等损失值取1, 否则为0:
在这里插入图片描述

  • 0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.
  • 相等这个条件太过严格,因此可以放宽条件,即满足 ∣ Y − f ( x ) ∣ < T \bm{|Y-f(x)|<T} Yf(x)<T时认为相等
    在这里插入图片描述

2. 绝对值损失函数


绝对值损失函数是计算预测值与目标值的差的绝对值:
在这里插入图片描述

3. log对数损失函数


log对数损失函数的标准形式如下:
在这里插入图片描述

  • log对数损失函数能非常好的表征概率分布,在很多场景尤其是多分类,如果需要知道结果属于每个类别的置信度,那它非常适合。

  • 健壮性不强,相比于hinge loss对噪声更敏感。

  • 逻辑回归的损失函数就是log对数损失函数。

4. 指数损失函数(exponential loss)

指数损失函数的标准形式如下:
在这里插入图片描述

  • 对离群点、噪声非常敏感。经常用在AdaBoost算法中。

5. Hinge 损失函数


Hinge损失函数标准形式如下:
在这里插入图片描述

  • hinge损失函数表示如果被分类正确,损失为0,否则损失就为 ( 1 − y f ( x ) ) \bm{(1-yf(x))} (1yf(x))。SVM就是使用这个损失函数。

  • 一般的 f ( x ) f(x) f(x) 是预测值,在-1到1之间, y y y是目标值(-1或1)。其含义是, f ( x ) f(x) f(x) 的值在-1和+1之间就可以了,并不鼓励 ∣ f ( x ) ∣ > 1 |f(x)|>1 f(x)>1,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。

  • 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。

6. 感知损失(perceptron loss)函数


感知损失函数的标准形式如下:
在这里插入图片描述

  • 是Hinge损失函数的一个变种,Hinge loss对判定边界附近的点(正确端)惩罚力度很高。而perceptron loss只要样本的判定类别正确的话,它就满意,不管其判定边界的距离。它比Hinge loss简单,因为不是max-margin boundary,所以模型的泛化能力没 hinge loss强。

7.均方误差损失


均方差损失函数常用在最小二乘法中。它的思想是使得各个训练点到最优拟合线的距离最小(平方和最小)。均方差损失函数也是我们最常见的损失函数了,相信大很熟悉了,我们以神经网络中激活函数的形式表达一下,定义如下:
在这里插入图片描述
其中, a = f ( z ) = f ( w ⋅ x + b ) a=f(z)=f(w·x+b) a=f(z)=f(wx+b) :x是输入、w和b是网络的参数、 f ( ⋅ ) f(·) f() 是激活函数。

均方误差+Sigmoid激活函数:输出层神经元学习率缓慢

Sigmoid的导数推导以及图像:
在这里插入图片描述
在这里插入图片描述
从sigmiod的导数图像中可以看到,除了中间比较小的区域,其他区域的十分值接近于0。

神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差(网络输出和标签之间的偏差)因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重w没有更新,即梯度消失。可以看出,sigmoid函数作为激活函数本身就存在梯度消失的问题。

我们以一个神经元,ESM均方误差损失 J = 1 2 ( y − a ) 2 J=\frac{1}{2}(y-a)^{2} J=21(ya)2 ,Sigmoid激活函数 a = σ ( z ) a=\sigma (z) a=σ(z) (其中 z = w x + b z=wx+b z=wx+b)为例,计算一下最后一层的反向传播过程,可得:
在这里插入图片描述
可以看到最后一层反向传播时,所求的梯度中都含有 σ ′ ( z ) \sigma^{′}(z) σ(z) 。经过上面的分析,当神经元输出接近1时候,Sigmoid的导数 σ ′ ( z ) \sigma^{′}(z) σ(z) 变很小,这样 ∂ J ∂ w 、 ∂ J ∂ b \frac{\partial J}{\partial w} 、 \frac{\partial J}{\partial b} wJbJ 很小,这就导致了ESM均方误差+Sigmoid激活函数使得神经网络反向传播的起始位置——输出层神经元学习率缓慢。
想要解决这个问题,需要引入接下来介绍的交叉熵损失函数。这里先给出结论:交叉熵损失+Sigmoid激活函数可以解决输出层神经元学习率缓慢的问题,但是不能解决隐藏层神经元学习率缓慢的问题。具体的推导和总结在下面部分中介绍。

8. 交叉熵损失


softmax分类器

交叉熵损失是基于softmax计算来的,softmax将网络最后输出z通过指数转变成概率形式。首先看一下softmax计算公式: p i = e z i ∑ j = 1 k e z j p_{i}=\frac{e^{z_{i}}}{\sum_{j=1}^{k}{e}^{z_{j}}} pi=j=1kezjezi

其中, 分子 e z i e^{z_{i}} ezi 是要计算的类别 i 的网络输出的指数;分母是所有类别网络输出的指数和,共k个类别。这样就得到了类别i的输出概率 p i p_{i} pi

→这里说点题外话,实际上,softmax是由逻辑斯的回归模型(用于二分类)推广得到的多项逻辑斯蒂回归模型(用于多分类)。具体可以参考李航大神的《统计学方法》第六章,这里给一个大致的过程。

逻辑回归的P(Y=y|x)表达式如下(为了将类别标签y统一为1和0,下面将表达式分开表示):
在这里插入图片描述
将它带入到上式,通过推导可以得到logistic的损失函数表达式,如下:
在这里插入图片描述
逻辑回归最后得到的目标式子如下:

在这里插入图片描述
交叉熵损失

公式定义如下: J = − 1 N ∑ 1 N ∑ i = 1 k y i ⋅ l o g ( p i ) J=-\frac{1}{N}\sum_{1}^{N}{\sum_{i=1}^{k}{y_{i}·log(p_{i})}} J=N11Ni=1kyilog(pi)

其中, y i y_{i} yi 是类别 i 的真实标签; p i p_{i} pi是上面softmax计算出的类别 i 的概率值;k是类别数,N是样本总数。

这里看一个计算交叉熵损失的小例子:

假设共有三个类别cat、dog、bird,那么一张cat的图片标签应该为 ( 1 , 0 , 0 ) T (1,0,0)^{T} (1,0,0)T 。并且训练过程中,这张cat的图片经过网络后得到三个类别网络的输出分别为3、1、-3。那么经过softmax可以得到对应的概率值,如下图:
在这里插入图片描述
在这里插入图片描述
交叉熵损失的两个图像

指数图像

softmax分类器将各个类别的“得分”(网络输出)转变成概率值。并取e指数使得“得分”高的类别对应的概率更大,使得损失函数对网络输出“更敏感”,更有利于分类。
在这里插入图片描述

对数图像
在这里插入图片描述
交叉熵损失+Sigmoid激活函数:

接着上一部分留下的问题,我们仍然以Sigmoid激活函数 a = σ ( z ) a=\sigma (z) a=σ(z) (其中 z = w x + b z=wx+b z=wx+b )为例。这次我们引入交叉熵损失,并以二分类为例,那么s损失函数公式为:
在这里插入图片描述在这里插入图片描述
那么可以计算一下最后一层的反向传播过程,可得:
在这里插入图片描述
根据之前的推导已知 σ ′ ( z ) = ( 1 − σ ( z ) ) ⋅ σ ( z ) \sigma^{′}(z)=(1-\sigma(z))·\sigma(z) σ(z)=(1σ(z))σ(z) ,那么上式可以化简为:
在这里插入图片描述
在这里插入图片描述
可以看到sigmoid的导数被约掉,这样最后一层的梯度中就没有 σ ′ ( z ) \sigma^{′}(z) σ(z)。然而这只是输出层的推导,如果变成隐藏层的梯度sigmoid的导数不会被约掉,仍然存在 σ ′ ( z ) \sigma^{′}(z) σ(z)。所以交叉熵损失+Sigmoid激活函数可以解决输出层神经元学习率缓慢的问题,但是不能解决隐藏层神经元学习率缓慢的问题。
其实损失函数包含两个部分:①计算方法(均方差、交叉熵等)②激活函数。

而之前我们遇到的是均方差损失+sigmoid激活函数造成了输出层神经元学习率缓慢,其实我们破坏任意一个条件都有可能解决这个问题:

①均方误差损失→交叉熵损失;

②sigmoid函数→不会造成梯度消失的函数,例如ReLU函数,不仅能解决输出层学习率缓慢,还能解决隐藏层学习率缓慢问题。
在这里插入图片描述
这里也小结一下ReLU函数相对于tanh和sigmoid函数好在哪里:

第一,采用sigmoid等函数,算激活函数是(指数运算),计算量大;反向传播求误差梯度时,求导涉及除法,计算量相对大。而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0),这种情况会造成信息丢失,梯度消失在网络层数多的时候尤其明显,从而无法完成深层网络的训练。

第三,ReLU会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

交叉熵与最大似然

1.交叉熵函数与最大似然函数的联系和区别?

区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。

联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。

怎么推导的呢?我们具体来看一下。

设一个随机变量 X X X 满足伯努利分布,
[公式]
X X X 的概率密度函数为:

[公式]

因为我们只有一组采样数据 D D D ,我们可以统计得到 X X X 1 − X 1-X 1X 的值,但是 p p p的概率是未知的,接下来我们就用极大似然估计的方法来估计这个 p p p值。

对于采样数据 D D D ,其对数似然函数为:

[公式]

可以看到上式和交叉熵函数的形式几乎相同,极大似然估计就是要求这个式子的最大值。而由于上面函数的值总是小于0,一般像神经网络等对于损失函数会用最小化的方法进行优化,所以一般会在前面加一个负号,得到交叉熵函数(或交叉熵损失函数):

[公式]

这个式子揭示了交叉熵函数与极大似然估计的联系,最小化交叉熵函数的本质就是对数似然函数的最大化。

现在我们可以用求导得到极大值点的方法来求其极大似然估计,首先将对数似然函数对 p p p进行求导,并令导数为0,得到

[公式]

消去分母,得:

[公式]

所以:

[公式]

这就是伯努利分布下最大似然估计求出的概率 p p p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值