引言
在多分类问题中,一般会把输出结果传入到softmax函数中,得到最终结果。并且用交叉熵作为损失函数。本来就来分析下以交叉熵为损失函数的情况下,softmax如何求导。
对softmax求导
softmax函数为:
yi=∑k=1Kezkezi
这里
K是类别的总数,接下来求
yi对某个输出
zj的导数,
∂zj∂yi=∂zj∂∑k=1Kezkezi
这里要分两种情况,分别是
i=j与
i=j。当
i=j时,
ezi对
zj的导数为
ezi,否则当
i=j时,导数为
0。
当
i=j,
∂zj∂yi=(∑k=1mezk)2ezi⋅∑k=1Kezk−ezi⋅ezj=∑k=1mezkezi−∑k=1mezkezi⋅∑k=1mezkezj=yi−yi2=yi(1−yi)
当
i=j,
∂zj∂yi=(∑k=1mezk)20⋅∑k=1Kezk−ezi⋅ezj=−∑k=1mezkezi⋅∑k=1mezkezj=−yiyj
对cross-entropy求导
损失函数
L为:
L=−k∑y^klogyk
其中
y^k是真实类别,相当于一个常数,接下来求
L对
zj的导数
∂zj∂L=zj∂−(∑ky^klogyk)=∂yk∂−(∑ky^klogyk)∂zj∂yk=−k∑y^kyk1zj∂yk=(−y^k⋅yk(1−yk)yk1)k=j−k=j∑y^kyk1(−ykyj)=−y^j(1−yj)−k=j∑y^k(−yj)=−y^j+y^jyj+k=j∑y^k(yj)=−y^j+k∑y^k(yj)=−y^j+yj=yj−y^j
这里用到了
∑ky^k=1
可以看到,求导结果非常简单,如果不推倒都不敢信。