Lazy loaded image
Paper-Attention Is All You Need
字数 2553阅读时长 7 分钟
2025-6-27
2025-10-12
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的网络结构:
notion image
从上图我们可以发现除了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

评论
Loading...