用最简单方法提升模型能力

Ryan

||最后更新: 2024-1-30|
对我对齐是现在最流行最有效的LLM能力提升方法,LLM自我生成训练集,自我评估,微调后自我提升。
这是一个朴素的方法。
简单但是行之有效,是经过理论和实践的双重检验。
不管是产品、运营还是大学生实习,都一学就会,用过之后甚至会觉得比预期的还要简单。
为了简单,也不引用各种概念(RLHF、PPO、DPO、RHAIF、Self-Reward什么的)。
只写每个人都一看就懂,每个人都轻松上手的方法。
 

使用模型时遇到的最常见的问题

大家都说大模型好用,什么事情都知道,什么问题都能回答,但是用在自己的用户场景里,经常会遇到这些问题:
  • 模型输出结果不够理想,不如人写的好,而且总有badcase。
  • 看模型跑分刷榜分都很高,实际用起来却像开了个廉价的车,怎么开都不顺手。
  • 有些参数量很小的模型,价格便宜推理快速,但是能力又差点意思。
 
这些问题的本质就是模型没见过你的用户场景,所以无法很好地完成任务。
评价一个模型好不好,标准有很多,但核心的标准只有一个:
  • 在我的用户场景里是不是个好模型。
接下来让我们一起看看怎么搞个好模型。
 

原理和思路

模型的学习方法是见多识广
教育模型的方法是举个栗子( show,not tell)
一个例子不够就一百个例子。
一个例子不够就一万个例子。
思路就是这么简单粗暴。
 
再讲讲原理。
好数据出好模型。
要训好模型,核心就是搞出好的训练数据。
 
拆解下来就是三件事:
  • 训练数据
  • 好的数据
  • 好的模型
 
训练数据怎么搞?
左脚踩右脚,用大模型来搞。
怎么评价数据好不好?
左脚踩右脚,用大模型来搞。
怎么评价模型好不好?
左脚踩右脚,用大模型来搞。
 

训练数据

训练数据包括两个部分:输入和输出,或者更简单的说法,提问和回答,看什么query说什么话。
 
输入数据
如果你已经在应用大模型做一些事情了,发现结果不够理想,那你应该已经有了很多输入数据。这些数据就是直接可用的最好的数据了。数据很脏都没关系,还能提高模型的鲁棒性。
如果还没应用,还在构想场景,可能还没有输入数据,也没关系。有两个办法:
古法手作
  • 自己亲自写几条数据
  • 让模型根据手作的这几条数据和要求,续写更多
直接指挥
  • 自己亲自总结数据的特征,把特征写成一个prompt
  • 让模型根据prompt,写出数据
 
输出数据
有了输入数据,输出数据就更简单了,也有几个方法
  • 古法手作,找人来手写回答
  • 找个师傅,找个更好的模型,把输入数据和场景放进去,直接获得输出数据
  • 错位输出,让原来的模型输出内容,但是通过在prompt里添加更明确和更细致的要求来获得更好的结果
 

好的数据

有了数据,就需要评估数据的好坏了
 
如果你可以定义什么是好的:
  • 人类制定「好」的标准后,根据标准的特征写成「评价标准prompt」
  • 把输入输出数据放进一个打分模型里,让打分模型根据「数据是否符合prompt要求」进行打分
  • 打分模型最好找这个场景下最强的大模型
 
如果你无法定义什么是好的:
  • 把数据交给目标用户,问用户的反馈,他们觉得好还是不好
  • 把【输入-输出-反馈】三部分都放进一个分析模型里,让分析模型根据这些用户的偏好反馈进行特征抽取,最终写成「评价标准prompt」
  • 分析模型最好找这个场景下最强的大模型
  • 分析完成后就有了标准,再回到上面的打分模型走一样的流程
 
如果这一步模型打分就不错,就可以直接训练了
如果这一步模型打分就不太好,那就回到【训练数据】部分,重走流程,获得更好的数据。
 
但是这时候你有了一个更清晰的标准,更好的prompt,所以流程迭代升级了:
  • 古法手作,找人来手写回答,但是以更加明确的标准来写
  • 找个师傅,找个更好的模型,但是用更好的prompt来获得输出数据
  • 错位输出,让原来的模型输出内容,但是用更好的prompt来获得输出数据
 
迭代几次之后,你就获得了好的数据。

好的模型

有的好的数据,就可以通过微调来训练模型了,现在各家海内外模型厂商都提供了非常方便的微调接口服务。
 
等训练出来之后,就需要评估什么是好的模型了。
  • 把训练数据中输入的的一部分拆出来,作为测试集
  • 用训练前的老模型和训练后的新的模型分别生成输出内容
  • 用打分模型来给新老模型打分,对比分数变化

自动化

这个流程走完,会发现,大部分的流程里都是大模型在工作
  • 写输入数据
  • 写输出数据
  • 写评价标准的prompt
  • 根据评价标准对数据集打分
  • 对新模型进行打分
虽然也有一些古法手作的部分,但大部分都可以被模型取代,而且未来一定全部被取代。
 
如果在用一个编排大模型把上面的流程串起来,再把各种模型接口和训练接口都街上,那我们就获得了一个:
  • 提升模型能力的Agent
 

应用场景

这个简单的方法,小到一个简单的写作场景,大到模型综合能力提升,都可以使用。
 

一个实践

DITTO -- 使用自我对齐来提升LLM的角色扮演能力
  1. 让LLM利用维基百科上角色知识,来模拟角色扮演对话。
  1. 创建了一个包含4000多角色的扮演训练集。 3.使用使用这个训练集对LLM进行微调
  1. 它的性能优于所有开源角色扮演基准,表现出与高级专有聊天机器人相当的性能水平。 https://arxiv.org/abs/2401.12474
 
万变不离其宗。
模型的学习方法是见多识广
教育模型的方法是举个栗子
好数据出好模型。
 
不过纸上得来终觉浅。
说的容易做的难。
实践过程中一定会遇到各种难题的。
但是没关系。
因为人啊,厉害就厉害在会找帮手,帮手可以是人也可以是AI。
 
借用《繁花》里爷叔的三个钱包理论来收尾:
一个人应该有三个能力
  • 第一个,你实际有的的能力
  • 第二个,你找帮手的能力
  • 第三个,人家认为你有多少能力
 
notion image

参考资料

Reinforcement Learning from AI Feedback
Self-Rewarding Language Models
 
 
Loading...