合成数据:用模型的输出来训练模型
当真实数据告急时,模型可以生成自己的训练数据。这很强大,有点循环,而且如果忘了它从何而来就很危险。
机器学习一向对数据求贤若渴,有那么一阵子,供给似乎取之不尽。但针对某项具体任务的高质量数据——带标注的样例、干净的指令、精心制作的演示——是昂贵的、稀缺的,有时还在法律或伦理上禁区重重。于是这个领域倒向了一个听起来近乎悖论的想法:让模型生成用来训练模型的数据。 这就是合成数据,它已悄然成为现代 AI 构建方式中最重要的成分之一。
这个前提让人觉得循环,某种意义上它也确实如此。门道在于让这种循环富有产出而非每况愈下——在于从模型的输出里榨取出比你为产出它所投入更多的东西,同时又不慢慢毒化水井。
为什么要生成数据
真实数据有真实的局限,而每一项局限都是考虑合成数据的一个理由。
- 有些数据几乎不存在。 罕见事件、不寻常的边界情形、低资源语言、少见的场景,恰恰是你最希望模型能应对的情境——也恰恰是自然样例最少的那些。
- 标注很昂贵。 即便原始数据存在,把它变成模型能从中学习的、带标注的指导性形态,也需要无法廉价规模化的人力。
- 真实数据带着约束。 它可能含有隐私信息、受使用限制约束,或者根本无法分享。合成数据则可以被设计来绕开这些问题。
- 你可以精准地瞄准你所需的东西。 与其指望恰好对的样例出现在某个语料库里,你可以让模型产出大量你想教授的那个技能或情境的样例。
最后这一点是最深层的动机。合成数据让你自制教学大纲。如果模型在某类推理上薄弱,你可以为它生成一大批聚焦的练习题,而不必满世界去搜罗自然出现的那些。
合成数据的几种形态
"合成数据"涵盖了一系列技术,它们在多大程度上倚重模型上各有不同。
最轻的一手是增广:拿真实样例做变换来制造变体——改写一个句子、对一张图像稍作改动——好让一个小数据集走得更远。数据大体上是真实的,只是被翻倍了。
更重的一种做法是完全生成:让一个有能力的模型从零产出样例。生成问题与答案、写出指令与理想响应、为问题创建详解。这里模型是数据的源头,而不只是它的变换器。
一种格外有效的模式是用一个强模型去教一个更弱或更小的模型。强模型生成高质量的演示,这些便成了学生的训练数据。这与蒸馏高度重叠,也是有能力的行为能被塞进更小、更便宜的模型的主要原因之一。昂贵的模型把难的思考做一次;它的输出就成了一份可复用的教学语料。
一种更微妙的模式是让模型先生成、再过滤自己的输出:产出许多候选答案,用某种检查只留下好的,然后在幸存者上训练。模型通过从自己最好的作品中学习、把其余的丢弃,来给自己自举。
它究竟为什么管用
存疑是合理的。如果模型只知道它学过的东西,它的输出又怎能教会它任何新东西?答案在于,生成和学习不是同一种运算,而且有好几种真实机制让这个循环富有产出。
模型往往辨认一个好答案,比第一次就把它产出来要更可靠。通过生成许多次尝试、只保留那些通过检查的——一个能跑通的测试、一个给出确认的验证器、一个奖励信号——你把零散的能力蒸馏成干净、一致的训练数据。模型本来就知道偶尔怎么做对;过滤把"偶尔"变成了"可靠"。
生成还能把既有知识重组为更易学习的形态:把原始文本变成干净的问答对,或把一份简短的解法变成一步步的讲解。信息本是潜藏的;合成生成让它显式化、易于学习。而且一个强模型能把它的能力迁移给许多个小模型,扩散那种创造起来很昂贵的能力。
危险:模型崩溃
这个乐观的故事有一个尖锐的边界,无视它就是合成数据出岔子的方式。如果你纯粹用模型的输出来训练模型,一代接一代,不以真实数据为锚,质量会在一个常被称作模型崩溃的过程中退化。
直觉上,模型的输出是现实的一个有损映照。在那个输出上训练,你学到的是映照,而非原物。罕见的情形和分布的尾部——那些不寻常的、出人意料的、困难的——恰恰是模型在其输出中表征不足的部分,所以它们每一代都褪色一点。重复这个循环,模型的世界就朝着平淡、常见的中间地带收窄,丢失了让它有能力的那份多样性。就像复印件的复印件,每一遍都丢失一些再也无法从循环内部找回的细节。
这是合成数据的核心警世故事。模型的输出不是与现实接触的替代品;它是现实的一个衍生物。彻底切断与真实、多样、以人为锚的数据的联系,你就有慢慢抽干这个系统、让它失去当初使它优秀之物的风险。
不毒化水井地使用合成数据
那些用好合成数据的从业者,把它当作补充而非替代,并始终保留一根连向现实的缰绳。
- 掺入真实数据。 在训练混合里保留真切、多样的数据,好让模型保持锚定,尾部不至消失。
- 激进地过滤。 合成数据只和它的质量管控一样好。生成一大批、只留下可验证为好的那一部分,正是大部分价值所在。
- 让生成扎根于某种真实之物。 让生成器从真实文档、真实约束或一个可检查的信号出发,而不是凭空捻出文本。
- 警惕收窄。 监测多样性,而不只是平均质量。一个看起来干净、却已丢失其多样性的数据集,是崩溃动态正在生根的警讯。
如此操作,合成数据就是真实数据的放大器,而非它的替代品——而这两种取景的差别,就是一项强大技术和一场缓慢失败之间的差别。
总结
合成数据是用模型来生成训练模型所需数据的实践,它已变得不可或缺,因为真实、带标注的高质量数据稀缺、昂贵且受约束。它之所以管用,是因为辨认、过滤和重组能比单凭原始生成榨取出更可靠的知识,也因为一个强模型的输出能教会许多小模型。但它带着一个真实的风险:与真实数据隔绝、对自己循环时,一个在模型输出上训练的模型会在模型崩溃中飘向平淡。其中的纪律,是让合成数据始终系在现实上——与真实样例掺混、狠狠地过滤、扎根于某种可检查之物——好让它放大你已有的东西,而不是慢慢侵蚀它。
