LLM常见架构
Encoder和Decoder特点
- Encoder:某个词能看到整个序列的所有信息,同时看到上文和下文
- Decoder:由于mask机制,编码某个词特征时,仅能看到上文。
Encoder-only/自编码语言模型
🥅建模目标
- BERT将序列
随机挑选15%Token变成 [MASK]
得到噪声 - 期望根据上下文恢复/猜测出原始值
。
代表和优缺点
- 代表:Bert
- 优点:较好融入双向语言模型,能看到被预测单词的上文和下文。
- 💔 缺点
- Masked Language Modeling 任务,不擅长做生成任务。
- 👿预训练引入mask导致和下游finetune任务不一致。
- 😞 泛化效果不好需要微调。

Encoder-Decoder
- 代表:T5、BART
PrefixLM
🎓核心内容
Encoder-Decoder 变体,区别是Encoder和Decoder 共享一个Transformer。
Encoder:
Auto-Encoding编码
, token之间互相可见。Decoder:
Auto-Regressive自回归模式
,待生成token可以看到Encoder所有token和Decoder已经生成的token。
可以根据给定的前缀生成后续的文本,生成每个词时都可以考虑之前的上下文信息。
代表:UNILM、GLM等。
适用于:机器翻译等任务。
👑CasualLM/Decoder-Only/自回归LM
🎓核心内容
- Next Token Prediction 兼顾理解和生成;下游泛化性好。
- 只能根据前面生成的文本去生成后面的文本。
- 代表:GPT (当前绝对主流)
- GPT是单向的从左到右,使用更大语料和参数,把AutoRegressive LM发挥到了极致。ELMo是双向的。
🥅建模目标
- 给定文本序列
,调整参数使得训练数据上的似然函数最大。 : Transformer(或RNN)在t时刻之前编码的隐状态,emb为词向量。
优缺点
- 优点:天然符合下游任务。见下文吧。



为什么 Decoder-Only
👊Encoder 缺点
- MLM任务不擅长生成任务,下游需微调
- ⭐双向注意力的低秩问题,可能会削弱模型表达。生成任务而言,双向并无实质好处。
👊Encoder-Decoder 缺点
- 同等参数下,需要multitask finetuning 才能激发最佳性能。
👋Decoder 优点
- NTP任务兼顾理解和生成,下游泛化性好
- ⭐同等参数Decoder具有更好的zero-shot性能,更适合利用大规模无标注语料自监督学习
- ⭐训练效率、工程实现有优势。
- 支持一直复用KV-Cache,对多轮对话更友好。
- 因为每个Token的表示之和它之前的输入有关,而encoder-decoder和PrefixLM就难以做到。
MoE
MoE优缺点
在有限的资源下,用更少的训练步数训练一个更大的模型,往往比更多步数训练小模型效果更好。
👏优点
- 🚀 训练推理速度更快、所需计算资源更少、效果更好
- 允许模型计算成本不变的情况下增加参数数量,更容易scale到万亿模型。
- 多任务学习能力强
👿缺点
- 需要大量显存,所有expert需要加载到内存
- 可能遇到训练稳定性问题,微调存在挑战finetune过拟合,但显示出潜力。
- 通信成本高,MoE专家路由机制带来通信成本。
条件计算及背景
背景
- 充分利用数据和模型的规模,是DL成功的关键。
- 随训练数据和模型大小增加,带来训练成本增加(二次方‼️)。然而当前计算能力不太能满足。
🍊条件计算
- 许多工作提出条件计算,在不显著增加训练成本的情况下,尽量增加模型容量。
- 以每个样本为基础,冻结或激活网络大部分。
- 门控决策机制
- 可以是二进制的、稀疏而连续的、随机性的、确定性的等。
- 通过各种RL、反向传播来训练。

早期论文条件计算工作:Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer
Sparsely-Gated Mixture-of-Experts layer (MoE)结构
- 一些专家:每个专家为一个FFN,也可以是Transformer。
- 一个可训练的门控网络:它会挑选专家的一个稀疏组合,用来处理每个输入
- 所有网络都是使用反向传播联合训练的
MoE结构/层次化MoE/门控网络
1、MoE结构
1. 专家+门控网络
- 💥 n个专家网络(
稀疏MoE层
):。 - 每个专家是一个独立的子网络模块,可以是FFN、Transformer等等。
- 保持输入输出大小、结构一致。输出
- ⭐代替了Transformer中的FFN层。
- 💥1个门控网络
( 路由网络
)- 输出各专家权重,是一个稀疏n维向量
。如 [0.0,0.8,0.0,0.2,0.0]
, n=5个专家 - 决定哪些token倍发送到哪个专家。
- 输出各专家权重,是一个稀疏n维向量
- MoE层输出:为所有专家加权的和。
- ⚠️后续主流是topk个专家加权求和,并非所有专家。
2. 稀疏性优点
输出的稀疏性可以节省计算量🔋 - 当
时,则无需计算 - 实验中有数以千计的MoE,但每个样本只会用到少量专家 👍
- 专家数量特别大,可能需要
层次化MoE
- 当

Switch Transformer:使用稀疏的Switch FFN
替换原来Dense FFN
。

2、层次化MoE
专家数量很多时,使用2级层次MoE来降低分支因子。
- 1个主选通网络
:先选择一组专家组,共有a组 - a个次选通网络
:在某组内从b个中选一个专家 - a*b个专家
3、门控网络G
1、Softmax Gating (朴素想法)
- 矩阵乘以输入,再过Softmax。是非稀疏的门控网络。
2、Noise Top-k Gating
- 在softmax基础上增加稀疏性和噪声,仅选择topk个专家。
- ⭐保留前k个值,其余设置为
:稀疏性为了节省资源。 - 可调高斯噪声:帮助负载均衡。
- 每个分量的噪音量可通过训练权重
来控制。
- ⭐保留前k个值,其余设置为
批量减小及专家平衡问题
批量减小问题
- 低效问题:专家数量增加导致单专家处理样本变少 ‼️。
个专家选 个, 个样本,每个专家处理 个样本,非常低效。 - 如果提高b,但受内存限制。
- 解决方法
- 混合数据并行(复制完整模型到多设备)、模型并行(拆分模型参数到不同设备),变相扩大b
- 如果
个设备,有效批次 ,每个专家 处理样本:
- 如果
- 增加循环MoE的批大小
- 混合数据并行(复制完整模型到多设备)、模型并行(拆分模型参数到不同设备),变相扩大b
专家平衡问题
门控网络收敛不平衡
,导致少量专家总是会得到较大权重,出现赢者通吃现象。- 由于
数据分布不均匀
,某些专家可能会处理更多的数据,而其他专家可能会处理较少的数据。
解决办法1:软性约束
- 软性约束:定义专家重要性损失
,在一个batch上门控网络的和。 - 鼓励所有专家有相同的重要度,但专家仍可能收到差异很大的样本。
解决方法2:不同的负载均衡loss (谷歌Switch Transformers)
符号:n专家,T个token的batch B
所有token路由到专家i的概率,
- batch中分配给i的token占比,
- 辅助loss,乘以专家数量。
- 其中
是个超参数,足够大保证负载均衡,足够小,不影响主要的交叉熵训练。
- 其中
- loss优点:鼓励均匀路由。
Switch Transformers (重点实现,2022年谷歌)
核心思想:尽可能把Transformer做大👍
- 核心:⭐一个token每次只路由到1个专家。
- 优点:
- 减少路由计算,降低MoE通信成本。
- 每个专家bs(专家容量)至少可以减半。
专家容量/容量因子
- 背景:门路由动态性根据输入数据动态把token分配给不同专家,要求模型灵活处理数据分布。
- 定义:每个专家在模型中处理的token数,n为专家数,capacity factor为容量因子(>1),
- 专家容量作用:把batch总token平均分配给专家,通过容量因子来扩展容量提供缓冲空间,应对token分布不均情况。
- 容量因子取值:必须大于1保证有缓冲空间,但不能太大会浪费计算资源(如超过3)。
- 示例:
专家数=3,输入token=6t
,容量因子=1, 专家容量=2
, - ‼️但expert1却收到了3个token则溢出了,超出的不会计算,直接残差到下一层⚠️,这样不好😢
- 示例:
