菜单

循环网络

相关源文件

本页面概述了 labml_nn 仓库中的循环神经网络实现。循环网络是一系列神经网络架构,旨在通过维护隐藏状态来处理序列数据,这些隐藏状态捕获序列中先前元素的信息。

循环网络架构概述

该仓库实现了多种循环神经网络架构,每种架构都有其独特的优势

每个实现都遵循一个通用模式

  1. 一个单元格类,实现单个时间步的核心循环单元
  2. 一个模型类,组合多个单元格以形成多层网络

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

实现框架

该模块为不同的循环网络提供了具有一致接口的基础实现

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

长短期记忆 (LSTM)

LSTM 网络旨在克服标准 RNN 中的梯度消失问题,使其能够学习长期依赖关系。

LSTM 单元架构

LSTM 单元维护两种类型的状态

  • 单元状态 (c): 长期记忆
  • 隐藏状态 (h): 输出/短期记忆

它使用四个门来控制信息流

LSTM 单元的更新方程为

i_t = σ(W_xi * x_t + W_hi * h_{t-1} + b_i)
f_t = σ(W_xf * x_t + W_hf * h_{t-1} + b_f)
g_t = tanh(W_xg * x_t + W_hg * h_{t-1} + b_g)
o_t = σ(W_xo * x_t + W_ho * h_{t-1} + b_o)

c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
h_t = o_t ⊙ tanh(c_t)

其中 ⊙ 表示元素级乘法。

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

LSTM 实现细节

LSTMCell 类通过以下方式高效实现该单元格:

  1. 将所有门的线性变换组合成一个单一操作
  2. 可选地应用层归一化
  3. 并行计算门激活

LSTM 类通过以下方式创建多层 LSTM:

  1. 堆叠多个 LSTMCell 实例
  2. 顺序处理时间步
  3. 将每层的输出馈送到下一层

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

循环高速网络 (RHN)

循环高速网络通过高速连接扩展了循环架构,从而实现了在单个时间步内的深度处理。

RHN 单元架构

RHN 单元依赖于状态向量和高速层,允许信息流经多个变换

RHN 单元的更新方程为

h_d^t = tanh(W_h^d * s_{d-1}^t)
g_d^t = σ(W_g^d * s_{d-1}^t)
c_d^t = 1 - g_d^t  # Coupled gate

s_d^t = h_d^t ⊙ g_d^t + s_{d-1}^t ⊙ c_d^t

其中 d 表示从 0 到 D 的深度层索引。

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

RHN 实现细节

RHNCell 类实现了一个单独的 RHN 单元,具有

  1. 可配置的高速层深度
  2. h 和 g 门的组合线性变换
  3. 为简单起见,耦合门 c = 1-g

RHN 类通过以下方式实现多层 RHN:

  1. 堆叠多个 RHNCell 实例
  2. 顺序处理时间步
  3. 将每层的输出传递给下一层

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

HyperLSTM

HyperLSTM 是一种创新方法,其中一个较小的网络(超网络)动态地为较大的 LSTM 网络生成参数。

HyperLSTM 架构

HyperLSTM 由以下部分组成:

关键创新:超网络不直接计算权重,而是生成缩放因子,动态修改主 LSTM 的基础权重矩阵。

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

HyperLSTM 实现细节

HyperLSTMCell

  1. 使用一个小型 LSTM(超网络)来生成特征向量
  2. 将这些特征向量转换为权重和偏置的缩放向量
  3. 应用缩放后的权重高效计算门激活
  4. 使用层归一化以获得更好的性能

HyperLSTM

  1. 堆叠多个 HyperLSTMCell 实例
  2. 维护主 LSTM 状态和超网络状态
  3. 像标准 LSTM 一样逐步处理序列

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

训练与使用

这些循环网络实现可用于语言建模和文本生成等序列建模任务。该仓库包含了用于实验的训练代码

hypernetworks 模块中的 experiment.py 文件演示了如何在莎士比亚数据集上配置和训练这些网络以进行文本生成。

来源: labml_nn/hypernetworks/experiment.py13-31 labml_nn/hypernetworks/experiment.py33-46

结论

该仓库中的循环网络实现提供了一个统一的框架,用于处理不同的架构:

架构主要功能最佳用例
LSTM门控机制,稳定梯度通用序列建模
RHN高速连接,深度单步处理复杂时间依赖
HyperLSTM通过超网络实现动态参数自适应序列建模

所有实现都遵循一致的模式,使得理解不同架构之间的差异以及尝试各种配置变得容易。

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