我是靠谱客的博主 殷勤书包,这篇文章主要介绍为什么使用 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​=∑eok​eoi​​=eo0​+eo1​+eo2​eoi​​

导数的除法规则

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

求导

使用链式法则反向传播误差,例如
∂ 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​=∂S∂L​∂o∂S​∂ω∂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} ∂oj​∂Si​​

这里分两种情况,当 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} ∂oi​∂Si​​​=∂oj​∂​(∑eok​eoi​​)=(∑eok​)2eoi​∑eok​−eoi​eoi​​=Si​−Si2​=Si​(1−Si​)​

当 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} ∂oj​∂Si​​​=∂oj​∂​(∑eok​eoi​​)=(∑eok​)20−eoi​eoj​​=−Si​Sj​​

CE + Softmax

CE 公式:
L = − ∑ y i log ⁡ S i L = -sum{y_i log{S_i}} L=−∑yi​logSi​

所以
∂ L ∂ S i = − ∑ y i 1 S i frac{partial L}{partial S_i} = -sum y_i frac{1}{S_i} ∂Si​∂L​=−∑yi​Si​1​

所以
∂ 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_{ineq j}y_iS_j \ &=-y_j+S_j sum y_i end{aligned} ∂oj​∂L​=∂Si​∂L​∂oj​∂Si​​​=−i=j∑​yi​Si​1​(Si​(1−Si​))+i​=j∑​yi​Si​1​(Si​Sj​)=−i=j∑​yi​(1−Si​)+i​=j∑​yi​Sj​=−yj​+yj​Sj​+i​=j∑​yi​Sj​=−yj​+Sj​∑yi​​

因为 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 ∂oj​∂L​=Sj​−yj​

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

总结

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

最后

以上就是殷勤书包最近收集整理的关于为什么使用 CE + Softmax 作为损失函数的全部内容,更多相关为什么使用内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(231)

评论列表共有 0 条评论

立即
投稿
返回
顶部