循环神经网络(Recurrent Neural Network,简称RNN)是一种处理序列数据的神经网络结构,它具有记忆能力,能够捕捉序列中的时序信息。RNN在自然语言处理、时间序列预测等方面有着很多的应用。
一、RNN 的基本结构
RNN的包括输入层、隐藏层和输出层。其中,隐藏层的状态会随时间步更新,并作为下一时间步的输入之一。这种循环连接使得RNN具有记忆能力,能够捕捉序列中的长距离依赖关系。
1、单层网络结构
在进一步了解RNN之前,先给出最基本的单层网络结构,输入是x,经过变换为W x + b,激活函数为f,输出y可以表示为y=f(W x + b),是一个无隐藏的单层感知器。
2、加入隐藏层
在单层网络结构的基础上引入了隐藏层h ,h 可对序列数据提取特征,接着再转换为输出。
RNN中,每个步骤权值共享,使用的参数U,W,b相同(所有隐藏层都同一个U,W,b进行更新),h2的计算方式和h1类似,其计算结果如下:
接下来,计算RNN的输出y1,使用Softmax激活函数:
使用和y1相同的参数V和c,得到y2,y3,y4,得到如下结构图:
如果上面的图不够明显,可以看看下面这张图,会更清晰一些:
二、RNN常见的问题及解决办法
1、梯度消失
梯度消失问题是指 RNN 中的梯度在向后传播时减小或消失的问题。这是由于反向传播过程中梯度的重复乘法,这可能导致梯度呈指数下降。所以在激活函数输出时,可以将sigmoid换成RELU等其他激活函数,使得输出不要太过小。当然也不能都是1,否则会引起梯度爆炸。
2、RNN和MLP有什么区别
(1)RNNs引入了定向循环,能够处理输入之间前后关联问题,使其能够记住一定序列范围内的信息。
(2)RNNs网络参数W,U,V是共享的,而MLP各层参数间没有直接联系。
3、其他有遇到的问题再补充。。。