参考:https://blog.csdn.net/weixin_43217928/article/details/104772424
softmax的反向传播梯度计算推导
对于深度学习多分类问题,神经网络最后一层常用softmax处理多项分布(multinomial distribution)。
假设最后一层有n个神经元,就是n个类别:
输入 输出层神经元:$Z=\left[z{1}, z{2}, \ldots, z{n}\right]$
分类标签:$Y=\left[y{1}, y{2}, \ldots, y{n}\right]$ (Y是one-hot标签,只有一个$y{i}$值为1,其他为0)
输出:$\mathrm{A}=\operatorname{softmax}(\mathrm{Z})=\left[\hat{y}{1}, \hat{y}{2}, \ldots, \hat{y}{n}\right]$,$\hat{y}_{i}$为预测的每个类别的概率。
对于n分类问题,softmax的式子为:
损失函数采用交叉熵,交叉熵损失函数式子为:
交叉熵:用来衡量在给定真实分布下,使用非真实分布所指定的策略消除系统不确定性所需付出努力的大小。交叉熵越低,预测的分布就与真实分布越接近,最低的交叉熵就是使用了真实分布所计算出来的信息熵,此时$y{i} = \hat{y}{i}$。此时交叉熵等于信息熵,这就是为什么在机器学习分类算法中,总是最小化交叉熵,因为交叉熵越低,算法策略越接近最优策略,算法的非真实分布越接近真实分布。
反向传播梯度计算推导过程
结论:向量形式为$\frac{\partial L}{\partial Z}=\hat Y-Y$
证明:
在这里我们假设,第k个神经元为正确标签,即$Y=\left[y{1}, y{2}, \ldots, y{n}\right]$中$y{k}=1$,其他$y_{i}$都是0。
首先求L对A的导数
再求L对Z的导数:
因为$y{k}=1$, 其他 $y{i}$ 都为0,因此只有$\frac{\partial L}{\partial a_{k}}$不为0,其他都为0。进一步化简:
由此可见,接下来我们重点就是求$\frac{\partial \hat{y}{k}}{\partial z{i}}$了。对于$\frac{\partial \hat{y}{k}}{\partial z{i}}$的求解,要分两种情况:
若$i=k$
若$i \neq k$
结合我们求出的$\frac{\partial L}{\partial \hat{y}{i}}$和$\frac{\partial \hat{y}{i}}{\partial z_{j}}$,写出L对整个Z的导数,我们可以得到
我们知道$y{k}=1$, 除了 $y{k}$ 其他 $y_{i}$ 都等于0,因此上式可以进一步写为:
证毕~