摘要:
在之前的两篇文章中RNN训练与BP算法,BP算法心得体会都是在具体在讲bp算法在神经网络里面的推导。两篇文章都没有讲过和softmax相关的东西。而softmax作为分类任务里面重要的一层,所以打算本篇文章介绍一下softmax层。另外,一致沿用的损失函数都是均方误差,所以借这个机会也讲解下当损失函数是交叉熵时候的推导情况。
引言:
本文打算在RNN训练与BP算法文章的基础,将最后一层输出层改成softmax层,推导整个公式。
下面是前向传播的公式(来源于上面的文章,新来的读者建议新看下这篇文章)
vim 是输入层第 m 个输入与隐藏层中第
uin 是隐层自循环的权重(具体表现为上面结构图中那些紫色、绿色的线)
wkm 是隐藏层中第m个神经元与输出层第k个神经元连接的权重。
网络中共有 N(i)个输入单元 , N(h)个隐藏层 , N(o)个输出单元
netthi 表示隐藏层第 i 个神经元在
具体为: netthi=∑N(i)m=1(vimxtm)+∑N(h)s=1(uisht−1s)
经过激活后的输出为: hti=f(netthi)
nettyk 表示输出层第 k 个神经元在
具体为: nettyk=∑N(h)m=1(wkmhtm)
经过激活后的输出为: otk=g(nettyk)
这里,由于我们输出层是softmax所以只需要把输出层的激活函数 g(x) 设计成: g(xi)=exi∑allk=1exk 。这样我们就能够实现输出层进行softmax的操作。
具体来说: otk=enettyk∑N(o)k′=1enettyk′
(大家可能发现了。希望网络输出softmax的结果只需要改输出层激活函数。那么推导公式中可能变化的也只有涉及到输出层激活函数部分的偏导数)
最后定义我们的损失函数——交叉熵:
Et=−∑N(o)k=1ztk∗ln(otk)
E=∑