在回答了第二个“为什么要训练RM”的问题后,就要接着回答“如何训练RM”。如下图,训练RM的核心是由人类对SFT生成的多个输出(基于同一个输入)进行排序,再用来训练RM。按照模仿学习的定义,直观上的理解可以是,RM在模仿人类对语句的排序思路,或者按照OpenAI团队论文《Learning from Human Preferences》的说法是,模仿人类的偏好(Preference)。那么到底是如何模仿的呢,或者说如何实现梯度回传?
这一个部分我们回答两个问题:一,为什么是RLHF?二,RLHF是如何运用到ChatGPT中的多轮对话场景中的?至于为什么要问这两个问题,以及这两个问题如何更进一步帮助理解ChatGPT,将会在下文阐述。首先,为什么是RLHF?我们当然知道,强化学习(RL)的reward有一些缺陷,所以有人提出了模仿学习(IL),而上文提到的RM与IL有一定的联系。那么如何理解RLHF,RL和IL之间的区别与联系?这里我们举一个具体的场景,当我们想要训练一个能够对话的机器人时,我们可以怎么做?在一般的强化学习设定中,我们人类可以扮演Environment的角色,衡量机器人每句对话的好坏(reward),但这显然非常折磨人。即,确定一个合适的Reward机制是很困难的。而在模仿学习(如逆强化学习)设定中, 人类不去对机器人的对话做评价,而是机器人反过来模仿人类的对话方式。具体来说,可以从网上或者其它渠道收集大量历史对话数据来训练一个奖赏模型(RM)。看起来模仿学习很好地解决了Reward机制的问题,然而同样的,它也带来了如何收集高质量数据训练RM的问题。还是以对话机器人举例,如果只是简单地拉家常,那么找一些稍微培训过的普通人就可以了;但是如果要解决医疗对话等场景,显然普通人不足以胜任,而一名有经验的医生的标注数据成本可能高于十名普通人的。因此,一个合理的思路是,如何借鉴监督学习中降低标注成本的思路,来降低RM的训练成本。在我看来,RLHF中的rank就好比监督学习中的弱标注——它并不提供直接的监督信号。但通过学习简单的排序,RM可以学到人类的偏好。那怎么去理解这里的“偏好”呢?打个比方,有一家冰箱工厂生产了好几种类型的冰箱,虽然这些客户中没有一个懂得如何造冰箱的(或者说他们不需要懂),但他们可以通过消费行为,让厂商明白消费者对冰箱类型的“偏好”,从而引导冰箱厂商生产销量更好的冰箱。既然RLHF能很好地解决RL甚至IL的一些问题,也在InstructGPT中取得了很好的效果。那么,是否可以顺理成章地将之迁移到多轮对话场景中呢?我们可以从强化学习的假设出发去理解这个问题。“我们都知道”,以PPO为代表的强化学习模型,基于马尔可夫性的假设。简单理解马尔科夫性就是,它将来的状态只取决于现在,与过去无关。也就是说,马尔可夫性有一个很重要的特点:无记忆性。然而,在多轮人机对话场景中,模型却应该具备部分可观测马尔可夫性,即要求语言模型有“记忆性”。这理解起来也比较直观,在多轮对话场景里,存在某一轮对话中的代词指向上一轮对话中的某个人或物的可能,假如模型不具备记忆性,那就无法很好地处理这种问题。显然,强化学习的假设与多轮对话场景的相背,不做一些优化的话很难直接应用。那么进一步的问题来了,ChatGPT是如何做优化的呢?这里我们先从自然语言任务中最基本的语言模型简单说起。一个语言模型大概是说,当你给定前面的若干个词后,它会给你下一个词;而当你有了下一个词后,它会再给你接一个词,以此递推。这就好比我们使用手机输入法,你打出一些词句后,输入法会提供若干个候选词——这里的手机输入法其实就是一个语言模型。那么我们如何利用这个最基本的语言模型来建模多轮对话问题呢?实际上,我们向ChatGPT提出的问题,可以看成一句话,或者说是下图的输入。然后我们可以将ChatGPT给出的答案,抽象成下图的输出。而ChatGPT这类语言模型,提供了若干个类似手机输入法的“候选句”,每个候选句对应的概率不一。所谓的语言模型的训练,其实就是让模型调整候选句对应的概率,使我们人类希望输出的候选句的概率尽可能大,而不希望输出的概率尽可能小。那么这个语言模型和强化学习又有什么样的联系呢?在强化学习中,我们确实有智能体/模型(Agent)和环境(Environment)交互这样的范式。但是在ChatGPT所使用的这种训练方式中,环境从某种意义上说被另一个模型取缔了(即前面提到的RM)。如下图,图中的状态State是之前提到的输入语句,而当智能体拿到一个,它给出的动作action其实是下一个单词。注意,GPT确实可以输出一整句话,但其实要完成这个最终的输出,需要做若干次如图所示的action。当环境(或RM)接收到它给出的单词后,会把这个单词放到已有的单词序列末尾,然后再把这个新的单词序列还给智能体,之后依次类推。打个比方,这里的智能体就是手机输入法,而环境就是使用输入法的用户。用户所做的事情,就是当输入法给出一系列候选词后,基于某种偏好选择某个词,然后让手机输入法再去猜下一个词,直到输入法把整个句子猜出来为止。这里我们明白了在语言模型场景下,强化学习的状态和动作对应什么,那么什么是奖赏Reward呢?更进一步地,ChatGPT中的Reward,是否就是前面所提到的RM呢?我们之前已经了解到,RM学到的其实是人类的SFT多个输出结果的排序,即人类对语句的偏好。它其实直接学到的,就是人类对语句的打分。那么这种RM模型是否可以直接对应强化学习中的Reward呢?实际上不全是。在下图InstructGPT给出的奖赏函数中,它的一部分确实是RM模型根据学到的人类偏好给出的打分,而另一部分则是参与了强化学习的ChatGPT和它的原始版本SFT的某种差距——这里我们不希望这种差距太大。之所以要加入后边的偏置项,是因为我们害怕ChatGPT在强化学习的训练过程中过于放飞自我,学会了通过某种刁钻的方式取悦人类,而不是老老实实地根据人类的问题给出正确答案。同时,后面的偏置项可以被看作KL散度,而KL散度可以拆分成交叉熵减去熵的形式。注意这里是交叉熵减去熵,那么在整个奖赏函数中,熵前面的符号为正——这体现了强化学习的一种思想,即让策略的熵在允许的范围内尽可能大,这可以促进策略的探索。但是,这个奖赏函数是对整个输入语句和整个输出语句而言的,而我们又在之前讨论过,智能体是根据一个一个词来去拼凑出整个回答的。图中的奖赏函数只能给出完整回答的奖赏,那么在智能体生成回答的过程中,每个动作action给出的词对应的奖赏是什么呢?这个细节在InstructGPT中并没有给出。幸运的是,OpenAI团队的另一篇论文《Learning from summarize from Human feedback》中的一个引脚标注给出了关于这个疑问的答案。作者说,奖赏模型只在最终生成回答之后才给出奖赏,在中间的过程中是不给出奖赏的。在这里作者没有使用回答一词,而是使用总结一词,因为它的任务是将一篇长文章进行归纳总结。顺着这位作者的思路,只有在ChatGPT输出了EOS token的时候,整个轨迹才结束(EOS token是自然语言处理中用来表示一段话结束的标志)。这里我们可以梳理下RLHF和GPT的本质关系。实际上,这里使用RLHF就是为了解决我们无法对一个离散的训练进行求导的问题。而使用强化学习来解决这个问题也不是ChatGPT的独创:早在2016年SeqGAN的作者就已经使用了这样的方法了。因此我们可以从问题本质的角度去这么理解ChatGAN:它就是把Transformer和“SeqGAN”结合在一起。当然这个“SeqGAN”并不是标准版本,因为它不是像模仿学习那样通过示教来学习,而是通过人类的偏好来进行学习。从问题本质上看,ChatGPT与之前的工作的最大不同,就体现在它使用了SeqGAN进行微调。(PS:能力有限只能全盘照搬UP主观点,但这些对我非常有启发,因为我在读论文时也感觉ChatGPT使用到的强化学习,有点GAN的味道~)最后再让我们回顾梳理下第二个问题:RLHF是如何运用到ChatGPT中的多轮对话场景中的?由于多轮对话要求语言模型有记忆性,因此无法直接使用强化学习。这里的矛盾具体体现在了奖赏函数中:ChatGPT的奖赏函数是针对GPT的一整个输入语句 和一整个输出语句 而言的;而ChatGPT的语言模型在强化学习的训练策略中,每个action其实输出的是一个个词语 。因此,OpenAI的团队可能是采取不对序列的中间生成给予reward的方式解决上文提到的矛盾,而这种解决方式十分接近SeqGAN的思路。