Transformer架构速览:从Attention到LLM,模型结构中的计算热点

好,咱们今天聊聊Transformer。说实话,这玩意儿现在是大模型的基石,你跑任何LLM都绕不开它。我最早接触Transformer是在2017年那篇"Attention Is All You Need"刚出来的时候,当时觉得这名字真狂——结果呢?人家确实做到了。

Transformer的核心思想其实很简单:用注意力机制替代循环和卷积。你想想看,RNN得一步步串行处理,GPU的并行能力全浪费了。Transformer直接把整个序列扔进去,让每个词都能"看到"所有其他词。嗯,这就是它快的原因。

1. 整体架构:Encoder-Decoder vs Decoder-Only

原始Transformer分两大部分:Encoder和Decoder。但现在的LLM,比如GPT系列,基本只用Decoder部分。为什么?因为生成任务只需要从左到右一个个预测,Encoder那种双向注意力反而用不上。

我个人习惯把Transformer拆成三个核心模块:

  • 注意力层——让信息流动起来
  • 前馈网络(FFN)——做特征变换
  • 层归一化 + 残差连接——稳定训练

这三个模块堆叠起来,就是大模型的基本骨架。你去看GPT-3、LLaMA,结构上大同小异,就是层数更多、维度更大、数据更多。

计算热点提示:在Transformer里,注意力机制和FFN占了绝大部分计算量。量化时,这两个地方是重点关照对象。

2. 注意力机制:到底在算什么?

注意力机制说白了就是加权求和。每个词都去问其他词:"咱俩关系怎么样?"关系好的,权重就大。

具体公式长这样:

Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V

这里Q、K、V分别代表查询、键、值。Q和K做点积,算出相似度,然后softmax归一化成权重,最后用权重去加权V。

我在项目中遇到过一个问题:当序列长度很长时,Q×K^T这个矩阵会变得巨大。比如序列长度4096,这个矩阵就是4096×4096,显存直接爆炸。所以后来有了FlashAttention,把计算分块处理,避免一次性生成这个大矩阵。

避坑指南:我曾经在量化QKV投影矩阵时,发现精度掉得厉害。后来排查发现,是softmax前的缩放因子√d_k没处理好。量化时一定要注意这个细节,不然注意力分布会失真。

3. 多头注意力:让模型从不同角度"看"

单头注意力只能学到一种关系模式。多头注意力把Q、K、V拆成多份,每份独立计算注意力,最后拼起来。这样模型就能同时捕捉不同位置、不同语义的关系。

比如一个头关注语法关系,另一个头关注语义相似度。你想想看,这不就是"三个臭皮匠,顶个诸葛亮"吗?

计算量上,多头注意力并没有增加太多,因为每个头的维度是原来的1/h(h是头数)。总计算量和单头基本一致,但表达能力强多了。

4. 前馈网络(FFN):真正的"思考"环节

注意力层负责信息交换,FFN负责特征变换。标准FFN是两层线性变换加一个激活函数:

FFN(x) = ReLU(x × W1 + b1) × W2 + b2

第一层把维度放大(通常是4倍),第二层再缩回来。为什么这么做?我个人的理解是:高维空间更容易找到线性可分的特征。就像你把数据映射到更高维,分类边界就清晰了。

FFN的计算量其实比注意力还大。在LLaMA这类模型中,FFN的参数占了总参数的2/3左右。所以量化FFN的权重,收益非常明显。

注意:有些模型用SwiGLU或GeLU替代ReLU,比如LLaMA。这些激活函数计算更复杂,量化时要注意激活值的分布特性。ReLU输出全是非负的,但GeLU有负值,量化范围不一样。

5. 层归一化与残差连接:稳定训练的基石

Transformer层数一深,梯度就容易消失或爆炸。残差连接解决了这个问题:把输入直接加到输出上,梯度就能顺畅地往回传。

层归一化(LayerNorm)则是把每层的输出拉回到均值为0、方差为1的分布。这样不管前面怎么折腾,后面的层都能"看到"稳定的输入。

在量化时,层归一化是个麻烦事。因为它涉及除法和开方,这些操作在低精度下容易出问题。我建议把LayerNorm保留为FP16或FP32,不要量化它。

6. 计算热点总结:量化该盯哪里?

咱们做量化,得知道哪里最"热"。我整理了一张表:

模块 计算占比 量化优先级 注意事项
QKV投影 ~15% 注意缩放因子
注意力得分计算 ~10% softmax建议保留高精度
FFN第一层 ~25% 激活值范围大,需校准
FFN第二层 ~25% 同上
层归一化 ~5% 建议保留FP16
Embedding ~5% 词表大时可以考虑量化

你看,FFN占了将近一半的计算量。所以很多量化方案,比如GPTQ、AWQ,都优先量化FFN的权重。注意力部分虽然占比小,但精度敏感度高,得小心处理。

7. 从Transformer到LLM:规模化的挑战

现在的LLM,比如GPT-3有1750亿参数,LLaMA-2有700亿。这么大的模型,显存放不下,推理速度也慢。量化就成了刚需。

我记得有一次部署一个130亿参数的模型,FP16版本需要26GB显存,单张A100都跑不起来。后来用INT4量化,显存降到6.5GB,速度还快了3倍。嗯,这就是量化的魅力。

但规模化也带来了新问题:量化误差会随着层数累积。你量化一层可能掉0.1%的精度,量化100层就掉10%了。所以需要一些技巧,比如逐层量化校准、混合精度等。

核心观点:Transformer的结构决定了计算热点在注意力和FFN。量化时,优先处理FFN,谨慎处理注意力,保留层归一化的精度。这是我在多个项目中验证过的经验。

8. 知识体系总览

下面这张图展示了Transformer的核心结构以及计算热点的分布,方便你快速回顾:

Transformer核心结构与计算热点 Decoder Layer (LLM核心) 残差连接 掩码多头注意力 计算热点:QKV投影 + 得分计算 层归一化(建议保留高精度) 前馈网络 (FFN) 计算热点:占总量50%!优先量化 层归一化(建议保留高精度) 量化策略与优先级 高优先级:FFN权重 占计算量50%,量化收益最大 中优先级:QKV投影 注意缩放因子,避免精度损失 低优先级:层归一化 保留FP16/FP32,不量化 特殊处理:Embedding 词表大时可考虑量化 经验总结 逐层校准 + 混合精度 = 最佳效果 对应

这张图把Decoder层的结构和量化策略对应起来了。左边是计算流程,右边是每个模块的量化优先级。你一眼就能看出,FFN是重中之重。

好了,Transformer的核心结构和计算热点就聊到这儿。下一节咱们会深入具体的量化方法,看看怎么把这些理论落地到TensorRT-LLM里。


专注资料整理