RNN循环神经网络

理解本文需要读者有BPNN基础,关于BPNN可参考《BP神经网络原理》

1 概述

RNN(Recurrent Neural Network),即循环神经网络,是用于解决序列数据的神经网络。回顾一下最基础的BPNN以及专用于图像识别的CNN,他们的输入与时间先后无关,但是有时输入的数据是序列数据,需要考虑序列中前后顺序关系的影响,此时RNN就派上用场了。

RNN是训练出固定的一套参数,接收序列当前时刻的输入以及上一时刻的输出,形成这一时刻的输出。比如用RNN做翻译,训练好模型后,给定一句话,先输入第一个词,根据模型中的权重计算出当前时刻的输出,将此输出与第二个词再次输入,得到下一时刻的输出,将此输出与第三个词输入,得到下一时刻的输出,直到整句话全部词输入完毕。

RNN相当于把序列的每次输入都展开当做隐含层,只是这些隐含层的参数是固定的。可以类比“捏陶瓷”,正常制作方法是将陶泥放在转盘上,双手在陶泥上摆出某个姿势不动,随着转盘不断旋转,陶泥360度每一个角度都变换成了理想的形状。RNN就类似于用转盘捏陶瓷,双手在陶泥上摆出固定的姿势相当于RNN中固定的参数,而使用BPNN则相当于转盘不动,双手在每一角度都捏出想要的形状,十分费时费力。

2 结构

左图是RNN未展开的形式,x是输入,W是输入层到隐含层的权重,U是隐含层上一时刻到当前时刻的权重,V是隐含层到输出层的权重,y是输出。

右图是RNN展开后的形式,将隐含层循环的过程平铺展开成多个隐含层,每个隐含层的W、U、V都一致,表示每一步都在做相同的事情。

由于每一时刻隐含层会接收上一时刻的输出,因此模型产生了“记忆”,之前时刻输入的信息也会对之后时刻产生影响。

3 计算过程

3.1 输入层到隐含层

隐含层是由输入与上一层隐含层各自乘线性变换权重相加得到。s_t=Wx_t+Uh_{t-1},第一时刻没有上一时刻的隐含层,则此处上一时刻的h为零向量。

隐含层经过激活函数得到隐含层的输出。h_t=activation(z_t)

3.2 隐含层到输出层

输出是由隐含层输出经过V线性变换,再做softmax(如果是求概率问题,比如翻译的输出是各个词的概率),\hat y_t=softmax(Vh_t)

4 梯度消失与梯度爆炸

RNN的误差反向传播算法有专有名词BPTT(Backpropagation Through Time),但道理和BPNN是一样的。

与BPNN类似,RNN也有梯度消失与梯度爆炸的问题。当RNN循环次数过多时(相当于BPNN中隐含层过多),由于算梯度时采用链式求导法则,需要各隐含层梯度相乘,会发生梯度消失或梯度爆炸现象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值