当前位置: 首页 > news >正文

用 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 的门控机制、状态更新以及时序信息传递方式有了更加深入的理解。

http://www.jsqmd.com/news/698690/

相关文章:

  • Zotero文献去重终极指南:使用ZoteroDuplicatesMerger插件高效清理重复文献
  • tmux aguvis test
  • 告别裸奔通信!给你的单片机项目嵌入一个轻量级RPC框架(附nRF52/STM32源码)
  • 浅谈脉冲神经网络
  • 3步搞定明日方舟全日常!MAA助手终极自动化攻略指南
  • 保姆级教程:用Python和CodeFormer修复模糊老照片,从环境搭建到实战调参
  • 猫抓cat-catch深度解析:构建专业级浏览器资源捕获工作流的终极指南
  • 呼市知名的床垫制造厂
  • EndNote X9/20/21 中文文献引用终极优化:手把手教你将‘and/etal’精准替换为‘和/等’
  • Halcon描述符匹配实战:用harris_binomial检测器搞定旋转缩放场景下的纹理识别
  • MarkDownload 终极指南:从网页剪辑到知识管理的深度探索
  • 终极指南:用MAA助手3步实现明日方舟全自动刷图,告别重复劳动
  • C语言基础(一)
  • UI-TARS桌面版完整指南:3分钟快速上手智能GUI自动化操作
  • CVPR2022 Oral解读:3D检测新SOTA,FocalsConv的PyTorch实现与调参避坑指南
  • FPGA做FFT,选流水线还是突发I/O?Xilinx IP核四种架构的实战选择指南
  • 如何从图表图像中智能提取数据?WebPlotDigitizer给你答案
  • APKMirror安卓客户端:安全高效的APK下载与管理终极指南
  • python csv
  • ESP-IDF离线安装包+Python虚拟环境:打造Windows上最稳定的ESP32开发环境(避坑网络问题)
  • 如何通过Perseus开源补丁解锁《碧蓝航线》全皮肤功能:技术原理与实战指南
  • 告别龟速下载!RedHat 9/CentOS Stream 9 一键切换阿里云、清华等国内Yum源(2024最新)
  • C++26合约迁移紧急预案:Legacy代码零修改接入方案,已验证于千万行金融交易系统(附ASAN+Contract双监控POC)
  • 滴哦小精灵:轻松搞定桌面备忘与快捷启动
  • 布隆过滤器(BloomFilter)
  • ROS导航包老是定位飘?可能是你的tf树没搞对(诊断与修复指南)
  • 避坑指南:在Qt和VS2022中正确引用Halcon C++库,解决‘未定义标识符’和链接错误
  • python sqlite3
  • 2026年专业的食品饮料动态膜再生系统有哪些 - 品牌排行榜
  • 5个核心技巧:用Pixel-Composer节点式编辑打造专业像素艺术特效