为什么使用 CE + Softmax 作为损失函数

假设

假设有三个分类,模型输出值为 output = model(input),得到如下输出向量
[ o 1 , o 2 , o 3 ] [o_1,o_2,o_3] [o1,o2,o3]
表示每个类别的概率值,然后将该向量进行 softmax 操作,得到 [ S 1 , S 2 , S 3 ] [S_1,S_2,S_3] [S1,S2,S3] S i S_i Si 的计算公式为:
S i = e o i ∑ e o k = e o i e o 0 + e o 1 + e o 2 S_i = \frac{e^{o_i}}{\sum e^{o_k}} = \frac{e^{o_i}}{e^{o_0}+e^{o_1}+e^{o_2}} Si=eokeoi=eo0+eo1+eo2eoi

导数的除法规则

( u v ) ′ = u ′ v − u v ′ v 2 \left(\frac{u}{v}\right)'=\frac{u'v-uv'}{v^2} (vu)=v2uvuv

求导

使用链式法则反向传播误差,例如
∂ L ∂ ω = ∂ L ∂ S ∂ S ∂ o ∂ o ∂ ω \frac{\partial L}{\partial \omega} = \frac{\partial L}{\partial S} \frac{\partial S}{\partial o} \frac{\partial o}{\partial \omega} ωL=SLoSωo

需要求得 S i S_i Si S i S_i Si 是经过 argmax 或者其他方式选出来的 [ S 1 , S 2 , S 3 ] [S_1,S_2,S_3] [S1,S2,S3] 中的某个值)与每个输出值 o i o_i oi 的偏微分,即
∂ S i ∂ o j \frac{\partial S_i}{\partial o_j} ojSi

这里分两种情况,当 i = j i = j i=j 时 ,根据导数的除法规则
∂ S i ∂ o i = ∂ ∂ o j ( e o i ∑ e o k ) = e o i ∑ e o k − e o i e o i ( ∑ e o k ) 2 = S i − S i 2 = S i ( 1 − S i ) \begin{aligned} \frac{\partial S_i}{\partial o_i}&=\frac{\partial}{\partial o_j}\left( \frac{e^{o_i}}{\sum e^{o_k}}\right)\\&=\frac{e^{o_i}\sum e^{o_k} - e^{o_i}e^{o_i}}{(\sum e^{o_k})^2} \\ &=S_i-S_i^2 \\&=S_i(1-S_i) \end{aligned} oiSi=oj(eokeoi)=(eok)2eoieokeoieoi=SiSi2=Si(1Si)

i ≠ j i \neq j i=j 时,
∂ S i ∂ o j = ∂ ∂ o j ( e o i ∑ e o k ) = 0 − e o i e o j ( ∑ e o k ) 2 = − S i S j \begin{aligned} \frac{\partial S_i}{\partial o_j}&=\frac{\partial}{\partial o_j}\left( \frac{e^{o_i}}{\sum e^{o_k}}\right)\\&=\frac{0- e^{o_i}e^{o_j}}{(\sum e^{o_k})^2} \\ &=-S_iS_j \end{aligned} ojSi=oj(eokeoi)=(eok)20eoieoj=SiSj

CE + Softmax

CE 公式:
L = − ∑ y i log ⁡ S i L = -\sum{y_i \log{S_i}} L=yilogSi

所以
∂ L ∂ S i = − ∑ y i 1 S i \frac{\partial L}{\partial S_i} = -\sum y_i \frac{1}{S_i} SiL=yiSi1

所以
∂ L ∂ o j = ∂ L ∂ S i ∂ S i ∂ o j = − ∑ i = j y i 1 S i ( S i ( 1 − S i ) ) + ∑ i ≠ j y i 1 S i ( S i S j ) = − ∑ i = j y i ( 1 − S i ) + ∑ i ≠ j y i S j = − y j + y j S j + ∑ i ≠ j y i S j = − y j + S j ∑ y i \begin{aligned} \frac{\partial L}{\partial o_j} = \frac{\partial L}{\partial S_i}\frac{\partial S_i}{\partial o_j} &= -\sum_{i=j} y_i \frac{1}{S_i}(S_i(1-S_i))+\sum_{i \neq j}y_i \frac{1}{S_i}(S_iS_j) \\ &= -\sum_{i=j} y_i (1-S_i) + \sum_{i \neq j} y_iS_j \\ &=-y_j+y_jS_j + \sum_{i\neq j}y_iS_j \\ &=-y_j+S_j \sum y_i \end{aligned} ojL=SiLojSi=i=jyiSi1(Si(1Si))+i=jyiSi1(SiSj)=i=jyi(1Si)+i=jyiSj=yj+yjSj+i=jyiSj=yj+Sjyi

因为 y i y_i yi 是 one hot 编码,或者 label smooth 后的值,所以其求和 ∑ y i = 1 \sum y_i =1 yi=1

所以
∂ L ∂ o j = S j − y j \frac{\partial L}{\partial o_j} = S_j-y_j ojL=Sjyj

其中 S j S_j Sj 表示预测为第 j j j 类的概率值。

总结

使用 CE + Softmax ,在反向传播时,可以直接用 S j − y j S_j - y_j Sjyj 作为反向传播的值 进行学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值