softmax 函数
softmax(柔性最大值)函数,一般在神经网络中, softmax可以作为分类任务的输出层。
其实可以认为softmax输出的是几个类别选择的概率,比如我有一个分类任务,要分为三个类,softmax函数可以根据它们相对的大小,输出三个类别选取的概率,并且概率和为1。
即总共有k类,必有:
k=1∑Cyi=1
为了方便下面的推导,先来个图示:

----------------------------------------
softmax函数的公式是这种形式:
ai=∑kezkezi
其中:
wij:第i个神经元的第j个权重,
b:偏移值。
zi:该网络的第i个输出。
在zi后面施加softmax函数,得到ai
损失函数使用Cross_Entropy
----------------------------------------
J=−i∑yiln ai
其中:
ai:模型预测值
yi:预期数值
当二分类时,有
N1n=1∑N[pnlogqn+(1−pn)log(1−qn)]
其中:
N:数据集的总数
pn:真实分布
qn:预测分布
----------------------------------------------
这篇博客中,我们的目标函数是:
∂zi∂J
=j∑(∂aj∂Jj∂zi∂aj)
其中:
∂aj∂Jj
=−∂aj−yj⋅lnaj
=−yjaj1
∂zi∂aj
=∂zi∂[∑kezkezj]
下面分情况,这里之所以要分情况是求导的规律来决定的:
∂zi∂[∑kezkezj](1)
为了处理式(1),根据:
f(x)=h(x)g(x)
f′(x)=∣h(x)∣2g′(x)h(x)−g(x)h′(x)
所以这里:
g(x)=ezj
h(x)=∑kezk
①i=j时,g′(x)=ezj,h′(x)=ezj
②i≠j时,g′(x)=0,h′(x)=ezj
由此处理式(1)得到:
①i=j时
∂zi∂aj=[∑kezk]2ezi∑kezk−(ezi)2=ai−ai2
①i≠j时
∂zi∂aj=[∑kezk]2−(ezj)(ezi)=−aj⋅ai
总结下:
∂zi∂J
=j∑(∂aj∂Jj∂zi∂aj)
=i=j∑[(aj−yj)(ai−ai2)]+i̸=j∑[(aj−yj)(−ajai)]
=−yi(1−ai)+i̸=j∑[yjai]
=−yi+aij∑yj
∵j∑yj=1(因为所有情况的概率和为1)
∴原式=−yi+ai
参考链接:
https://blog.****.net/Charel_CHEN/article/details/81266838
https://blog.****.net/qian99/article/details/78046329
https://zhuanlan.zhihu.com/p/27223959
http://shuokay.com/2016/07/20/softmax-loss/