文章目录
前言
玩 AI、学深度学习、做大模型的小伙伴,没人能绕开 Transformer。
现在爆火的ChatGPT、文心一言、讯飞星火,还有BERT、GPT系列模型,底层全部都是Transformer架构。
很多新手一看到 Transformer、自注意力、编码器、解码器这些名词就头大,觉得是高深的黑科技。
其实Transformer 一点都不难!本文不堆晦涩专业术语,全程大白话 + 生活化比喻,零基础小白也能彻底看懂,看完直接掌握所有大模型的底层核心!
玩AI、学深度学习、做大模型的小伙伴,没人能绕开Transformer。
一、Transformer是什么?诞生背景是什么?
1. 通俗定义
Transformer是2017年Google在论文《Attention Is All You Need》中提出的神经网络架构,是所有现代大语言模型的地基。
核心特点:全程依靠注意力机制工作,抛弃了传统循环结构,支持全局并行计算。
2. 为什么要发明Transformer?
在Transformer出现之前,处理文本、语音这类序列数据,用的都是RNN、LSTM、GRU模型。
但这些老模型有两个致命缺点:
-
必须串行计算,速度极慢
老模型读句子像老和尚念经:一个字一个字依次读,必须读完第一个字,才能读第二个字,无法并行,训练速度特别慢。 -
长文本记忆崩盘
句子短还好,一旦句子很长,前面的文字信息会慢慢丢失,无法捕捉远距离词语的关联关系。
举个例子:小明小时候住在北京,长大后去上海工作,他非常喜欢这座城市。
普通人一眼就知道“这座城市”指上海。
但老模型因为逐字读取、长距离记忆衰退,很容易认错指代关系。
而Transformer的出现,完美解决了这两个问题:
- 拥有全局上帝视角:一次性读完整句话,所有文字同步处理
- 注意力机制:自动捕捉任意两个词语的关联,不管相隔多远
- 全并行计算:训练速度直接碾压传统模型
Transformer整体架构:

二、词嵌入(Embedding)向量
AI看不懂文字,只能看懂数字,这里深度细化底层逻辑,这是所有计算的基础。
1. 什么是词嵌入?
通俗定义:把人类的文字,转换成计算机能计算的高维向量。
简单说:每个字/词,对应一个专属数字数组(向量)。
每个token(字/词)单独对应一条长度512的浮点数向量,只描述语义内容,和它在句子第几号位置无关。
示例句子:我 吃 苹果
- token「我」固定有专属向量 E 我 E_我 E我,不管放在句子第0位、第100位, E 我 E_我 E我 不变
- token「吃」固定向量 E 吃 E_吃 E吃
- token「苹果」固定向量 E 苹果 E_{苹果} E苹果
只和文字本身有关,和语序、位置无关。
2. 为什么不能用数字表示?
如果我们给词语编号:苹果=1、香蕉=2、桌子=3
模型会默认:香蕉-苹果=桌子-香蕉,强行制造无意义的数学关系,语义完全失效。
而词嵌入向量的核心:
语义相近的词,向量距离更近;语义无关的词,向量距离更远。
3. 数学表示
假设句子有 (n) 个词,词嵌入维度为 (d_{model})(Transformer标准维度512)
单个词的嵌入向量:
[
x \in \mathbb{R}^{d_{model}}
]
整句输入矩阵:
[
X \in \mathbb{R}^{n \times d_{model}}
]
-
(n):句子单词数量
-
(d_{model}):向量维度(固定512)
词嵌入维度 = 512:把每一个单词 / 字 /token,转换成一个长度为 512 的浮点数向量,这个向量就是词嵌入
简单拆解: -
维度 512 = 向量有 512 个数字,形如:
[0.12, -0.35, 0.78, … , 0.21] 一共 512 个数 -
每个数字代表词语某一层语义特征(情绪、词性、上下文、实体属性等)
512 维向量:(v=[x_1,x_2,…,x_{512}])
里面每一个 (x_i) 不是人为规定 “第 1 维代表词性、第 2 维代表情绪”,不存在人工赋予的固定语义。
所有维度的含义,都是模型无监督 / 有监督训练自动学出来的隐性特征。
训练目标只有一个:
让语义相近的 token,512 维向量在空间上距离更近;语义无关的距离更远。
为了达成这个目标,模型自由分配 512 个维度去捕捉各种混合特征。
4. 实际作用
所有后续的注意力权重计算、特征融合、网络训练,全部都是基于词嵌入向量矩阵运算,没有词嵌入,就没有一切计算。
三、位置编码(Positional Encoding)向量
Transformer没有循环结构,无法天然识别语序,必须人工注入位置信息。
1. 核心公式
对于位置 (pos)、维度 (2i)、(2i+1):
[
\begin{align*}
PE_{(pos,2i)} &= \sin\big(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\big) \
PE_{(pos,2i+1)} &= \cos\big(\frac{pos}{10000^{\frac{2i}{d_{model}}}}\big)
\end{align*}
]
用正弦余弦公式直接计算,不需要训练,固定不变。
2. 通俗解释
- 偶数维度用sin函数,奇数维度用cos函数
- 不同位置的单词,会得到独一无二的位置向量
- 最终输入向量 X= 词嵌入向量 E+ 位置编码向量P
[
Input = X_{embedding} + PE
]
3. 意义
让向量既包含语义信息,又包含语序信息,解决Transformer无序读取的缺陷。只和位置pos有关,和文字内容无关。单独拿PE看不出任何词语含义,只能区分先后。
4. 逐变量拆解:pos、i、d_model 完整含义
4.1. pos:token 在句子里的绝对位置
- 取值: p o s = 0 , 1 , 2 , 3 , . . . , L − 1 pos=0,1,2,3,...,L-1 pos=0,1,2,3,...,L−1, L L L 是句子最大长度
- 含义:当前是第几个字/Token
- 句子第1个token: p o s = 0 pos=0 pos=0
- 句子第2个token: p o s = 1 pos=1 pos=1
- 句子第100个token: p o s = 99 pos=99 pos=99
举例:句子 我 爱 中国
pos=0:我
pos=1:爱
pos=2:中国
作用:公式全部以 pos 为自变量,让不同位置算出完全不同的PE向量,模型才能区分语序(“猫追狗”vs“狗追猫”pos不同,PE不同)。
4.2. i:位置编码向量内部的“维度分组索引”
PE向量总长是
d
m
o
d
e
l
d_{model}
dmodel,分成二元组:(偶数维2i,奇数维2i+1)
- i 的取值: i = 0 , 1 , 2 , . . . , d m o d e l 2 − 1 i=0,1,2,...,\displaystyle \frac{d_{model}}{2}-1 i=0,1,2,...,2dmodel−1
- 每组对应向量里两个连续维度:
- 偶数下标维度: 2 i 2i 2i → 用sin计算
- 奇数下标维度: 2 i + 1 2i+1 2i+1 → 用cos计算
以
d
m
o
d
e
l
=
512
d_{model}=512
dmodel=512 举例:
向量维度下标范围:0,1,2,3,…,511
i最大为
512
/
2
−
1
=
255
512/2 -1 = 255
512/2−1=255
- i=0 → 维度0(sin)、维度1(cos)
- i=1 → 维度2(sin)、维度3(cos)
- i=2 → 维度4(sin)、维度5(cos)
- …
- i=255 → 维度510(sin)、维度511(cos)
4.3 i 的核心作用
控制三角函数的波长/频率:
分母
10000
2
i
d
m
o
d
e
l
10000^{\frac{2i}{d_{model}}}
10000dmodel2i 随 i 增大而变大
→
p
o
s
10000
2
i
d
m
o
d
e
l
\displaystyle \frac{pos}{10000^{\frac{2i}{d_{model}}}}
10000dmodel2ipos 随 i 增大变小
- 小i(前半段维度):三角函数周期短、频率高 → 捕捉细粒度局部位置差(相邻token的先后)
- 大i(后半段维度):三角函数周期极长、频率极低 → 捕捉远距离位置关系(第3位和第200位的差距)
4.4 完整举一组代入示例(d_model=512,pos=3,i=1)
- pos=3:当前是句子第4个token
- i=1:对应向量第2、3维
- 2 i = 2 2i=2 2i=2 → PE第2维 = sin ( 3 10000 2 / 512 ) ≈ 0.245 \sin(\frac{3}{10000^{2/512}})≈0.245 sin(100002/5123)≈0.245
- 2 i + 1 = 3 2i+1=3 2i+1=3 → PE第3维 = cos ( 3 10000 2 / 512 ) ≈ − 0.970 \cos(\frac{3}{10000^{2/512}})≈-0.970 cos(100002/5123)≈−0.970
4.5 为什么这么设计i和pos
- 相对位置可线性表达
任意两个位置 p o s 1 , p o s 2 pos_1,pos_2 pos1,pos2,差值 k = p o s 2 − p o s 1 k=pos_2-pos_1 k=pos2−pos1 能通过sin/cos和差公式,由PE(pos1)线性组合出PE(pos2),模型天然学到相对距离。 - 覆盖长短距离
i从小到大,频率从高到低,一套公式同时编码近距离、远距离语序信息; - 维度对齐
PE向量长度等于词嵌入维度 d m o d e l d_{model} dmodel,可以直接逐位相加,不改变张量形状。
四、Transformer核心:自注意力机制
注意力机制不是玄学,所有重点:关联权重 = 相似度得分。
1. 彻底吃透QKV
模型通过三个可训练参数矩阵,把输入向量映射成三种特征:
给定输入矩阵 (X):
[
\begin{align*}
Q &= X \cdot W_Q \
K &= X \cdot W_K \
V &= X \cdot W_V
\end{align*}
]
- (W_Q,W_K,W_V):可训练权重矩阵(模型学习的核心参数)
- (Q)(Query 查询):当前词要寻找什么关联信息
- (K)(Key 键):所有词的特征标识,用于匹配相似度
- (V)(Value 值):所有词的真实语义内容,用于最终输出
-
- (X)(E+P):词嵌入向量+位置编码向量
自注意力的关键:Q、K、V全部来自同一个输入句子,所以叫自注意力。
2. 注意力权重完整计算公式
第一步:计算词语两两相似度(点积)
想要知道两个词关系多紧密,用向量点积:点积越大,相似度越高
[
Score = Q \cdot K^T
]
第二步:缩放(Scale)
维度越高,点积结果方差越大,梯度会爆炸,所以归一化:
[
Score_{scale} = \frac{QK^T}{\sqrt{d_{k}}}
]
第三步:Softmax归一化(生成最终注意力权重)
把所有分数转为0-1之间的概率权重,总和为1,权重大小就是关联强弱
[
Attention_{Weight} = \text{Softmax}\big( \frac{QK^T}{\sqrt{d_{k}}} \big)
]
第四步:加权求和
用权重乘以真实语义V,重点信息加权放大,无关信息弱化
[
\mathbf{Attention}(Q,K,V) = \text{Softmax}\big( \frac{QK^T}{\sqrt{d_k}} \big)V
]
3. 掩码注意力(Decoder专属细节)
解码器生成文本时,不能偷看未来文字,所以加入Mask掩码:
将未来位置的分数置为无穷小,Softmax后权重为0,彻底屏蔽未来信息。
五、多头注意力机制(Multi-Head Attention)
1. 为什么需要多头?
单头注意力只能学习一种语义关联(比如单纯的指代关系)
自然语言语义复杂:主谓、动宾、修饰、因果、指代,单视角不够用
2. 核心原理+公式
多头注意力 = 拆分维度 → 分头计算注意力 → 拼接融合
设定:
- 总维度 (d_{model})
- 头数 (h=8)(论文标准配置)
- 单头维度 (d_k = d_{model}/h = 64)
步骤1:分头映射
将Q/KV分别拆分为8组独立的权重矩阵,各自计算:
[
Q_i = XW_{Q_i},; K_i=XW_{K_i},; V_i=XW_{V_i}
]
步骤2:单头独立计算注意力
每个头单独算一组注意力输出:
[
Head_i = \mathbf{Attention}(Q_i,K_i,V_i)
]
步骤3:拼接所有头结果
把8个不同视角的语义特征拼接:
[
Concat = [Head_1;Head_2;\dots;Head_8]
]
步骤4:线性融合
通过参数矩阵融合多视角信息,得到最终多头输出:
[
MultiHead = Concat(Head_1\dots Head_h) \cdot W_O
]
3. 多头真实作用
8个注意力头,各自学习不同语言规则:
- 头1:学习主谓关系
- 头2:学习动宾搭配
- 头3:学习代词指代
- 头4:学习远近修饰关系
- 其余头:学习语法逻辑、语义反差、语境关联
多视角并行捕捉特征,模型理解能力暴增,这是单头注意力做不到的。
六、Transformer整体架构拆解
完整的Transformer架构,只由两大核心模块组成:编码器(Encoder)+ 解码器(Decoder)。
我们可以把它理解为AI翻译工作室,分工超级明确:
1. 编码器 Encoder —— 负责「理解内容」
核心功能:读懂输入的所有内容,提取全局语义特征
输入什么,它就彻底理解什么,适合理解类任务。
适用场景:文本分类、情感分析、语义匹配、关键词提取(BERT模型只用了编码器)
工作特点:
- 双向理解:看前文、也看后文,全局信息完整
- 输出:整段文字的完整语义特征,交给解码器使用
结构细节:多层堆叠,每一层包含:多头自注意力 + 层归一化 + 前馈神经网络 + 残差连接
2. 解码器 Decoder —— 负责「生成内容」
核心功能:根据编码器理解的结果,逐字生成新内容
适用场景:文本生成、对话问答、文案创作
工作特点:
- 单向生成:只能看已经生成的内容,看不到未生成的内容
- 逐字输出:一个字一个字生成连贯文本
结构细节:多一层掩码多头注意力,防止偷看未来文本
3. 三者对应关系
- 完整Transformer = 编码器+解码器(用于机器翻译)
- BERT = 纯编码器(擅长理解)
- GPT = 纯解码器(擅长生成)
七、Transformer完整工作流程
以机器翻译:中文转英文为例,完整底层流程:
- 文本预处理:分词,文字映射为词索引
- 词嵌入:索引转为512维语义向量
- 位置编码:向量叠加位置信息,注入语序
- 编码器多层计算:
- 多头自注意力计算全局词语关联权重
- 残差连接+归一化,防止梯度消失
- 前馈网络做特征非线性变换
- 输出全局语义特征矩阵
- 解码器多层计算:
- 掩码自注意力:解析已生成文本上下文
- 编码-解码注意力:关联输入原文语义
- 逐层优化生成特征
- 最终归一化+预测:Softmax映射词典概率,输出下一个单词
八、FeedForward前馈网络+残差连接
1. 前馈神经网络FFN公式
每个编码器/解码器都包含独立FFN:
[
FFN(x) = \max(0, xW_1+b_1)W_2 + b_2
]
作用:对注意力提取的语义特征做深度非线性加工,提升模型拟合能力
2. 残差连接
[
Output = x + SubLayer(x)
]
解决深层模型堆叠后的梯度消失问题,让超深层Transformer可以训练。
九、Transformer的核心优势
-
全局感知能力
不再局限于前后几个字,任意距离的词语都能建立关联,长文本理解能力碾压传统模型。 -
全并行训练,速度超快
传统模型串行计算,Transformer所有字词同步计算,训练效率提升数十倍,支撑超大模型训练。 -
可扩展性极强
可以堆叠无数层编码器、解码器,参数越大、数据越多,效果越好,是大模型规模化的核心基础。 -
通用性极强
不止能做NLP自然语言处理,现在CV计算机视觉、语音识别、多模态模型,全部都在用Transformer。
十、Transformer的小缺点
-
计算成本高
全局注意力需要计算所有词语的关联,文本越长,计算量越大,复杂度 (O(n^2)),对显卡算力要求高。 -
显存消耗大
长文本场景下,参数运算量大,显存占用极高。
571

被折叠的 条评论
为什么被折叠?



