【科普向】Chat GPT背后的技术:什么是RLHF(人类反馈强化学习)?
随着Chat GPT的火热出圈,越来越多的非技术同学听到了RLHF也就是人类反馈强化学习这个词,这也是chat GPT背后的技术原理之一。我在这里对感兴趣的兴趣进行一个科普,希望小伙伴们能有所收获(最近都在更玩的视频QAQ,做个正经视频)
首先从Chat GPT自己的回答开始,这个例子大体意思上是对的,但是缺少了很多细节,先做一个简单的引入
假设你有一个机器人叫Rufus,他已经有了一个训练好的语言模型能理解你的语言并能输出自己的回答进行对话,现在的目标是让Rufus说的话更像人更自然
首先,Rufus会用原始的语言模型输出一句话,如:“我,一个机器人。”
人类会对这个句子进行评判并给出修正,比如这个例子里会给出这句话不太像人说的这个判断,而“我是一个机器人。”更自然。
Rufus会根据收到的反馈更新自己的语言模型,这时候他在介绍自己的时就会说“我是一个机器人。”
人类此时继续对这句话进行评判并给出修改建议,返回给Rufus。
这个过程持续进行下去Rufus的语言模型输出的回答就会越来越自然了。

下面给出详细的分步骤的介绍,下面这张图是Open AI官方给出的一个示意。可以分成三个核心步骤
第一步:预训练语言模型+有标签数据微调(可选)
第二步:训练奖励模型
第三步:通过强化学习微调语言模型

第一步:首先需要一个预训练语言模型,通过大量的语料去训练出基础模型,对于ChatGPT来说就是GPT-3。还有一个可选的Human Augmented Text,又叫Fine-tune。这里说直白点就是招人给问题(prompt)写示范回答(demonstration),然后给GPT-3上学习。Fine-tune又叫有标签数据微调,概念比较简单,就是给到标准答案让模型去学习,可能有同学好奇,这不是和一开始的例子一样吗?是的没错,但实际想要用人工去撰写答案的方式来训练模型,那成本是不可想象的,所以需要引入强化学习。后面会继续讲。

第二步:训练奖励模型。我们需要一个模型来定量评判模型输出的回答在人类看来是否质量不错,即输入 [提示(prompt),模型生成的回答] ,奖励模型输出一个能表示回答质量的标量数字。
首先我们把大量的prompt(Open AI使用调用GPT-3用户的真实数据)输入给第一步得到的语言模型,对同一个问题,可以让一个模型生成多个回答,也可以让不同的微调(fine-tune)版本回答。
接下来让标注人员对同一个问题的不同回答排序,有人可能会好奇为啥不打分?这是因为实验发现发现不同的标注员,打分的偏好会有很大的差异,而这种差异就会导致出现大量的噪声样本。排序的话能获得大大提升一致性。
这些不同的排序结果会通过某种归一化的方式变成定量的数据丢给模型训练,从而获得一个奖励模型。也就是一个裁判员。

第三步:基于强化学习(RL)去优化调整语言模型
policy是给GPT输入文本后输出结果的过程(输出文本的概率分布)
Action Space是词表所有token(可以简单理解为词语)在所有输出位置的排列组合
Observation space是可能输入的token序列,也就是Prompt
Reward Function则是基于上面第二步得到的奖励模型,配合一些策略层面的约束
将初始语言模型的微调任务建模为强化学习问题,因此需要定义策略(policy)、动作空间(action space)和奖励函数(reward function)等基本要素
具体怎么计算得到奖励Chat GPT是基于梯度下降,Open AI用的是 Proximal Policy Optimization (PPO) 算法,这里就不展开讲了,可能后续单独再录视频
至此,RLHF的三个步骤就完成了!当然里面还有很多的细节以及工程问题,背后付出的努力和成本其实是巨大的。
最后我想说,虽然ChatGPT非常有影响力,引发了巨大的关注,RLHF技术也是一样,仍然存在若干局限性,比如语言模型输出仍然是基于概率的,而不是基于推理或者理解,但仍然可能输出有害或事实上不准确的文本。希望能稳步推进技术进步,而不是让这一次浪潮变成资本的狂欢,狂欢过后一地鸡毛,一如去年的元宇宙。