Encoder、Decoder 与现代大模型架构:从 BERT/GPT 到 MoE
讲清编码器、解码器、编码器-解码器三种架构的区别与各自适合的任务,重点理解仅解码器路线为何成为生成式大模型主流,以及因果掩码、KV Cache、MoE 稀疏专家这些现代架构的关键机制
- 区分 Encoder-only / Decoder-only / Encoder-Decoder 三类架构与代表任务
- 理解因果掩码如何保证自回归生成「只能看左边」
- 理解训练并行与 KV Cache 推理加速的关系
- 建立对 MoE 稀疏专家、参数量与计算量关系的正确直觉
三种架构,三种注意力可见范围
同样是 Transformer Block,堆叠方式和注意力能看到谁,决定了模型擅长什么。区别的核心是掩码(mask):它规定每个位置允许关注哪些位置。
每个词能看到左右全部上下文
双向注意力
擅长理解/编码:分类、抽取、语义向量
代表路线:BERT 类
每个词只能看它和它左边
因果掩码,适合逐词生成
擅长生成:对话、写作、通用大模型
代表路线:GPT 类,现代大模型主流
编码器双向读输入,解码器因果生成并交叉注意输入
擅长输入到输出的转换:翻译、摘要
代表路线:T5 类
因果掩码:自回归生成的护栏
Decoder 训练时整句是一次性并行喂进去的(教师强制),但生成任务要求第 i 个词只能依据前 i−1 个词预测,绝不能「偷看答案」。因果掩码是一个下三角矩阵:把右上部分(未来位置)的注意力分数设为负无穷,Softmax 后权重为 0,于是每个位置只能关注自己和左侧。这样训练目标和逐词生成的推理方式完全一致。
训练:整句并行,因果掩码挡住右侧未来词
学会 P(第i词 | 前i−1词)
推理:从左到右逐词采样生成
已生成内容作为新的左侧上下文
KV Cache:让逐词生成不必每次重算
自回归生成时每新增一个词,朴素做法是把整句重新算一遍注意力,代价随长度平方增长、极其浪费。注意到历史词的 Key、Value 在它们生成后就不再变化,于是把它们缓存下来(KV Cache):每步只算新词的 Q,去和缓存里全部历史 K/V 做注意力,再把新词的 K/V 追加进缓存。这是大模型推理加速的标准机制,代价是占用显存——也是后续各种推理优化(分页注意力、量化 KV)的对象。
为什么 KV Cache 能成立?因为因果掩码规定了第 i 个词只能看左边,一旦前面的词生成完毕,它们的 K、V 就是固定的,不会因为后面再来新词而改变——那么把这些已经算好的 K、V 存起来,下一步直接取用即可,不必重算。它把「每生成一个词都重算整句」的平方级开销,压成每步只需新增一份 K/V 的增量开销。代价是显存:对话越长、并发用户越多,要缓存的历史 K/V 就越大,常常成为推理时比模型权重还吃显存的部分。这也是为什么长对话、高并发服务会专门做 KV 的量化、分页和过期驱逐——后面 m6 讲推理系统时还会再遇到它。
训练时整句并行(靠因果掩码保证不偷看),所以训练高效;推理生成天然是一个词接一个词的串行过程,靠 KV Cache 避免重复计算。理解这对矛盾,就理解了很多推理工程优化的出发点。
MoE:把「参数量」和「计算量」解耦
稠密模型每个输入都要经过全部参数。混合专家(MoE)把前馈层换成多个「专家」子网络,再加一个路由器(门控):每个 token 只被分给少数几个专家计算。于是模型可以拥有极大的总参数量(知识容量大),但每个 token 实际激活的参数很少(单步计算可控)。
token 进入 MoE 层
路由器为它打分、选 Top-k 专家
只激活被选中的少数专家计算
其余专家不参与,省算力
按路由权重加权合并输出
MoE 的代价是显存仍要装下全部专家、且负载均衡与路由稳定性是工程难点。它体现了一个重要直觉:模型「有多少知识(总参数)」和「每次调用多少算力(激活参数)」可以分开设计。
为什么今天的通用大模型几乎清一色走 Decoder-only,而不是当年看起来更「分工明确」的 Encoder-Decoder?一个现实原因是简化与规模:单一架构、单一训练目标(预测下一个词)、海量统一语料,比维护三套不同结构容易扩展得多;更重要的是,当数据和规模足够大时,一个会生成的模型往往顺带也学会了理解——你给它提示「请判断这句话的情感」,它就能像回答问题一样完成分类。于是「先理解后生成」的两段式被一个统一的生成范式吸收了。Encoder-only 路线并没有死,它在向量检索、文本嵌入、分类这类只需要读懂、不需要生成的场景里仍然高效便宜。理解这条主线演进,比记住每个具体模型名更重要:架构选择始终在「能力上限、训练/推理成本、任务形态」之间权衡,而规模改变了权衡的天平。
今天绝大多数通用对话/生成式大模型走 Decoder-only + 因果掩码 + KV Cache 推理这条主线,再叠加 RoPE、RMSNorm、SwiGLU、MoE 等改进。不必追每个新名词,先把「注意力可见范围、训练/推理方式、参数/计算关系」这三把尺子拿到手,任何新架构都能快速定位。
Decoder-only 大模型中的「因果掩码」作用是?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
从线性回归到神经网络,本质都一样:定义一个带参数的函数 fθ(x),用损失函数衡量它和真实答案的差距,再沿梯度方向更新参数。监督、无监督、强化学习的区别,只在「训练信号从哪里来」。先把这套统一视角立住,后面遇到的任何模型都是它的具体实例,就不会被层出不穷的名词淹没。