使用Softmax /交叉熵进行反向传播
我试图了解反向传播如何用于softmax /交叉熵输出层。 交叉熵误差函数为 E(t,o)=−∑jtjlogojE(t,o)=−∑jtjlogojE(t,o)=-\sum_j t_j \log o_j 分别以和为目标,并在神经元处输出。总和在输出层的每个神经元上。本身是softmax函数的结果:tttooojjjojojo_j oj=softmax(zj)=ezj∑jezjoj=softmax(zj)=ezj∑jezjo_j=softmax(z_j)=\frac{e^{z_j}}{\sum_j e^{z_j}} 同样,总和在输出层的每个神经元上,是神经元的输入:zjzjz_jjjj zj=∑iwijoi+bzj=∑iwijoi+bz_j=\sum_i w_{ij}o_i+b 那是前一层中所有神经元的总和,其对应的输出为,权重朝向神经元加上偏差。oioio_iwijwijw_{ij}jjjbbb 现在,要更新连接输出层中的神经元和上一层中的神经元的权重,我需要使用链式规则来计算误差函数的偏导数:wijwijw_{ij}jjjiii ∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij\frac{\partial E} {\partial w_{ij}}=\frac{\partial E} {\partial o_j} \frac{\partial o_j} {\partial z_{j}} \frac{\partial z_j} {\partial w_{ij}} 用作为神经元的输入。zjzjz_jjjj 最后一个词很简单。由于和之间只有一个权重,因此导数为:iiijjj ∂zj∂wij=oi∂zj∂wij=oi\frac{\partial z_j} {\partial w_{ij}}=o_i 第一项是关于输出的误差函数的:ojojo_j ∂E∂oj=−tjoj∂E∂oj=−tjoj\frac{\partial E} {\partial o_j} = \frac{-t_j}{o_j} 中间项是softmax函数相对于其输入更难:zjzjz_j ∂oj∂zj=∂∂zjezj∑jezj∂oj∂zj=∂∂zjezj∑jezj\frac{\partial o_j} {\partial z_{j}}=\frac{\partial} {\partial z_{j}} …