LSTM计算过程博客正文
基于 Excel 的 LSTM 算法计算过程展示
1. 写作目的
LSTM(Long Short-Term Memory,长短期记忆网络)是循环神经网络 RNN 的一种改进结构。普通 RNN 在处理较长序列时容易出现梯度消失或梯度爆炸问题,而 LSTM 通过引入“门控机制”和“细胞状态”来增强长期信息保存能力。
本文以一个简单的单时间步 LSTM 为例,配合 Excel 文件展示 LSTM 的完整计算过程,包括:输入数据设置、遗忘门计算、输入门计算、候选状态计算、细胞状态更新、输出门计算、隐藏状态生成、输出层预测、误差计算、反向传播梯度以及参数更新。
2. Excel 文件结构说明
本次提交的 Excel 文件名为:LSTM算法计算过程展示.xlsx。
工作簿中主要包含以下工作表:
| 工作表名称 | 主要内容 |
|---|---|
| Blog说明 | 对整个 Excel 文件和博客说明进行概括 |
| Inputs | 设置 LSTM 的输入向量、上一时刻状态、权重、偏置、学习率和目标值 |
| Forward_t1 | 展示单时间步 LSTM 的前向传播计算过程 |
| Backprop_t1 | 展示输出层、隐藏状态和四个门的反向传播梯度 |
| Update | 使用梯度下降公式展示参数更新过程 |
| Formula_Guide | 对 LSTM 中涉及的核心公式进行解释 |
其中,黄色单元格为可以修改的输入参数,其他公式单元格会根据输入参数自动联动变化。
3. 示例网络结构
为了方便在 Excel 中清晰展示,本文使用一个简化的 LSTM 单元。网络结构如下:
- 当前输入维度:3
- 隐藏状态维度:2
- 输出维度:1
- 时间步:只展示第 1 个时间步,即 t=1
- 损失函数:均方误差形式
- 参数更新方法:梯度下降法
在本例中,输入向量为:
x_t = [1.0, 0.0, 0.5]
上一时刻隐藏状态为:
h_{t-1} = [0.2, -0.1]
上一时刻细胞状态为:
c_{t-1} = [0.1, -0.2]
因此,LSTM 在计算四个门时使用的拼接向量为:
z_t = [h_{t-1}; x_t] = [0.2, -0.1, 1.0, 0.0, 0.5]
4. LSTM 前向传播计算过程
LSTM 的核心是四个门和一个细胞状态。四个门分别是遗忘门、输入门、候选状态和输出门。
4.1 遗忘门计算
遗忘门用于控制上一时刻细胞状态中有多少信息需要保留。计算公式为:
f_t = sigmoid(W_f z_t + b_f)
其中:
W_f表示遗忘门权重矩阵;b_f表示遗忘门偏置;z_t表示拼接后的输入向量;sigmoid函数用于将结果压缩到 0 到 1 之间。
在 Excel 中,线性部分使用 SUMPRODUCT 函数完成,例如:
=SUMPRODUCT(权重行, 拼接输入向量) + 偏置
然后通过如下公式计算 sigmoid:
=1/(1+EXP(-线性结果))
4.2 输入门计算
输入门用于控制当前新信息写入细胞状态的比例。计算公式为:
i_t = sigmoid(W_i z_t + b_i)
输入门的计算方式与遗忘门类似,区别在于使用的是输入门对应的权重 W_i 和偏置 b_i。
4.3 候选状态计算
候选状态表示当前时间步准备写入细胞状态的新内容。计算公式为:
g_t = tanh(W_c z_t + b_c)
候选状态使用 tanh 激活函数,其输出范围为 -1 到 1。在 Excel 中使用:
=TANH(线性结果)
4.4 细胞状态更新
细胞状态是 LSTM 保存长期信息的核心。更新公式为:
c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
其中:
f_t ⊙ c_{t-1}表示保留上一时刻细胞状态的一部分;i_t ⊙ g_t表示写入当前时刻的新信息;⊙表示逐元素相乘。
该公式体现了 LSTM 的记忆机制:既可以保留历史信息,也可以写入新信息。
4.5 输出门与隐藏状态
输出门用于决定当前细胞状态中有多少信息输出为隐藏状态。输出门计算公式为:
o_t = sigmoid(W_o z_t + b_o)
隐藏状态计算公式为:
h_t = o_t ⊙ tanh(c_t)
隐藏状态 h_t 是当前时间步 LSTM 对外输出的结果,也可以作为下一时间步的上一隐藏状态。
5. 输出层与误差计算
在得到隐藏状态后,通过一个简单的输出层得到预测值:
ŷ = sigmoid(W_y h_t + b_y)
本例采用均方误差形式作为损失函数:
L = 1/2(ŷ - y)^2
其中:
ŷ是模型预测值;y是目标值;L是损失值。
在 Excel 的 Forward_t1 工作表中,可以看到输出层预测值和损失值会随着输入参数、权重或偏置变化而自动更新。
6. 反向传播计算过程
LSTM 的反向传播相对复杂。为了方便理解,本次 Excel 文件展示的是单时间步下的主要梯度传播路径。
6.1 输出层梯度
首先计算预测值对损失函数的影响:
dy = ŷ - y
由于输出层使用 sigmoid 激活函数,因此输出层线性项的梯度为:
d_y_net = dy · ŷ · (1 - ŷ)
输出层权重梯度为:
dW_y = d_y_net · h_t
输出层偏置梯度为:
db_y = d_y_net
6.2 隐藏状态梯度
输出层的误差会继续传回 LSTM 的隐藏状态:
dh = d_y_net · W_y
隐藏状态再继续影响输出门和细胞状态。
6.3 输出门梯度
由于:
h_t = o_t ⊙ tanh(c_t)
所以输出门的梯度为:
do = dh · tanh(c_t)
输出门线性项的梯度为:
dnet_o = do · o_t · (1 - o_t)
6.4 细胞状态梯度
细胞状态对隐藏状态的影响为:
dc = dh · o_t · (1 - tanh(c_t)^2)
细胞状态再分别传递到遗忘门、输入门和候选状态。
6.5 遗忘门、输入门和候选状态梯度
遗忘门梯度:
df = dc · c_{t-1}
dnet_f = df · f_t · (1 - f_t)
输入门梯度:
di = dc · g_t
dnet_i = di · i_t · (1 - i_t)
候选状态梯度:
dg = dc · i_t
dnet_g = dg · (1 - g_t^2)
对于每一个门,其权重梯度都可以写成:
dW = dnet · z_t
偏置梯度为:
db = dnet
Excel 的 Backprop_t1 工作表已经将这些梯度展开为表格,每一列对应拼接向量中的一个元素,每一行对应一个隐藏单元。
7. 参数更新过程
本例使用梯度下降法更新参数。统一公式为:
W_new = W_old - η · dW
b_new = b_old - η · db
其中:
W_old表示更新前的权重;W_new表示更新后的权重;η表示学习率;dW表示权重梯度;db表示偏置梯度。
在 Excel 的 Update 工作表中,所有新参数均通过公式引用 Inputs 中的旧参数和 Backprop_t1 中的梯度计算得到。
8. Excel 展示的优点
使用 Excel 展示 LSTM 计算过程有以下优点:
- 每一步计算都能直接看到中间结果;
- 可以清晰观察四个门对细胞状态和隐藏状态的影响;
- 修改输入、权重、偏置或学习率后,公式会自动联动更新;
- 适合初学者理解 LSTM 的前向传播和反向传播;
- 相比直接阅读代码,Excel 表格更直观地展示了矩阵运算和梯度计算过程。
9. 总结
本文通过一个简化的单时间步 LSTM 示例,结合 Excel 文件展示了 LSTM 的完整计算流程。LSTM 的关键思想在于通过遗忘门、输入门和输出门控制信息的保留、写入和输出。细胞状态 c_t 是长期记忆的载体,隐藏状态 h_t 则是当前时间步对外输出的结果。
通过 Excel 文件可以看到,LSTM 并不是一个抽象的“黑箱”模型,而是由一系列清晰的矩阵乘法、激活函数、逐元素乘法和梯度下降更新组成。理解这些计算过程,有助于进一步学习循环神经网络、序列建模以及深度学习中的时间序列预测任务。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)