本文用一个隐藏维度为 3、输入维度为 2、序列长度为 1 的极简例子,借助 Excel 公式演示 LSTM 的前向传播、损失计算、反向传播和一次梯度下降更新。配套文件为 LSTM算法计算过程_答案.xlsx,其中所有关键单元格都使用公式自动计算。
说明: Excel 文件将候选门 u 严格写成 TANH(net_u),避免手算时因四舍五入或笔误造成数值不一致。
一、LSTM 的核心思想
LSTM 通过 Cell 状态保存长期记忆,并利用四个门控制信息流:
| 符号 | 名称 | 作用 |
|---|---|---|
| f | 遗忘门 | 控制旧记忆保留多少 |
| i | 输入门 | 控制新信息写入多少 |
| u | 候选记忆/更新门 | 生成准备写入的新内容 |
| o | 输出门 | 控制 Cell 状态对隐藏状态输出多少 |
二、示例设定
本例使用:
x_t = [0.5, 0.8]
h_(t-1) = [0.1, 0.2, 0.3]
C_(t-1) = [0, 0, 0]
z = [h_(t-1), x_t] = [0.100000, 0.200000, 0.300000, 0.500000, 0.800000]
目标 y = [20, 20, 20]
学习率 η = 0.01
三、前向传播
四个门的计算公式为:
f = sigmoid(Wf · z + bf)
i = sigmoid(Wi · z + bi)
u = tanh(Wu · z + bu)
o = sigmoid(Wo · z + bo)
本例计算得到:
| 项目 | 数值 |
|---|---|
| net_f | [0.740000, 0.570000, 0.300000] |
| f | [0.676996, 0.638763, 0.574443] |
| net_i | [0.190000, 0.380000, 0.570000] |
| i | [0.547358, 0.593873, 0.638763] |
| net_u | [1.040000, 1.230000, 1.420000] |
| u=tanh(net_u) | [0.777888, 0.842579, 0.889599] |
| net_o | [0.760000, 0.950000, 1.140000] |
| o | [0.681354, 0.721115, 0.757680] |
然后更新 Cell 状态与隐藏状态:
C = f ⊙ C_(t-1) + i ⊙ u = [0.425783, 0.500385, 0.568243]
tanh(C) = [0.401791, 0.462420, 0.514068]
h = o ⊙ tanh(C) = [0.273762, 0.333458, 0.389499]
四、损失函数
Excel 中使用的损失函数是:
L = 0.5 × Σ(h - y)^2
当前示例的总损失为:
L = 580.234552
五、反向传播
由于 L = 0.5Σ(h-y)^2,所以第一步梯度为:
dL/dh = h - y = [-19.726238, -19.666542, -19.610501]
随后按链式法则反传:
dL/do = dL/dh ⊙ tanh(C)
dL/dnet_o = dL/do ⊙ o ⊙ (1-o)
dL/dC = dL/dh ⊙ o ⊙ (1 - tanh(C)^2)
dL/df = dL/dC ⊙ C_(t-1)
dL/dnet_f = dL/df ⊙ f ⊙ (1-f)
dL/di = dL/dC ⊙ u
dL/dnet_i = dL/di ⊙ i ⊙ (1-i)
dL/du = dL/dC ⊙ i
dL/dnet_u = dL/du ⊙ (1-u^2)
| 梯度 | 数值 |
|---|---|
| dL/dnet_f | [-0.000000, -0.000000, -0.000000] |
| dL/dnet_i | [-2.172184, -2.265761, -2.243993] |
| dL/dnet_u | [-2.436131, -1.920567, -1.456727] |
| dL/dnet_o | [-1.720783, -1.828918, -1.850907] |
每个门的权重梯度都可以用外积表示:
dW_gate = dnet_gate ⊗ z
db_gate = dnet_gate
这也是 Excel 中 03_反向传播 工作表的主要结构。
六、参数更新
得到梯度后,使用梯度下降更新参数:
W_new = W_old - η × dW
b_new = b_old - η × db
工作表 04_参数更新 对 Wf、Wi、Wu、Wo 四组权重和偏置分别展示了原值、梯度和更新后的结果。
七、如何使用配套 Excel
- 打开 01_参数 工作表,修改输入向量、目标 y、学习率或权重矩阵。
- 查看 02_前向传播,观察四个门、Cell 状态、隐藏状态和损失如何变化。
- 查看 03_反向传播,理解损失如何逐层传回各个门。
- 查看 04_参数更新,观察一次梯度下降后参数如何变化。
八、总结
LSTM 的计算可以拆成"门控计算 → 状态更新 → 隐藏输出 → 损失 → 反向传播 → 参数更新"六个部分。Excel 的优势是能把每一步拆成独立单元格,既能看到公式,也能看到数值。理解这个单时间步示例后,再推广到多时间步 BPTT,本质上就是沿时间方向把梯度继续累加回去。