BP算法推导-softmax层+交叉熵(logloss)

摘要:


在之前的两篇文章中RNN训练与BP算法,BP算法心得体会都是在具体在讲bp算法在神经网络里面的推导。两篇文章都没有讲过和softmax相关的东西。而softmax作为分类任务里面重要的一层,所以打算本篇文章介绍一下softmax层。另外,一致沿用的损失函数都是均方误差,所以借这个机会也讲解下当损失函数是交叉熵时候的推导情况。

引言:


本文打算在RNN训练与BP算法文章的基础,将最后一层输出层改成softmax层,推导整个公式。
下面是前向传播的公式(来源于上面的文章,新来的读者建议新看下这篇文章)

vim 是输入层第 m 个输入与隐藏层中第 i 个神经元所连接的权重。
uin 是隐层自循环的权重(具体表现为上面结构图中那些紫色、绿色的线)
wkm 是隐藏层中第m个神经元与输出层第k个神经元连接的权重。
网络中共有 N(i) N(h) N(o)

netthi 表示隐藏层第 i 个神经元在 t 时刻激活前的输入。
具体为: netthi=N(i)m=1(vimxtm)+N(h)s=1(uisht1s)
经过激活后的输出为: hti=f(netthi)

nettyk 表示输出层第 k 个神经元在 t 时刻激活前的输入。
具体为: nettyk=N(h)m=1(wkmhtm)
经过激活后的输出为: otk=g(nettyk)

这里,由于我们输出层是softmax所以只需要把输出层的激活函数 g(x) 设计成: g(xi)=exiallk=1exk 。这样我们就能够实现输出层进行softmax的操作。

具体来说: otk=enettykN(o)k=1enettyk

(大家可能发现了。希望网络输出softmax的结果只需要改输出层激活函数。那么推导公式中可能变化的也只有涉及到输出层激活函数部分的偏导数)

最后定义我们的损失函数——交叉熵:
Et=N(o)k=1ztkln(otk)
E=stept=1Et

1.求 Ewkm
和之前讲解BP的文章套路一样,我们可以对 Ewkm 使用链式法则,具体如下:
Ewkm=Enettyknettykwkm
对于等式右边第二项很好计算, nettykwkm=htm
和之前一样,我们定义等式右边第一项为误差信号 δtyk=Enettyk
然后,下面求解误差信号,通常按照我们的思路,我们会如下推导:

δtyk=Enettyk=Eotkotknettyk
但是需要注意的是!!!!这是错误的!!!!!
我们看看softmax的公式:
otk=enettykN(o)k=1enettyk ,大家需要注意的是,分母是输出层各个神经元叠加之和。也就是说和 nettyk 不仅仅影响当前的输出 otk ,还影响其余的输出 oti,i=1,2,....N(o) 。所以在这里,误差信号应该改为:

δtyk=Enettyk=N(o)k=1(Eotkotknettyk)

对于: Eotk 很好求,
具体为: Eotk=ztkotk

对于: otknettyk 比较麻烦,下面详细推导
BP算法推导-softmax层+交叉熵(logloss)_第1张图片
其中 A 为sotfmax分母,即 A=N(o)k=1enettyk
otknettyk 带入 δtyk
当然,需要在求和项中分成 k 和不为 k 两项。
δtyk=Enettyk=N(o)k=1(Eotkotknettyk)=Eotkotknettyk+kk(Eotkotknettyk)

因此对于第一项 Eotkotknettyk 有:
Eotkotknettyk=ztkotkenettyk(Aenettyk)A2=ztk(Aenettyk)A=ztk+ztkenettykA
(这里需要意识到 otk=enettykA
对于第二项: kk(Eotkotknettyk) 有:
kk(Eotkotknettyk)=kk(ztkotkenettykenettykA2)=kkztkenettykA=enettykkkztkA (注意到 enettyk 下表不再是 k 不需要参与求和)
把两项合在一起可以得到:
δtyk=ztk+ztkenettykA+enettykkkztkA=ztk+enettykAN(o)k=1ztk
值得注意的是,每一次输出中只有一个目标标签为1。故 N(o)k=1ztk=1 ,所以有:
δtyk=ztk+ztkenettykA+enettykkkztkA=ztk+enettykA=otkztk
至此,我们推导完毕,即: δtyk=otkztk

Ewkm=Enettyknettykwkm=δtykhtm=(otkztk)htm

ok,至此后面关于其他权重的推导都和之前文章的一样,所以就不再重复了。
另外,这里是一篇关于单层神经网络softmax+交叉熵的推导,其实大多数步骤都是一样的,大家可以参考一下:
参考文章

你可能感兴趣的:(机器学习理论学习,机器学习)