跳到正文
Learn Everything
返回

只训练 15,360 个参数:六个新 token 能否控制冻结的 FLUX?

编辑文章

系列总纲 · 上一篇:FLUX LoRA 的条件诊断

上一轮把高噪声训练比例增加了,六个花卉代号仍然没有稳定对应六类花。第五轮换了干预位置:冻结 Qwen3、FLUX Transformer 和 VAE,只训练六个专用 token 的输入向量。

工程接口跑通了:能够把新 token 放进新提示,载入保存的向量,生成图片;反向传播、保存重载与普通提示编码保持均通过检查。任务却没有完成:三个训练 seed 在两种新模板、两个评估器下,都未通过预定的继续门槛,结果是 0/3。

这篇文章把“代码能工作”和“新词语义学成”分别拆开。小参数量很有吸引力,但只有保存了有效梯度,不代表模型学会了我们希望的含义。

为什么考虑训练一个新词

在实际素材系统里,我们可能希望某个专用标记指向特定产品、角色或风格,再把它放进“棚拍”“水彩”“户外”等不同提示中。这个方向的价值在于保持大型基础模型冻结,用少量产物携带专用概念。

Textual Inversion 原论文 提出在冻结文生图模型中学习新词嵌入。我们的实验借用这个训练位置,移植到 Klein 的 Qwen3 隐状态接口,研究六类已有花卉与六个新符号的绑定。它不是原论文少样本个性化基准的完整复现,也不是从零学习花卉知识;底座原本就拥有大量花卉先验。

LoRA 改变的是生成器指定权重中的低秩更新。新词方法改变的是“输入这个符号时,文字编码器收到什么向量”。两个位置可以联合训练,但这一轮只学习新向量,避免同时修改两处。

方法本项目的可训练位置主要问题
第三、四轮代号 LoRA图像 Transformer 的低秩 A/B生成器能否把冻结的任意代号表示绑定到花类
第五轮新 token文字输入中的六行向量条件入口改变后,冻结生成器能否执行正确绑定
自然花名基座不训练预训练语义能提供什么参照与反例

这里的背景仍是技术与教学验证。六类花不是某个商业产品,不包含真实生产效果或客户偏好数据。

输入向量只有六行,梯度却要走过整个条件接口

新增 <flwconcept1> 至 <flwconcept6>,每个是一个完整 token,对应2,560维输入向量:

6 tokens * 2560 values = 15,360 trainable parameters

六行都从同一个普通词 flower 的向量初始化。没有把 sunflower 的词向量预先塞进向日葵的那一行,也没有加入区分类别的小扰动。因此初始状态没有六类身份信息。

输入提示在新 token 位置使用外部可训练向量,其他位置继续使用原词表。之后经过冻结 Qwen3 的第9、18、27层,拼接成7,680维条件序列,再送入冻结 FLUX,计算 noise-clean 速度损失。固定版本 Klein 编码接口

新 token 外部向量、冻结 Qwen3 三层隐藏状态、冻结 FLUX 与反向传播的关系

图 1:蓝色箭头是前向数据流,橙色虚线概括梯度回到新输入向量的路径;实际梯度穿过冻结的编码与生成运算。冻结权重不等于禁用计算图,原来用于缓存文字的 no_grad 路径不能直接用来训练输入向量。

如果把 Qwen3 编码放在 torch.no_grad() 里,生成器可以看到新向量产生的条件,却无法把“图片预测错了”的信号传回新向量。这是一个很隐蔽的工程失败:loss 仍有数值,程序可能仍能输出图,目标参数却没有真正学习。

正式训练前,我们另外做了3步功能检查:

这3步是独立 probe,不计入正式1,800次更新。AdamW 优化整张六行表,历史动量可能使当前没有直接梯度的行继续变化,所以“仅当前行有梯度”也不意味着“这一步只更新当前行”。

模型文件与原词表不改写。产物包含新增 tokenizer、六行外部向量和编码代码;使用时必须加载这个接口。直接把新字符串发给没有载入向量的原模型,不会自动获得相同含义。

怎么训练,怎么避免边看图边换规则

正式训练 seed61/73/89,每组600步、batch1。AdamW 学习率0.005、weight decay0、梯度范数裁剪1,数据仍是原60张花卉训练照片。训练模板固定为:

A natural close-up photograph of <flwconceptN> flowers,
detailed petals and a garden background.

三组初始化相同,照片与噪声顺序随训练 seed 改变。图片ID、均匀sigma和高斯噪声流复用第四轮对应均匀 LoRA 计划,并保存第1/300/600步噪声指纹。固定使用第600步向量,不根据生成图挑 checkpoint。

旧 LoRA 是参考条件,不是严格单因素对照:新 token 的 tokenization、初始语义与参数化都变了。即使照片与噪声计划配对,也不能把差距完全归因于“训练位置不同”,更不是等参数量比较。最直接的比较是同一新 token 接口的训练前后。

生成前锁定9个配置、3个模板、6类、2个新生成 seed7201/7202,512×512、20步、CFG4:

模板是否出现于新词训练
花园近景照片是
灰背景棚拍否
白纸水彩否

九个配置为原代号基座、自然花名基座、未训练新词、三份训练新词、三份旧均匀 LoRA。每配置36请求,共324次正式生成。棚拍和水彩检验的是有限的提示迁移,不代表自然语言任意组合能力。

先看全配置,不先挑好看的格子

以下三张联系图均固定生成 seed7201,列顺序完全一致:代号基座、自然花名、未训练新词、token seed61/73/89、旧 LoRA seed61/73/89。行依次为 pink primrose、balloon flower、fire lily、sunflower、rose、passion flower。

花园模板下全部九配置与六目标类的固定 seed7201 联系图

图 2:训练模板中的输出。有些新向量改变了颜色、花团排列,却没有稳定生成六种不同目标。先纵向检查同一列,判断类间是否有区别,再横向看同一请求的变化。

未训练灰背景棚拍模板下全部九配置与六目标类的固定 seed7201 联系图

图 3:自然名列出现明显的类间差异;新词列常保留相近浅色花团。部分灰背景被保持,不意味着目标花类被保持。第三行 token seed89 的蓝绿局部是需要保存的反例。

未训练白纸水彩模板下全部九配置与六目标类的固定 seed7201 联系图

图 4:很多输出仍有白纸与浅色笔触,但类别区分很弱。风格看起来像水彩、图片不完全相同、目标类正确,是三项不同观察。

三个面板覆盖162/324次请求,没有按分数选择格子。原实验目视检查也是这个固定范围,没有冒充全324张的盲评或植物学专家标注。

Case 1:向日葵没有因输入变成新 token 就被学会。 自然名列可见典型黄色花盘;不少训练后 token 请求仍生成浅色小花团。整体看起来像花、背景也正确,但向日葵请求没有得到向日葵的显著结构。这个例子直接说明“提示中的场景部分有效”可以与“新词类别失败”同时发生。

未训练基线为什么必然是 2/12

我们使用固定 CLIP 与 SigLIP2 的零样本六类吻合率作为主代理。每模板6类×2个生成 seed,共12张请求;prototype 和ridge只做敏感性分析,不重新拟合新生成图,也不挑得分最好的一种。

未训练六词来自同一向量,输入编码也相同。在某一模板、某一生成 seed 下,六个请求实际产生同一图片;评估器对这张图片给出一个固定类别。六个目标标签各出现一次,必然恰好对其中一个。

因此两个生成 seed 合计恰好2/12,16.67%。这是构造性基线,不代表人工确认了这张花图是什么,更不是依靠随机假设估计的模型知识。

这个设计也解释了为什么必须分别报请求数与去重数:未训练配置36请求只有6个不同SHA;其余八配置各36个不同SHA,整个正式矩阵324请求、294个不同图像SHA。不能把未训练36请求当作36张独立图片。

很低的迁移门槛,也没有通过

在训练前预定:同一训练 seed 相比未训练新词,两个新模板、两个主评估器都至少增加10个百分点;至少2/3训练seed满足才继续扩展。

每模板分母12,多对1张是8.33个百分点,不够;必须至少多对2张,即从2/12达到4/12,33.33%。这个门槛只是低成本继续研究的准入,不是“可上线”的质量要求,也不是统计显著性检验。

配置CLIP 花园CLIP 棚拍CLIP 水彩SigLIP2 花园SigLIP2 棚拍SigLIP2 水彩
原代号基座2/121/122/122/122/122/12
自然花名基座12/1210/1210/1211/1211/1210/12
未训练新 token2/122/122/122/122/122/12
token seed612/122/121/120/122/122/12
token seed730/124/122/121/124/122/12
token seed891/121/122/121/121/122/12
旧 LoRA seed612/122/122/122/122/122/12
旧 LoRA seed732/122/122/122/122/122/12
旧 LoRA seed892/122/122/122/121/122/12

两评估器下灰背景棚拍与白纸水彩的正确计数,以及至少 4/12 的有限迁移门槛

图 5:seed73 仅棚拍达到4/12,水彩仍为2/12。同一 seed 需要在两个新模板都通过,所以它也没有达标。三个seed的联合通过数为0/3,prototype和ridge也各为0/3。

Case 2:局部改善不能冒充模板泛化。 如果只保留seed73棚拍,图表可以写成“准确率翻倍”。但两个评估器都认出的改进没有迁移到水彩,也没有在另两seed重现。完整的预定门槛让这一局部结果保持原来的解释位置:值得观察的单格,没有证实六类新词可靠学习。

三份新词配置合计108请求,两主评估器都只匹配15/108,13.89%。我们还把请求c类循环路由到c+1类向量;正确路由没有展示类别优势,错配复用反而得到CLIP19/108、SigLIP2 20/108。

这项诊断先验证“错配c类编码”等于“正常c+1类编码”,再复用已经生成的图重新计算标签,不是又生成108张,也不是新的独立样本。编码路由正确的工程检查与语义绑定正确的任务检查依旧不同。

代理塌缩,不等于像素完全相同

三份训练新词的36次水彩请求中,CLIP把35次判为balloon flower,SigLIP2把36次判为balloon flower。可以称为代理类别高度集中,却不能直接写成“所有输出一模一样”。

事实上,三份训练新词各36张图的SHA都不同。像素差异说明输出并非文件级重复;它不保证有正确、足够大的概念差异,更不能替代人类质量判断。

Case 3:有颜色变化,但仍没有目标身份。 水彩面板中新词列的花色和排列确实改变,一些花偏蓝,一些有浅紫小花团。评估器却把几乎所有目标压到同一类别。可能包含实际类间同质,也可能包含真实照片校准到水彩域的评估器偏差;本轮没有专家重标,不能只选择其中一个解释。两者都要求继续保留原图。

两种特别容易误导人的反例

自然花名 balloon flower 的气球造型,以及 seed89 新 fire lily 在花园、棚拍、水彩三个模板中的蓝绿模糊输出

图 6:左格为自然花名基座,后三格为新词seed89,全部是正式矩阵中的固定seed7201样本;它们是说明边界的case选择,不是代表整批平均水平。

Case 4:分类代理可以把字面联想算作正确。 灰背景棚拍中的自然名balloon flower出现彩色气球造型。CLIP判为错误类,SigLIP2却判为目标类。图片与“balloon”语义相关,并不等于真实的桔梗花形态正确。所以自然名10/12或11/12这类高分也不能直接写成植物学真实性。

Case 5:新词改变了前景,也破坏场景约束。 token seed89的fire lily在花园、棚拍、水彩中都出现蓝绿模糊局部。棚拍并没有保持预期的灰背景整株构图,水彩也偏离其他格子的白纸独立花形。它不是只有花类没学成,某些输入还影响了原先有效的场景控制。三个模板的配对展示让这种持续失败更容易看见。

这些是助手对固定样本的有限目视观察,没有植物专家真值、盲法偏好、风格准确率或MOS。图像数量越多,越应该让具体失败可检索,而不是靠人工挑图替代评价。

少参数不意味着少显存

正式三组训练合计475.05秒,单组157.94–158.64秒,峰值PyTorch allocated15.41 GiB。324次缓存条件生成合计605.41秒,中位1.79秒/图,峰值8.09 GiB;两评估器与联系图导出阶段11.33秒。

这些是各阶段记录,不包含完整模型加载、旧缓存准备、文字条件预计算与传输。不能把15,360参数解释成“训练时只需存六个向量”:梯度仍需经过 Qwen3 和图像 Transformer 的运算图,激活需要显存。第四轮 LoRA 的训练采用文字缓存,反向路径不同,因此显存差距也不能被当作严格同管线的参数效率排名。

训练前100步与后100步平均loss没有统一下降,还混合了不同照片与sigma。本轮没有用这个平均数来宣称概念学习成功。冻结计算图的正确性由梯度与持久化检查证明,语义效果由独立生成协议验证。

保存的接口怎么调用

真实源码包含 learn_tokens.py、generate_tokens.py、evaluate_tokens.py 和 run_prompt.py。在多模态实验项目中,准备已校验的公开基座、匹配环境与保存的向量之后,可以将路径替换为自己的产物位置:

CUDA_VISIBLE_DEVICES=0 python labs/round5/image/run_prompt.py \
  --base ./models/FLUX.2-klein-base-4B \
  --vectors ./artifacts/tokens_s61/final.safetensors \
  --prompt 'A studio photograph of <flwconcept1> flowers on a plain gray background.' \
  --seed 7201 \
  --output ./new-example.png

这是已实现接口的调用规格,不是仅凭博客图片就能恢复权重的自包含示例。脚本要求提示包含已保存的新token,拒绝覆盖原文件;需要完整模型依赖和向量文件。实验档案保存三份最终向量,没有挑选本轮“最好seed”。

这个CLI额外在另一张H100上实跑一次,512×512图片SHA与正式矩阵同配置输出一致。它验证持久化后的新提示入口,没有计入324个正式请求,也没有单独当成新的训练实验。

我们核验了什么,仍然没有核验什么

检查层次实际证据不能代替的结论
参数与梯度1,800条更新均有限、非零,六向量变化不能证明六类语义绑定
训练配对图片ID、sigma逐步一致,三个噪声指纹匹配跨方法仍不是单因素比较
持久化保存重载一致,CLI输出同SHA不代表新提示普遍有效
普通提示保持54项自然提示编码不变编码不变不是全领域生成质量保证
循环路由54项编码等价检查通过不代表正确路由比错配更有语义优势
数据与评分324配置完整,294不同SHA;CPU float64重算1,944分类判断、162组数学重放不是再跑图像编码器或专家重标
模板迁移两新模板、两评估器、三训练seed0/3,不支持放大当前方案

这轮完成的功能是一个可训练、可保存、可在提示中加载的新词输入接口;完成的研究结果是这套接口、数据和预算下的有限迁移失败。它没有检验新主体个性化、两个新概念同时组合、颜色数量关系或独立新来源图片。

数值与图像来自 runs/round5/image/formal、generation、evaluation 及 independent_audit.json,源码在 labs/round5/image。公开博客只展示原创解释图和真实生成案例,不重复放入基础大权重或个人服务器信息。

继续研究时,先沿着“输入向量—编码序列—生成条件—实际类间差异”定位失败,再决定改监督、初始化、训练预算还是评价域。当前结果不支持只因可训练参数很少就扩大训练,也不支持宣称Textual Inversion思想整体无效。


编辑文章
分享这篇文章:

上一篇
声音模型怎么学:从合成音调、离散 codec 到 Whisper 的负迁移
下一篇
FLUX LoRA 学会了画花,为什么没有学会六个代号?