当前位置:   article > 正文

RNN训练与BP算法_bpnr

bpnr

摘要:


本文主要讲述的RNN(循环神经网络)在训练过程中BP算法的推导。
在阅读本文之前希望读者看过我的另一篇文章BP算法心得体会。因为大部分的思路沿用的就是这篇文章的思路。
参考文章:
数学推导-1
数学推导-2

更新-2018-01-23:
之前写完这篇文章之后,回头看了一遍文章,发现在整个推导的过程都无视了时间维度的存在,所以后来查阅了相关的资料,发现目前网上有一部分RNN的推导过程和本文是一样的,比如上面给到的2篇参考文章,思路和本文是一致的。但是也存在另外一些版本的推导,其过程和本文的截然不同。
所以后来在参考了大神的代码后,重新思考了rnn的训练算法,因此重新写一个篇rnn和bptt供大家参考。

正文


RNN的一般原理介绍这里就不再重复了,本文关注的是RNN是如何利用BP算法来进行训练的。

推导


在推导BP算法之前,我们先做一些变量上的规定,这一步非常关键。
本文使用的RNN是只含一个隐藏层(多个隐藏层其实也是一样的道理)。其结构如下图所示:
这里写图片描述
(大家看到这个网络结构可能有些困惑,比如说,RNN是由多个网络组成的吗?这里值得注意的是,RNN就只由一个网络组成,图上有多个网络是在不同时刻的输入下的网络情况)
现在,作如下的一些规定:
vim是输入层第m个输入与隐藏层中第i个神经元所连接的权重。
uin是隐层自循环的权重(具体表现为上面结构图中那些紫色、绿色的线)
wkm是隐藏层中第m个神经元与输出层第k个神经元连接的权重。
网络中共有N(i)N(h)N(o)

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

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


这里同样地,为了方便推导,假设损失函数Et=0.5k=1N(o)(okttkt)2(本文也会说明使用其他损失函数的情况)
E=t=1stepEt
首先我们需要解决的问题就是求出:
EuinEwkmEvim

1.先来求最简单的Ewkm
和之前讲解BP的文章套路一样,我们可以对Ewkm使用链式法则,具体如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/116436
推荐阅读
相关标签
  

闽ICP备14008679号