4.8 应用谱系与取舍
前七节把生成模型拆成了七个零件:目标(4.1)、压缩(4.2)、可采样的潜空间(4.3)、对抗信号(4.4)、多步去噪(4.5)、潜空间与路径加速(4.6)、离散 token(4.7)。这一节把它们装回真实的系统里,回答三个工程问题:
- 选型:给定任务与约束(模态、延迟、数据量、算力、可控性、合规),该选哪一类,代价是什么,怎么判断失败?
- 改造:怎样在不重训大模型的前提下加条件、加控制、换风格(inpainting、ControlNet、LoRA、参考图)?
- 部署:生成内容要怎样标注与溯源?水印、隐写与内容凭证各自能保证什么、不能保证什么?
4.8.1 应用谱系:六种模态的主干选择
| 模态 | 主流主干 | 为什么是它 | 实际约束 |
|---|---|---|---|
| 图像生成 / 编辑 | 潜空间扩散 + Transformer 主干(整流流 / 流匹配目标) | 质量 + 可控性 + 可编辑性最好;潜空间把算力压到可训练范围 | 推理有延迟(多步采样);训练与数据成本高 |
| 视频生成 | 时空 patch 化的潜空间 DiT(4.6.2 的推广)+ 时间维压缩 | 与图像同构:把帧当作额外的空间维来 patch 化,再在潜空间上加时间维的压缩(时间下采样)以控制 token 数;规模上去后时间一致性与物理感明显改善 | 数据、算力、评测三方面成本都高;「世界模拟器」一类说法仍属未定论(它是观察到的现象描述,尚缺共识性的量化判据,引用时应区分事实与解读) |
| 音频 / 语音 | 离散 token + 自回归(4.7)或扩散 / 流匹配(连续表示) | 语音天然可离散化为 token;两条路线都在生产使用 | 高保真与低延迟的权衡;长序列的稳定性 |
| 3D / 资产 | 多视图扩散 + 重建、或直接在 3D 表示(体素 / 点云 / 高斯)上做去噪 | 多视图是「把 3D 降成 2D 生成」的低成本路线 | 跨视图一致性、拓扑正确性仍是难点 |
| 分子 / 蛋白质 | 扩散 + 等变网络(对旋转平移等变的去噪网络) | 生成对象的对称性必须被结构尊重,否则样本无效 | 有效性 / 新颖性 / 可合成性的多目标评价(第 8 讲 AI for Science 详述) |
| 机器人动作 | 扩散策略或流匹配策略(条件生成动作块) | 动作分布多模态(同一状态有几种合理做法),回归策略会把它们平均成一个错误动作 | 闭环频率、延迟、安全性约束 |
一句方法论提示:这张表的价值不在于「哪个最好」,而在于每一行的右列都是约束——把约束写出来,选型就变成了可讨论的工程问题。
这两句话分别在这两节里出现过,这里给出它们的统一解释:
- 扩散 / 流匹配统一的是「训练信号的形态」:不管数据是图像、音频、动作还是分子坐标,都可以定义「加噪 → 去噪」或「噪声 → 数据的速度场」。这类目标稳定、可批量、无需对抗,是它跨模态通用的根本原因。
- 离散 token 统一的是「序列接口」:一旦模态被切成整数序列,就可以用同一个 Transformer 与同一套交叉熵训练,从而在一个模型里混合多模态(把图像 token 与文本 token 交替排列)。这是多模态大模型的工程底座。
两条路线并不互斥:现实中常见的组合是「离散 tokenizer + 扩散式解码」或「连续潜空间 + 自回归先验」。判断用哪一条,看你要的是稳定可训的目标(扩散)还是与语言模型共享的接口(离散自回归)。
把本讲七节的方法映射到一条真实管线,几乎所有现代生成系统都是下面这五个零件的一种组合:
输入(文本 / 线稿 / 参考图 / 观测)
│
├─► [文本编码器] ──────────────┐ (条件 c)
├─► [参考图编码器] ────────────┤
└─► [控制图编码器] ────┐ │
│ │
z_T ~ N(0, I) ──► [去噪主干 ε_θ / v_θ] ◄┤ ← 零件 3:主干(U-Net / DiT)
▲ │ │
│ ▼ │
[采样器] ◄──── 每步更新 ◄───────────────┘ ← 零件 4:采样器(DDIM / ODE / 少步蒸馏)
│
▼
ẑ_0 ──► [感知解码器 D] ──► x̂ ← 零件 5:解码器(VAE / VQ 解码器)
│
└─► [水印 / 指纹注入] ──► 输出 + 溯源元数据
| 零件 | 对应小节 | 主要替代方案 |
|---|---|---|
| 1. 感知压缩编码器 / 解码器 | 4.3、4.6.1、4.7 | 连续 VAE(潜空间扩散) / VQ 或 FSQ(离散 token) |
| 2. 条件编码与注入 | 4.5.5、4.8.2 | 交叉注意力 / adaLN / ControlNet 旁路 / 参考图适配器 |
| 3. 去噪主干 | 4.5.2、4.6.2 | U-Net / Transformer(DiT)/ 混合 |
| 4. 采样器 | 4.5.4、4.6.3 | DDPM / DDIM / ODE 求解器 / 一致性 / 整流流 |
| 5. 溯源与标注 | 4.8.3 | 生成期水印 / 指纹 / 内容凭证 |
读这张图的方式:当有人问「扩散模型是什么」,答案不是某一个网络,而是这条管线的哪一部分被替换了。这也是本节选型表能写出来的原因——每一列都可以独立替换与度量。
4.8.2 编辑与定制:条件注入的四种做法
给定一个已训练好的扩散 / 流匹配模型,要在不重训主干的前提下控制它:
(一)条件修补(inpainting):只在图像的部分区域做去噪,未编辑区域保持原图。两种实现:① 在潜空间上把已知区域替换回原图的编码(每步都替换,保证一致性);② 让网络额外接收一个掩码 ,输入为 。
(二)条件网络(ControlNet 类):复制主干的编码器分支,接收额外条件(边缘图、深度图、姿态、分割图),其输出通过零初始化的旁路层加回主干: 主干权重冻结,只训练这条控制分支。
(三)低秩自适应(LoRA):冻结基座权重 ,只学一个低秩增量 其中 小随机初始化、 零初始化(保证起点等于基座)。它改变的是风格 / 概念,不是空间结构。
(四)参考条件(IP-Adapter / 图像提示类):用另一个编码器(如 CLIP 图像塔)把参考图编码成若干 token,通过交叉注意力注入主干——把「文本提示」换成「图像提示」。它改变的是语义与风格,控制粒度比 ControlNet 粗。
把一张图的生成过程拆成三层来理解,四类方法各自只动其中一层:
| 层次 | 描述 | 对应手段 |
|---|---|---|
| 空间结构层(哪里有什么) | 构图、姿态、边缘、深度 | ControlNet(结构条件);inpainting(局部冻结) |
| 语义 / 风格层(像什么、什么质感) | 主体身份、画风、材质 | LoRA(权重增量);参考条件(图像提示) |
| 采样过程层(怎么走) | 引导强度、步数、路径 | CFG 的 (4.5.5);少步采样器(4.6.3) |
三条工程经验(社区默认做法,不是定理):
任务:给一个已有的文本到图像模型(潜空间扩散 + Transformer 主干)加上「把用户上传的线稿转成彩色插画」的能力。约束:只有 对(线稿,插画)样本;单卡,预算允许训练 24 小时;要求同一线稿多次生成时结构必须一致(构图不能变),颜色与质感可多样。
(a) 在 ControlNet、LoRA、参考条件、inpainting 四种手段里选哪一种(或组合)?说明理由。 (b) 给出训练配置与可验证的验收标准。 (c) 若上线后发现「结构一致但颜色单调」,最可能是哪个环节的问题?给出两条排查方向。
(a) 选择:ControlNet 类条件网络(线稿条件)+ 可选的轻量 LoRA(风格)。 理由逐条对应约束:① 「结构必须一致」= 需要空间条件注入,这正是 ControlNet 的定位(把线稿当控制图,逐位置约束);② 「颜色与质感可多样」= 不应把风格写死在控制分支里,所以风格层要么不加,要么用低强度 LoRA(并可随时关掉);③ 「只有 2000 对样本」= 主干必须冻结(否则 2000 对样本训一个数亿参数主干必然过拟合),只训控制分支(参数量通常是主干的一个小比例);④ inpainting 不适用:它适用于「局部改一张已有图」,而这里要对任意新线稿生成整张图;⑤ 参考条件不适用:它改变语义 / 风格但不保证构图,与「结构一致」这一硬约束不合。
(b) 训练配置与验收标准(可直接写成实验协议):
| 项 | 设置 |
|---|---|
| 冻结范围 | 主干与文本编码器全冻结;只训控制分支(零初始化旁路) |
| 数据 | 对;线稿需与图像严格对齐(同一分辨率、同一裁切);留 对作验证 |
| 分辨率 | 与基座训练分辨率一致(换分辨率会同时改变条件图的统计) |
| 训练目标 | 与基座相同(噪声预测或速度回归),条件为「文本 + 线稿」 |
| 采样 | 与基座相同的少步采样器 + CFG( 建议在 内扫) |
| 验收 1(结构) | 固定线稿,用不同随机种子生成 张:用边缘检测器提取生成图的边缘,与输入线稿的IoU 或倒角距离应显著优于「不加 ControlNet 的同模型」基线 |
| 验收 2(多样) | 同上 张之间的颜色直方图 / 感知相似度不应过近(若几乎相同 → 风格被写死) |
| 验收 3(条件响应) | 换一条不同的线稿,输出结构必须随之改变(防止「控制分支被忽略」这一常见失效:条件被整体无视,模型只按文本生成) |
| 验收 4(回归) | 控制强度置零时,模型应退回基座行为(确认旁路确实从恒等开始且可控) |
(c) 「结构一致但颜色单调」的排查。 最可能的原因有两个方向:
- 方向一:控制强度过大。线稿条件在每一步都被强加,导致采样轨迹被约束在「低方差」区域(4.5.5 的机制:放大某一方向的同时会压窄其他方向的探索)。排查:把控制强度调低、或在采样后期(高噪声步之后)提前停止控制(一种常见做法是只在前面一部分步数施加控制)。
- 方向二:CFG 的 过大。 过大时模型被推向「条件似然高、数据似然低」的狭窄区域(4.5.5),颜色与质感多样性下降。排查:固定线稿与种子,扫 看多样性—对齐度曲线。
次要方向:训练数据本身的配色分布过于单一( 对样本若来自同一位画师,风格自然单一);或训练过度导致控制分支记住了训练集的颜色映射(可用「留出验证集上的颜色分布距离」判断)。
∎4.8.2.2 代码:把「编辑」做成一次掩码替换
下面这段把 定义 4.8.1 的第一种做法(inpainting)与第三种做法(LoRA)的接线写清楚:插值回填是保证一致性的手段,LoRA 的开关是保证可回滚的手段。两者都不需要改主干的权重。
import torch
from torch import nn
@torch.no_grad()
def inpaint_sample(model, vae, x_given, mask, steps=50, device="cpu", strength=1.0):
"""在潜空间做条件修补:已知区域每步回填,未知区域正常去噪。
x_given: (B, 3, H, W) 已知像素(未编辑区域),mask: (B, 1, H, W),1 = 保留(不改)
"""
model.eval()
z_given = vae.encode(x_given.to(device)).sample() * vae.config.scaling_factor # 已知区域的潜码
z = torch.randn_like(z_given) * 1.0 # 从纯噪声起步
m = torch.nn.functional.interpolate(mask.to(device), size=z.shape[-2:], mode="nearest")
# 只保留一部分步数做「重加噪」,是 inpainting 的常用做法:
t_start = int(steps * (1.0 - strength)) # strength 越小 → 越贴近原图,编辑幅度越小
for t in range(t_start, steps):
# ① 关键一步:把已知区域的潜码每步插值回去(否则去噪轨迹会漂移)
z = z * (1 - m) + z_given * m
# ② 未知区域正常做一步去噪(此处用模型自带调度器,省略具体公式,见 sec45 的 DDIM)
z = model.scheduler.step(model.unet(z, t), t, z).prev_sample
z = z * (1 - m) + z_given * m # 收尾再保证一次一致性
return vae.decode(z / vae.config.scaling_factor).sample
def lora_scale_hook(module, scale):
"""示意:LoRA 增量以可调强度接入(scale=0 即完全回到基座权重)。
实际工程用 peft 的 set_scale / LoraLayer.scaling 实现。"""
def hook(_m, _inp, out):
return out + scale * _m.lora_delta(_inp[0]) # lora_delta 为 B·A·x
return module.register_forward_hook(hook)
# 验收要点(对应例 4.8.1):
# 结构:固定线稿换随机种子,生成图边缘与输入线稿的 IoU 应稳定高于基线
# 多样:同一线稿的多样本颜色直方图不应几乎相同
# 回滚:lora_scale=0、strength=1 时行为应回到基座(便于定位冲突来自哪一层)
4.8.3 水印、隐写与溯源
(一)生成期水印(statistical watermark):在生成过程的采样环节嵌入一个统计信号。以自回归语言模型为例(绿名单方案):用一个只有生成方知道的密钥 在每一步把词表随机划分为绿名单(约一半)与红名单,然后给绿名单 token 的对数几率加一个偏置 : 检测器用同一个密钥统计文本中绿名单 token 的比例:在无水印文本中该比例约为 (如 ),在水印文本中约 。关键性质:这个偏置只改变采样分布、不改变生成流程的合法性,检测误差有可计算的界(论文给出 z 检验的假阳性率随长度指数下降的结论)。扩散模型也有对应做法(在初始噪声的频谱上嵌入信号,或在每步注入与密钥相关的偏移),检测鲁棒性与具体方案强相关。
(二)隐写 / 指纹(steganography / fingerprinting):把标识藏在不影响观感的信息里(扩散模型可以嵌在初始潜噪声的频谱中),或在生成时嵌入与用户 / 会话绑定的指纹以支持事后追责。
(三)内容凭证与签名(content credentials, provenance):不修改内容本身,而是给文件附一份可验证的元数据(谁生成、用什么模型、何时、是否被编辑过),并用密码学签名防止伪造。典型的开放标准是 C2PA 内容凭证。
- 统计水印:能回答「这段内容是不是用某模型生成的」(给生成方一个可检测信号)。它不能回答「是谁生成的」;对改写 / 翻译 / 重打水印的鲁棒性有限(具体鲁棒性边界取决于方案,必须实测)。
- 指纹 / 隐写:能回答「是哪个账户 / 会话生成的」(追责用途)。它的前提是标识在攻击后仍能被恢复——这恰恰是最脆弱的一环(重压缩、裁剪、再生成都可能破坏)。
- 内容凭证:能回答「这个文件自带的元数据是否被篡改」(密码学保证),但不能强制任何平台读取它,也不能阻止有人去掉它后重新分发。
一句必须写进报告的话:溯源系统的强度取决于最薄弱的环节,而不是最精巧的算法。工程上的合理组合是「生成期水印(自动、可批量检测)+ 内容凭证(可验证、跨平台)+ 检测方对擦除攻击的独立鲁棒性评估」。
把来源讲清楚有三重现实动机:
- 合规与信任:多个司法辖区与平台已要求对合成内容做标注(具体条文与生效时间以官方文本为准,本教程只作事实性概述、不给合规建议)。对研发团队而言,这直接影响能不能上线。
- 数据卫生:生成内容回流进训练集是模型崩塌(model collapse)类风险的已知来源之一——标注与溯源是缓解链条的第一环(本教程只描述机制,不夸大「崩塌」的必然性)。
- 误信息防御:合成语音 / 视频在诈骗与舆论操纵中的实际使用已经发生。溯源不能阻止生成,但能把「这是合成的」变成一个可被独立验证的技术事实,从而改变传播链条的成本结构。
一条反直觉但重要的提醒:水印的存在会让人误以为「没有水印的内容就是真实的」。这是危险的推论——水印可以被去除,也可以被伪造到真实内容上。溯源应被设计成「增加可信证据」,而不是「充当真实性的判定器」。
4.8.4 选型决策表
| 约束 / 需求 | 首选 | 次选 | 明确不要选 | 失败判据 |
|---|---|---|---|---|
| 单图延迟 < 200 ms | 少步潜空间扩散(LCM / 一致性,4.6.3) | GAN / 对抗蒸馏(一步) | 50+ 步 DDPM | 少步样本多样性显著低于基线 |
| 延迟不敏感、质量优先 | 潜空间扩散 + 流匹配 + 多步 ODE | DDIM 步 | 一步模型 | 细节区(文字 / 手部)系统性崩坏 |
| 要「一个能跑的最小基线」 | 全连接 VAE(4.3)或 2D 玩具扩散(4.5) | 小规模 DDIM | 直接上前沿架构 | 训练不收敛或 KL 坍塌 |
| 似然要可报(bits/dim) | 自回归 / 归一化流(精确似然)或完整 VLB 的扩散 | VAE(下界) | GAN(无似然) | 报了一个「不是似然」的数当似然 |
| 需要多模态动作分布 | 扩散策略 / 流匹配策略 | 混合密度网络(多高斯) | 单峰高斯策略(会把模式平均) | 动作出现「平均值」导致的抖动 |
| 数据量很小(< 10k) | 冻结基座 + LoRA / ControlNet(4.8.2) | 从头训小模型 + 强增广 | 从头训大模型 | 训练集样本被近似记忆(近邻检查) |
| 要给生成内容打标 / 溯源 | 生成期水印 + 内容凭证(4.8.3) | 指纹(内部追责) | 只依赖元数据字段(易被剥离) | 重压缩 / 裁剪后检测失效 |
| 需要强空间控制(结构不跑) | ControlNet 类条件分支 | inpainting(局部编辑) | 纯文本条件(无法约束构图) | 条件被忽略(换条件输出不变) |
| 算力有限但要多分辨率 | 潜空间扩散(压缩率可调) | 分辨率条件训练 | 像素空间高分辨率扩散 | 显存放不下 / 训练时间爆炸 |
| 要跨模态统一接口 | 离散 token + 自回归 / 掩码扩散(4.7) | 多任务微调 | 每个模态各训一套不共享的管线 | 序列过长导致显存与延迟不可接受 |
- 「FID 更低就是选型更优」:FID 的口径依赖特征提取器、样本量与预处理,跨设置不可比(4.1 的五条缺陷)。选型要看多轴:保真度 + 多样性 + 条件一致性 + 延迟 + 成本。
- 「有了水印就万无一失」:水印对改写、重压缩、再生成的鲁棒性有限,且没有水印不等于真实(4.8.3 的反直觉提醒)。溯源必须与独立鲁棒性评估一起交付。
- 「微调总比不微调好」:小数据下全参数微调会破坏基座能力(灾难性遗忘)并过拟合;正确做法通常是冻结主干 + 低秩 / 旁路(4.8.2),并保留「关掉增量即可回到基座」的可回滚性。
- 「扩散策略就是把扩散套到强化学习上」:它与 第 5 讲 的策略优化有交互——条件生成解决的是「如何表达多模态动作分布」,而「如何改进策略」仍需 RL 或模仿学习的目标。两者是互补的组件,不是替代关系。
Q1 用一句话说明 ControlNet 与 LoRA 分别改变生成过程的哪一层,以及它们为什么都从「零初始化」开始。
Q2 「用参考图(图像提示)替代文本提示」能保证构图一致吗?为什么?
Q3 生成期水印的检测依据是什么统计量?它对「改写 / 重压缩」的鲁棒性应当被如何评估?
Q4 一个团队要在 8 张单卡、2 万张未标注图像上做一个图像生成产品,延迟不能超过 200 ms。给出你的选型与三条验收标准,并指明两条最可能失败的环节。
参考要点
Q1 ControlNet 改变的是空间结构层(把边缘 / 深度 / 姿态等控制图注入主干,逐位置约束构图),LoRA 改变的是权重 / 风格层(用低秩增量微调主干的部分权重)。二者都从零初始化开始的原因相同:新增分支在训练第一步必须是恒等映射,否则一个随机初始化的分支会立刻破坏预训练模型的行为,训练从「修好一个坏模型」开始(ControlNet 的旁路卷积零初始化、LoRA 的 零初始化、4.6.2 的 adaLN-Zero 门都是同一动机)。
Q2 不能。参考条件只提供语义 / 风格级的信息(主体身份、画风、材质),它不把参考图的每个位置与输出对应起来,因此不约束构图。要保证构图必须用空间条件(ControlNet 类)或直接做结构条件(边缘 / 深度 / 分割图),这与 4.8.1 的「三层分工」表一致。
Q3 检测依据是「密钥划分的绿名单 token 在文本中的比例」这一统计量(如绿名单比例显著超过期望的 ),用水印 / 无水印样本的分布做假设检验(如 z 检验),假阳性率随文本长度下降(具体界限以论文结论为准)。鲁棒性评估要做受控攻击:改写、翻译、重压缩、插入删除、再次用其他模型生成,报告检测率随攻击强度的曲线与假阳性率,而不是给一个「能检测 / 不能检测」的二值结论。
补充提示:扩散模型的水印做法与语言模型不同(不是逐 token 加偏置,而是在初始噪声或每一步的偏移上做文章),因此两者的鲁棒性结论不能相互搬运。
Q4 选型:潜空间扩散(自训或微调基座)+ 少步采样(一致性 / LCM 类蒸馏)+ CFG 引导。理由:200 ms 的硬约束直接排除多步 DDPM;8 张单卡的预算排除从零训练数十亿参数的主干,因此应以「复用开放基座 + 小数据适配(LoRA / ControlNet)」为主。验收标准:① 目标分辨率下的端到端延迟 p50 / p95 都在预算内;② 多样性指标(同提示多样本的两两距离)不低于基座;③ 条件一致性(提示对齐度或控制图 IoU)达到设定阈值。最可能失败的环节:① 少步蒸馏后质量下降(尤其是细节区),需要对目标分辨率与目标提示分布实测而不是照搬论文;② 数据授权与合规(2 万张未标注图像的来源与使用许可)——它可能直接决定项目能否上线,而不只是一个技术环节。
- Ho, Jain & Abbeel, Denoising Diffusion Probabilistic Models(2020,arXiv:2006.11239)与 Song et al., Denoising Diffusion Implicit Models(2020,arXiv:2010.02502)——本讲主干方法的原始论文(若只读两篇扩散论文,就是这两篇)。
- Rombach et al., High-Resolution Image Synthesis with Latent Diffusion Models(2022,arXiv:2112.10752)与 Peebles & Xie, Scalable Diffusion Models with Transformers(2022,arXiv:2212.09748)——4.6 的 LDM 与 DiT。
- Zhang, Rao & Agrawala, Adding Conditional Control to Text-to-Image Diffusion Models(2023,arXiv:2302.05543)——ControlNet 原始论文(零初始化旁路的动机在此)。
- Hu et al., LoRA: Low-Rank Adaptation of Large Language Models(2021,arXiv:2106.09685)——LoRA 原始论文;同一机制在 第 9 讲 会以微调工程的形式再次出现。
- Ye et al., IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models(2023,arXiv:2308.06721)——参考图条件(图像提示)的代表方法。
- Kirchenbauer et al., A Watermark for Large Language Models(2023,arXiv:2301.10226)——绿名单水印与 z 检验检测的原始论文(4.8.3 第一层的依据)。
- Fernandez et al., The Stable Signature: Rooting Watermarks in Latent Diffusion Models(2023,arXiv:2303.15435)——扩散模型中的隐写 / 指纹方案。
- C2PA(Coalition for Content Provenance and Authenticity),内容凭证规范(官方规范与实现见
c2pa.org;无 arXiv 编号,引用时指向官方规范)——内容凭证层的工业标准。 - Nichol et al., GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models(2021,arXiv:2112.10741)——条件生成与编辑(inpainting)的早期系统性工作,读它可看清「编辑 = 条件修补」的原始思路。
本节小结:应用谱系可以落成一条原则——先写清约束(模态、延迟、数据量、算力、可控性、合规),再选主干。扩散 / 流匹配统一的是训练信号形态,离散 token 统一的是序列接口,二者常在真实系统中组合使用。改造已有模型的四种手段(inpainting / ControlNet / LoRA / 参考条件)分别作用于空间结构层、权重风格层与采样过程层,它们的共同工程前提是新增分支必须从恒等(零初始化)开始。部署阶段的溯源由三层组成:生成期水印(能否检测)、指纹(是谁生成)、内容凭证(元数据是否被篡改)——每一层的保证强度都不同,且没有水印不等于真实。
本讲到此处收束为一条主线:生成建模 = 学分布 + 可采样 + 可控 + 可评价 + 可溯源。前七节解决「怎么学、怎么采」,本节解决「怎么选、怎么改、怎么交付」。