RNN训练与BP算法

本文详细介绍了RNN在训练过程中BP算法的推导,强调了RNN的时序性对隐藏层误差信号处理的影响。通过数学推导得出隐藏层和输出层的误差信号,揭示了RNN如何积累和传递误差,从而体现出其记忆能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:


本文主要讲述的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)

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=f(nettyk)


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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值