LSTM 算法的完整计算过程
LSTM 算法的完整计算过程
摘要
本文围绕长短期记忆网络 LSTM(Long Short-Term Memory)的基本计算过程,设计了一个可在 Excel 中直接展示的数值化示例。示例设置输入维度为 2,隐藏单元数为 2,序列长度为 3,通过 Excel 公式逐步计算拼接向量、遗忘门、输入门、候选记忆、输出门、细胞状态、隐藏状态、最终输出、损失函数以及一次参数更新。与单纯给出公式不同,Excel 文件把每一个中间变量都拆分到单元格中,便于观察参数变化后整个网络计算结果的联动更新。
一、作业目标与文件结构
本作业的目标不是训练一个复杂模型,而是把 LSTM 的核心计算过程拆解成可以看得见、能修改、可验证的 Excel 表格。这样既能体现 LSTM 的数学原理,也能说明神经网络中“前向传播—损失计算—反向传播—参数更新”的基本链路。
工作表名称 | 主要内容 | 作用 |
00_说明 | 作业说明、工作表导航、提交提示 | 让阅卷者快速理解文件用途 |
01_参数输入 | 输入序列、初始状态、四个门的权重与偏置、输出层参数 | 集中管理可修改参数 |
02_前向t1 / 03_前向t2 / 04_前向t3 | 逐时间步计算 z_t、f_t、i_t、g_t、o_t、c_t、h_t | 展示 LSTM 的递推过程 |
05_损失与反向 | 输出层、损失函数、关键梯度与一次参数更新 | 展示训练计算思路 |
06_汇总图表 | 汇总 c_t、h_t 结果并绘制隐藏状态变化图 | 便于截图放入博客 |
07_公式速查 | 集中列出 LSTM 公式与 Excel 写法 | 便于学习和复查 |
二、LSTM 的核心思想
普通 RNN 在处理较长序列时,容易出现长期信息难以保留、梯度逐步衰减或爆炸的问题。LSTM 在循环结构中引入了细胞状态 c_t,并通过门控机制控制信息的保留、写入和输出。其中,遗忘门决定旧信息保留多少,输入门决定新信息写入多少,候选记忆提供新的内容,输出门决定当前时刻向外输出多少隐藏状态。
在本作业中,LSTM 的每一步并不是抽象展示,而是把矩阵乘法、激活函数和状态更新全部写成 Excel 公式。因此,只要修改输入序列或参数,后续各时间步的隐藏状态和损失都会自动变化。
三、LSTM 前向传播公式
本例将上一时刻隐藏状态 h_{t-1} 与当前输入 x_t 拼接为向量 z_t,然后分别计算四个门:
z_t = [h_{t-1}, x_t]
f_t = σ(W_f z_t + b_f)
i_t = σ(W_i z_t + b_i)
g_t = tanh(W_c z_t + b_c)
o_t = σ(W_o z_t + b_o)
c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
h_t = o_t ⊙ tanh(c_t)
其中 σ 表示 sigmoid 函数,tanh 表示双曲正切函数,⊙ 表示按元素相乘。在 Excel 中,sigmoid 可以写为 1/(1+EXP(-a)),tanh 可以直接使用 TANH(a)。
四、示例参数设置
为了让计算过程既完整又便于人工检查,Excel 文件采用一个小规模 LSTM 示例:输入维度为 2,隐藏单元数为 2,时间步数量为 3,目标标签 y=1,学习率为 0.1。
时间步 | x1 | x2 | 说明 |
1 | 1.0 | 0.5 | 第1个输入向量 |
2 | 0.2 | -0.3 | 第2个输入向量 |
3 | 0.8 | 0.1 | 第3个输入向量 |
五、Excel 中的具体计算过程
1. 参数输入与初始化
在“01_参数输入”工作表中,先输入三组二维输入向量 x_t,再设置初始隐藏状态 h0=[0,0] 与初始细胞状态 c0=[0,0]。随后分别设置遗忘门、输入门、候选记忆、输出门的权重矩阵和偏置。
2. 前向传播递推
以 t=1 为例,Excel 会先构造 z_1=[h0,x1],然后使用 SUMPRODUCT 计算 W_f z_1+b_f、W_i z_1+b_i、W_c z_1+b_c、W_o z_1+b_o,再通过 sigmoid 或 tanh 得到四个门的值。接着使用 c_1=f_1*c_0+i_1*g_1 得到细胞状态,再用 h_1=o_1*TANH(c_1) 得到隐藏状态。
t=2 和 t=3 的计算方式相同,只是它们不再使用初始状态,而是引用上一时间步的 h 和 c。因此,Excel 表格能够清楚体现 LSTM 的序列递推特征。
六、输出层、损失与反向传播示例
当前向传播完成后,最后一个时间步的隐藏状态 h3 被送入输出层。本例采用一个简单的二分类输出形式:
a_y = W_y h_3 + b_y
ŷ = σ(a_y)
L = 1/2(ŷ - y)^2
θ_new = θ - lr · ∂L/∂θ
根据 Excel 计算结果,本例最终预测值约为 0.526593,目标值为 1,损失约为 0.112057。随后,Excel 继续展示输出层梯度 dL/dŷ、dŷ/da_y、dL/da_y,以及 W_y 和 b_y 的一次梯度下降更新。
项目 | 结果 | 说明 |
h3_unit1 | 0.124301 | 最终隐藏状态第1维 |
h3_unit2 | 0.134232 | 最终隐藏状态第2维 |
预测值 ŷ | 0.526593 | 由 sigmoid(W_y h3+b_y) 得到 |
损失 L | 0.112057 | 采用 1/2(ŷ-y)^2 |
更新后 W_y1 | 0.701467 | W_y1_new=W_y1-lr*dW_y1 |
更新后 W_y2 | -0.598416 | W_y2_new=W_y2-lr*dW_y2 |
为了保持表格可读性,Excel 中的反向传播重点展示了最后一个时间步 t=3 的门控梯度,包括 dL/da_o3、dL/da_f3、dL/da_i3、dL/da_g3,并根据 dW=da⊗z3 给出各门权重的梯度。完整的 BPTT 会继续把梯度沿时间方向从 t=3 反传到 t=2、t=1,并对相同参数的梯度进行累加。
七、结果分析与学习体会
通过这个 Excel 示例可以看到,LSTM 的计算并不是单个公式完成的,而是由多个门控结构共同完成的序列递推。遗忘门控制旧记忆的保留比例,输入门和候选记忆共同决定新信息写入量,输出门决定当前隐藏状态的输出强度。细胞状态 c_t 使模型能够保留相对长期的信息,而隐藏状态 h_t 则作为当前时间步对外输出的表示。
使用 Excel 展示 LSTM 的好处在于:第一,每个中间变量都可以被直接观察;第二,矩阵乘法和激活函数可以通过单元格公式拆开理解;第三,修改参数或输入后,前向传播、损失和梯度结果会自动联动变化。这种方式适合用于课程作业中的算法计算过程展示。
