模型函数
softmax为输出层函数的交叉熵损失函数
交叉熵损失函数
交叉熵损失函数求导
首先根据链式求导,我们可以写成这样:
我们先求
我们再求$\frac{\partial a_i}{\partial z_i}$,其中这个式子我们需要分解为两种情况。
问题: 这里需要分成$i=j$,和$i\neq j$的情况,为什么?
假设一个输出层分别是z1,z2,z3,那么softmax输出层的情况如下:
$a_1=\frac{e^{z_1}}{e^{z_1}+e^{z_2}+e^{z_3}}$,$a_2=\frac{e^{z_2}}{e^{z_1}+e^{z_2}+e^{z_3}}$,$a_3=\frac{e^{z_3}}{e^{z_1}+e^{z_2}+e^{z_3}}$
当我们进行反向求导的时候,想求损失函数对$z_1$的导数,肯定要求$\frac{\partial J}{\partial z_1}$
按照链式求导我们很熟悉了,$\frac{\partial J}{\partial z_1}=\frac{\partial J}{\partial a_1}\frac{\partial a_1}{\partial z_1}$,但是这样真的对吗?你看看$a_2$的分母上也有$z_1$啊,所以这里要考虑$i=j$和$i \neq j$的情况。换而言之,$\frac{\partial J}{\partial a_1}\frac{\partial a_1}{\partial z_1}$就是$i=j$,其余的时$i \neq j$
当$i=j$时:
当$i\neq j$时
所以整体的式子就是:
由于$\sum y_j$在分类问题中一般只有一个类,其余都是0,比如在0-9的mnist手写数字分类中,如果y=4的话,实际向量是(0,0,0,0,1,0,0,0,0,0),所以$\sum y_j=1$,所以有:
sigmoid为输出层函数的交叉熵损失函数
交叉熵损失函数
二分类问题我们没必要写成sum符号的形式,直接写出来即可:
交叉熵损失函数求导
首先根据链式求导,我们可以写成这样:
我们先求
同样的,我们也是求$\frac{\partial a_i}{\partial z_i}$,sigmoid没有那么复杂,直接求解即可:
我们将两者乘到一起,可以得到: