引言
在多分类问题中,一般会把输出结果传入到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
可以看到,求导结果非常简单,如果不推倒都不敢信。