用 Excel 手算 LSTM:从四个门到梯度下降的完整过程

本文用一个隐藏维度为 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

  1. 打开 01_参数 工作表,修改输入向量、目标 y、学习率或权重矩阵。
  2. 查看 02_前向传播,观察四个门、Cell 状态、隐藏状态和损失如何变化。
  3. 查看 03_反向传播,理解损失如何逐层传回各个门。
  4. 查看 04_参数更新,观察一次梯度下降后参数如何变化。

八、总结

LSTM 的计算可以拆成"门控计算 → 状态更新 → 隐藏输出 → 损失 → 反向传播 → 参数更新"六个部分。Excel 的优势是能把每一步拆成独立单元格,既能看到公式,也能看到数值。理解这个单时间步示例后,再推广到多时间步 BPTT,本质上就是沿时间方向把梯度继续累加回去。

相关推荐
BU摆烂会噶2 小时前
【LangGraph】House_Agent 实战(五):持久化、流式输出与部署
人工智能·python·架构·langchain·人机交互
txg6662 小时前
机器人领域简报(2026年5月15日—5月21日)
人工智能·机器人
码上滚雪球2 小时前
Flink Agents 深度解读:当实时数据流遇上 AI 智能体
大数据·人工智能·flink·滚雪球
PNP Robotics2 小时前
PNP机器人亮相南京学术论坛,分享具身智能多模态数据采集前沿成果
人工智能·深度学习·学习·机器学习·virtualenv
threelab2 小时前
Three.js 银河星系效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
想你依然心痛3 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“译界智脑“——PC端AI智能体沉浸式智能翻译与跨语言协作工作台
人工智能·华为·ar·harmonyos
几司3 小时前
OpenISP 模块拆解 · 第11讲:非局部均值降噪 (NLM)
人工智能·算法·均值算法·isp
海上彼尚3 小时前
Nodejs也能写Agent - 7.基础篇 - MCP
前端·javascript·人工智能·node.js
灵途科技3 小时前
具身智能时代,灵途科技重构机器人感知
人工智能·机器人