我试图了解反向传播如何用于softmax /交叉熵输出层。
交叉熵误差函数为
E(t,o)=−∑jtjlogoj
分别以和为目标,并在神经元处输出。总和在输出层的每个神经元上。本身是softmax函数的结果:tojoj
oj=softmax(zj)=ezj∑jezj
同样,总和在输出层的每个神经元上,是神经元的输入:zjj
zj=∑iwijoi+b
那是前一层中所有神经元的总和,其对应的输出为,权重朝向神经元加上偏差。oiwijjb
现在,要更新连接输出层中的神经元和上一层中的神经元的权重,我需要使用链式规则来计算误差函数的偏导数:wijji
∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij
用作为神经元的输入。zjj
最后一个词很简单。由于和之间只有一个权重,因此导数为:ij
∂zj∂wij=oi
第一项是关于输出的误差函数的:oj
∂E∂oj=−tjoj
中间项是softmax函数相对于其输入更难:zj
∂oj∂zj=∂∂zjezj∑jezj
假设我们有三个对应于类输出神经元则为:o b = s o f t m a x (b )a,b,cob=softmax(b)
ob=ezb∑ez=ezbeza+ezb+ezc
及其使用商法则的推导:
=小号ö˚F吨米一个X(b)-小号ö˚F吨米一个X2(b)=Öb-ø 2 b =Öb(1-Òb)∂ÔĴ
∂ob∂zb=ezb∗∑ez−(ezb)2(∑jez)2=ezb∑ez−(ezb)2(∑ez)2
=softmax(b)−softmax2(b)=ob−o2b=ob(1−ob)
返回用于反向传播的中间术语,这意味着:
∂oj∂zj=oj(1−oj)
放在一起我得到
∂E∂wij=−tjoj∗oj(1−oj)∗oi=−tj(1−oj)∗oi
这意味着,如果此类的目标是,那么我将不更新其权重。听起来不对。tj=0
通过对此进行调查,我发现人们对于softmax推导有两个变体,一个在其中,另一个在,就像这里或这里。我≠ ji=ji≠j
但是我对此毫无意义。另外,我什至不确定这是否是导致我出错的原因,这就是为什么我发布所有计算结果的原因。我希望有人可以向我澄清我缺少什么或出错了。