LSTM 及其变体

xwbar的头像
2026-10-06 15:23:31
/
中国勇夺世界杯

LSTM 及其变体

相关源文件

Makefile

docs/transformers/feedback/readme.html

labml_nn/hypernetworks/__init__.py

labml_nn/hypernetworks/hyper_lstm.py

labml_nn/lstm/__init__.py

labml_nn/recurrent_highway_networks/__init__.py

utils/__init__.py

utils/sitemap.py

本文档全面概述了 labml_nn 仓库中实现的长期短期记忆(LSTM)网络及其变体。LSTM是一种基本的循环神经网络架构,通过解决梯度消失问题,有效处理序列数据中的长期依赖。

长短期记忆 (LSTM)

LSTM 网络维护两种类型的状态信息

细胞状态(c):作为长期记忆

隐藏状态(h):作为短期记忆

LSTM 单元架构

来源: labml_nn/lstm/__init__.py20-100

LSTM 单元的计算遵循以下方程

\begin{align} c_t &= \sigma(f_t) \odot c_{t-1} + \sigma(i_t) \odot \tanh(g_t) \ h_t &= \sigma(o_t) \odot \tanh(c_t) \end{align}

其中门的计算方式如下

\begin{align} i_t, f_t, g_t, o_t &= lin_h(h_{t-1}) + lin_x(x_t) \end{align}

这些门控制信息流

输入门(i):控制存储哪些新信息

遗忘门(f):控制丢弃哪些信息

候选细胞(g):提出新值

输出门(o):控制输出什么

LSTMCell 实现

LSTMCell 类实现了一个单独的 LSTM 单元,包含以下关键组件

主要实现细节

结合所有门的线性变换以优化计算

可选地应用层归一化以获得更好性能

处理单个时间步的数据

来源: labml_nn/lstm/__init__.py20-100

多层 LSTM

LSTM 类堆叠多个 LSTM 单元以创建更深的网络

每个层处理前一层的输出

可以提供初始状态或将其初始化为零

返回输出序列和最终状态

来源: labml_nn/lstm/__init__.py103-158

LSTM 变体

HyperLSTM

HyperLSTM 实现了一个动态超网络,其中一个较小的 LSTM 在每个时间步为较大的 LSTM 生成权重修改。

关键概念:

一个较小的 LSTM(超 LSTM)根据当前输入和先前状态生成特征向量

这些特征向量被转换为生成动态缩放因子

缩放因子在每个时间步修改主 LSTM 的权重

这使得网络能够根据上下文调整其参数

来源: labml_nn/hypernetworks/hyper_lstm.py81-199 labml_nn/hypernetworks/hyper_lstm.py202-273

循环高速网络 (RHN)

RHN 将高速网络的概念扩展到循环架构。它们在单个时间步内通过多个变换步骤处理信息。

关键概念:

状态在单个时间步内流经多个“深度”步骤

在每个深度,状态可以被变换或向前传递

变换门(g)决定了要变换多少状态

携带门(1-g)决定了要保留多少先前的状态

这允许在不增加时间步的情况下进行更深层次的信息处理

来源: labml_nn/recurrent_highway_networks/__init__.py19-107 labml_nn/recurrent_highway_networks/__init__.py110-164

LSTM 变体比较

变体主要功能实现类优点标准 LSTM细胞状态,输入/遗忘/输出门LSTMCell, LSTM解决梯度消失问题,基线架构HyperLSTM动态参数生成HyperLSTMCell, HyperLSTM参数自适应,上下文敏感处理RHN每个时间步多个变换深度RHNCell, RHN更深层次的处理而不增加序列长度

来源: labml_nn/lstm/__init__.py labml_nn/hypernetworks/hyper_lstm.py labml_nn/recurrent_highway_networks/__init__.py

实现细节

标准 LSTM 实现

标准 LSTM 包括

LSTMCell:实现一个带前向传播的单个 LSTM 单元

LSTM:实现一个处理序列的多层 LSTM 网络

主要实现细节

通过结合所有门的线性变换优化计算

可选的层归一化以改善训练

堆叠多个单元以构建深度网络

层与时间步之间的清晰状态管理

来源: labml_nn/lstm/__init__.py20-158

HyperLSTM 实现

HyperLSTM 包括

HyperLSTMCell:实现核心 HyperLSTM 机制

HyperLSTM:实现一个多层 HyperLSTM 网络

主要实现细节

较小的超网络处理组合输入和先前的隐藏状态

生成特征向量(z_h, z_x, z_b)用于动态参数缩放

使用线性层将特征向量转换为缩放因子

应用缩放因子来修改主 LSTM 权重

采用层归一化的 G高效实现

来源: labml_nn/hypernetworks/hyper_lstm.py81-273

RHN 实现

RHN 包括

RHNCell:实现一个可配置深度的单个 RHN 单元

RHN:实现一个多层 RHN 网络

主要实现细节

通过多个变换深度处理状态

在每个深度使用组合的变换门和携带门

采用共享参数的高效实现

适用于需要深度状态处理的任务

来源: labml_nn/recurrent_highway_networks/__init__.py19-164

每个实现都遵循相似的模式,即提供单元级类和序列级类,这使得它们在许多应用中可以互换使用,同时提供不同的计算权衡。

红警2尤里复仇:剖析尤里玩法,红警尤里不是那么神秘难搞!
出去玩,有没有靠谱的租车平台推荐?