RNN:循环神经网络
RNN 循环神经网络简介
RNN,即循环神经网络(Recurrent Neural Network),是一种适合于序列数据的深度学习模型。RNN的核心特点是它能够处理序列中的前后依赖关系,即当前的输出会作为下一个时间步的输入。这种特性使得RNN在处理时间序列数据、自然语言处理等领域有着广泛的应用。
RNN的基本结构包括输入层、隐藏层和输出层。隐藏层的神经元会将前一时间步的输出作为当前时间步的输入,形成一种循环结构。RNN有几种变体,例如长短期记忆网络(LSTM)和门控循环单元(GRU),它们都是为了解决RNN在训练过程中可能出现的梯度消失或梯度爆炸问题。
网络结构的不同之处
- 简单的神经网络如下图所示:
通常情况下,深度神经网络都是水平方向延伸的,隐层数量很多,但是没有考虑单个隐层在时间上(时序上)的变化; * 而RNN则不同,它关注隐藏每个神经元在时间维度上的不断成长与进步,示意图如下图所示
假如我们使用\(W_s\)来表示层级间的权重矩阵,RNN会假定不同层之间的权重矩阵共享同一个\(W_s\),可以有效减小训练轮数
对于输出\(S\)则有:
神经元隐藏层输出矩阵形式:\(S = f(W_{in}X + b)\)
RNN输出矩阵形式:\(S_t = f(W_{in}X + W_sS_{t-1} + b)\)
RNN使得前后输出具有时序关系,即获得了记忆
论文中的抽象结构是如何来的
抽象结构 1
在看资料时,我们能看到RNN的一种抽象结构(如下图右边所示),下面我们来看一下抽象结构如何生成的:
上左图中红色输入代表上有图中的
X
,蓝色圈隐层代表上右图的S
,绿色圈输出层代表上右图的o
,把不同时间层级间对权重矩阵的更新化成一个大圈表示,就得到右边的简易示意图。
抽象结构 2
在大量论文、博客中还能观察到另一种RNN结构,如下图所示:
下面我们来看一下这种抽象结构如何生成的:
RNN 的不足之处
RNN自身的特性使得它天生就是一个记账小能手,它和传统的神经网络一样,也使用误差反向传播加梯度下降来更新权重,只不过在计算隐藏输出时,要引入之前不同时刻的数据,而缺陷在于记忆不够“久远”,通常超过十步就记不住了,而为了解决这个问题,人们提出了长短期记忆网络(LSTM
)
不同输入输出格式的 RNN
由于时序上的层级结构,使得RNN在输入输出关系上有不同的类型,解决不同的问题。见下图:
one to many: 输入可以是一幅图片,但输出可以是一段话或
music
,看图说话many to one: 输入可以是一段话或
music
,但输出可以是一幅图片n to n: 输入一段话,生成一段代码
n to m: