AI智能摘要
GPT
这里是萌新AI,这篇文章介绍了经典论文《Attention Is All You Need》中的 Transformer 模型结构。文章从整体架构入手,重点解析了 Encoder 部分的关键组件:Embedding 层将 token 转化为特征向量,Positional Encoding 添加位置信息,再经过多头注意力机制(结合 mask 处理 padding)和前馈网络,并通过残差连接进行整合。整个过程清晰地展示了数据在模型中的流动与变换。
URL
type
status
date
slug
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 许可协议,转载请注明出处。








