AI智能摘要
GPT
这里是萌新AI,这篇文章介绍了经典论文《Attention Is All You Need》及其 Transformer 模型结构代码。文章从 Embedding 层、Positional Encoding、多头注意力机制到前馈层,详细拆解了编码器与解码器的组成,并强调 mask 机制用于忽略 padding 部分,突出注意力机制在文本处理中的核心作用。
URL
type
Post
status
Published
date
Jun 27, 2025
slug
attention1
summary
多头注意力机制
tags
深度学习
category
论文
icon
password
今天分享一篇经典论文《Attention Is All You Need》。同时,也会根据论文和相关资料提供模型结构主要代码。
📝 论文简述
Transformer的出现掀起文本模型的浪潮。Transformer是Encode和Decode结构。Encode和Decode由多头注意力机制、前馈层(全连接层)和归一化层组成。下图是Transformer的网络结构:

从上图我们可以发现除了Encode和Decode外,整个网络结构还包含了Embedding、Positional Encoding、和最后的线性层。
首先,我们从网络结构的左侧(Encode)输入开始:
- Embedding层:词嵌入层。将每个token转化为d_model个特征,即在token维度上操作。eg: input的shape=(16,64)。其中,16代表batch的大小,64代表模型可接收的最大文本输入长度(max_len)。Embedding层为nn.Embedding(12345, 512)。其中,12345代表的是词典的大小,512代表将每个token嵌入多少个特征。input经过Embedding层后的shape=(16,64,512)。输出为e。
- Positional Encoding:位置编码(使用的是绝对位置编码的三角函数编码)。位置编码的具体内容可以点击链接查看。博主不在这里赘述。输出为p。
- 将位置编码与词嵌入层进行Add。输出为e+p=ep。
- 将ep输入多头注意力机制中。如果我们设置src_mask(源文本的mask)的话,那么我们也需要将该mask一起输入到多头注意力机制中。该mask主要作用于Q@K,将padding的Token值变为-inf。-inf输入softmax()后,会变为0。这样pading的权重值为0,即多头注意力机制不会关注padding。输出为mha。
- ep和mha经过残差结构。输出为ep+mha=ep_mha。
- 将ep_mha输入前馈层(全连接层)。输出为ff.
- ep_mha和ff经过残差结构。输出为ep_mha+ff=ep_mha_ff。
- 循环N次。
接着,我们继续网络结构的右侧(Decode):
Tips
- 和Encode类似,Decode的input也需要经过词嵌入层和位置编码层。
- 与Encode区别:
- Decode的输入是模型的目标文本(按分类模型理解为标签)。
- Decode的tag_mask与Encode的src_mask不同,tag_mask是一个下三角矩阵。ta g_mask主要用于防止Decode提前知道模型的目标文本。
- Decode包含两个多头注意机制。其中第二个注意力机制的K、V是Encode层的输出。
这里博主主要从Decode的第二个多头注意力机制开始记录。
- 第二个多头注意力机制的输入包含Encode的输出ep_mha_ff和第一个多头注意力机制的输出mha。其中,第二个多头注意力机制的mask是src_mask。
- 其他层和Encode层相似。
最后,线性层:
- 将Decode的输出输入到线性层,线性层的输出维度是目标文本字典的大小。
以上便是Transformer网络结构的基本理解,其中Transformer的Encode和Decode可以分开使用。Encode可以看作一个判别器,用于文本分类等,Decode可以看作生成器,用于生成文本等。在后期的博客中,博主会挑几个样例模型记录一下。
🤗 论文代码
下面是Transformer的代码。为了便于伙伴们理解,博主将代码分为数据处理(Datasets)、构建词典和Token的编码和解码、Transformer网络结构和模型训练调用四个部分。
数据处理(Datasets)
博主使用的是Multi30K数据集,将英语翻译成德语。请在HuggingFace下载!如果无法通过代理下载,可以借助国内镜像下载。详细操作,不在这里赘述。
具体代码如下:
构建词典和Token的编码和解码
博主使用spacy库进行文本分词,辅助构建词典。
- 构建词典:
通过spacy将数据集的目标文本进行分词,接着统计每个词出现的次数,然后去除低频次的文本。博主设置为1,保存出现的所有词。
博主最后保存两个Json文件:一个词转数字(word2idx),另一个数字转词(idx2word)。
- 构建Token类:
Token类包含两个函数:Encode和Decode。Encode将文本中的每个词转换为对应的数字。Decode将模型输出的数字转换为对应的文本。
Transformer网络结构
- Embedding层
- 位置编码层
- 多头自注意力机制
- Add&Norm层
- Feed Forward层
- EncoderLayer
- DeconderLayer
- 生成层
主要用于将处理Decode层的输出,并获取下一个词的index。
- Transformer类
模型训练调用
这部分代码较为简单,大家可以直接查看该链接:
总代码
📎 参考文章
以上便是《Attention Is All You Need》论文的相关记录,欢迎您在底部评论区留言,一起交流~
上一篇
记录-为什么模型推理时,显存占用分析只需要KV-Catch而没有Q-Catch
下一篇
Paper-Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting
- 作者:不爱吃香菜的萌新
- 链接:https://hexo.levsongsw.com//paper/attention1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









