5.3 Transformer 注释
创建日期: 2025-04-08
过去八年中,Transformer 一直是许多人关注的焦点。文本以逐行代码实现的方式展示了一个论文的注释版本。它重新排序并删除了原始论文中的一些部分,并在整个过程中添加了注释。全部实现在 transformer.py 中,它是完整且有用的。
5.3.1 背景
减少顺序计算的目标也构成了扩展神经 GPU、ByteNet 和 ConvS2S 的基础,它们均使用卷积神经网络作为基本构建模块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,关联任意两个输入或输出位置信号所需的运算次数会随着位置间距离的增加而增加,ConvS2S 呈线性增长,ByteNet 则呈对数增长。这使得学习远距离位置之间的依赖关系变得更加困难。在 Transformer 中,运算次数被减少到恒定值,但由于平均注意力加权位置,有效分辨率会降低,我们通过多头注意力机制来抵消这一影响。
自注意力机制(有时也称为内部注意力机制)是一种将单个序列的不同位置关联起来以计算该序列表征的注意力机制。自注意力机制已成功应用于各种任务,包括阅读理解、抽象概括、文本蕴涵和学习与任务无关的句子表征。端到端记忆网络基于循环注意力机制而非序列对齐循环,并且已被证明在简单语言问答和语言建模任务中表现良好。
然而,据我们所知,Transformer 是第一个完全依靠自我注意力来计算其输入和输出表示的转换模型,而无需使用序列对齐的 RNN 或卷积。
5.3.2 模型架构
大多数竞争性神经序列传导模型都具有编码器-解码器结构,编码器将输入序列符号表示 \((x_1, ... , x_n)\) 映射成为一些列连续的表示 \(z = (z_1, ... , z_n)\) 。给定 \(z\) ,解码器每次生成一个元素,最终生成输出序列 \(y_1, ... , y_m\) 。在每一步中,模型都是自回归的,在生成下一个符号时,将先前生成的符号作为附加输入。