统计学模型发展的初期仅考虑了频率统计,而未充分顾及序列数据的时间关系。HMM引入了状态转移概率的概念,初步具备了基于状态变化进行预测的能力。然而,HMM中的状态转移概率是固定的,无法根据序列数据的时间依赖性进行动态调整。对于时序数据处理任务,如语言模型、语音识别或任何形式的时间序列分析,HMM的无状态特性限制了其效能,因为处理序列数据通常依赖于前后文信息。RNN的设计灵感来源于人脑处理序列信息的方式,尤其是人脑具备通过时间维持信息状态的能力。通过引入循环,RNN能够在其内部状态中保留信息,从而实现对序列长度变化的动态处理,捕捉时间序列数据中的时间依赖性。这一结构使得RNN能够将过去的信息传递至当前任务,从而实现更为有效的学习和预测。RNN的基本结构如图1-2所示。
图1-2 RNN的基本结构
图1-2展示了一个简单的RNN结构,其中展示了RNN在处理序列数据时的三个连续时间步。
❑ x t 表示时间步 t 时的输入。这是网络接收序列中的当前元素。
❑ h 表示网络的隐藏层,这是RNN的核心。隐藏层能够在不同时间步之间传递信息,从而保留先前输入的信息。
❑ h t -1 、 h t 、 h t +1 分别表示时间步 t -1、 t 、 t +1时隐藏层的状态。每个隐藏状态 h t 都是基于前一个时间步 h t -1 的隐藏状态和当前的输入 x t 计算得到的。
❑ o 表示输出层,用于在每个时间步生成输出。
❑ o t -1 、 o t 、 o t +1 分别表示时间步 t -1、 t 、 t +1的输出。输出通常是基于当前时间步的隐藏状态 h t 计算得到的。
RNN的作用是处理序列数据,特别适用于时间序列分析、语音识别、语言建模等任务。通过维护隐藏状态,RNN能够捕捉序列中的时间依赖关系,从而生成或预测序列中的下一个元素。该结构使RNN能够考虑前文信息,以在序列任务中做出更加准确的预测。
RNN模型的架构存在两个重大问题:
(1)梯度消失
RNN在训练过程中易出现梯度消失问题。这是由于RNN的梯度通过时间反向传播(BackPropagation Through Time,BPTT)计算,而在反向传播过程中,梯度会不断乘以一个小于1的数值,导致梯度逐渐消失。
(2)梯度爆炸
RNN在训练过程中容易出现梯度爆炸问题。这是由于RNN的梯度通过时间反向传播计算,而在此过程中,梯度会持续被乘以大于1的数值,导致梯度逐渐爆炸。
这些问题主要由RNN的循环连接结构以及使用tanh或sigmoid等饱和激活函数引起。在长序列中,随着梯度反向传播至更早的层,通过多次应用链式法则,梯度会乘以一系列的权重矩阵,从而在多个时间步中累积。如果这些权重矩阵的值小于1,梯度会逐渐衰减,导致梯度消失;如果这些权重矩阵的值大于1,梯度会迅速增长,导致梯度爆炸。