模型与参数

模型微调:什么时候才真的需要动权重

又称 dreambooth, textual inversion, checkpoint model, stable diffusion checkpoint, 底模

模型微调是在一个预训练模型上继续训练,用你自己的图教它一个它原本不认识的人、风格或产品。它真的改动了权重,这是它和写提示词、给参考图的根本区别,也是它应该排在最后而不是最前的原因。

先把便宜的台阶走完

这里有一个梯子,跳到最顶上一级既费钱又费时间。

  1. 先把提示词写好。 模型本来就认识这个概念时,改文字是零成本的。
  2. 给它一张图。 参考图、结构图或首帧,能在不动任何权重的前提下把外观搬过去。
  3. 训一个 LoRA。 小、便宜、算力一小时以内,而且可逆,因为它是叠加在任意兼容底模之上的。
  4. 微调整个模型。 完整 DreamBooth 或重写一份大模型。慢且贵,只有在 LoRA 已经试过且不够用时才值得。

大多数觉得自己需要训练的人,其实需要的是第二步。诚实的检验标准是:一张好的参考图能不能带你走完八成路程。如果能,剩下那两成很少值得开一次训练。

几个词分别指什么

checkpoint model(大模型 / 底模) 是完整的一整套权重,也就是大家说的那种几 GB 的 stable diffusion checkpoint 文件。微调它,产出的还是一个这样的文件。

DreamBooth 是教特定主体的方法:用一个罕见 token 当它的名字,再加上类别图,防止新知识把整个类别吞掉。

textual inversion 学的是嵌入而不是权重,等于造一个新词,指向模型已经会的东西。

LoRA 训练的是低秩调整矩阵而不是全部权重,所以它体积小、还能叠加。

结果好坏由素材决定

训练在很大程度上是个数据问题,而它的失败方式是可预测的。

  • 多样性是硬要求。 每张图光线都一样,模型学会的就是那套光;背景都一样,它学会的就是那个背景。
  • 分辨率和清晰度比张数重要。 拿放大过的、发虚的图去训,教出来的就是发虚。
  • 标注要一致。 主体用一个罕见标识符,描述变化的部分,不要去描述不变的部分。
  • 删掉近似重复。 视频里连续几帧实际上就是同一张图重复多次,而重复正是过拟合的起点。

怎么看出过拟合与欠拟合

过拟合的样子是:主体是对的,但被冻住了。永远是那个四分之三侧脸、那套打光,训练集的背景冒出来一块,提示词一样也搬不动。欠拟合正好相反:主体只有一半像,标识符表现得像个普通形容词。

判断这两者,要在训练过程中的多个存档点上都出图,而不是只看最后一版。模型微调本质是个实验过程,最好的那一轮往往不是最后一轮。

这个效果的提示词

一条能稳定出效果的起点。主体和场景可以换,技术性的那几句留着。

A portrait of sks man in a charcoal wool coat, overcast daylight, 85mm, shallow depth of field

试一下:微调(Fine-Tuning)

打开生成器,参数已经预填好。

常见问题

LoRA 和微调出来的大模型有什么区别?
一个完整的 checkpoint model 会重写全部权重,文件动辄几个 GB;LoRA 只训练一小组调整矩阵,几十 MB,加载在底模之上。要教一张脸、一种风格或一件产品,几乎总该选 LoRA。
素材要准备多少张?
训一张脸,15 到 30 张是常用区间,质量永远比数量重要。光线、距离、角度、背景都要有变化,只留清晰的,删掉几乎重复的。十张优秀且多样的照片,比从一条视频里抽出的八十帧好得多。
textual inversion 是什么,现在还值得用吗?
它学的是一个新词而不是新权重:找出一个嵌入向量,指向模型本来就画得出的概念。文件只有几 KB,但它教不了模型压根不会的东西。现在主要还活在风格 token 上,因为那种场景里它的短板不致命。
怎么判断训练过拟合了?
主体每次回来都是同一个姿势、同一个构图,或者训练集的背景开始渗进画面,而提示词已经改不动衣服和环境了。按顺序试:减少训练步数、降低学习率、给素材加多样性。
想让角色保持一致,一定得训练吗?
通常不用。参考图、首帧或身份适配器就能解决大部分角色一致性的活,训练成本为零。真正值得训练的场景是:同一个主体要横跨几十个镜头,姿势和服装多到任何单张参考图都覆盖不了。
DreamBooth 比普通微调多做了什么?
多了先验保留:在学你这个主体的同时,它持续生成该类别的通用样本,避免学会一个人就把模型对「人」的理解整个覆盖掉。这就是为什么它能防止你之后每写一次 man 都返回你训练的那个人。

相关术语