《RNN、LSTM、BiLSTM算法原理与数学表达详解》
NLP-AHU-010
一、RNN(循环神经网络)
1. 设计启发
传统全连接神经网络、CNN等前馈网络的输入是固定长度的独立向量,无法处理时序数据(如文本、语音、时间序列),因为这类数据的核心特征是前后时刻存在依赖关系。受人类“阅读文本时会结合上下文理解”的认知方式启发,研究者设计了RNN,让网络具备“记忆”能力,能利用历史信息处理当前输入。
2. 核心设计思想
RNN的核心是循环结构:网络在处理时序数据的每一个时刻t,都会接收当前输入x_t,同时保留上一时刻的隐藏状态h_{t-1},将二者结合计算出当前时刻的隐藏状态h_t,并传递给下一时刻。这一结构让网络能“记住”历史信息,从而建模时序依赖。
3. 算法细节与数学表达
(1)基础结构
RNN由输入层、隐藏层(循环层)、输出层组成,其中隐藏层的权重在所有时间步共享,大幅减少了参数量。
(2)数学公式
- 隐藏状态更新:
h_t = \sigma_h(W_{xh}x_t + W_{hh}h_{t-1} + b_h)
其中:
- x_t:t时刻的输入向量
- h_{t-1}:t-1时刻的隐藏状态(历史记忆)
- W_{xh}:输入到隐藏层的权重矩阵
- W_{hh}:隐藏层到隐藏层的循环权重矩阵
- b_h:隐藏层偏置
- \sigma_h:激活函数(通常为tanh或ReLU)
- 输出计算:
y_t = \sigma_y(W_{hy}h_t + b_y)
其中:
- W_{hy}:隐藏层到输出层的权重矩阵
- b_y:输出层偏置
- \sigma_y:输出激活函数(分类用softmax,回归用线性)
(3)训练方法:BPTT(时间反向传播)
RNN的训练基于反向传播算法,针对时序结构做了适配:
1. 前向传播:按时间步依次计算h_1, h_2, ..., h_T和y_1, y_2, ..., y_T,计算损失函数L = \sum_{t=1}^T L_t(L_t为t时刻的损失)。
2. 反向传播:从最后一个时间步T开始,反向计算梯度,将梯度沿时间步传递回初始时刻,同时更新共享权重W_{xh}, W_{hh}, W_{hy}。
4. 核心缺陷:梯度消失/爆炸
RNN的循环结构在长序列训练中,梯度会沿时间步多次连乘:
- 若权重矩阵的特征值小于1,梯度会指数级衰减(梯度消失),导致网络无法学习长距离依赖(如文本中前后段落的关联)。
- 若特征值大于1,梯度会指数级增长(梯度爆炸),导致训练不稳定。
二、LSTM(长短期记忆网络)
1. 设计启发
为解决RNN的梯度消失问题,研究者受人类“选择性记忆”机制启发,设计了门控结构,让网络能自主控制“保留哪些历史信息、遗忘哪些无用信息、更新哪些新信息”,从而实现长距离依赖的建模。
2. 核心设计思想
LSTM用细胞状态(Cell State)C_t 作为“长期记忆载体”,并设计了3个门控单元:
- 遗忘门(Forget Gate):控制从历史细胞状态中“遗忘”多少信息。
- 输入门(Input Gate):控制将多少当前输入信息写入细胞状态。
- 输出门(Output Gate):控制从细胞状态中“输出”多少信息到当前隐藏状态。
门控单元通过sigmoid激活函数输出0~1之间的数值,0代表“完全不通过”,1代表“完全通过”,实现对信息的精细化控制。
3. 算法细节与数学表达
(1)门控单元计算
- 遗忘门:
f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)
输入为上一时刻隐藏状态h_{t-1}和当前输入x_t,输出f_t \in [0,1],决定保留C_{t-1}的比例。
- 输入门:
i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)
\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)
i_t决定更新比例,\tilde{C}_t是当前时刻的候选细胞状态(待写入的新信息)。
- 细胞状态更新(核心):
C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t
用遗忘门过滤历史信息,用输入门加入新信息,完成长期记忆的更新(\odot为逐元素相乘)。
- 输出门:
o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)
h_t = o_t \odot \tanh(C_t)
o_t决定输出比例,h_t为当前时刻的隐藏状态,既用于当前输出,也传递给下一时刻。
(2)训练优势
LSTM的细胞状态更新是加法操作,而非RNN的乘法连乘,从根本上缓解了梯度消失问题,能有效建模长序列的长距离依赖
三、BiLSTM(双向长短期记忆网络)
1. 设计启发
单向LSTM只能利用历史信息(t时刻之前的序列),但在NLP等任务中,当前词的理解往往需要结合上下文信息(前后的词)。受“双向阅读文本”的认知方式启发,研究者设计了BiLSTM,同时建模正向和反向的时序依赖。
2. 核心设计思想
BiLSTM由两个独立的LSTM层组成:
- 前向LSTM:按时间步1 \to T的顺序处理序列,获取正向历史信息。
- 后向LSTM:按时间步T \to 1的顺序处理序列,获取反向未来信息。
最终将两个LSTM的隐藏状态拼接,得到同时包含上下文信息的输出。
3. 算法细节与数学表达
(1)双向隐藏状态计算
- 前向LSTM:按顺序计算\overrightarrow{h_1}, \overrightarrow{h_2}, ..., \overrightarrow{h_T},仅利用t时刻之前的信息。
- 后向LSTM:按逆序计算\overleftarrow{h_1}, \overleftarrow{h_2}, ..., \overleftarrow{h_T},仅利用t时刻之后的信息。
- 最终隐藏状态(拼接):
h_t = [\overrightarrow{h_t}, \overleftarrow{h_t}]
拼接后的h_t同时包含了t时刻前后的上下文信息,能更全面地建模序列特征。
(2)适用场景
BiLSTM在NLP任务(如文本分类、命名实体识别、情感分析)中表现优异,因为文本的语义理解高度依赖上下文;但在实时性要求高的场景(如语音实时识别),因无法获取未来信息,通常使用单向LSTM。
