交叉熵损失函数和focal loss_交叉熵损失函数的应用

本文以二分类交叉熵损失函数为例,详细分析了交叉熵损失函数在实际应用中遇到的问题,以及解决办法,并给出了在深度学习中使用的交叉熵损失函数的具体形式。通过本文的叙述,相信能够使读者对深度学习的理解更加深入。

交叉熵损失函数的向量表示

交叉熵损失函数:

其中y为label,

为预测的正类别概率,即在二分类中通过sigmoid函数得出的正类别概率大小。

BGD(batch 梯度下降算法):

对于batch梯度下降训练,loss不再是单个样本的loss,而是batch size大小(如m)的损失函数的均值。

写为向量表示为:

其中

为element wise相乘。

Y为batch大小的label向量,P为batch大小的预测正向概率。

交叉熵损失函数的实际应用

自然对数的性质

交叉熵损失函数的表达式:

即对于不同的类别损失函数为:

从上式可知,交叉熵损失函数的主要部分为自然对数。

自然对数的图示如下表示:

3894c5be7a915f31fdf1cf42957e01ff.png

如上图所示:

在x=0附近,log(x)抖动很大,即在x=0附近,x的微小变化就会导致log(x)值发生很大变化。而且在x趋近于0时,

。在计算机中只能存储一定精度的浮点数,当值趋近于无穷大时会造成数值溢出overflow,当值趋近于无穷小时,会造成underflow。

由于自然对数的上述性质,会造成交叉熵在0值附近的值的不稳定。

同样会使得梯度计算不稳定,因为当x趋近于0时,导数会趋近于无穷大。

即自然对数的性质,会造成交叉熵损失函数值和梯度在x=0附近的不稳定。损失函数值和导数的不稳定,必然会导致模型的训练不稳定,使得模型收敛变得困难。

d9dd67eaee9ad8eea17187c156cf92c3.png

值稳定的交叉熵损失函数

,代入交叉熵损失函数可能:

其中z为输入到sigmoid函数的值

即通过上式的变换,最终交叉熵损失函数由

变为了

对于上式,交叉熵

中自然对数函数的变量为
,即自然对数的变量值大于1。因此由于上述改变,使得交叉熵损失函数脱离了由于自然对数在x=0附近导致的数值和梯度的不稳定。

进一步简化可得:

(1)

对于上式,当

时,
,即会造成溢出。

再次进行变形可得:

(2)

此时,当

时,
不再会溢出。

但是, 当

时,
会溢出。

为了得到值稳定的交叉熵损失函数,采用分段函数的形式构建最终稳定的交叉熵损失函数,如下:

即综合了式子(1)和式子(2)的优点,保证了值不会溢出。如下图所示:

cf5ff1ac2b7e15c0e9fd98f490b69a42.png

统一为一个表达式可得:

Cost函数即向量表达为:

注:上述向量表达式是利用element wise进行计算的。

在tensorflow中,稳定版本的交叉熵损失函数的表达式与上式相同。

梯度稳定的交叉熵损失函数

的表达式,利用链式法则可以得出,

其中

为sigmoid的输入,即分类前最后一层的输出。上述推导同样适用于分段的值稳定的交叉熵损失函数,因为交叉熵损失函数的形式不变,只是在不同区间采用了不同的值而已。

从上式可以得出,计算

不需要计算
,即可以越过sigmoid层,直接将
作为
层的导数。如下图所示:

53cf95195ac4a630866894ccf4b023e1.png

这样做的好处在于:

不需要计算

也就避免了交叉熵损失函数梯度的不稳定。

同时规避了sigmoid函数的饱和点,即梯度接近于0的点。对于梯度接近于0的点,梯度不能有效传递,参数不能有效更新。

sigmoid的函数图示如下:

4482454dd43a3f922eeb334cfbbf5a9f.png

总结

通过以上的叙述可以看到,虽然交叉熵损失函数的形式简单,但是在深度学习实际应用中会遇到值和导数不稳定的问题。为了能够使模型能够更好的训练,采用了分段函数的形式保证了损失函数的值稳定,在后向传输中,跳过sigmoid层,直接计算损失函数对z的导数即

,规避了导数的不稳定性以及sigmoid存在饱和点造成的导数传递失效问题。

因此在深度学习中,为了更好的模型训练,往往需要对损失函数做相应的调整。

ref:

https://towardsdatascience.com/nothing-but-numpy-understanding-creating-binary-classification-neural-networks-with-e746423c8d5c​towardsdatascience.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值