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的局限性 :
在于梯度问题导致难以学习长期依赖,长期记忆能力不足,且并行处理能力差。
- 梯度消失和梯度爆炸问题
- 梯度消失:在RNN中,由于参数共享和多次连乘的特性,在反向传播过程中,梯度值可能会随着时间步的增加而指数级衰减,最终趋近于0。这导致RNN难以学习到长期依赖关系, 因为较早时间步的输入在反向传播时其梯度几乎为0,无法对这些输入进行有效的权重更新。
- 梯度爆炸:与梯度消失相反,梯度爆炸是指在反向传播过程中,梯度值可能会随着时间步的增加而快速增长到非常大,导致模型训练不稳定甚至无法收敛。
- 长期依赖捕捉能力有限
- 由于梯度消失的问题,RNN在处理长序列时难以有效地捕捉到长期依赖关系。这意味着如果输入序列中的某个元素与输出之间存在长时间的间隔, RNN可能无法有效地学习到这两者之间的关系,从而限制了其在处理长序列数据时的性能。
- 并行处理能力较差
- RNN的计算是顺序进行的,即每个时间步的输出都依赖于前一个时间步的计算结果。 这种顺序计算的方式限制了RNN的并行处理能力,使得在大规模数据集和复杂模型的情况下,RNN的训练和推理速度相对较慢。
梯度消失和梯度爆炸