来自:李rumor
NICE26期 |
大语言模型多选题评估的偏见与鲁棒性
大模型训练中,数据质量已经是所有人的共识了。在23年开始接触Alignment之后,我一直是人工标注流派,深信InstructGPT
[1]
中所描述的,先train好标注员,再train好模型。那时候各个模型的质量也都一般,合成的数据一眼就能挑到一堆毛病。
事情的转折要从sora开始,了解到那么好的效果居然大量应用了合成数据之后,我开始意识到自己还停留在上一个时代。首先大模型的能力是一直在提升的,去年还被狂吹的GPT3.5现在已经被甩了几条街了,大模型在很多任务上都可以达到人类标注员的水平;其次在大模型时代,应该多去发掘模型的价值,学会和AI协作,而不是上来就先验地觉得模型生成的数据质量不过关。
随着业内模型能力和使用熟练度的整体提升,今年数据合成的工作一波又一波,数据合成的前景非常客观:
-
合成Prompt:GPT系列相比竞品的一个显著优势是数据飞轮,有源源不断的用户输入。合成的Prompt则可以补足多样性上的缺陷,今年Nemotron
[2]
、Llama3
[3]
的技术报告中都有跑通他们自己的飞轮
-
合成Pair对:RLHF阶段由于会hack RM或者依赖人工标注的Pair对,一直很难scale up起来,而当LLM-as-Judge的方式达到一定精度时,模型就可以进行self-play,不断判别->训练,用左脚踩右脚的方式提升效果
指令合成
Prompt数据需要兼具多样性和复杂度。
对于多样性,最常见的方法是人工制定一个类目体系
,比如最早的Self-Instruct
[4]
,有175个种子任务,每个任务配一个指令和例子让模型进行合成:
Self-Instruct
Nemotron-4也采用了类似的做法,分了4个大任务:OpenQA、Writing、Closed QA、Math&Coding。对于每类任务,以多个主题词和关键词作为种子。
但人工指定 or 统计出的任务仍会有一定局限性,因此更好的方法是让模型生成任务
。近期腾讯一篇工作Persona-Hub
[5]
就非常巧妙,从Web文本中提取出10亿的人物描述,再让模型以不同人物的口吻去生成问题,多样性直接拉满。
Persona-Hub
还有一种比较tricky的,直接诈出某个对齐后模型的训练数据
,比如Magpie
[6]
,只输入前缀USER,让模型自己把问题生成出来:
Magpie
最后,Doc2Query也能生成多样性较高的问题
,但有一定局限性,更多用于知识类Query的合成。
对于复杂度,做法跟多样性差不多,需要定义出多种约束标签,再不断去改写Prompt增加其复杂度
。比如很经典的WizardLM
[7]
,定义了几个不同的改写操作:add constraints、deepening、concretizing、increase reasoning steps、 complicate input,让指令的复杂度不断增加。
WizardLM
还有一种方法是量化模型生成结果复杂度,从而训一个能生成复杂Query的模型
。例如我们近期在安全领域的工作SEAS
[8]
,就构造了一个对抗攻击的场景:
SEAS
如上图,该框架分为三个阶段:
-
初始化:用少量的数据,精调一个攻击模型R(负责生成有害问题)和一个目标模型T(最终要被优化安全能力的模型)
-
攻击阶段:模型R生成多条有害样本,T针对每个问题生成多个答案,利用Llama guard作为打分器,如果攻击成功,则该Query作为模型R的chosen,否则为rejected。如果攻击失败,则该Response作为模型T的chosen,否做为rejected
-
优化阶段:利用第二步构造的DPO数据迭代模型R和模型T
通过上面的2、3步骤多轮迭代,模型R生成的攻击问题越来越强,模型T的安全能力也随之提升,R对T的攻击成功率如下:
SEAS攻击成功率
监督信号合成
相比Prompt合成,Pair的合成会更难一些,Prompt即使质量一般,只要用较好的模型生成Response和较强的基座,也能学得还行,但如果Pair不准确,RM/PPO或者DPO直接就学偏了。
最直接的方法就是LLM-as-Judge,用模型打分或排序
。Meta今年发表过一篇Self-Rewarding
[9]
的工作非常赞且优雅:
Self-Rewarding
直接用当前模型T生成答案->给自己打分->做成DPO数据训练模型T+1,形成了一个self-play的闭环。在模型生成能力不断提升的同时,判别能力(Pairwise acc)也在提升:
Self-Rewarding判别效果
但可以看到后期的acc增长放缓,不知道模型最远能跑多少轮。
如果担心LLM-as-Judge的准确率不够高,可以使用约束更强的Instruction来提升模型判别的准确率
,比如阿里的工作AutoIF
[10]
,就让模型自己写代码来验证结果的正确性:
AutoIF
还有一种方法是想办法让模型做答案固定的任务
,接近传统游戏RL,比如腾讯的工作SPAG
[11]
中,就制定了一个游戏规则:
-
-
SPAG
在这样的框架下,判断最终结果的难度极大降低,作者也利用这类数据提升了模型的逻辑推理能力。
总结
从上述各方的工作来看,大模型Alignment阶段可以有3个飞轮:
-
预训练基座驱动:由于weak-to-strong,使用同一份对齐数据的情况下,更强基座可以带来更强的对齐模型
-
数据驱动:即使基座模型不变,一份数据训出对齐模型后,可以利用数据合成方法生产更好的数据,训出更好的对齐模型
-
对齐模型驱动:进行Iterative-SFT/RLHF,得到模型T后搭配产生新的数据,再训练出模型T+1,让对齐过程scale up
第1个飞轮比较容易跑通,但2、3叠加起来的飞轮最远能跑到哪里,还挺让人期待的。
[1]
Training language models to follow instructions with human feedback:
https://arxiv.org/abs/2203.02155
[2]
Nemotron-4 340B Technical Report:
https://arxiv.org/abs/2406.11704
[3]
The Llama 3 Herd of Models:
https://arxiv.org/abs/2407.21783
[4]
SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions:
https://arxiv.org/abs/2212.10560
[5]