一文彻底搞懂RNN - 模型架构(Model Architecture)

文摘   科技   2024-09-12 20:05   湖北  
Recurrent Neural Network
RNN是一种特殊的神经网络结构,它通过在时间上的展开来处理序列数据中的依赖关系。在每个时间步(time step),RNN都会接收一个输入(比如句子中的一个单词),并输出一个结果(比如下一个单词的预测)。与传统的前馈神经网络(Feedforward Neural Network, FNN)不同,RNN在每个时间步都会保留一个隐藏状态(hidden state),这个隐藏状态包含了之前所有时间步的信息,并用于计算当前时间步的输出和下一个时间步的隐藏状态。
RNN vs FFNN

一、FFNN(前馈神经网络)的局限性

前馈神经网络(Feedforward Neural Network, FFNN):前馈神经网络(FFNN),也称为多层感知机(MLP),通过多个隐藏层将输入数据映射到输出数据。它主要由输入层、一个或多个隐藏层以及输出层组成,数据在网络中只能单向流动,即从输入层经过隐藏层最终到达输出层,没有反馈环路。
FFNN

FFNN的局限性:FFNN这种结构在处理序列数据时存在明显的局限性因为每个输入都是独立处理的,并且没有考虑它们之间的顺序或上下文关系。这意味着无法有效处理顺序数据并捕获输入之间的依赖关系。例如语言建模、机器翻译、语音识别、时间序列分析以及许多其他需要顺序处理的应用程序。

Sequence Data

二、RNN(循环神经网络)

RNN的核心思想为了解决FFNN在处理序列数据时的局限性,循环神经网络(RNN)被引入。RNN的核心思想是在隐藏层之间引入循环连接,使得每个时间步的隐藏状态不仅取决于当前时间步的输入,还取决于前一个时间步的隐藏状态

RNN 最主要也是最重要的特征是它的隐藏状态,它可以记住有关序列的一些信息。该状态也称为记忆状态,因为它会记住网络的先前输入。

RNN的隐藏状态

RNN的模型架构RNN通过其隐藏层的隐藏状态捕捉输入序列的时序依赖性,并基于当前输入和前一隐藏状态来生成输出序列的预测结果

  • 输入层:接收输入数据,并将其传递给隐藏层。输入不仅仅是静态的,还包含着序列中的历史信息

  • 隐藏层:隐藏状态是核心部分,捕捉时序依赖性。隐藏层的输出不仅取决于当前的输入,还取决于前一时刻的隐藏状态

  • 输出层:根据隐藏层的输出生成最终的预测结果。

输入层- 隐藏层 - 输出层

RNN的工作原理通过一个具体的案例来看看RNN的工作原理。例如,用户说了一句“what time is it?”,需要判断用户的说话意图,是问时间,还是问天气?

  • 输入层先对句子“what time is it ?” 进行分词,然后按照顺序输入。

对句子进行分词
  • 隐藏层在此过程中,我们注意到前面的所有输入都对后续的输出产生了影响。圆形隐藏层不仅考虑了当前的输入,还综合了隐藏状态存储的之前所有的输入信息,能够利用历史信息来影响未来的输出

Hidden State存储了之前所有的输入信息
  • 输出层生成最终的预测结果:Asking for the time。

输出结果:Asking for the time

三、RNN(循环神经网络)的局限性

RNN的局限性在于梯度问题导致难以学习长期依赖,长期记忆能力不足,且并行处理能力差。

1. 梯度消失和梯度爆炸问题

  • 梯度消失:在RNN中,由于参数共享和多次连乘的特性,在反向传播过程中,梯度值可能会随着时间步的增加而指数级衰减,最终趋近于0。这导致RNN难以学习到长期依赖关系,因为较早时间步的输入在反向传播时其梯度几乎为0,无法对这些输入进行有效的权重更新。

  • 梯度爆炸:与梯度消失相反,梯度爆炸是指在反向传播过程中,梯度值可能会随着时间步的增加而快速增长到非常大,导致模型训练不稳定甚至无法收敛。

2. 长期依赖捕捉能力有限

  • 由于梯度消失的问题,RNN在处理长序列时难以有效地捕捉到长期依赖关系。这意味着如果输入序列中的某个元素与输出之间存在长时间的间隔,RNN可能无法有效地学习到这两者之间的关系,从而限制了其在处理长序列数据时的性能。

3. 并行处理能力较差

  • RNN的计算是顺序进行的,即每个时间步的输出都依赖于前一个时间步的计算结果。这种顺序计算的方式限制了RNN的并行处理能力,使得在大规模数据集和复杂模型的情况下,RNN的训练和推理速度相对较慢。


梯度消失和梯度爆炸

架构师带你玩转AI
分享人工智能,让所有人玩转AI
 最新文章