基于 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 计算过程有以下优点:

  1. 每一步计算都能直接看到中间结果;
  2. 可以清晰观察四个门对细胞状态和隐藏状态的影响;
  3. 修改输入、权重、偏置或学习率后,公式会自动联动更新;
  4. 适合初学者理解 LSTM 的前向传播和反向传播;
  5. 相比直接阅读代码,Excel 表格更直观地展示了矩阵运算和梯度计算过程。

9. 总结

本文通过一个简化的单时间步 LSTM 示例,结合 Excel 文件展示了 LSTM 的完整计算流程。LSTM 的关键思想在于通过遗忘门、输入门和输出门控制信息的保留、写入和输出。细胞状态 c_t 是长期记忆的载体,隐藏状态 h_t 则是当前时间步对外输出的结果。

通过 Excel 文件可以看到,LSTM 并不是一个抽象的“黑箱”模型,而是由一系列清晰的矩阵乘法、激活函数、逐元素乘法和梯度下降更新组成。理解这些计算过程,有助于进一步学习循环神经网络、序列建模以及深度学习中的时间序列预测任务。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐