【模型解读】浅析RNN到LSTM

本文深入探讨了循环神经网络(RNN)和长短期记忆网络(LSTM)的原理与应用,解析了它们如何处理时序数据,以及LSTM如何解决RNN的长距离依赖问题。

卷积神经网络使用固定大小的矩阵作为输入(比如一张图片),然后输出一个固定大小的向量(比如不同分类的概率),适合于图像分类,目标检测,图像分割等。但是除了图像外,还有非常多的信息是非固定长度或者大小的,比如视频,语音,此时更加适合用来处理这些时序信号的网络就是一些时间序列模型。

常见的时间序列模型包括RNN,LSTM等,今天简单说一说。

作者 | 言有三

编辑 | 言有三

01

RNN

我们通常所说的RNN实际上有两种,一种是Recurrent Neural Networks,即循环神经网络,一种是Recursive Neural Networks,即递归神经网络


循环神经网络是首先被提出的,它是一种时间上进行线性递归的神经网络,也就是我们通常所说的RNN。


递归神经网络(recursive neural network)被视为循环神经网络(recurrent neural network)的推广,这是一种在结构上进行递归的神经网络,常用于自然语言处理中的序列学习,它的输入数据本质不一定是时序的,但结构却往往更加复杂,我们这里只说循环神经网络。


一个RNN的结构如下:

640?wx_fmt=png

左侧就是模型的基本结构,右侧就是它在时间上进行展开的示意图。xt是时刻t的输入,相应的ht,ot分别是对应时刻t的隐藏层和输出层。


上面我们可以看出,一个RNN的输入包括了两个:一个是当前时刻输入xt,用于实时更新状态,另一个是上一时刻隐藏层的状态ht-1,用于记忆状态,而不同时刻的网络共用的是同一套参数。

RNN中常用的激活函数是tanh,所以上面的式子写成公式,就是:

640?wx_fmt=png

w就是要学习的权重,用几句代码表示RNN就是。

class RNN: 

   def step(self, x): 

      self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隐藏层

      y = np.dot(self.W_hy, self.h) #得到输出

   return y

普通卷积神经网络的优化使用的是反向传播,那么RNN使用的是什么呢?最常见的还是反向传播,不过是带时序的版本,即BPFT(backpropagation through time),它与BP的原理是完全一样的,只不过计算过程与时间有关。


与普通的反向传播算法一样,它重复地使用链式法则,区别在于损失函数不仅依赖于当前时刻的输出层,也依赖于下一时刻。所以参数W在更新梯度时,必须考虑当前时刻的梯度和下一时刻的梯度,传播示意图如下;

640?wx_fmt=png

具体的公式我们就不编辑了,大家可以找书看,之所以有后续的LSTM等,就是因为RNN有大问题:因为t时刻的导数会传播到t-1,t-2,... ,1时刻,这样就有了连乘的系数。

连乘一直带来了两个问题:梯度爆炸和消失。而且,在前向过程中,开始时刻的输入对后面时刻的影响越来越小,这就是长距离依赖问题。这样一来,就失去了“记忆”的能力,要知道生物的神经元拥有对过去时序状态很强的记忆能力。

02

LSTM

前面说的RNN有两个问题,长短期记忆(Long short-term memory, LSTM)就是要解决这两个问题,通过引入若干门来解决,相比RNN多了一个状态cell state

这个cell state承载着之前所有状态的信息,每到新的时刻,就有相应的操作来决定舍弃什么旧的信息以及添加什么新的信息。这个状态与隐藏层状态h不同,在更新过程中,它的更新是缓慢的,而隐藏层状态h的更新是迅速的。

LSTM的网络结构图如下,输入包括ht-1,xt,输出ht,状态为ct-1,ct。

640?wx_fmt=png

2.1  遗忘门与遗忘阶段

遗忘门决定了要从上一个状态中舍弃什么信息,它输入上一状态的输出ht-1、当前状态输入信息xt到一个Sigmoid函数中,产生一个介于0到1之间的数值,与上一个时刻的状态ct-1相乘之后来确定舍弃(保留)多少信息。0 表示“完全舍弃”,1 表示“完全保留”,这个阶段完成了对上一个节点cell state进行选择性忘记,遗忘门和它的输出公式如下:

640?wx_fmt=png

2.2 输入门与选择记忆阶段

选择记忆阶段,也就是对输入有选择性地进行“记忆”,重要的记录下来,不重要的少记一些,它决定了要往当前状态中保存什么新的信息。它输入上一状态的输出ht-1、当前输入信息xt到一个Sigmoid函数中,产生一个介于0到1之间的数值it来确定需要保留多少的新信息。


“候选新信息”则通过输入上一状态的输出、当前状态输入信息和一个tanh激活函数生成。有了遗忘门和输入门之后,就得到了完整的下一时刻的状态Ct,它将用于产生下一状态的隐藏层ht,也就是当前单元的输出。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

2.3 输出门与输出阶段

输出门决定了要从cell state中输出什么信息。与之前类似,会先有一个Sigmoid函数产生一个介于0到1之间的数值Ot来确定我们需要输出多少cell state中的信息。cell state的信息在与Ot相乘时首先会经过一个tanh层进行“激活”,得到的就是这个LSTM block的输出信息ht。

640?wx_fmt=png

以上就是LSTM的基本原理,它通过门控状态来对信息进行选择性的记忆,满足了需要长时间记忆信息和遗忘信息的需求。

当然,随之而来的就是大量的参数,因此后续就有了GRU。另外,RNN和LSTM不止有单向的,还有双向的,这些就留给读者自己去学习了。

总结

时序模型在语音,视频以及自然语言处理等领域有不可替代的作用,虽然相比普通的CNN,模型的复杂度和训练难度都增加了不少,但是在进阶之路上也是需要好好掌握的。

转载文章请后台联系

侵权必究

更多请关注知乎专栏《有三AI学院》

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

往期模型精选

想要变身”AI专家“,就戳戳手指关注我们吧

别忘了点“好看”支持作者噢  ??? 

### RNNLSTM模型的演进与实现 传统的循环神经网络(Recurrent Neural Network, RNN)在处理序列数据时存在梯度消失和梯度爆炸的问题,这使得它难以捕捉长时间依赖关系。为了克服这一局限性,长短时记忆网络(Long Short-Term Memory, LSTM)被引入作为一种改进版本的RNN结构。 #### 长短时记忆网络的核心机制 LSTM通过引入门控机制来解决传统RNN中的长期依赖问题。其核心组件包括输入门、遗忘门以及输出门,这些门控单元允许网络有选择地保留或丢弃信息[^1]。具体来说: - **遗忘门**决定了哪些先前的信息应该被忽略掉。 - **输入门**控制当前时刻的新状态如何更新。 - **输出门**决定最终输出的内容是什么。 这种设计让LSTM能够有效地记住过去的重要事件并将其传递给未来的时间步长,从而更好地建模时间序列上的复杂模式。 #### 实现方式对比 相比于简单的RNN架构,LSTM增加了多个内部状态变量及其对应的调节参数(即上述提到的各种“门”), 这些额外增加的部分赋予了该算法更强的学习能力. 下面给出一段Python代码用于展示基本的PyTorch框架下定义一个单层双向LSTM的过程: ```python import torch.nn as nn class LSTMModel(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(LSTMModel, self).__init__() self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, bidirectional=True) self.fc = nn.Linear(hidden_size * 2, output_size) def forward(self, x): lstm_out, _ = self.lstm(x) out = self.fc(lstm_out[:, -1, :]) return out ``` 此段代码展示了创建一个多层双向LSTM的方法,并且最后连接了一个全连接层来进行分类或者回归预测任务。 另外值得注意的是,在自然语言处理领域中,随着Transformer架构的发展,基于注意力机制的模型逐渐取代了以LSTM为代表的经典序列模型成为主流解决方案之一[^2]. 尽管如此,对于某些特定应用场景而言,比如语音识别等领域内的端到端训练流程里,LSTM仍然发挥着不可替代的作用。 #### 图卷积网络的应用扩展 除了标准形式外,还有研究者尝试将图论概念融入其中形成GCNs(Graph Convolution Networks),这类方法可以应用于具有拓扑结构的数据集上完成半监督学习任务等特殊需求场景下的表现评估工作[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值