LIMA: RLHF 不如 1000 条高质量数据?
LIMA 一句话介绍:不需要 RLHF,通过 1000 条高质量的数据 finetune,可以在 43% case 里达到 GPT-4 的水平。
论文:《LIMA: Less Is More for Alignment》
链接:https://arxiv.org/pdf/2305.11206.pdf
单位:Meta
为啥不用 RLHF?
作者说 RLHF 的训练需要大量的计算和标注数据,而达到同样的效果,只需要 1000 条高质量的数据来 finetune 就足够了。
为啥想到要用 1000 条少量高质量数据 Finetune?
基于一个 Superficial Alignment Hypothesis。模型在预训练阶段已经学会了所有的知识和能力。
Finetune 阶段只是帮助已经比较强大的 Pretrain 模型来学会某种沟通的 style 或者 format,从而激发出在 pretrain 阶段就已经学会的隐藏能力。
因此只需要很少的 example,就应该能教会模型新的输出格式或者风格。
怎样的数据算是高质量的数据?
作者使用的是非常接近真实用户的 prompt + 高质量的回答。
具体而言,作者从社交论坛上面采样了 750 个问题和答案,比如从 Stack Exchange、wikiHow 或者 Pushshift Reddit Dataset。另外手写了 250 个 prompt 和 response,来增加 AI Assistant 的独特回答风格数据。
数据分布?
每个来源的数据量、每条样本的平均长度等如下表格:
具体的数据格式?
prompt 十分多样,但是输出的格式基本相同,都做成 helpful AI assistant 的格式。其中每个数据做了如下的处理。
Stack Exchange:包括 179 个主题的论坛,Stack Overflow 是其中最火的论坛。
- 从不同的领域共采样 200 个问题
- 选择得分最高的回答,至少有 10 个点赞
- 删除太短(少于 1200 个字符)或者太长(多余 4096 个字符)的回答
- 删除第一人称写的、引用其他答案的回答
- 删除链接、图片、HTML tag
- 保留 code
wikiHow:wiki 风格的文章,大约有 24w 被严格审核的高质量文章。
- 从不同的类别中采样 200 个文章
- Title 作为 prompt,wikiHow 中的文章都是以 “How to xxx” 作为标题的
- 文章内容作为 response,将 “This article” 替换成 “The following answer”
- 去除链接、图片和文章中某些部分
Pushshift Reddit: Reddit 是世界上最受欢迎的网站之一。其中的内容更倾向于娱乐,而非提供具体的帮助。通常情况下,诙谐、讽刺的评论会比严肃、信息丰富的评论获得更多的赞。
- 作者手动选出那些问题和回答比较可靠的数据
Super-Natural Instructions:
- 作者从 Super-Natural Instructions 数据中选择了 50 个生成任务,手动编辑一些内容,使得数据符合 AI Assistant 问答风格。
作者们手动创建:
- 增加了一些 step-by-step 的思考问题
- 增加了一些恶意的问题,并且回答中表示拒绝,还会写明拒绝的具体理由
下面图中是每个来源数据的示例,蓝色是 prompt,省略号是省略掉的文本。
有多少 token?
训练数据 1000 条,共 0.75M tokens。
LLaMA pretrain 的时候使用了 1TB tokens,大约是 LIMA 的 10^6 倍。
Finetune 的方法具体是怎样的?
使用的 Pretrain 模型:LLaMA 65B
每个对话结束后增加一个 end-of-turn token(EOT),用来区分不同的用户问答,此外也为了和预训练过程中见过的 EOS 作区分。
Finetune 总共花了 15 个epoch,使用 AdamW 优化器,b1 = 0.9 b2 = 0.95,weight decay 是 0.1。
学习率初始化为 1e-5,没有 warmup 的阶段,线性的 decay 到 1e-6。
batch_size 设置为 32,如果模型更小的话,可以使用 64。
max_seq_len 设置为 2048。
使用了 residual dropout,最下面层使用 dropout rate = 0,往上面线性增加,最上面层使用 dropout rate = 0.3,如果模型更小,可以到 0.2 就好了。
作者发现 ppl 和生成质量没啥关系,所以手动选择第五个或者第十个 epoch 来做 dev set 的验证。
达到 GPT-4 的性能是通过哪些方面来衡量?
在 300 个具有挑战性的测试 prompt 上,找人来衡量。
baselines:
- Alpaca 65B:在 Alpaca 52k 条数据上 finetune LLaMA 65B
- OpenAI’s DaVinci003:用 RLHF 训练的
- Bard:基于 PaLM 的模型
- Claude:用 RLHF 训练的 52B 的模型
- OpenAI’s GPT-4:用 RLHF 训练的模型
上面的数据都是在 2023 年 4 月采集的。
生成方法:
- 使用 nucleus 采样,p = 0.9
- temperature - 0.7
- 用 1.2 作为超参抑制重复生成
- 最长生成长度为 2048
让标注者每次看到相同 prompt,两个不同模型生成的结果,然后选择他觉得更好的一个:
- 相比 GPT-4,有 43% 的 LIMA 回答被认为为与 GPT-4 相等或者更好的。
- 相比 Claude,有 46% 的 LIMA 回答被认为为与 Claude 相等或者更好的。
- 相比 Bard,有 58% 的 LIMA 回答被认为为与 Bard 相等或者更好的。
数据质量比数据量更重要?
作者在多样性、质量、数量三个方面做了消融实验。
多样性:Stack Exchange prompt 的多样性比 wikiHow 更高。单独用前者训练的模型生成效果比单独用后者生成的效果更好。
质量:使用没有 filter 过的 StackExchange 训练的模型,生成结果远远不如 filter 过的数据训练的结果。
数量:从 Stack Exchange 中采样更多的数据,并不能提升模型的生成效果。
结果:选择富有多样性,并且高质量的数据,是提升生成效果的关键。
多轮对话的能力?
1000 个 finetune 的 example 中没有多轮对话的数据,但是 LIMA 有对话能力。如果手工标注 30 个多轮对话数据,LIMA 的多轮对话能力显著增加。