大模型调教攻略:指令调整与对齐调整
说到ChatGPT的火爆,很多人第一反应是“大模型真厉害”。可细想一下,GPT-3早在2020年就登场了,175B的参数规模在当时已经足够震撼,但除了圈内热闹一阵,社会大众并没有太多感知。真正让ChatGPT出圈的,还是它那个“能聊、能用、能帮忙”的对话式交互——好玩又有用,而不仅仅是参数多。那么,一台语言模型到底是怎么被调教得这么“通人性”的呢?研究者们基于预训练好的大规模语言模型,用了好几轮调教手段,最核心的两招就是指令调整和基于人类反馈的对齐调整。本文参考人民大学团队的一篇综述,把大模型的调教攻略掰开揉碎讲一讲。
指令调整
指令调整(Instruction Tuning)的核心思路很直观:把各种各样的任务都写成自然语言的指令,然后用seq2seq监督学习+多任务学习的方式,对语言模型的参数做一轮精细调整。经验表明,这一步能让模型更好地理解人类指令,跨任务、跨语言的泛化能力也明显提升,还能缓解模型老爱重复输出、或者只顾着补全输入而忽略任务要求的毛病。

上面这张图展示的就是指令精调的数据样例,通常包含:一个任务描述、一组可选的展示样例,以及一组输入输出。模型训练时,利用输出内容做监督学习。
指令调整的数据主要有两个来源。第一个来源是拿现有的数据集改写——比如通过众包平台构造不同的任务描述,有些工作用启发式模板生成数据,还有的工作提出颠倒输入输出顺序来扩充数据。第二个来源更贴近现实:基于人类真实需求来构造。InstructGPT就利用了人类在OpenAI API中输入的真实query作为任务描述,让标注者再补充一些query,并写出回复作为训练目标。GPT-4还额外构造了一些高风险query,专门教模型学会“拒绝回复”。这类数据在对齐调整中也会用到。
在指令调整过程中,任务的数量和多样性是决定跨任务泛化能力的关键。多样性可以体现在长度、结构、创造性等多个方面。有意思的是,每个任务所需的样本其实不用太多,关键是覆盖要广。引入展示样本能明显提高模型表现,降低模型对指令表述的过度敏感。如果展示样本里包含类似代数运算的思维链(Chain of Thought)内容,还能有效提升多步推理能力,对其他任务也有正向作用。
需要注意的是任务间的样本数量均衡,不能简单按数据集规模直接合并。提高高质量数据集的采样比例能改善表现,但一般单一数据集样本量会设个上限,通常在几千到几万之间。OPT-IML还提出在指令调整中掺入部分预训练样本作为正则项,来提高稳定性,而GLM-130B和Galactica则在语言模型训练过程中就引入了少量指令调整数据。
对齐调整
语言模型预训练和指令调整主要解决的是“模型能不能把话说对、把任务执行好”。但对于ChatGPT这类对话产品来说,光有这些还不够——还得让模型跟人类的价值观对齐,生成“更让人满意”的回复。对齐调整的动机很现实:有害的、误导的、有偏见的内容会严重影响用户的主观评价。哪怕这种调整从客观上会损害模型的一些能力(比如变得保守或啰嗦),但能极大提升用户体验。大体上有三个调整方向:
- 有帮助的:模型生成的内容应当简洁、有执行力,能提供额外信息,并展现出敏感性、审慎和洞察力。
- 忠诚的:模型不应该捏造事实,在不确定的时候要坦率表达不确定性。
- 无害的:模型要避免生成冒犯、歧视性内容,并且学会拒绝恶意请求。
用于对齐调整的标注数据有多种形式:给若干候选回答排序、做两两比较、针对既定问题从多个角度评价……GPT-4还用了基于自身的零样本分类器来做自动化评估。在标注者质量筛选上,除了母语、学历、标注平台等级等硬指标,研究者还会利用标注者之间的内在一致性、以及标注者与研究者的标注一致性等信息来把关。

目前最主流的对齐调整方法就是基于人类反馈的强化学习(RLHF),具体分三步走:
第一步:基于人类标注数据做有监督精调。这一步和指令调整差不多,不过数据都是人类标注的开放式内容——比如开放式问答、闲聊、头脑风暴、改写等。这一步并非必须,主要用来给后面的强化学习做“冷启动”预热。
第二步:基于人类反馈训练一个奖励模型(Reward Model)。以InstructGPT为例,基于标注数据训练了一个排序模型,这个奖励模型会在第三步的强化学习中提供反馈信号。奖励模型通常是一个小号的预训练语言模型,比如InstructGPT用175B的GPT-3做调整,奖励模型却只要6B的GPT-3;GopherCite用280B的Gopher,奖励模型只用了7B的Gopher。
第三步:强化学习优化。待优化的大语言模型的行动空间是预测词表,状态是当前已经生成的内容,奖励模型的反馈信号通过PPO算法传给大语言模型进行参数更新。为了防止强化学习跑偏,InstructGPT还加入了优化后的模型与原模型生成内容的KL距离作为正则项。
结束语
从头训练一个大模型对绝大多数研究者来说依然是奢望,好在现在开源资料越来越丰富,基于现有的大模型对特定任务或领域做调教,打造属于自己的专属模型已经不是什么遥不可及的事了。
