Transformer深度解析与通俗理解
前言
之前ChatGPT横空出世,顺应潮流从推荐系统转向LLM,于是半知半解的学习了《Attention is all you need》,这么久过去了,总想重新整理下思路,于是写下这篇文章。
解析与理解
为什么
为什么会出现Transformer?在这之前,是RNN循环神经网络,它有两个问题,第一个是健忘,越往后的词,跟最开始的词的信息关系就变得很弱。第二个是慢,没有办法并行计算。
那Transformer的思路就是,每个词自己决定想听哪个词,想关注谁。
模型结构
Encoder
理解输入,将输入序列转化为包含上下文信息的向量表示。
从模型结构里看,由6个block堆叠而成,每一层主要包含两个子层,分别是MHA以及FFN,MHA是让词与词之间交流,理解上下文,FFN是对每个位置的信息进行独立强化。
Decoder
产生输出,根据Encoder的信息和已经生成的单词,预测下一个。
相比较Encoder,多了一个Masked MHA,主要是限制在生成第n个词时,不能看后面的词。
Attention
注意力机制的核心,多个词相互认识,建立连接。
MLP/FFN
传统MLP,内部处理,把信息转换为模型内部的知识表达。
模型计算过程
q是“当下的搜索意图”
它代表了此时此刻这个词,对过去所有信息的“渴求”。以“我爱吃”这个输入为例,当模型在处理“爱”时,q的意思是:“请给我来点能做我宾语的名词!”当模型在处理“吃”时,q的意思是:“请给我来点能被吃的食物!”。
k是“对外展示的标签”
它代表了过去生成的每一个词,挂在自己脑门上、用来响应搜索意图的索引信息。它不包含具体含义,只负责回答“是不是”。以“爱”这个词为例:当后面的q“吃”发出“寻找语境”的信号时,k“爱”举起牌子说:“看这里!我是表达喜好的动词,我能解释你为什么吃!”
v是“内容,是信息实际的载体”
它代表了匹配成功后,真正被q拿走并融合进新语境里的语义干货(实际上经过softmax,并不是0/1的拿走,而是比例)。它是信息的载体。以“爱”这个词为例:一旦q“吃”和k“爱”确认匹配,v“爱”就会被带走。v“爱”的内容是:“强烈正向情感特征向量”。结果:这个特征注入到“吃”里,模型就懂了:接下来的预测不是为了充饥,而是为了享受美味。
核心
自注意力Self Attention
让模型在处理一个词时,同时关注句子中所有其他的词,并根据相关性分配权重。
多头注意力Multi-Head Attention
上面自注意力机制,每个词去关注不同的词,而实际上会有多个Head,关注不同的方面,比如语法结构、情感等。
比如“苹果掉在地上,因为它熟透了”,如果是语法结构的头,会按照主谓关系,让谓语“掉”更关心主语“苹果”,如果是代词的头,会让“它”更关心“苹果”。
当然,在模型训练前没有人为给这些头去定义分配说谁负责什么方向,完全是训练过程中模型自己形成的能力。
位置编码
顾名思义,“我爱你”和“你爱我”,是不一样的意思。
残差连接
残差连接是何恺明在ResNet提出的,Transformer使用了这个技术,每一层输出时,会加上这一层的原始输入,这样可以避免原始信息的丢失。
缩放点积注意力
在计算QK点积时,除以’$\sqrt{d_k}$’,避免高维度下点积值方差太大,导致Softmax趋于饱和后的梯度消失。
模型对比
| 特性 | 传统模型 (RNN/LSTM) | Transformer |
|---|---|---|
| 计算方式 | 串行(必须等上一个词算完) | 并行(所有词同时进场计算) |
| 长距离依赖 | 弱(距离越远,信号越弱,易遗忘) | 强(无论距离多远,一步直达) |
| 信息视野 | 局部/单向(通常只看前文) | 全局(Encoder 可同时看上下文) |
| 训练效率 | 低(无法充分利用 GPU 并行能力) | 高(完美契合 GPU 矩阵运算) |
| 位置感知 | 隐式(靠处理顺序体现) | 显式(通过位置编码 Positional Encoding) |
延伸
Transformer变体
仅Encoder
代表作:Bert
仅Decoder
代表作:GPT系列
MoE
改造了MLP层,标准Transformer,巨大的MLP,不管输入是什么,所有神经元都要参与计算。而MoE,把MLP拆成了多个MLP,称之为专家(Expert),然后引入了一个Router,来决策不同的问题由不同的Expert来处理。
这样模型参数可以巨大,每次推理只激活一部分参数。
几个问题
通过问题,可以更好的理解概念,拓展思路
KVCache与Transformer的关系是什么?
KV Cache是针对Transformer Decode过程的一种工程优化手段,并非模型架构本身的数学定义。
我们经常提到的Prefill-Decode与Transformer的关系是什么?
Transformer是模型的物理结构,而Prefill-Decode是模型在推理阶段的两个不同动作。
由于现在主流是纯Decoder模型,我们以此为例,那模型推理时,Prefill会把Prompt全部喂入,计算KVCache,Decode阶段则逐个词计算,同时也保存新的词的KVCache。
LLM大模型中,模型大小主要由哪些部分决定?
主要由MLP层决定,attention占用较小。
LLM大模型,我们聊到精度的时候,指的是什么?
权重与激活值,有的模型会标注比如DeepSeek-V3.2为例,BF16·F32·F8_E4M3,权重FP8保存,激活值精度BF16,涉及Softmax使用F32。
对于LLM推理系统,可能存在的优化是什么?
模型启动:
- 镜像预热/缓存
- 模型文件预热/缓存,基于RDMA或者GPU Direct RDMA的模型文件传输加速
- 模型文件并行加载
- DeepGEMM预编译缓存
- 模型量化
模型推理:
- 高算力卡:Prefill阶段,提升TTFT
- 高带宽卡:Decode阶段,提升TPOT
- 模型量化,提升QPS,E2E
- kv cache缓存池,提升QPS、E2E、TTFT
- 推测解码:通常框架内置支持,提升TPOT
模型可靠性:
- 负载均衡
- 服务降级
版权声明
本博客所有原创内容,均采用 CC BY-NC-SA 4.0 协议,转载请注明出处。