神经网络损失函数总结

常见的损失函数

1.均方误差损失函数(MSE)

J(θ)=ni=1(y(i)y(i))2n J ( θ ) = ∑ i = 1 n ( y ( i ) − y ( i ) ′ ) 2 n 其中 y y 是真值,y是预测值,它是 W,b,x W , b , x 的函数。

2.交叉熵损失函数(cross-entropy)

J(θ)=1mmi=1y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i))), J ( θ ) = − 1 m ∑ i = 1 m y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ,
首先熵是香农信息量 (log1p) ( l o g 1 p ) 的期望。可以这样理解 y y 表示真实标记的分布,h(x)则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量 y y h(x)的相似性。即两个分布的交叉熵越小越相似。

在上一次激活函数中我们聊到sigmoid激活函数,因为其本身的特性(饱和区),导致网络BP时会出现收敛很慢,怎么解决这个问题呢?
我们使用交叉熵损失函数代替MSE损失函数,先来回顾一下DNN反向传播的时候 δL δ L

J(W,b,x,y)zL=(aLy)σ(z) ∂ J ( W , b , x , y ) ∂ z L = ( a L − y ) ⊙ σ ′ ( z )

而我们损失函数改为交叉熵之后:
δL=J(W,b,aL,y)zL=y1aL(aL)(1aL)+(1y)11aL(aL)(1aL)=y(1aL)+(1y)aL=aLy(433)(434)(435)(436) (433) δ L = ∂ J ( W , b , a L , y ) ∂ z L (434) = − y 1 a L ( a L ) ( 1 − a L ) + ( 1 − y ) 1 1 − a L ( a L ) ( 1 − a L ) (435) = − y ( 1 − a L ) + ( 1 − y ) a L (436) = a L − y

此时的梯度表达式已经没有 σ σ ′ 了,也就是说没有sigmoid函数的导数了,所以可以避免那个问题。但是sigmoid激活函数在网络变深之后依然存在梯度弥散现象,在现在普遍用Relu激活函数取代sigmoid激活函数,Relu在网络很深的情况可以一定程度的避免梯度弥散。

3.对数似然损失函数

J(W,b,aL,y)=kyklnaLk J ( W , b , a L , y ) = − ∑ k y k l n a k L 其中 aLk a k L 表示网络的输出值, yk y k 表示真值,取0或1.
对数似然损失一般用于多分类问题,在输出层加softmax激活,然后求对数似然损失。其本质就是,一组参数在一堆数据下的似然值,等于每一条数据在这组参数下的条件概率之积,而损失函数一般是每条数据的损失之和,为了把积变为和,就取了对数,再加个负号是为了让最大似然值和最小损失对应起来。
如果某一训练样本的输出为第i类。则 yi=1 y i = 1 ,其余的 ji j ≠ i 都有 yj=0 y j = 0 。由于每个样本只属于一个类别,所以这个对数似然函数可以简化为: J(W,b,aL,y)=lnaLi J ( W , b , a L , y ) = − l n a i L
可见损失函数只和真实类别对应的输出有关,这样假设真实类别是第i类,则其他不属于第i类序号对应的神经元的梯度导数直接为0。对于真实类别第i类,它的 WLi W i L 对应的梯度计算为:

J(W,b,aL,y)WLi=J(W,b,aL,y)aLiaLizLizLiwLi=1aLi(ezLi)j=1nLezLjezLiezLi(j=1nLezLj)2aL1i=1aLi(ezLij=1nLezLjezLij=1nLezLjezLij=1nLezLj)aL1i=1aLiaLi(1aLi)aL1i=(aLi1)aL1i(537)(538)(539)(540)(541) (537) ∂ J ( W , b , a L , y ) ∂ W i L = ∂ J ( W , b , a L , y ) ∂ a i L ∂ a i L ∂ z i L ∂ z i L ∂ w i L (538) = − 1 a i L ( e z i L ) ∑ j = 1 n L e z j L − e z i L e z i L ( ∑ j = 1 n L e z j L ) 2 a i L − 1 (539) = − 1 a i L ( e z i L ∑ j = 1 n L e z j L − e z i L ∑ j = 1 n L e z j L e z i L ∑ j = 1 n L e z j L ) a i L − 1 (540) = − 1 a i L a i L ( 1 − a i L ) a i L − 1 (541) = ( a i L − 1 ) a i L − 1

同样的可以得到 bLi b i L 的梯度表达式为:
J(W,b,aL,y)bLi=aLi1 ∂ J ( W , b , a L , y ) ∂ b i L = a i L − 1

可见,梯度计算也很简洁,也没有第一节说的训练速度慢的问题。举个例子,假如我们对于第2类的训练样本,通过前向算法计算的未激活输出为(1,5,3),则我们得到softmax激活后的概率输出为:(0.015,0.866,0.117)。由于我们的类别是第二类,则反向传播的梯度应该为:(0.015,0.866-1,0.117)。

参考

http://www.cnblogs.com/pinard/p/6437495.html
https://www.zhihu.com/question/27126057

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值