4.4 LoRA / DreamBooth / Textual Inversion / Hypernetwork¶
所属章节:第 4 章 条件控制与个性化
课时:90 分钟
前置:SD 架构、Cross-Attention
对应面试题:A12
一句话目标:学完能说清四种个性化方法分别在训练什么、容量多大、适合什么场景,并能做选型。
1. 学习目标¶
学完本节,你应该能够:
- 写出 LoRA 的低秩增量公式;
- 解释 rank/alpha、目标模块、合并;
- 说明 DreamBooth 的少样本训练和 prior preservation;
- 解释 Textual Inversion 只学 token embedding;
- 说明 Hypernetwork 的“网络生成权重”;
- 比较 四种方法的容量、文件、数据量、风险;
- 用 90 秒回答 A12,并接住“LoRA 和 DreamBooth 的区别”。
2. 为什么需要个性化¶
预训练 SD 不知道:
- 你的脸;
- 你的宠物;
- 你的品牌;
- 你的画风;
- 一个特定物体。
个性化方法要解决:
用少量数据,把新概念/新主体注入模型,同时尽量保留原能力。
四条路线:
- LoRA:低秩增量;
- DreamBooth:少样本微调配方;
- Textual Inversion:新 token embedding;
- Hypernetwork:小网络生成权重。
3. LoRA¶
3.1 公式¶
对原权重 \(W\in\mathbb R^{d\times k}\),不直接更新,而是学低秩增量:
其中:
- \(B\in\mathbb R^{d\times r}\);
- \(A\in\mathbb R^{r\times k}\);
- \(r\ll\min(d,k)\);
- \(\alpha\) 是缩放。
3.2 初始化¶
- \(A\) 随机;
- \(B=0\);
- 所以初始 \(\Delta W=0\),不破坏原模型。
3.3 作用位置¶
在 SD 中通常作用于:
- cross-attention 的 Q/K/V/out 投影;
- 也可作用于 UNet 其他线性层;
- 有时也加在文本编码器上。
3.4 训练与推理¶
- 只更新 \(A,B\);
- 文件小(几 MB 到几十 MB);
- 推理可动态加载;
- 可合并进原权重;
- 多个 LoRA 可组合,但可能冲突。
3.5 优缺点¶
优点:
- 参数高效;
- 训练快;
- 易分享/组合;
- 不破坏原权重。
缺点:
- rank 太小容量不足;
- 太大会过拟合;
- 复杂主体可能不如全量微调。
4. DreamBooth¶
4.1 流程¶
- 输入:3–5 张主体图(人/宠物/物体);
- 一个唯一标识符(如
sks dog); - 微调整个模型,或用 LoRA;
- 目标:把标识符绑定到主体。
4.2 Class prior preservation¶
用基础模型生成同类别的先验图,防止语言漂移/过拟合:
- 第一项:主体图去噪;
- 第二项:先验图去噪;
- 让模型保留“类别”的一般知识。
4.3 优缺点¶
优点:
- 主体一致性强;
- 少样本;
- 可结合 LoRA 降成本。
缺点:
- 容易过拟合;
- 可能忘记原模型能力/语言漂移;
- 全量微调成本高。
面试要点:DreamBooth 是训练配方,不是参数高效方法;它可以全量,也可以 LoRA。
5. Textual Inversion¶
5.1 思想¶
在文本编码器的词嵌入表中新增一个 token(如 <my-style>),冻结模型,只优化这个 embedding。
5.2 损失¶
- 只学 \(v\);
- 模型权重不变;
- 文件 KB 级。
5.3 优缺点¶
优点:
- 文件极小;
- 不改变模型;
- 易组合;
- 适合风格/简单概念。
缺点:
- 容量有限;
- 复杂主体/高保真人物弱;
- 一个 token 能表达的信息有限。
6. Hypernetwork¶
6.1 思想¶
训练一个辅助网络,输入一个 learned embedding,输出原模型某些层的权重增量:
- 原模型冻结;
- 辅助网络学习“怎么改权重”;
- 在 SD 社区中常作用于 cross-attention。
6.2 特点¶
- 文件通常比 LoRA 大;
- 训练更不稳定;
- 现在使用较少,逐渐被 LoRA 取代;
- 适合风格/概念,但工程生态不如 LoRA。
7. 对比表¶
| 方法 | 训练对象 | 是否改原权重 | 数据量 | 文件大小 | 容量 | 适合 |
|---|---|---|---|---|---|---|
| LoRA | 低秩增量 \(BA\) | 不改,挂载增量 | 几十–几百张 | 几 MB–几十 MB | 中 | 风格/角色/概念 |
| DreamBooth | 全量或 LoRA | 改(全量) | 3–5 张 + 先验 | GB 级(全量) | 高 | 强主体绑定 |
| Textual Inversion | 新 token embedding | 不改 | 3–5 张 | KB 级 | 低 | 概念/风格 |
| Hypernetwork | 生成权重的网络 | 不改 | 几十–几百张 | 几十–几百 MB | 中高 | 风格 |
8. 怎么选¶
| 需求 | 推荐 |
|---|---|
| 学一个画风 | LoRA / TI |
| 学一个人/宠物 | DreamBooth + LoRA |
| 快速试错 | LoRA |
| 文件要极小 | TI |
| 需要强主体一致性 | DreamBooth |
| 研究/实验 | Hypernetwork(较少) |
9. 90 秒回答:四种方法的区别¶
面试官问:谈谈 LoRA / DreamBooth / Textual Inversion / Hypernetwork 的原理和差异。
参考回答:
“LoRA 学低秩增量 \(W+\frac{\alpha}{r}BA\),只训练 A/B,文件小、可组合。DreamBooth 是少样本主体定制配方,用 3–5 张图和唯一标识符,配合 class prior preservation 防止过拟合,可以全量微调或加 LoRA。Textual Inversion 冻结模型,只学一个新的 token embedding,文件 KB 级,但容量有限。Hypernetwork 用小网络生成权重增量,原模型冻结,文件较大、训练不如 LoRA 稳定。核心区别是:LoRA 改权重增量,DreamBooth 是训练配方,TI 改 prompt token,Hypernetwork 生成权重。”
10. 追问与回答¶
追问 1:LoRA 和 DreamBooth 是什么关系?¶
DreamBooth 是“怎么训”的配方,LoRA 是“训哪些参数”的方法;可以组合成 DreamBooth LoRA。
追问 2:TI 为什么文件这么小?¶
只存一个新 token 的 embedding,不存模型权重。
追问 3:DreamBooth 为什么需要先验图?¶
防止过拟合和语言漂移,让模型保留类别的一般知识。
追问 4:LoRA 的 rank 怎么选?¶
小 rank 容量低但轻,大 rank 容量高但易过拟合;常用 4–64,视任务调。
11. 常见误区¶
- 把 DreamBooth 等同于 LoRA:一个是配方,一个是 PEFT。
- 说 LoRA 改原权重:训练是增量,推理可合并。
- 说 TI 改 UNet:只学文本 embedding。
- 忽略 prior preservation:DreamBooth 的关键。
- 认为文件越小效果越好:TI 容量有限。
12. 课堂练习¶
答案见 06 章节练习与答案。
- 写 LoRA 公式。
- 解释 DreamBooth prior loss。
- 说明 TI 只学什么。
- 比较四种方法的容量/文件。
- 用 90 秒回答 A12。
13. 自测清单¶
- [ ] 能写 LoRA 公式;
- [ ] 能解释 rank/alpha;
- [ ] 能解释 DreamBooth prior;
- [ ] 能解释 TI;
- [ ] 能解释 Hypernetwork;
- [ ] 能做选型;
- [ ] 能 90 秒回答 A12。
14. 本节材料为什么这样设计¶
- 先 LoRA 再 DreamBooth:先讲参数高效,再讲训练配方。
- 对比表:A12 的核心。
- 选型表:把知识变成决策。
- 不写代码:本节是方法和取舍,不是训练实现。
详细设计理由见 08 材料设计理由。