Attention Is All You Need
AI 发展史上划时代的一篇论文。论文在线阅读。
中文翻译:注意力就是你所需要的一切
论文介绍
1. 论文发表时间与主要作者
- 论文于2017年6月发表在arXiv上,并在2017年的NeurIPS会议上正式发布
- 主要作者包括Ashish Vaswani、Noam Shazeer、Niki Parmar、Jakob Uszkoreit、Llion Jones、Aidan N. Gomez、Łukasz Kaiser和Illia Polosukhin,他们主要来自Google Brain、Google Research和多伦多大学
2. 论文背景与解决的问题
- 在此论文之前,处理序列数据(如文本)的主流深度学习模型是RNN(循环神经网络)及其变种LSTM和GRU
- 这些模型存在两个主要问题:
- 顺序计算限制了并行性,导致训练速度慢
- 长距离依赖问题,即使LSTM等设计用来缓解这个问题,但处理长序列时仍然效果不佳
- 论文提出了一种全新的序列转换模型架构——Transformer,完全基于注意力机制,摒弃了传统的循环和卷积结构
3. 解决效果
- 在WMT 2014英德翻译任务上,Transformer模型(big版本)达到了28.4 BLEU分数,比当时最先进的模型高出2.0分以上
- 在WMT 2014英法翻译任务上,达到了41.0 BLEU分数,接近当时的最高水平
- 训练效率显著提高:基础版Transformer在8块NVIDIA P100 GPU上仅训练12小时就达到了接近最先进的性能,而最大版本仅需3.5天,远少于之前顶级模型所需的训练时间
4. 引用量与影响力
- 截至目前,该论文的引用量已超过10万次,是AI领域最具影响力的论文之一
- 影响力体现在:
- 奠定了现代大语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等都基于Transformer
- 引发了序列建模的范式转变,证明了自注意力机制的强大能力
- 影响力从NLP扩展到计算机视觉(Vision Transformer)、语音处理、推荐系统等多个AI领域
论文主要内容概括
Transformer架构概述
Transformer采用经典的编码器-解码器(Encoder-Decoder)结构,但完全基于注意力机制,不使用任何循环或卷积操作:
1. 整体架构
- 编码器(Encoder):由N个相同的层堆叠而成(论文中N=6)
- 每层包含两个子层:多头自注意力机制和前馈神经网络
- 每个子层都采用残差连接和层归一化
- 输入和输出维度均为512
- 解码器(Decoder):同样由N个相同的层堆叠
- 每层包含三个子层:掩码多头自注意力、编码器-解码器注意力和前馈神经网络
- 掩码自注意力确保预测位置i时只能依赖位置小于i的输出
2. 核心创新:注意力机制
缩放点积注意力(Scaled Dot-Product Attention)
- 计算公式:Attention(Q, K, V) = softmax(QK^T/√d_k)V
- 其中Q(查询)、K(键)、V(值)是输入向量的线性变换
- 除以√d_k是为了防止点积过大导致softmax梯度消失
多头注意力(Multi-Head Attention)
- 不是单一的注意力函数,而是将输入投影到h个不同的空间
- 在每个投影空间独立计算注意力,然后合并结果
- 允许模型同时关注不同位置的不同表示子空间信息
- 论文中使用了8个注意力头(h=8)
3. 位置编码(Positional Encoding)
- 由于Transformer不使用循环或卷积,需要额外的位置信息
- 使用正弦和余弦函数生成位置编码:
- PE(pos, 2i) = sin(pos/10000^(2i/d_model))
- PE(pos, 2i+1) = cos(pos/10000^(2i/d_model))
- 这种编码允许模型学习关注相对位置
4. 前馈网络(Feed-Forward Network)
- 每个位置独立应用相同的前馈网络
- 包含两个线性变换和一个ReLU激活函数
- 内部维度为2048,远大于模型维度512
5. 嵌入和Softmax
- 使用学习的嵌入将输入和输出转换为d_model维向量
- 输入嵌入、输出嵌入和预Softmax线性变换共享相同的权重矩阵
训练细节与实验结果
训练设置
- 使用Adam优化器,β1=0.9,β2=0.98,ε=10^-9
- 学习率采用预热和衰减策略
- 使用残差dropout(rate=0.1)防止过拟合
- 标签平滑(label smoothing)ε_ls=0.1
模型变体
- 基础模型(base):d_model=512,6层编码器和解码器,8个注意力头,总参数量6500万
- 大模型(big):d_model=1024,6层编码器和解码器,16个注意力头,总参数量2.13亿
主要实验结果
- 英德翻译:基础模型BLEU=27.3,大模型BLEU=28.4
- 英法翻译:基础模型BLEU=38.1,大模型BLEU=41.0
- 消融实验显示:
- 多头注意力优於单头注意力
- 减少注意力头数量或键/值维度会降低性能
- 大模型比基础模型效果更好
结论与影响
Transformer模型通过完全依赖注意力机制,成功解决了序列转换任务中的长距离依赖问题,同时显著提高了训练效率。其核心创新——自注意力机制——允许模型直接建模序列中任意位置之间的依赖关系,无需通过循环结构逐步传递信息。
这一架构为后续的预训练语言模型(如BERT、GPT等)奠定了基础,彻底改变了自然语言处理领域的技术路线,并逐渐扩展到计算机视觉等其他领域。可以说,现代大语言模型和生成式AI的繁荣,都源于这篇开创性的论文。
问题:是否每个词元从encoder出来,以后分别被传送到decoder解码翻译,传送一个处理一个?
你说对了一半!我们来详细拆解一下:
Encoder 的作用确实是产生“词元的上下文表示”:
- 编码器(Encoder)接收整个输入序列(例如 "我", "爱", "你")。
- 通过自注意力(Self-Attention)机制,它让每个词元都能“看到”句子中的其他所有词元,从而理解彼此之间的关系。
- 最终,编码器输出的是一整套向量,其中每个向量都代表了对应输入词元("我", "爱", "你")在整个输入句子语境下的含义。所以,是的,编码器的主要任务是为输入序列的每个词元生成丰富的上下文表示。
这些表示如何传递给 Decoder?不是“传送一个处理一个”:
- 编码器完成工作后,它会把所有输入词元的最终上下文表示(通常是最后一层编码器输出的向量集合)一次性地传递给解码器(Decoder)的每一个时间步。
- 解码器的工作方式是**自回归(auto-regressive)**的,也就是一个词一个词地生成输出序列(例如,先生成 "I",再生成 "love",最后生成 "you")。
- 关键点在于: 在解码器生成每一个目标词元(比如生成 "love")的过程中,它都会利用一种叫做“编码器-解码器注意力”(Encoder-Decoder Attention)的机制。这个机制允许解码器在当前时间步回顾和关注(attend to)编码器输出的所有上下文表示。
- 解码器会判断,为了生成当前的输出词(比如 "love"),输入序列("我", "爱", "你")的哪些部分的上下文表示(由编码器提供)是最重要的。在生成 "love" 时,它很可能会高度关注(assign high attention weight to)编码器为 "爱" 生成的那个上下文向量,但同时也会参考 "我" 和 "你" 的向量信息。
- 所以,不是编码器输出一个词元的表示,解码器就处理这一个;而是编码器一次性提供所有输入词元的上下文信息,解码器在自己生成序列的每一步,都会去查询和利用这一整套信息,并重点关注最相关的部分。
总结:
- 编码器整体处理输入,产生一套包含上下文信息的向量。
- 解码器逐个生成输出词元。
- 在生成每个输出词元时,解码器都会访问并关注编码器产出的那一整套向量,以确定输入序列的哪些部分对当前生成最重要。
可以想象成:编码器先把整篇中文原文("我爱你")彻底读懂,并做好了一份详细的笔记(上下文表示)。然后解码器在翻译时,每要写一个英文单词,都会翻看这份完整的中文笔记,找到最相关的部分作为参考。
如何给小学生讲解transformer的工作原理和生成过程?
好的,想象一下我们要教一个非常聪明的机器人学习怎么把中文翻译成英文。这个机器人叫做“变形金刚”(Transformer),但它不变汽车,它变语言!
目标: 让机器人把 “我 爱 猫咪” 翻译成 "I love cats"。
第一步:让机器人先“读懂”中文句子
- 拆开句子: 就像我们读书要一个字一个字看,机器人先把句子拆开成小块:“我”、“爱”、“猫咪”。
- 查字典: 机器人有个特别的字典,能把每个中文词变成一个“密码”(这就像给每个词一个特别的数字代码,但更复杂点)。
- 排排坐,加序号: 机器人不仅要知道每个词是什么意思,还要知道它们排在第几个。所以它给每个词加上了“座位号”(比如“我”是1号,“爱”是2号,“猫咪”是3号)。这样就不会搞混顺序了。
- 开大会,互相看: 现在最神奇的部分来了!想象一下,这三个词(“我”、“爱”、“猫咪”)坐在一起开会。为了真正理解整个句子的意思,每个词都要“看一看”其他所有的词。
- “爱”这个词会看看“我”和“猫咪”,心想:“哦,是‘我’在‘爱’‘猫咪’啊!”
- “我”也会看看“爱”和“猫咪”,知道自己是做动作的人。
- “猫咪”也会看看“我”和“爱”,知道自己是被爱的那个。 这个互相看、互相理解的过程,就叫做**“注意力”(Attention)**。就像我们在教室里,老师讲到重要的地方,我们会特别注意听一样,机器人也会特别注意那些对理解句子意思很重要的词。
- 写笔记: 开完会后,每个词都对自己和大家的关系有了更深的理解。它们把自己新的、更深刻的“意思”(带有上下文信息的新密码)写在一张“笔记”上。这个负责读懂中文句子、写笔记的部分,叫做**“编码器”(Encoder)**。
第二步:让机器人开始“写”英文句子
现在,另一部分机器人要开始工作了,它叫**“解码器”(Decoder)**,负责把中文笔记翻译成英文。
- 准备开始: 解码器说:“我要开始写英文了!” 它先写下一个表示“开始”的信号。
- 写第一个词: 解码器看着编码器写的所有“中文笔记”,问自己:“根据‘我 爱 猫咪’的笔记,英文第一个词应该是什么?” 它发现“我”的笔记最重要,于是它“特别注意”看了一下“我”的笔记,然后写下了 "I"。
- 写第二个词: 现在解码器知道已经写了 "I"。它又回头看了看所有的“中文笔记”,并且也看了看自己刚刚写的 "I"。它问:“根据‘我 爱 猫咪’的笔记,并且我已经写了'I',下一个词应该是什么?” 它发现“爱”的笔记现在最重要,于是它“特别注意”看了一下“爱”的笔记,然后写下了 "love"。
- 写第三个词: 解码器知道已经写了 "I love"。它再次回头看所有的“中文笔记”,也看了看自己写的 "I" 和 "love"。它问:“根据‘我 爱 猫咪’的笔记,并且我已经写了'I love',下一个词是什么?” 它发现“猫咪”的笔记最重要,于是“特别注意”看了一下“猫咪”的笔记,写下了 "cats"。
- 结束: 解码器看笔记,觉得句子完整了,就写下一个“结束”的信号。
总结一下:
- Transformer 就像一个超级翻译团队。
- 编码器(Encoder) 像个阅读理解高手,它仔细阅读中文句子,让每个词都理解自己在句子里的意思(通过互相“看”和“注意”)。然后写下包含所有理解的“笔记”。
- 解码器(Decoder) 像个英文写作高手,它一边看着编码器写的“中文笔记”,一边想着自己已经写了哪些英文单词,一个词一个词地把英文句子写出来。在写每个英文词的时候,它都会特别“注意”看笔记里和当前要写的词最相关的部分。
这个“互相看”(自注意力)和“看笔记”(编码器-解码器注意力)的注意力机制,是 Transformer 机器人特别厉害的地方,让它能很好地理解长句子和复杂的语言!