机器学习4. 交叉熵损失函数与softmax回归的反向传播推导

在多分类问题中,一般选取softmax作为分类器,交叉熵作为损失函数。他们的形式都很简单,但是在BP的时候还是有些复杂,现在总结如下:

交叉熵损失函数

(1) C ( a , y ) = − ∑ i y i l n a i C(a,y)=-\sum_i{y_i ln a_i} \tag{1} C(a,y)=iyilnai(1)

softmax逻辑回归

i i i个输出值 a i a_i ai为:
(2) a i = e z i ∑ k e z k a_i=\frac{e^{z_i}}{\sum_ke^{z_k}} \tag{2} ai=kezkezi(2)

结论

(3) ∂ C ∂ z i = a i − y i \frac{∂C}{∂z_i} = a_i−y_i \tag{3} ziC=aiyi(3) 【预测值减真实值】

推导过程

(4) ∂ C ∂ z i = ∑ j ( ∂ C j ∂ a j ∂ a j ∂ z i ) \frac{∂C}{∂z_i} =\sum_j(\frac{∂C_j}{∂a_j} \frac{∂a_j}{∂z_i} ) \tag{4} ziC=j(ajCjziaj)(4)
【因为 z i z_i zi总会出现在分母中,所以会对所有的 a j a_j aj产生影响,每个 a j a_j aj都会有一个损失值 C j C_j Cj(1式)】

  • 先看第一项,由(1)式

    • (5) ∂ C j ∂ a j = − y j a j \frac{∂C_j}{∂a_j}=-\frac{y_j}{a_j} \tag{5} ajCj=ajyj(5)
  • 对于第二项,我们对 i = j i=j i=j i ≠ j i \neq j i̸=j分开讨论:

    • i = j i=j i=j,分子分母总都有 e z i e^{z_i} ezi项,结果为:
      (6.1) ∂ a i ∂ z i = e z i ∗ ∑ k e z k − e z i e z i ( ∑ k e z k ) 2 \frac{∂a_i}{∂z_i} = \frac{e^{z_i}*\sum_ke^{z_k}-e^{z_i}e^{z_i}} {(\sum_ke^{z_k})^2} \tag{6.1} ziai=(kezk)2ezikezkeziezi(6.1)
      (6.2) = e z i ( ∑ k e z k − e z i ) ( ∑ k e z k ) 2 =e^{z_i}\frac {(\sum_ke^{z_k}-e^{z_i})} {(\sum_ke^{z_k})^2} \tag{6.2} =ezi(kezk)2(kezkezi)(6.2)
      (6.3) = e z i ∑ k e z k ( ∑ k e z k − e z i ) ∑ k e z k = e z i ∑ k e z k ( 1 − e z i ∑ k e z k ) = a i ( 1 − a i ) =\frac{e^{z_i}}{\sum_ke^{z_k}} \frac{(\sum_ke^{z_k}-e^{z_i})}{\sum_ke^{z_k}} = \frac{e^{z_i}}{\sum_ke^{z_k}} (1-\frac{e^{z_i}}{\sum_ke^{z_k}} ) \tag{6.3} =a_i(1-a_i) =kezkezikezk(kezkezi)=kezkezi(1kezkezi)=ai(1ai)(6.3)

    • i ≠ j i \neq j i̸=j, 只有分母有 e z i e^{z_i} ezi项,结果为:
      (7) ∂ a j ∂ z i = − e z j ( 1 ∑ k e z k ) 2 e i z = − a i a j \frac{∂a_j}{∂z_i} = -e^{z_j} (\frac{1}{\sum_ke^{z_k}})^2 e^z_i=-a_ia_j \tag{7} ziaj=ezj(kezk1)2eiz=aiaj(7)
      【第一个等号是复合函数求导公式,第二个等号是把左右两个指数项放到中间的分子上,化简既得】

根据(4,5,6.3,7)式可得最终结果:
∂ C ∂ z i = ∑ j ( ∂ C j ∂ a j ∂ a j ∂ z i ) \frac{∂C}{∂z_i} =\sum_j(\frac{∂C_j}{∂a_j} \frac{∂a_j}{∂z_i} ) ziC=j(ajCjziaj)
= − [ y i a i a i ( 1 − a i ) + ( ∑ j ≠ i y j a j − a i a j ) ] =-[\frac{y_i}{a_i}a_i(1-a_i)+(\sum_{j \neq i}\frac{y_j}{a_j}-a_ia_j)] =[aiyiai(1ai)+(j̸=iajyjaiaj)]

= ∑ j ≠ i a i y j − y i ( 1 − a i ) =\sum_{j \neq i}a_iy_j-y_i(1-a_i) =j̸=iaiyjyi(1ai)
= ∑ j ≠ i a i y j + a i y i − y i =\sum_{j \neq i}a_iy_j + a_iy_i-y_i =j̸=iaiyj+aiyiyi
= a i ∑ j y j − y i =a_i\sum_j y_j -y_i =aijyjyi
对于分类问题,我们的 y y y只有某一维是1,其他都是0。因此求和后还是1,乘以系数 a i a_i ai再减去后边那项就是结果
(5) ∂ C ∂ z i = a i − y i \frac{∂C}{∂z_i} =a_i -y_i \tag{5} ziC=aiyi(5)

这个推导还是有点麻烦的,主要就是分两部分 i = j i=j i=j i ≠ j i \neq j i̸=j分别讨论,再结合一些小技巧(如最后一步ont-hot化简等…)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值