TL;DR
稠密模型的参数规模竞赛已经到头,MoE用稀疏激活让470亿参数的模型跑出130亿的速度;多模态让LLM能看图说话,GPT-4V的视觉编码器是关键;Diffusion模型让AI能画画,DDPM和DDIM是两条技术路线。本文从6个高频面试题入手,带你搞懂特殊架构的核心技术:MoE为什么能以小博大、多模态LLM如何融合视觉和语言、Stable Diffusion的去噪过程、Code Llama和StarCoder的训练数据差异。读完这篇,你能回答"Sparse MoE和Dense Model的成本对比"这种深度问题。
一、MoE(混合专家)原理:为什么能提升效率?
核心思想
问题:稠密模型所有参数都参与计算,推理成本高
解决:稀疏激活,每次只用部分参数
MoE架构
输入 → 路由器(Router) → 选择Top-K专家 → 专家处理 → 加权求和 → 输出
关键组件:
- 专家(Experts):多个独立的FFN
- 路由器(Router):决定激活哪些专家
- Top-K选择:通常K=2
路由机制
公式:
G(x) = Softmax(TopK(x · W_g))
y = Σ G(x)_i · E_i(x)
动态路由:不同token可能路由到不同专家
为什么有效?
解耦知识容量和计算成本:
- 总参数量:决定知识容量
- 活跃参数量:决定计算成本
生活比喻:MoE像医院的专科医生——心脏病找心内科,骨折找骨科,不需要所有医生都看一遍。
参考资料:Mixtral技术报告
二、Sparse MoE vs Dense Model(成本对比)
Mixtral 8x7B实测数据
维度
Mixtral 8x7B
LLaMA 2 70B
LLaMA 2 13B
总参数
47B
70B
13B
活跃参数
13B
70B
13B
推理速度
6倍于70B
基线
相当
性能
接近70B
基线
弱于Mixtral
成本对比
训练成本:
- Mixtral:需要训练8个专家 + 路由器
- Dense:只训练一个模型
- 结论:Mixtral训练成本更高
推理成本:
- Mixtral:只激活13B参数
- LLaMA 70B:激活70B参数
- 结论:Mixtral推理成本降低约50%(约2倍)
适用场景
用MoE:
- 追求推理效率
- 有充足训练资源
- 需要大容量模型
用Dense:
- 训练资源受限
- 模型规模较小(<10B)
- 不需要极致推理性能
参考资料:Mixtral技术报告 (arXiv:2401.04088)
三、多模态LLM架构:视觉编码器+语言模型如何融合?
核心架构
多模态LLM = 视觉编码器 + 投影层 + 语言模型
图像 → 视觉编码器 → 图像特征 → 投影层 → 文本嵌入空间 → LLM → 文本输出
三大组件
1. 视觉编码器(Vision Encoder)
常用模型:
- CLIP ViT(Vision Transformer)
- EVA-CLIP
- SigLIP
作用:把图像转成向量表示
示例(CLIP ViT-L/14):
输入:224×224图像
输出:257个token,每个768维
2. 投影层(Projection Layer)
作用:对齐视觉空间和语言空间
两种方式:
- 线性投影:简单的全连接层
- Q-Former(BLIP-2):用Transformer做跨模态对齐
示例:
视觉特征:257×768
投影后:257×4096(对齐LLM嵌入维度)
3. 语言模型(LLM)
常用模型:
- LLaMA
- Vicuna
- Qwen
作用:理解视觉+文本,生成回答
训练流程
阶段1:预训练(图文对齐)
数据:图文对(如LAION-400M)
目标:让模型学会"看图说话"
冻结:视觉编码器 + LLM
训练:只训练投影层
阶段2:指令微调(多模态对话)
数据:多模态指令数据(如LLaVA-Instruct)
目标:让模型能回答关于图像的问题
冻结:视觉编码器
训练:投影层 + LLM
典型案例:LLaVA
架构:
CLIP ViT-L/14 → 线性投影 → Vicuna-13B
训练数据:
- 预训练:CC3M(300万图文对)
- 微调:LLaVA-Instruct(15.8万多模态对话)
性能:
- 在多模态问答任务上接近GPT-4V
- 训练成本远低于GPT-4V
参考资料:LLaVA论文 (arXiv:2304.08485)、BLIP-2论文
四、GPT-4V的技术猜想:视觉能力从何而来?
官方未公开的架构
OpenAI未披露:
- 视觉编码器是什么?
- 如何训练的?
- 参数规模多大?
技术社区的合理推测
推测1:视觉编码器
可能选择:
- CLIP ViT-G/14(最大版本)
- 或自研更大的ViT
理由:
- GPT-4V能识别极细节(如图中小字)
- 需要超大视觉编码器
推测2:训练数据
规模猜测:
- 图文对:10亿级别
- 多模态指令:百万级别
数据来源:
- 互联网图文对
- 人工标注的高质量数据
- 合成数据(用GPT-4生成图像描述)
推测3:训练策略
多阶段训练:
阶段1:图文对齐(冻结LLM)
阶段2:多模态预训练(联合训练)
阶段3:指令微调(RLHF)
阶段4:安全对齐(拒绝有害请求)
GPT-4V的独特能力
1. 细粒度识别
能识别:
- 图中的小字
- 复杂图表
- 手写公式
2. 空间推理
能回答:
- 物体的相对位置
- 图中有几个人
- 左边的是什么
3. 多图理解
能处理:
- 连续多张图片
- 图片之间的关系
- 时间序列图像
为什么GPT-4V这么强?
1. 数据规模:训练数据远超开源模型
2. 模型规模:视觉编码器+LLM总参数可能>1T
3. 训练技巧:
- 高分辨率图像训练
- 多尺度特征融合
- 精细的RLHF
参考资料:GPT-4V System Card、社区技术分析
五、Diffusion模型基础:DDPM vs DDIM
核心思想
Diffusion模型:通过逐步去噪生成图像
纯噪声 → 去噪步骤1 → 去噪步骤2 → ... → 去噪步骤T → 清晰图像
前向过程(加噪)
DDPM(Denoising Diffusion Probabilistic Models):
公式:
q(x_t | x_{t-1}) = N(x_t; √(1-β_t) x_{t-1}, β_t I)
直观理解:
原图 x_0
→ 加一点噪声 → x_1
→ 再加一点噪声 → x_2
→ ...
→ 加很多噪声 → x_T(纯噪声)
关键参数:β_t(噪声调度表)
反向过程(去噪)
训练目标:学习一个神经网络ε_θ,预测每一步的噪声
损失函数:
L = E[||ε - ε_θ(x_t, t)||²]
生成过程:
从 x_T(纯噪声)开始
for t = T, T-1, ..., 1:
预测噪声:ε = ε_θ(x_t, t)
去噪:x_{t-1} = (x_t - ε) / √(1-β_t) + 噪声
DDPM vs DDIM
维度
DDPM
DDIM
采样步数
1000步
50步
采样速度
慢(几分钟)
快(几秒)
随机性
每次生成不同
确定性采样
质量
略好
接近DDPM
DDIM的关键创新
核心思想:跳过中间步骤,直接从x_t跳到x_{t-k}
公式:
x_{t-1} = √(α_{t-1}) · 预测的x_0 + √(1-α_{t-1}) · 方向噪声
优势:
- 采样步数从1000降到50
- 生成速度提升20倍
- 质量几乎不损失
Stable Diffusion架构
三大组件:
1. VAE编码器:图像 → 潜在空间(压缩8倍)
2. U-Net去噪器:在潜在空间做去噪
3. VAE解码器:潜在空间 → 图像
为什么用潜在空间?
- 原图512×512 = 262K像素
- 潜在空间64×64 = 4K → 计算量降低64倍
文本条件:
- 用CLIP Text Encoder编码提示词
- 通过Cross-Attention注入到U-Net
参考资料:DDPM论文 (arXiv:2006.11239)、DDIM论文 (arXiv:2010.02502)
六、代码生成模型:Code Llama vs StarCoder
两大开源代码模型
维度
Code Llama
StarCoder
基座模型
LLaMA 2
StarCoderBase
参数规模
7B/13B/34B
15B
训练数据
500B tokens代码
1T tokens代码
支持语言
80+编程语言
80+编程语言
上下文长度
100K
8K
开源协议
LLaMA 2 License
OpenRAIL
Code Llama的三个版本
1. Code Llama(基础版)
- 通用代码生成
- 适合代码补全
2. Code Llama - Python
- 专门针对Python优化
- 在Python任务上性能最强
3. Code Llama - Instruct
- 指令微调版本
- 适合对话式编程助手
训练数据差异
Code Llama:
阶段1:LLaMA 2预训练(通用文本)
阶段2:代码数据继续预训练(500B tokens)
阶段3:长上下文微调(100K)
阶段4:指令微调(Instruct版本)
StarCoder:
阶段1:从头预训练(1T tokens代码)
阶段2:Fill-in-the-Middle训练(代码补全)
阶段3:指令微调(StarChat)
关键技术:Fill-in-the-Middle (FIM)
传统训练:只能从左到右生成
def add(a, b):
return [模型生成]
FIM训练:能填充中间部分
def add(a, b):
[模型填充]
return a + b
实现方式:
原始代码:prefix <FILL> suffix
训练目标:预测<FILL>部分
应用场景:
- IDE代码补全
- 函数体生成
- 注释生成
性能对比
HumanEval(Python代码生成):
模型
Pass@1
Code Llama 34B
48.8%
StarCoder 15B
33.6%
GPT-3.5
48.1%
GPT-4
67.0%
MultiPL-E(多语言代码生成):
- Code Llama在Java、C++、JavaScript上表现更好
- StarCoder在Go、Rust上表现更好
如何选择?
用Code Llama:
- 需要超长上下文(100K)
- 主要用Python
- 需要对话式助手
用StarCoder:
- 需要更多训练数据的模型
- 需要商业友好的开源协议
- 主要用Go/Rust
参考资料:Code Llama论文 (arXiv:2308.12950)、StarCoder论文 (arXiv:2305.06161)
小结
本文从6个高频面试题入手,系统梳理了特殊架构的核心技术:
- MoE原理:稀疏激活,每次只用部分参数,解耦知识容量和计算成本
- Sparse MoE vs Dense:Mixtral 8x7B用47B参数跑出13B速度,推理成本降低约50%(约2倍)
- 多模态LLM架构:视觉编码器+投影层+语言模型,LLaVA是典型案例
- GPT-4V技术猜想:超大视觉编码器+10亿级训练数据+精细RLHF
- Diffusion模型:DDPM逐步去噪,DDIM跳步采样快20倍,Stable Diffusion在潜在空间操作
- 代码生成模型:Code Llama支持100K上下文,StarCoder用FIM训练代码补全
下一篇预告:开源生态篇——LLaMA、Mistral、Qwen怎么选?