预训练、微调与对齐
人们描述模型是怎么造出来的时候,常把这三个词混作一团。它们是各司其职的不同阶段。下面讲清楚每个阶段都在做什么。
人们描述一个现代语言模型是怎么造出来的时候,有三个词几乎被互换着使用:预训练、微调和对齐。它们不是一回事。它们是三个截然不同、按顺序进行的阶段,每个阶段有不同的目标、不同种类的数据,以及对最终模型不同的影响。把它们搞混,会导致人们对模型能做什么、以及它为何如此表现,产生混乱的预期。
事情的轮廓是这样的:**预训练赋予模型原始的知识与流畅度,微调教会它以有用的形式完成具体任务,而对齐塑造它的行为方式以及它会拒绝什么。**知识、技能、行为——三件不同的事,在三轮过程中被构建出来。
预训练:从文本中学习这个世界
预训练是第一个、也是迄今为止规模最大的阶段。模型被展示海量的文本,并被赋予一个看似简单到不可思议的任务:预测接下来是什么。一遍又一遍,在难以想象的庞大材料中,它猜测下一段文本,并在猜错时调整自己。
这听起来微不足道,但要在人类写下的一切之上都把下一个词预测得很好,模型沿途就必须吸收数量惊人的东西:语法、事实、风格、推理模式、论证的结构、对话的节奏。下一个词的预测是任务,但广泛的能力是副产品。正是在这里,模型获得了它的流畅度,以及它所知道的绝大部分内容。
预训练的关键之处在于:它是故意不聚焦的。模型并不是在学着乐于助人,或回答问题,或遵循指令。它是在学着续写各种各样的文本。一个刚预训练完的模型知识极其渊博,却几乎无法使用——问它一个问题,它可能会接着抛出更多问题,因为那是它所见文本的一个合理续写。它拥有智能的原材料,却没有任何举止。
微调:把知识变成可用的技能
微调拿起这个能力广泛、却不聚焦的预训练模型,教它以一种特定、有用的方式来表现。模型不再面对汪洋一片、不加区分的文本,而是被展示一组更小的、经过精心挑选的范例,这些范例演示了所期望的行为:问题配上好的答案,指令配上正确的回应,任务配上正确形式的输出。
模型在预训练中已经懂得很多。微调与其说是教它新的事实,不如说是教它如何把已知的东西派上用场。它学到:当文本看起来像一个问题时,被期待的续写是一个答案;指令应当被遵循,而不是被复述;对摘要的请求需要的是一份摘要。原始的能力本就在那里。微调把它引导进一个可用的形态。
这个阶段远比预训练更小、更便宜,因为它是在引导一个已有的模型,而非从头构建一个。它也是大多数任务专属适配发生的地方。同一个预训练基座可以被微调到不同的方向——朝着一个乐于助人的助手、朝着一个编程工具、朝着一个狭窄的专家——而无需重做那个昂贵的第一阶段。
对齐:塑造行为、价值观与判断力
对齐关乎的是:当模型已经有能力、也有用之后,它如何表现。一个微调过的模型能回答问题、遵循指令,但这还不够。我们还希望它对自己不知道的事保持诚实,拒绝有害的请求,避免自信地凭空捏造事实,并以一种真正有帮助、而非仅仅听起来合理的语气来回应。对齐就是处理这些品质的阶段。
对齐的核心挑战在于:所期望的行为很难单靠范例来界定。给一道数学题写出正确答案很容易;但要逐个范例地写出,模型究竟应当如何处理一个含混的、敏感的或带有对抗性的请求,则要难得多。所以对齐往往依赖一种不同的信号:关于两个回应中哪一个更好的人类判断,用来教给模型一种关于"何为更受偏好的行为"的总体感觉,而不是一份固定的标准答案。
其结果是一个被塑造了"秉性"的模型——它的乐于助人、它的谨慎、它对不确定性的诚实——而不只是它的技能被塑造。对齐正是为什么一个做得好的助手会拒绝帮忙做危险的事,会在不确定时承认,并会专注于任务、而不是飘忽走神。它是"一个能做事的模型"和"一个你真愿意托付去做事的模型"之间的区别。
为什么顺序很重要
这些阶段不可互换,而且必须按这个次序发生。你无法对齐一个尚未拥有技能的模型,也无法把技能赋予一个没有知识的模型。每个阶段都建立在它下面那一层之上。
预训练提供知识与流畅度的原始基底。微调在其之上工作,把它塑造成一个能做有用之事的工具。对齐在那个之上工作,管辖这个工具在真实使用所抛出的开放、混乱情境中如何表现。跳过地基,后面的阶段就无从着手;跳过后面的阶段,你得到的就是有原始能力、却没有举止或判断力的东西。
为什么这么多知识来自第一个阶段
一个常见的误解是:模型在微调或对齐期间学到事实。大多数情况下并非如此。模型所知道的绝大部分,是在预训练期间奠定的,那时它看到了自己数据中浩瀚的主体部分。后面的阶段相对而言微不足道,关乎的是行为与形式,而非加载新的信息。
这有一个实际的后果。如果一个模型缺少某些知识——关于近期事件,或关于你的私有文档——微调和对齐通常不是解决之道,因为知识并不是从那里进入的。更好的工具是在你提问的当下把信息提供给模型,或者,以巨大的代价,重做那个知识密集的第一阶段的某些部分。理解哪个阶段做什么,能告诉你该去够哪根杠杆。
这些阶段都不保证什么
把所有这三者的局限说清楚是值得的。它们都不能让一个模型变得绝无差错。预训练会吸收其数据中存在的错误与偏见。微调能让一个模型在某个任务上变得流畅,却不一定让它正确。对齐能在它被训练过的情形里塑造行为,却在它未被训练过的情形里留下缺口。这些阶段减少问题;它们并不消除问题。
特别要说的是,一个对齐良好、微调良好的模型,仍然可能产生自信、流畅、却错误的答案,因为流畅和真实是两回事,而被直接训练的只有前者。这套三阶段流程是当今最有能力、最守规矩的模型被构建出来的方式,但它是一个塑造倾向的过程,而非安装保证的过程。把它的输出当作"凭构造就可靠",正是这个流程本身无法防止的错误。
总结
预训练、微调和对齐是三个各司其职的阶段:**知识、技能与行为。**预训练用文本淹没模型,直到它流畅而渊博、却不聚焦。微调把那份原始能力塑造成有用的任务行为。对齐管辖模型在真实使用所要求的开放情境中如何自处。它们按顺序彼此叠加,而模型所知道的大部分都在第一个阶段到来。把这三者区分清楚,许多关于模型能做什么、不能做什么的困惑就会消散。
