菜单

基本 Transformer 模型

相关源文件

此页面介绍了在 labml_nn 仓库中实现的基础 Transformer 模型。这些实现基于论文《Attention Is All You Need》中介绍的架构,并作为更复杂 Transformer 变体的构建模块。对于 Switch Transformer 或 Feedback Transformer 等专用 Transformer 变体,请参阅专用 Transformer 变体

核心架构概述

基本的 Transformer 架构由两个主要组件组成:一个编码器(encoder)和一个解码器(decoder)。编码器处理输入序列,而解码器则根据编码信息生成输出序列。这两个组件具有相似的结构,但在注意力机制方面存在关键差异。

来源:labml_nn/transformers/models.py193-224

核心组件

嵌入和位置编码

Transformer 需要位置信息,因为它们缺乏固有的序列处理能力。该仓库提供了两种嵌入变体:

  1. 固定位置编码:使用原始论文中描述的正弦函数。
  2. 学习位置编码:使用可训练的位置向量。

来源:labml_nn/transformers/models.py24-57

固定位置编码

EmbeddingsWithPositionalEncoding 类使用预定义的正弦函数。

PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

其中 pos 是位置,i 是维度索引。

来源:labml_nn/transformers/models.py24-39 labml_nn/transformers/positional_encoding.html

学习位置编码

EmbeddingsWithLearnedPositionalEncoding 类使用可训练参数来表示位置。

来源:labml_nn/transformers/models.py42-57

Transformer 层

TransformerLayer 是编码器和解码器堆栈的基本构建模块。它实现了“pre-norm”(预归一化)变体,其中层归一化(layer normalization)在注意力(attention)和前馈网络(feed-forward networks)之前应用。

来源:labml_nn/transformers/models.py60-128

该实现支持编码器层和解码器层

  • 编码器层仅使用自注意力(self-attention)
  • 解码器层使用自注意力(self-attention)和源注意力(source attention)(用于关注编码器输出)

编码器和解码器

编码器

Encoder 由多个堆叠的 Transformer 层组成,后接层归一化(layer normalization)。

来源:labml_nn/transformers/models.py131-150

解码器

Decoder 与编码器类似,但包含对编码器输出的交叉注意力(cross-attention)。

来源:labml_nn/transformers/models.py153-172

生成器 (Generator)

Generator 是一个简单的线性投影层,它将解码器的输出转换为词汇表大小的对数几率(logits)。

来源:labml_nn/transformers/models.py175-190

完整的编码器-解码器架构

EncoderDecoder 类结合所有组件以创建一个完整的 Transformer 模型。

来源:labml_nn/transformers/models.py193-224

自回归模型

对于文本生成任务,该仓库提供了一个 AutoregressiveTransformer 实现,它只使用 Transformer 的编码器部分,并带有因果掩码(causal mask)以防止查看未来词元(tokens)。

来源:labml_nn/transformers/basic/autoregressive_experiment.py26-60

自回归模型采用三角掩码,确保每个位置只能关注先前的位置,从而防止在训练和推理期间未来词元的信息泄露。

训练配置

该仓库提供了用于训练 Transformer 模型的综合配置类。

NLPAutoRegressionConfigs

此类扩展了 TrainValidConfigs,为自回归 NLP 任务提供了一个可重用的训练器。

来源:labml_nn/experiments/nlp_autoregression.py41-198

TransformerConfigs

此类提供了一种灵活的方式,可以配置具有各种选项的 Transformer 模型。

来源:144-326

使用示例

该仓库包含一个 Jupyter 笔记本,演示了如何使用 Tiny Shakespeare 数据集训练一个用于文本生成的基础 Transformer 模型。

来源:labml_nn/transformers/basic/autoregressive_experiment.ipynb162-190

训练循环

Transformer 模型的训练循环同时处理训练和评估模式。

来源:labml_nn/experiments/nlp_autoregression.py124-198 labml_nn/transformers/basic/autoregressive_experiment.py108-150

关键组件摘要表

组件目的
嵌入EmbeddingsWithPositionalEncoding使用固定位置编码嵌入词元
嵌入EmbeddingsWithLearnedPositionalEncoding使用学习位置编码嵌入词元
Transformer 层TransformerLayer编码器/解码器的基本构建模块
编码器编码器使用自注意力处理输入序列
解码器解码器使用自注意力与交叉注意力生成输出
生成器 (Generator)生成器 (Generator)投影到词汇表对数几率
完整模型EncoderDecoder完整的编码器-解码器模型
自回归AutoregressiveTransformer用于文本生成的模型
配置TransformerConfigs可配置的 Transformer 选项
训练NLPAutoRegressionConfigsNLP 任务的训练配置

来源:labml_nn/transformers/models.py labml_nn/transformers/basic/autoregressive_experiment.py