NLP高频面(51)LSTM详解
NLP高频面(51)LSTM详解¶
本文讨论了NLP高频面试中LSTM的详细内容,包括其相较于RNN的改进、门机制作用、网络结构、核心组件、前向计算、加速方法及反向传播等。关键要点包括:
LSTM相对RNN的改进:缓解梯度消失与爆炸,使梯度在时间维度传播更稳定;能可控地保留与遗忘信息,响应长期依赖和短期动态;多门结构让表达能力更强,提升模型序列场景表现。
门机制的作用:遗忘门控制上一时刻记忆单元状态保留比例;输入门决定当前候选信息写入比例;输出门筛选记忆单元状态输出到下一隐藏状态的部分;输入调制门生成候选信息。
记忆单元的作用:可长期存储信息,反向传播时提供梯度直通路径,配合各门动态更新信息。
tanh与sigmoid的角色:sigmoid用于各门输出通道权重,决定信息流入、保留与输出比例;tanh用于生成候选记忆和隐藏状态,将信息映射到[-1,1]。
前向计算:给定输入、前一隐藏状态和记忆单元,依次计算三个门激活、候选记忆,更新记忆单元和生成隐藏状态。
前向计算加速方法:利用GPU与cuDNN内核、批量与序列并行、张量核与混合精度,结合深度学习框架封装可提升性能。
反向传播:采用反向传播穿越时间(BPTT),对每个时间步的门和状态计算梯度并更新参数。
长短期记忆网络(LSTM)相较于传统循环神经网络(RNN)的核心改进在于通过引入记忆单元(cell state)和门机制(gating mechanism)来有效缓解梯度消失与梯度爆炸问题,从而更好地捕捉长距离依赖关系。在其网络结构中,信息通过输入门(input gate)、遗忘门(forget gate)和输出门(output gate)进行有选择的流入、保留与输出,同时记忆单元内部还包含输入调制门(input modulation gate)以丰富细粒度控制。在前向计算过程中,LSTM单元依次计算各门的激活(sigmoid)与候选状态(tanh),然后更新记忆单元并生成隐藏状态;这一流程可借助cuDNN、GPU并行、张量核加速等底层库大幅提升吞吐。反向传播时,LSTM通过反向传播穿越时间(BPTT)针对每个门和状态计算梯度,有效地将误差信号传递到旧时刻,从而完成参数更新。
模型篇¶
LSTM 相对 RNN 的主要改进¶
缓解梯度消失与爆炸:传统 RNN 在处理长序列时,梯度经多次连乘后会迅速衰减或增大,难以捕捉远距离依赖。LSTM 通过在“记忆单元”上引入几乎恒等的直通路径,使梯度能够更稳定地在时间维度上传播。
可控的信息保留与遗忘:借助门机制,LSTM能根据当前输入与过去状态,自主决定哪些信息应当写入、保留或丢弃,从而对长期依赖和短期动态同时作出响应。
更强的表达能力:相比于单一的状态更新,LSTM的多门结构赋予网络更丰富的非线性组合方式,提升了模型在多种序列场景下的表现。
门机制的作用¶
LSTM 的核心在于门(gate)。每个门由一个仿射变换和一个 sigmoid 激活函数组成,输出范围 [0,1],用于按比例调节信息流动。三大主要门分别负责:
遗忘门:控制上一时刻的记忆单元状态应保留多少;
输入门:决定当前的候选信息(经过tanh变换)应写入多少;
输出门:筛选记忆单元状态中的哪部分被输出到下一隐藏状态。
此外,常将生成“候选信息”的 tanh 变换称为“输入调制门”,与输入门共同构成对新信息的细粒度控制。
LSTM 的网络结构¶
一个标准 LSTM 单元可视化为:

其中,“⊕”表示加法,“⊙”表示逐元素乘积。 $ \underline{C_t} $是时刻t的记忆单元状态, $ \underline{h_t} $是隐藏状态。
核心组件¶
记忆单元的作用¶
长期存储:借助几乎恒等的状态转移,重要信息可在很长的时间跨度内得以保留。
梯度直通:在反向传播时,记忆单元提供了一条几乎无衰减的路径,使得误差信号能够传到更早的时间步。
动态更新:配合各门的比例控制,记忆单元能够根据任务需求灵活添加新信息和遗忘旧信息。
tanh 与 sigmoid 的角色¶
sigmoid:应用于各门,用以输出 [0,1] 的“通道权重”,决定信息的流入、保留与输出比例。
tanh:用于生成候选记忆和隐藏状态的非线性变换,将信息映射到 $ [-1,1] $,既能表达正向信息也能表达负向信息。
LSTM 的门与功能¶
通常可将 LSTM 的门分为四类:
输入调制门(tanh 变换部分):生成候选信息;
输入门(sigmoid 部分):控制候选信息写入比例;
遗忘门:决定保留多少旧记忆;
输出门:筛选记忆单元中哪些信息输出为隐藏状态。
前向计算¶
LSTM 单元前向流程¶
给定当前输入 x_t 、前一隐藏状态 h_{t-1} 和记忆单元 C_{t-1} ,前向计算依次为:
计算三个门的激活(sigmoid);
计算候选记忆(tanh);
更新记忆单元: $ C_t = f_t \odot C_{{t-1}} + i_t \odot c'_t $;
生成隐藏状态: $ h_t = o_t \odot \tanh(C_t) $。
LSTM 前向计算的加速方法¶
GPU 与 cuDNN 内核:NVIDIA 的 cuDNN 库提供高度优化的 LSTM 实现,可在训练时提升约 6×,推理时提升超过 100×。
批量与序列并行:在样本维度和时间维度同时并行处理,提升硬件利用率。
张量核与混合精度:利用 GPU 张量核(Tensor Core)及 FP16/FP32 混合精度训练,可再获数倍性能提升。
深度学习框架封装:如 PyTorch、TensorFlow 等对底层加速库的自动调用,无需手动调优即可获得优秀性能。
反向传播¶
LSTM 单元的反向传播¶
LSTM 的参数更新采用 反向传播穿越时间(BPTT),对每个时间步的门和状态计算梯度:
利用 $ \delta h_{t} $ 计算输出门梯度;
将误差累积到记忆单元,再分发到遗忘门和输入门;
计算候选记忆的梯度;
最终根据每个门的梯度对相应权重和偏置执行参数更新。