此页面介绍了在 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 需要位置信息,因为它们缺乏固有的序列处理能力。该仓库提供了两种嵌入变体:
来源: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
TransformerLayer 是编码器和解码器堆栈的基本构建模块。它实现了“pre-norm”(预归一化)变体,其中层归一化(layer normalization)在注意力(attention)和前馈网络(feed-forward networks)之前应用。
来源:labml_nn/transformers/models.py60-128
该实现支持编码器层和解码器层
Encoder 由多个堆叠的 Transformer 层组成,后接层归一化(layer normalization)。
来源:labml_nn/transformers/models.py131-150
Decoder 与编码器类似,但包含对编码器输出的交叉注意力(cross-attention)。
来源:labml_nn/transformers/models.py153-172
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 模型的综合配置类。
此类扩展了 TrainValidConfigs,为自回归 NLP 任务提供了一个可重用的训练器。
来源:labml_nn/experiments/nlp_autoregression.py41-198
此类提供了一种灵活的方式,可以配置具有各种选项的 Transformer 模型。
该仓库包含一个 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 选项 |
| 训练 | NLPAutoRegressionConfigs | NLP 任务的训练配置 |
来源:labml_nn/transformers/models.py labml_nn/transformers/basic/autoregressive_experiment.py