原本以为softmax函数求导没啥难度的,结果自己写CNN的时候,梯度算的一直不对,查了半天才发现是因为softmax求导没求对。索性就开一篇Blog把softmax相关的都给记录一下。
softmax的定义
softmax函数如下:
aLj=ezLj∑kezLk
其可以看成sigmoid函数在多元分布中的一个推广
至于softmax这个公式具体是怎么来的呢?
可以参照广义线性模型(GLM)里,通过多项分布化成为指数分布簇的形式,就得到了softmax
相当于softmax是对于多项分布的一个刻画。
所以softmax函数所表示的可以看成为对分类结果的概率分布。
softmax和cross-entropy损失函数
正如上面所说,softmax可以看成对概率分布的一个刻画,所以既然有概率分布,就可以用cross-entropy来定义损失函数
之前的一篇Blog里讲过cross-entropy,从两个角度来考虑,一个是相当于用预测结果的分布区编码正确的结果分布,得到的编码长度,另一个角度可以看成,度量两个分布的KL距离,将其展开去掉常数项,也能得到cross-entropy
所以损失函数可以度量成:
L=−∑jyjlnaLj
softmax的求导
softmax本身的求导如下:
当 j≠i 时,我们只用对分母求偏导就好
∂aLj∂zLi=−e