一步生成模型装上“遗忘刹车”:反向蒸馏如何偷换数据
2022年前后,图像生成模型突然火了起来。Stable Diffusion、各种扩散模型层出不穷,效果一个比一个惊艳。但这些模型有个阴暗面很少被公众注意到:它们是用海量网络图片训练出来的,而这些图片里混杂着未经授权的人脸照片、色情内容、受版权保护的艺术作品。一旦模型训练完成,这些"黑料"就被编码进了参数里。你没法简单地
2022年前后,图像生成模型一下子火遍全网。Stable Diffusion 和各种扩散模型接连冒出来,效果一个赛一个地惊艳。可这些模型还有不太被外界留意的一面:训练时喂进去的是海量网络图片,其中夹着没获授权的人脸照、色情内容,以及受版权保护的艺术作品。
模型一旦训练完,这些“黑料”就被写进了参数里。想简单说一句“把那张照片删掉”根本行不通,因为模型存信息的方式压根不是按图片来的,它把所有数据揉成了一套复杂的概率分布。
机器遗忘要处理的正是这件事:让一个训练好的模型“忘掉”某些特定内容,同时其他方面的表现不能掉链子。
道理听着不复杂,真动手却麻烦得很。
被忽视的角落:一步生成模型
机器遗忘这个方向已经走了好几年,研究者试过的路子不少。有人让两套损失函数互相较劲,一套压住模型对“该忘记的数据”的生成质量,另一套托住模型对“该保留的数据”的生成质量。有人加弹性权重约束,不让模型参数跑得太偏。还有人直接上对抗训练、剪枝、注意力编辑这些手段。
问题在于,这些方法几乎全是为多步扩散模型或多步流匹配模型量身定做的。
多步扩散模型*:生成一张图要经过几十步乃至上千步的迭代去噪,每一步都在把随机噪声一点点变成有意义的图像。
生成质量确实没得挑,代价是慢。工业界于是早早用上蒸馏技术,把这类慢吞吞的多步模型压成一步就能出图的快速生成器。
一步生成模型*:靠知识蒸馏,让简化后的模型从噪声一步跳到目标图像,不用迭代去噪,生成速度能快几十上百倍。
这类一步模型如今已经进了实际产品,可奇怪的是,专门冲着一 步模型去的遗忘方法基本是空白。市面上少数几个尝试,不是要额外训一个分类器来认出该忘的数据,就是依赖复杂的最优传输损失函数,还得手工调一堆超参数。
打个比方,大家都在琢磨怎么给汽车踩刹车,却没人认真想过电动车的刹车逻辑跟油车完全不是一回事,照搬过去效果肯定打折。
这篇论文要填的就是这个空白:给一步生成模型装上一套靠谱的“遗忘刹车”,最好还能和“把多步模型压成一步模型”这件事一块儿做完,不额外多花训练成本。
蒸馏的逆向工程
想弄懂这篇论文的核心技巧,先得搞清楚蒸馏是怎么运转的。
通常训练生成模型,是拿一堆真实数据让模型去学这些数据的分布规律,这叫“匹配”。数据喂进去,模型调参数,直到它生成的东西跟真实数据越来越像。
蒸馏干的却是反过来的事。
你手上已经有一个训练好的“老师模型”,它多步、很慢,但效果出色。你想造一个“学生模型”,它一步、很快,效果要尽量贴近老师。麻烦在于,当初训练老师用的原始数据你可能根本拿不到,手里只有老师这个“黑箱”。
论文提出了一个很巧的思路,叫反向蒸馏。
反向蒸馏*:与其想着“拿数据去训出一个模型”,不如换个方向——从已经训好的模型身上,把它当初学到的数据分布倒推出来。落地时先设一个最小最大化目标,再让学生模型生成的数据一步步贴近老师模型所记住的那份分布,直到老师也分辨不出学生造的数据和真实数据有何差异。
这个思路有点像警察审讯嫌疑人。你没法直接问嫌疑人“你的秘密是什么”,但可以不断提出假设情景,观察他的反应有没有破绽,反复试探之后就能拼凑出真相。这里的“老师模型”就是那个嫌疑人,不断调整的“学生生成器”则是审讯者提出的假设。
反向蒸馏调整到位的话,生成器最终生成的数据分布会跟老师记忆里的原始训练数据分布重合。整个方法能站住脚,理论依据就在这儿。
把忘记这件事,塞进蒸馏公式里
那么问题来了:反向蒸馏的终点既然是完整还原老师记住的所有数据,遗忘岂不是跟这个目标天生打架?
论文给出的办法相当巧妙:把需要遗忘的数据直接掺进优化目标里去。
原始数据其实可以拆成两部分,一块是“要忘掉的”,一块是“要留下的”,两者按某个比例混在一起。论文把这个比例记作π,意思就是遗忘数据在整体中占到π这一份。
关键的一步在后面。论文手里握着真实的遗忘样本,比如几张点名要抹掉的人脸照片,于是就能拼出一个“人工混合分布”:把这几张真样本和生成器当下吐出的数据,按比例ρ搅到一块,再拿这个混合分布去对老师模型做反向蒸馏。
这里藏着个数学上的巧劲。ρ只要设得正好等于原始数据里遗忘部分的真实占比π,那么反向蒸馏收敛时,生成器自己学到的东西加上手头那批遗忘样本,恰好拼成老师记住的完整分布,也就意味着生成器学到的那一部分,只能是剩下的保留数据。
打个比方,一锅汤的总重量你清楚,往里放了多少盐你也清楚,那余下的自然就是水和其它配料,水根本不用单独去过秤。
论文为这个性质单独做了证明,取名IDU的遗忘特性定理:混合比例设对了,优化走到最优点,生成器就会自然而然只生成保留数据,完全不必再给它看真正的保留数据长什么样。
这个设计最打动人的地方,是它把那个老大难问题整个绕了过去:手上没有保留数据的样本,怎么保证模型不退步?
老办法一般得把遗忘数据和保留数据一起喂进去,一边压一边保,打对抗战。可现实里常常压根没有保留数据,比如你根本不知道原始训练集里除了要删的那几张脸还有哪些脸,老办法就卡住了。这篇论文用数学技巧把“保留数据”这个未知量变成“总量减去已知量”的推导结果,不用真见过它,只要知道它存在、知道它占多大比例就行。
要是不这么干,像老方法那样硬凑一个保留数据的替身,比如从网上随便爬一批“看着正常”的图片充数,结果会怎样?论文对比的几个基线方法恰恰走的就是这条路,像那个叫UOT-Unlearn的工作,还得额外配特征提取器、手动调代价函数,效果也确实差了一截。论文给的数据是:在CIFAR-10上遗忘类别1、6、8时,UOT-Unlearn的质量指标(FID,越低越好)分别为9.90、5.11、5.88,而这篇论文的方法做到2.96、4.16、3.22,差距接近腰斩。
理论拆成算法:两个网络的拉锯战
光有推导还不够,得落成能跑的训练流程。
论文搭了一个交替优化的框架,里面有三个角色:固定不动的老师模型、负责出图的生成器,还有一个帮忙判断的“假模型”。
假模型属于蒸馏训练里常见的辅助网络,任务是拟合生成器当前产出的数据分布,充当一个随时刷新的参照系,让生成器知道自己离目标还差多远。
训练过程像拔河,两头轮流使劲。第一步,生成器按住不动,只更新假模型,让它去学“遗忘样本和生成样本的混合体”,权重分别是ρ和1减ρ。第二步,把刚更新完的假模型按住,反过来调生成器的参数,目标是让生成器的产出跟老师模型的输出靠得更近,同时跟假模型的输出拉得更开。
这种你进我退的拉锯,像两个人在跷跷板上找平衡点。生成器朝“像老师”的方向发力,假模型一边忠实记录生成器的现状,一边被遗忘样本“污染”,生成器于是被迫往远离遗忘样本的方向调整,因为只有这样,假模型和老师之间的差距才能收窄。
论文还借了另一篇论文(Score identity Distillation,简称SiD)里的一个技巧,给生成器的损失函数乘上一个缩放系数αSiD。按理论取0.5就是标准公式,但实践中把它调到0.5到1.2之间效果更好。这属于经验性的工程调优,理论上没有特别深的依据,但确实管用。
效果如何:数字说话
研究团队围绕MNIST手写数字与CIFAR-10自然图像这两个数据集展开了大量实验,测试对象是流匹配(FM)和基于分数的扩散模型(SiD)这两类主干架构。
FM指的是流匹配,一种通过学习连续变换路径把随机噪声变成目标数据的生成建模方法,近年因为训练稳定、采样步数可以灵活调整而流行起来。
主实验挑的是MNIST里的数字3和7,以及CIFAR-10里的汽车(类别1)和卡车(类别9)。选这两对语义相近的类别,是想看看方法能不能同时处理“纠缠在一起的相似概念”,这比随便挑两个毫不相关的类别更有挑战性。
结果显示,流匹配设置下,两个被遗忘类别的生成频率(论文叫FGR,forgotten-class generation rate,即在5万张生成图里被分类器判为该类别的比例)都被压到0.56%以下。换句话说,原本模型见到数字3或7跟见到熟人一样熟练,遗忘之后几乎彻底认不出、也生成不出来。SiD设置下,这个比例控制在1.25%以内。
与此同时,保留下来的那些类别,比如其他数字、其他车辆之外的物体,生成质量几乎没见明显下滑。用衡量生成质量的FID指标看,跟“从头只用保留数据重新训练一个模型”这种理想对照组相比差距很小,有的情况下甚至更优。
论文还做了更细的鲁棒性测试,把MNIST的十个数字、CIFAR-10的十个类别逐一单独拿出来做遗忘实验,而不只是测那两组特意挑选的类别。结果显示,FM在MNIST上的平均FGR只有0.16%,在CIFAR-10上是0.84%;SiD在CIFAR-10上是0.75%。这说明方法的有效性不是运气好挑中了容易遗忘的类别,而是具有普遍适用性。
有个细节得单独拎出来说。论文对混合比例ρ的取值做了专门分析。按理论,它应当与真实数据中遗忘部分所占比例相等,可现实里这个比例往往没人知道。实验结果显示:ρ设得过低,遗忘不彻底;设得过高,又会连累无关内容。以MNIST为例,ρ一旦超过0.6,目标数字3和7确实被忘掉了,但数字2、5乃至8、9的生成质量也跟着垮掉,FID直接冲到10以上。
打个比方,你只想除掉花园里的一丛杂草,结果割草机马力开足,旁边的玫瑰也被剃了个精光。这种“误伤”说明遗忘并非越猛越好,过犹不及这句话,放到机器学习里一样成立。
和同类方法比,表现如何
论文用了不少篇幅与已有方法逐项对照,这部分信息量同样不小。
有些两阶段做法先在多步教师模型上直接做遗忘,再补一轮蒸馏,ContinualFlow这类工作就属于这种路子。这篇论文的方法则一步到位,遗忘和蒸馏在同一次训练里完成,省掉了一轮训练开销。ContinualFlow还要额外挂一个图像分类器来算能量函数,这篇论文的训练过程完全不需要分类器或特征提取器插手。这个区别挺关键:一旦依赖外部分类器,遗忘效果好坏就部分取决于那个分类器准不准,等于多了一层不确定性。
至于专门为“类别遗忘”设计的SFD方法,这篇论文面对的是难度更高的“数据遗忘”。
类别遗忘*:模型属于条件生成模型,输入标签就能控制它生成某个类别,比如你说“生成一只猫”,模型便知道该调用哪部分知识,所以要忘掉某个类别,定位起来相对容易。
数据遗忘*:要删的只是数据库里特定的几张图,比如某个人的人脸。模型本身是无条件的,没法靠一个标签精准定位到待删内容,处理起来自然更难。
有意思的是,任务难度不同,成绩却不相上下。在用类别模拟数据遗忘场景时,这篇论文的表现跟专为类别遗忘设计的SFD方法打成了平手。CIFAR-10遗忘类别0的实验里,SFD的FID约为3.1,FGR约为0.36%,这篇论文的成绩是3.54和0.58%,数字差距不大。不过别忘了,它解决的是一个更一般化的问题。
论文也如实写出了一个局限。在流匹配架构上,训练时间一长,被遗忘的类别有时会“死灰复燃”:生成器更新到2万步左右,此前被压下去的类别生成频率又开始回升。SiD架构上没观察到这个现象。论文推测,原因可能出在流匹配当前这套网络结构和训练配方本身不够稳健,而非遗忘框架有毛病。学术论文里肯这样坦白局限,其实不多见。
写在后面
读完这篇论文,让我印象最深的不是遗忘特性定理那套数学证明,而是设计思路背后一个很朴素的观察:全部真相不必知道,只要知道真相里缺了哪一块,剩下的部分自己就会浮现出来。
这种“用已知推未知”的路子,很多地方都能见到影子。侦探破案靠排除法,会计查账靠勾稽关系,天文学家发现海王星,也是从天王星轨道的异常反推出来的——没有人直接看见海王星,只是算出了“这里应该有个东西”。论文把这套逻辑搬进生成模型的遗忘问题,算是一次漂亮的跨领域思路迁移。
另一点让我多想了一会儿的是ρ值的脆弱性。理论上这个比例该严丝合缝地等于数据里遗忘部分的真实占比,可现实中这个真实比例常常是未知的:你要删的那些人脸照片,在整個训练集里到底占百分之几,谁能说得清?这暴露了一个挺现实的矛盾:理论上优美的解法,落到实际场景里,总会撞上“这个参数该设多少你怎么知道”的烦心事。论文的建议是,先从遗忘数据的粗略估计占比开始试,再靠FID、FGR这些指标去微调。这是一种务实的妥协,但也说明这个领域离“拿来就能用、不用调参”还有距离。
如果模型真能学会“选择性遗忘”,那它是否也该拥有“选择性记忆”?换句话说,某张照片要不要被模型学习,能不能由用户自己决定,而不是等模型学完之后再琢磨怎么删掉。论文没有回应这个问题,不过读罢,我认为它值得提出来。
Q&A
Q1:IDU(反向蒸馏遗忘)是什么?
A:IDU是一种让一步图像生成模型“忘记”特定训练数据的方法。它把蒸馏和遗忘并进同一个训练过程,只需要老师模型和要遗忘的数据样本,既不用保留数据,也不用额外分类器。
Q2:IDU方法会不会影响模型生成其他内容的质量?
A:实验显示影响很小。论文在MNIST和CIFAR-10上做了测试,遗忘目标类别后,生成频率降到1.25%以下;保留类别的生成质量与理想对照组接近,某些情况下还更好。
Q3:IDU方法和传统机器遗忘方法最大的区别是什么?
A:传统方法一般要同时备好遗忘数据和保留数据,用两套损失函数对抗训练。IDU只须遗忘数据,借助数学上的混合分布技巧,让生成器自己推导出该保留什么,并不需要真的见过保留数据。