一、FFNN(前馈神经网络)的局限性
FFNN的局限性:FFNN这种结构在处理序列数据时存在明显的局限性,因为每个输入都是独立处理的,并且没有考虑它们之间的顺序或上下文关系。这意味着无法有效处理顺序数据并捕获输入之间的依赖关系。例如语言建模、机器翻译、语音识别、时间序列分析以及许多其他需要顺序处理的应用程序。
二、RNN(循环神经网络)
RNN的核心思想:为了解决FFNN在处理序列数据时的局限性,循环神经网络(RNN)被引入。RNN的核心思想是在隐藏层之间引入循环连接,使得每个时间步的隐藏状态不仅取决于当前时间步的输入,还取决于前一个时间步的隐藏状态。
RNN 最主要也是最重要的特征是它的隐藏状态,它可以记住有关序列的一些信息。该状态也称为记忆状态,因为它会记住网络的先前输入。
RNN的模型架构:RNN通过其隐藏层的隐藏状态捕捉输入序列的时序依赖性,并基于当前输入和前一隐藏状态来生成输出序列的预测结果。
输入层:接收输入数据,并将其传递给隐藏层。输入不仅仅是静态的,还包含着序列中的历史信息。
隐藏层:隐藏状态是核心部分,捕捉时序依赖性。隐藏层的输出不仅取决于当前的输入,还取决于前一时刻的隐藏状态。
输出层:根据隐藏层的输出生成最终的预测结果。
输入层- 隐藏层 - 输出层
RNN的工作原理:通过一个具体的案例来看看RNN的工作原理。例如,用户说了一句“what time is it?”,需要判断用户的说话意图,是问时间,还是问天气?
输入层:先对句子“what time is it ?” 进行分词,然后按照顺序输入。
隐藏层:在此过程中,我们注意到前面的所有输入都对后续的输出产生了影响。圆形隐藏层不仅考虑了当前的输入,还综合了隐藏状态存储的之前所有的输入信息,能够利用历史信息来影响未来的输出。
输出层:生成最终的预测结果:Asking for the time。
三、RNN(循环神经网络)的局限性
RNN的局限性:在于梯度问题导致难以学习长期依赖,长期记忆能力不足,且并行处理能力差。
1. 梯度消失和梯度爆炸问题
梯度消失:在RNN中,由于参数共享和多次连乘的特性,在反向传播过程中,梯度值可能会随着时间步的增加而指数级衰减,最终趋近于0。这导致RNN难以学习到长期依赖关系,因为较早时间步的输入在反向传播时其梯度几乎为0,无法对这些输入进行有效的权重更新。
梯度爆炸:与梯度消失相反,梯度爆炸是指在反向传播过程中,梯度值可能会随着时间步的增加而快速增长到非常大,导致模型训练不稳定甚至无法收敛。
2. 长期依赖捕捉能力有限
由于梯度消失的问题,RNN在处理长序列时难以有效地捕捉到长期依赖关系。这意味着如果输入序列中的某个元素与输出之间存在长时间的间隔,RNN可能无法有效地学习到这两者之间的关系,从而限制了其在处理长序列数据时的性能。
3. 并行处理能力较差
RNN的计算是顺序进行的,即每个时间步的输出都依赖于前一个时间步的计算结果。这种顺序计算的方式限制了RNN的并行处理能力,使得在大规模数据集和复杂模型的情况下,RNN的训练和推理速度相对较慢。