Transformer是谷歌团队2017年提出的深度学习模型,其核心是自注意力机制(Self-Attention) ,彻底放弃了传统的循环神经网络(RNN)结构,通过并行计算大幅提升训练速度。模型由编码器(Encoder)和解码器(Decoder)堆叠而成,擅长捕捉序列中元素间的长远依赖关系。成为自然语言处理(NLP)的基石,催生了BERT、GPT等众多革命性模型,是当今大语言模型(如ChatGPT)的核心架构。
Transformer是什么
通过这张经典的架构图,从整体到局部的方式来理解其中的概念和机制。对非专业研究大模型的人来说,数学公式理解起来会很吃力,所以下文省去各种公式,主打通俗的讲解,以便大部分人都能明白。
Transformer 的结构
整体上分为四个大的模块:
1.输入处理
1.1 Input Embedding
将输入的单词(或 token)转换转换为向量表示,捕捉词汇间的关系,如 "苹果" → [0.1, 1.5, 0.7…]
1.2 Positional Encoding
解释输入序列中单词顺序的方法, 为输入序列的每个位置生成位置向量,以便模型能够理解序列中的位置信息。这个向量能决定当前词的位置,或者说在一个句子中不同的词之间的距离。
1.3 Output Embedding
在解码器中使用,将目标文本中的词汇数字表示转换为向量表示。
2.编码器( Encoder )
由N个编码器层堆叠而成。每个编码器层由两个子层连接结构组成: 第一个子层是多头自注意力子层,第二个子层是一个前馈全连接子层。每个子层后都接有一个规范化层和一个残差连接。
2.1 Multi-Headed Self-Attention(多头自注意力)
- 作用: 让模型同时关注输入中的所有单词,并计算它们之间的关系。就像让一个团队同时阅读一个句子,每个人负责不同的分析角度。
- 核心思想: 让句子中的每个词都能直接“看到”并权衡所有其他词的重要性,从而理解上下文。
- 优点: 模型不是只做一次这种分析,而是并行地进行多次(例如8次),每次代表一个不同的“专业视角”。如:一个“头”可能专门关注语法关系(比如动词和主语的关系);另一个“头”可能专门捕捉语义关联(比如代词指代的是哪个名词);其他“头”可能负责识别修辞手法或短语搭配, 最后,所有这些不同角度的分析结果被综合起来,形成对句子完整、立体的理解。
- 关键:并行处理所有单词,不像RNN需要逐个计算。
2.2 Add&Norm
- 残差连接: 防止信息在深层网络里越传越弱,保证梯度能直接“跳”回去,缓解梯度消失。
- 规范化层: 给每层输出的数据“踩刹车”,稳定分布,让训练更平稳、更快。
两者结合,构成了Transformer稳定训练深层网络的基石。
2.3 Feed-Forward Network(前馈神经网络)
可以将前馈神经网络(FFN)想象成模型在“深入思考”每个单词。****
- 作用: 对注意力机制提取出的信息进行“加工消化”和“升华”,从而增强模型的理解和表达能力。。
- 类比: 像对"狗"的向量做一次深度解读,补充细节(比如"猫是哺乳动物")。
3.解码器( Decoder )
由N个解码器层堆叠而成。每个解码器层由三个子层连接结构组成: 第一个子层是一个带掩码的多头自注意力子层,第二个子层是一个多头注意力子层(编码器到解码器),第三个子层是一个前馈全连接层。每个子层后都接有一个规范化层和一个残差连接。
3.1 Masked Multi-Headed Self-Attention(掩码多头自注意力)
- 作用: 训练时防止模型"作弊"(只能看到当前和之前的单词,不能看未来的)。
- 举例: 想象一下老师在教学生做“完形填空”:普通多头注意力:学生可以看到完整的句子和答案,然后去学习,这无法检验他真正的预测能力。掩码多头注意力:老师会把要预测的那个词以及它后面的所有词都遮挡住(这就是“掩码”) 。学生只能利用已经出现的上文信息来推测下一个词应该是什么。
3.2 Encoder-Decoder Attention(编码器到解码器)
- 作用: 让解码器(Decoder)在生成每一个新词时,都能有针对性地回顾并关注编码器(Encoder)所看到的整个输入句子中最相关的部分。
- 场景: 翻译任务中,解码器生成英文时,会参考编码器处理的中文输入。
想象你是一名翻译员,正在将中文“我爱吃苹果”翻译成英文。
编码器(Encoder) :先通读并完整理解整个中文句子,将其含义压缩成一个“智能上下文包”。
解码器(Decoder) :开始逐个单词生成英文。
- 当要生成 eat 这个动词时,解码器会问:“在我手中的这个‘智能上下文包’里,哪个部分最重要?”。
- Encoder-Decoder Attention机制此刻就会启动!它像一个高效的助手,立刻在中文原句里扫描,并发现“吃”这个词与当前要生成的 eat 最相关,于是将注意力重点放在“吃”上,将其信息传递给解码器。
- 同样,在生成 apple 时,注意力机制又会精准地聚焦到原句中的“苹果”上。
它确保了翻译的每一个输出词都精准地对应到输入的相关部分,从而生成准确、流畅的译文。这就是它比传统方法更强大的关键
3.3 Norm 和 Feed-Forward Network
- 与编码器类似,对解码器的表示进行归一化和深度处理
4.输出处理
4.1 Linear线性层
- 作用:变换维度和提取分类信息, 将解码器输出的向量转换为最终的输出维度。
- 举例: 这就像一位精通所有语言的裁判,在听完所有评委(注意力头)的讨论后,最终需要从数万个候选答案(词表)中,举牌亮出唯一正确的那个答案(下一个词)。这个“举牌”的动作,就是线性层完成的。
4.2 Softmax层
- 作用: 是Transformer的“决策裁判”,负责将分数转化为概率,它接收线性层输出的原始分数(logits),这些分数有正有负、大小不一。Softmax的核心工作就是对所有分数进行指数放大和归一化处理,确保它们全部变成0到1之间的概率值,且所有概率之和为1。
- 举例: 就像一场选美比赛,线性层输出了各位选手的初始得分(如9.0, 5.0, 2.0)。Softmax裁判的工作不是直接看分数,而是将这些分数转化为获胜概率。经过它的计算,得分9.0的选手可能获得90%的胜率,5.0的变成9%,2.0的只剩1%。模型最终会根据这个概率分布来选择最终的获胜者(即下一个要生成的词)。
Transformer 的机制
Transformer 用于处理文本的最重要技术是使用注意力而不是递归,在理解多头注意力之前,先了解下注意力机制是什么。
一 .自注意力机制
核心思想:让序列中的每个元素都“互相认识”
想象你在一间会议室里,有一句话的所有词都坐在桌旁,比如 ["我", "爱", "吃", "苹果"] 。自注意力机制要做的,就是组织一场讨论会,让每个词都和其他所有词交流一下,搞清楚自己和别人的关系。
它解决了什么问题?
在它出现之前,模型(如RNN)处理序列是“顺序的”和“孤立的”。一个词只能看到它前面的词,并且距离越远的词,关系越难捕捉。这导致两个问题:
- 长距离依赖问题:句子开头的信息很难有效传递到句尾。
- 无法并行计算:必须一个一个词按顺序处理,效率低。
自注意力机制完美地解决了这两个问题。
它是如何工作的?
对于句子中的每一个词(例如 "吃" ),自注意力机制通过三步来计算它的新表示:
- 1计算关联度(打分) : "吃" 会向句子中的每一个词(包括它自己)发出一个问题:“我和你的相关程度有多高?” 这个相关度通过一个简单的数学操作( Query 和 Key 的点积)来计算。
- 结果可能是:和 "我" 关系不大(分数低),和 "爱" 有点关系(分数中),和 "苹果" 关系非常密切(分数很高)。
- 2标准化权重(Softmax) :将这些分数转换成一组权重(概率分布),所有权重之和为1。这步确保了模型明确“现在应该更关注谁”。
- 经过计算, "苹果" 可能会获得一个接近0.9的极高权重,而 "我" 的权重可能只有0.01。
- 3加权求和:最后, "吃" 会按照上一步得到的权重,对所有词的 Value (值向量)信息进行加权平均,求和得到一个新的、更能代表当前语境的 "吃"* 。
- 这个新的 "吃"* 向量就不再是孤立的了,它浓缩了整个句子的上下文信息,特别是包含了 “苹果” 的强烈信号。模型因此能明白,这里的“吃”是一个作用于“苹果”的动作。
打个技术比方
你可以把自注意力看作是一个可学习的、动态的查找与加权操作。
- Query (Q) :相当于“我要查找什么?”
- Key (K) :相当于“我身上有什么标签?”
- Value (V) :相当于“我的实际内容是什么?”
过程就是:用 Query 去和所有 Key 匹配,找到最相关的几个,然后把对应那几个的 Value 拿过来,按相关性混合起来。
核心优势
- 全局视野:每个词都能直接与序列中任何位置的词直接交互,彻底解决了长距离依赖问题。
- 极致并行:所有词对之间的关联计算都可以同时进行,计算效率极高。
- 可解释性:通过分析注意力权重,我们能清楚地看到模型在做决策时关注了哪些词,就像一张热力图。
二 . Multi-Head Attention(多头注意力)
可以把多头注意力理解成:让多个“专家小组”同时、独立地从不同角度分析同一份数据,最后综合他们的见解,得到更深刻、更全面的理解。
1. 为什么需要“多头(Multi-Head)”?
单一注意力机制有一个局限:它每次只做一种类型的关联。就像一个专家看问题,可能只擅长一个角度。
但一句复杂的话包含多种信息:
- 语法关系(如:主谓宾)
- 语义关系(如:“它”指代谁)
- 语境关系(如:“苹果”指的是公司还是水果?)
如果只让一个“专家”做一次注意力计算,它可能无法同时捕获所有这些不同类型的关系。
2. 多头注意力如何工作?
多头注意力的做法非常直观:
- 组建专家小组:我们不只用一个“专家”,而是设置 h 个(例如8个)独立的“专家”(称为头 Head)。每个“专家”都配备了自己的一套参数(初始化为不同的值),因此它们会倾向于专注于不同类型的关系和模式。
- 并行分析:将同一份输入数据(比如一个句子的词向量)同时送给这 h 个“专家”。每个专家都独立地进行一次完整的注意力计算。
- 头1 可能专门负责寻找指代关系(发现 “它” 指向 “手机” )。
- 头2 可能专门负责捕捉修饰关系(发现 “新款” 修饰 “手机” )。
- 头3 可能擅长识别语义类别(发现 “苹果公司” 是一个实体)。
- ...等等。
- 综合会诊:每个“专家”都得出了自己的分析结果(一个表示)。最后,我们将所有头的输出结果拼接(Concat) 起来,再通过一个线性层进行融合和降维,形成最终的输出。
3. 技术优势
- 模型容量更大:多个头让模型能够同时关注来自不同表示子空间的信息,极大地增强了模型的表达能力和学习容量。
- 效果更好:类似于集成学习(Ensemble Learning),综合多个专家的意见比单一专家的意见更全面、更稳定,从而提升了模型性能。
- 并行化:多个头之间没有任何依赖,可以完全并行计算,效率非常高。
一个简单的比喻:
你要分析一辆汽车。
- 单头注意力:派一个机械师去,他可能主要关注发动机、变速箱等机械结构。
- 多头注意力:同时派出一个机械师、一个设计师和一个市场专员。
- 机械师看动力系统。
- 设计师看外观和内饰。
- 市场专员看品牌价值和定位。
最后,你把三份报告综合起来,就对这辆车有了360度无死角的深刻理解。这就是多头注意力的威力。
三 . Scaled Dot-Product Attention(缩放点积注意力)
可以把它理解为一个精准的信息检索系统,它的任务是为一个“查询”(Query)从一堆“键值对”(Key-Value Pairs)中,找到最相关的“值”(Value)。
它的工作流程见上图中的1-5步。
一个形象的比喻:选秀评分
- 打分:评委(Query)根据评分标准(Key)为每位选手(Value)的表现打分。
- 缩放与归一化:为了防止某个评委打分手太松或太紧(分数过高或过低),所有分数先进行一次标准化处理(缩放)。然后计算出每位选手的得奖概率(Softmax归一化)。
- 加权求和:最后,大赛的最终结果不是某个选手,而是将所有选手的才艺(Value)按他们的得奖概率(权重)组合成一个“终极才艺包”。这个“才艺包”就是输出,它包含了所有信息,但重点突出了冠军的特质。
技术总结
- 公式:
- 作用:根据查询Q,从源序列(K-V)中动态地、有区分地提取信息,并汇集成一个新的上下文感知的向量。
- 优势:
- 可并行:所有计算都是矩阵操作,可完全并行化,速度极快。
- 针对性:输出是加权和,模型能聚焦于最相关的信息。
- 稳定性:缩放因子确保了训练过程的稳定性。
这就是缩放点积注意力,它是让 Transformer 能够真正“理解”上下文关系的数学基础。
总结
以上简单介绍Transformer的主要模块及基本的概念,通过本文的学习,我们了解到Transformer通过多头自注意力机制同时从多个角度分析输入信息;使用位置编码保留序列顺序信息;借助残差连接和层归一化确保训练稳定性。编码器负责理解输入内容,解码器则基于编码结果生成目标序列,其中掩码注意力防止解码时窥见未来信息。如果想了解更底层的模型和数学公式,可自行搜索。