news 2026/4/25 15:47:38

用 Excel 手动实现 LSTM 计算过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 Excel 手动实现 LSTM 计算过程

前言

在学习循环神经网络时,很多人会直接使用 Python、TensorFlow 或 PyTorch 来搭建模型。这样虽然效率较高,但也容易出现一个问题:知道怎么调用模型,却不清楚模型内部到底是如何一步一步计算的。

为了更直观地理解长短期记忆网络(LSTM)的运行机制,我这次使用Excel手动搭建了一个简化的 LSTM 计算模型,并将其计算过程完整展示出来,包括:

  • 遗忘门计算
  • 输入门计算
  • 候选状态计算
  • 细胞状态更新
  • 输出门计算
  • 隐藏状态输出
  • 最终输出与损失计算

通过这种方式,可以清楚看到每一个参数、每一步计算以及状态是如何随着时间步不断传递和更新的。


一、什么是 LSTM

LSTM,全称Long Short-Term Memory,中文叫长短期记忆网络,是一种特殊的循环神经网络(RNN)。

LSTM 之所以被广泛使用,是因为它能够在处理序列数据时更好地保留长期信息,缓解普通 RNN 中常见的梯度消失问题。

一个典型的 LSTM 单元通常包括以下几个核心部分:

  • 遗忘门(Forget Gate)
  • 输入门(Input Gate)
  • 候选状态(Candidate State)
  • 细胞状态(Cell State)
  • 输出门(Output Gate)
  • 隐藏状态(Hidden State)

LSTM 的核心思想是:

通过门控机制,有选择地遗忘旧信息、写入新信息,并输出当前时刻的重要信息,从而实现对时序数据的有效建模。


二、实验目标

本次实验的目标是:

使用 Excel 展示一个简化 LSTM 的完整计算过程。

主要包括以下几个部分:

  1. 输入数据与初始状态设置
  2. 门控参数设置
  3. 遗忘门、输入门、候选状态计算
  4. 细胞状态更新
  5. 输出门与隐藏状态计算
  6. 最终输出值与损失函数计算

这样做的目的不是追求大规模训练效果,而是为了更直观地理解 LSTM 的内部计算机制。


三、LSTM 的网络结构说明

在本次 Excel 示例中,我们采用的是一个简化版的 LSTM 单元,并展示两个时间步的计算过程。

每一个时间步中,LSTM 的输入包括:

  • 当前输入:x_t
  • 上一时刻隐藏状态:h_(t-1)
  • 上一时刻细胞状态:C_(t-1)

每一时刻经过门控计算后,得到:

  • 当前细胞状态:C_t
  • 当前隐藏状态:h_t

如果再接一个输出层,还可以进一步得到预测值:

  • 当前输出:y_hat_t

四、LSTM 的核心计算公式

LSTM 的计算过程主要由 5 个关键步骤构成。

1. 遗忘门

遗忘门用于决定上一时刻的细胞状态保留多少信息:

f_t = sigmoid(W_f * [h_(t-1), x_t] + b_f)

其中:

  • f_t表示遗忘门输出
  • W_f表示遗忘门权重
  • b_f表示遗忘门偏置

遗忘门的输出范围在 0 到 1 之间,数值越接近 1,说明旧信息保留越多;越接近 0,说明旧信息被遗忘得越多。

2. 输入门

输入门用于控制当前时刻有多少新信息被写入细胞状态:

i_t = sigmoid(W_i * [h_(t-1), x_t] + b_i)

其中:

  • i_t表示输入门输出
  • W_i表示输入门权重
  • b_i表示输入门偏置

3. 候选状态

候选状态表示当前时刻新生成的候选信息:

g_t = tanh(W_g * [h_(t-1), x_t] + b_g)

其中:

  • g_t表示候选状态
  • W_g表示候选状态权重
  • b_g表示候选状态偏置

4. 细胞状态更新

新的细胞状态由“保留的旧状态”和“写入的新状态”共同组成:

C_t = f_t * C_(t-1) + i_t * g_t

其中:

  • C_t表示当前时刻细胞状态
  • C_(t-1)表示上一时刻细胞状态

这一步是 LSTM 最核心的部分,它体现了模型对记忆的保留与更新能力。

5. 输出门与隐藏状态

输出门用于控制细胞状态中有多少信息被输出为当前隐藏状态:

o_t = sigmoid(W_o * [h_(t-1), x_t] + b_o)

h_t = o_t * tanh(C_t)

其中:

  • o_t表示输出门输出
  • h_t表示当前时刻隐藏状态

隐藏状态h_t一方面可以作为当前时间步的输出,另一方面也会传递到下一时间步参与计算。


五、前向计算过程说明

在 Excel 中,每一个时间步都可以按照下面的顺序进行计算。

第一步:读取输入与上一时刻状态

已知:

x_t, h_(t-1), C_(t-1)

其中:

  • x_t是当前输入
  • h_(t-1)是上一时刻隐藏状态
  • C_(t-1)是上一时刻细胞状态

第二步:计算遗忘门

f_t = sigmoid(W_f * [h_(t-1), x_t] + b_f)

这一部分决定旧状态应该保留多少。

第三步:计算输入门与候选状态

i_t = sigmoid(W_i * [h_(t-1), x_t] + b_i)

g_t = tanh(W_g * [h_(t-1), x_t] + b_g)

输入门负责控制写入比例,候选状态负责生成待写入的新信息。

第四步:更新细胞状态

C_t = f_t * C_(t-1) + i_t * g_t

这一步表示:
一部分旧记忆被保留,一部分新记忆被写入,二者共同构成新的细胞状态。

第五步:计算输出门与隐藏状态

o_t = sigmoid(W_o * [h_(t-1), x_t] + b_o)

h_t = o_t * tanh(C_t)

最终得到当前时刻对外输出的隐藏状态。


六、输出层与损失函数计算

为了让 Excel 文件展示更加完整,本实验还在 LSTM 隐藏状态之后增加了一个简单输出层。

设输出层权重为W_y,偏置为b_y,则预测值可表示为:

y_hat_t = W_y * h_t + b_y

若采用平方误差损失函数,则:

E_t = 1/2 * (y_t - y_hat_t)^2

其中:

  • y_t表示真实值
  • y_hat_t表示预测值
  • E_t表示当前时间步损失

如果展示多个时间步,则总损失可以写为:

E = E_1 + E_2 + ... + E_t


七、Excel 中的实现思路

为了让计算过程更加清晰,我在 Excel 中将整个 LSTM 的运算过程划分为多个区域。

1. 参数设置区

用于设置:

  • 遗忘门权重W_f、偏置b_f
  • 输入门权重W_i、偏置b_i
  • 候选状态权重W_g、偏置b_g
  • 输出门权重W_o、偏置b_o
  • 输出层权重W_y、偏置b_y

2. 输入与初始状态区

用于填写:

  • 当前输入x_t
  • 上一时刻隐藏状态h_(t-1)
  • 上一时刻细胞状态C_(t-1)

在第一个时间步中,一般会将:

h_0 = 0
C_0 = 0

作为初始状态。

3. 门控计算区

这一部分依次计算:

  • 遗忘门f_t
  • 输入门i_t
  • 候选状态g_t
  • 输出门o_t

4. 状态更新区

这一部分负责计算:

  • 细胞状态C_t
  • 隐藏状态h_t

5. 输出与损失区

这一部分负责计算:

  • 预测值y_hat_t
  • 真实值y_t
  • 损失值E_t

通过这种方式,可以在 Excel 中逐格观察 LSTM 在每个时间步内的完整运算过程。


八、实验结果分析

通过这次 Excel 手动实现 LSTM,可以得到以下几点认识。

1. LSTM 的核心在于门控机制

与普通神经网络不同,LSTM 并不是简单的线性变换加激活函数,而是通过多个门来控制信息的流动。

其中:

  • 遗忘门控制旧信息保留程度
  • 输入门控制新信息写入程度
  • 输出门控制当前输出程度

正是这种结构,使 LSTM 具备较强的时序记忆能力。

2. 细胞状态是 LSTM 的关键

LSTM 中最重要的状态变量是细胞状态C_t
它类似于一条“长期记忆通道”,可以把重要信息沿时间方向持续传递下去。

这也是 LSTM 能有效处理长序列问题的重要原因。


九、实验心得体会

在实际学习中,我们经常会直接调用深度学习框架中的 LSTM 层,但这些框架通常已经把底层计算全部封装好了。虽然这样使用起来很方便,但也会让人忽略模型内部真正的运算逻辑。

这次通过 Excel 手动实现 LSTM 后,我对以下几个方面有了更清晰的认识:

  1. 当前输入和历史状态是如何共同参与计算的
  2. 遗忘门、输入门和输出门分别承担什么功能
  3. 细胞状态为什么能够保存长期信息
  4. 隐藏状态是如何从细胞状态中生成的
  5. LSTM 为什么比普通 RNN 更适合处理长序列问题

通过逐步展开 LSTM 的计算过程,我不仅加深了对其数学原理的理解,也提升了自己对序列模型结构的整体认识。


十、总结

本文使用 Excel 对一个简化的 LSTM 模型进行了可视化实现,完整展示了以下过程:

  • 遗忘门计算
  • 输入门计算
  • 候选状态计算
  • 细胞状态更新
  • 输出门计算
  • 隐藏状态输出
  • 最终输出与损失计算

通过这种方式,我们可以把原本较为抽象的 LSTM 内部运算过程拆解成一个个可以观察、可以验证的步骤。对于理解 LSTM 的基本原理,这是一种非常直观且有效的方法。


十一、Excel截图展示


结语

以上就是我使用 Excel 展示 LSTM 计算过程的完整实验内容。通过这次实践,我对 LSTM 的门控机制、状态更新以及时序信息传递方式有了更加深入的理解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 15:47:35

布隆过滤器(BloomFilter)

布隆过滤器是什么? 布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用来判断:一个元素一定不存在/可能存在,它不能100%确定元素存在,但可以100%确定元素不存在。 核心原理 初始…

作者头像 李华
网站建设 2026/4/25 15:45:11

OpenRGB:3步终结RGB软件混乱,跨平台统一灯光控制终极方案

OpenRGB:3步终结RGB软件混乱,跨平台统一灯光控制终极方案 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/O…

作者头像 李华
网站建设 2026/4/25 15:44:33

苹果触控板Windows驱动终极指南:解锁原生级精准触控体验

苹果触控板Windows驱动终极指南:解锁原生级精准触控体验 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad …

作者头像 李华
网站建设 2026/4/25 15:44:12

云R记(lezijie-note0707)全面代码审查报告

云R记(lezijie-note0707)全面代码审查报告 审查日期: 2026-04-24 项目路径: D:\乐字节\01_乐字节Java入门级项目云日记\lezijie-note0707\lezijie-note 技术栈: Java 8 Servlet 4 JSP JSTL MySQL JDBC UEditor …

作者头像 李华
网站建设 2026/4/25 15:43:07

如何从图表图像中智能提取数据?WebPlotDigitizer给你答案

如何从图表图像中智能提取数据?WebPlotDigitizer给你答案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾面对科研…

作者头像 李华