10.16 InstructGPT与ChatGPT#
在前面几节内容中我们陆续介绍了GPT-1到GPT-3这3个模型的思想和原理。尽管随着模型规模的变大模型的效果也在稳步增长,但是却一直面临着一个重大的问题,那就是模型生成内容的安全性。在接下来的这节内容中我们将会分别介绍一种基于用户指令和对话内容微调而来的GPT模型。
10.16.1 InstructGPT动机#
由语言模型本身的建模方式可知,它的目标函数是通过前$k$个词来预测第$k+1$个词,而这也就决定了它难以根据用户输入的指令来生成对应有用的内容,因为两者的目标函数显然并不相同。简单来说就是模型知道得很多,但并不能理解用户的真实意图。例如用户输入提示“地球到底是圆的还是平的”,那么模型生成的结果可能是:
结果1: 地球到底是圆的还是平的 ,结果很近热:“大约三分之一受访者认为不确定,好在大部分人认为地球是圆的……
结果2: 地球到底是圆的还是方的 。其实,迄今为止,地球上生活的人仍然有人相信地球是方的。在这里,我不讨论的地……
为什么会出现这样的结果呢?那是因为这样的描述确存在于训练语料中,所以当用户输入“地球到底是圆的还是平的”这个提示时模型并不能理解其背后真实的意图,也就是不知道用户希望得到哪个回答。因此,我们需要将模型的输出和用户的真实意图进行对齐(Alignment)。
同时,随着模型生成能力的增强,对于生成内容的安全性和无害性也需要进行加强。基于这样的动机,2022年3月OpenAI团队在GPT-3模型的基础上加入人类反馈强化学习微调得到了InstructGPT模型[1]。从名字也可以看出,它的核心目的就是为了让模型能够理解用户所输入的指令。
例如对于指令“Explain the moon landing to a 6 year old in a few sentences.”来说,GPT-3和InstructGPT将会分别生成如下结果:
GPT-3:
Explain the theory of gravity to a 6 year old.
Explain the theory of relativity to a 6 year old in a few sentences.
Explain the big bang theory to a 6 year old.
Explain evolution to a 6 year old.
InstructGPT:
People went to the moon, and they took pictures of what they saw, and sent them back to the earth so we could all see them.
对于GPT-3来说它根本就没有理解用户的真实意图,只是随机生成了4个与问题无关的选项。相反,对于经过意图对齐后的InstructGPT来说,它用一句简单的回答解释了什么是登月,即:人们登上月球,拍摄了他们所看到的照片,然后将它们发送回地球,以便我们都可以看到它们。
10.16.2 人类反馈强化学习#
在正式介绍InstructGPT模型的原理之前,我们先来简单介绍一下强化学习的基本思想以及InstructGPT中所提出来的基于人类反馈的强化学习。
1. 强化学习
强化学习(Reinforcement learning, RL)是机器学习中的一个领域,它强调智能体(Agent)如何基于复杂环境(Environment)而采取相应行动(Action),以取得最大化的预期收益[2]。强化学习是除了监督学习和非监督学习之外的第3种机器学习方法,它的灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。
如图10-46所示便是强化学习的原理示意图。对于图示中的智能体(狗)来说,它接收到外部环境的变化(训练员扔出木棍);然后采取相应的行动(原地不动、衔回来或衔走等);接着外部环境会根据智能体的行动给与对应的反馈(奖励或惩罚);最后智能体再次根据环境的变化采取相应行动并以此迭代整个过程,直到智能体通过与环境的互动逐渐学到一个优秀的策略,以在后续给定的任务中取得最大的奖励值。
因此,强化学习的学习过程通常分为以下步骤:
①观察环境:智能体观察环境的当前状态,这状态可以是一个完整的观测或是一部分观测,取决于问题的性质;
②执行动作:基于观察到的状态智能体选择一个行动执行并导致环境状态变化,其中这个选择可以是确定性的也可以根据概率采样,取决于智能体的策略;
④接收奖励:环境根据智能体的行动给予奖励或惩罚信号;
⑤更新策略:智能体根据奖励信号调整自己的策略,以便在相似的状态下做出更好的决策。
2. 人类反馈强化学习
人类反馈强化学习(Reinforcement Learning from Human Feedback, RLHF)是基于强化学习的一种改进算法,其核心思想是先通过人类反馈信息来训练一个奖励模型,然后通过该奖励模型对智能体的行为进行评估,最后智能体根据反馈信号来调整自己的策略[3]。
如图10-47所示便是人类反馈强化学习的原理示意图。与传统的强化学习相比,人类反馈强化学习最大的不同在于它会利用人类的反馈信息来对智能体的行为进行评估并给予指导以帮助智能体更有效地学习。而在强化学习中,智能体只能通过与环境的互动进行学习,并根据环境的奖励信号调整策略而没有直接的人类反馈信息参与。
10.16.3 InstructGPT原理#
总体来看,InstructGTP是基于GPT-3模型微调而来,且同时加入了人类反馈强化学习来优化模型,并最终得到了1.3B、6B和175B这3个模型。对于每个模型来说,首先会根据对应参数规模的GPT-3模型通过有监督方法(Supervised Fine-Tuning, SFT)进行微调;然后再利用标注好的指令数据训练得到一个奖励模型(Reward Modeling, RM)对微调后GPT-3模型的输出进行打分;最后利用强化学习根据奖励模型对微调后的GPT-3模型的评分进行优化,以此得到InstructGPT模型。
如图10-48所示便是InstructGPT训练过程的原理示意图,其训练过程整体上可以分为3个步骤:
**①通过有监督学习(Supervised fine-tuning, SFT)基于GPT-3进行微调。**从收集的指令数据中采样部分样本进行人工标注并将其用于GPT-3模型的微调,以此得到SFT模型。在这一过程中,SFT模型所优化的目标函数类似于式(10-12),但仅需考虑标注内容对应的损失。
**②通过有监督学习基于SFT模型训练得到奖励模型(Reward modeling, RM)。**首先将未标注的指令数据输入到SFT模型并采样得到$K$(此处$K=4$)个不同的生成结果;然后标注人员将生成的4个结果以A > B > C = D进行优劣排序构成指令-结果排序的标注数据;最后以SFT模型为基础,将最后的分类层和嵌入层替换为只有一个神经元的标量输出结果,利用标注数据训练得到奖励模型。这里值得一提的是,InstructGPT所有3个版本的模型在训练过程中使用到的RM模型都是基于6B的GPT-3训练而来,因为作者研究发现基于175B的GPT-3训练得到的RM模型输出结果并不稳定且需要较多的计算资源。
同时,由于RM模型的标注数据中标签是一个序列即排序问题,所以在实际建模过程中作者基于PairWise算法将其转化为了二分类问题。具体地,RM模型需要最小化如下目标函数
$$ \begin{aligned} \text{loss}(\theta) =-\frac{1}{ \binom{K}{2}}E_{(x,y_w,y_l)\sim D} \left[\log(\sigma(r_{\theta}(x,y_w)-r_{\theta}(x,y_l)))\right] \end{aligned} \tag{10-15} $$其中$\theta$表示RM模型对应的权重参数;$r_{\theta}(x,y)$是一个标量,表示RM模型根据输入指令$x$和标注$y$计算得到的结果;$\sigma(\cdot)$表示$\text{Sigmoid}$函数;$D$表示标注数据集;$K$表示对于排序情况的取值。
此时,对于一个输入指令来说,先随机取出一对答案$y_w$和$y_l$,并假设$y_w > y_l$且为正类;然后分别计算得到两者的奖励值$r_{\theta}(x,y_w)$和$r_{\theta}(x,y_l)$。由于$y_w > y_l$,所以我们希望模型能够学到$r_{\theta}(x,y_w)\gg r_{\theta}(x,y_l)$的结果。因此$1\cdot \log(\sigma(r_{\theta}(x,y_w)-r_{\theta}(x,y_l)))$便可以看作是一个二分类问题的交叉熵损失,它越大则表示$y_m$越好于$y_l$。因为这里是将排序序列两两进行组合,所以$\binom{K}{2}$表示取每种情况的均值。
**③通过强化学习以SFT模型为基础利用近端策略优化(Proximal Policy Optimization, PPO)进行迭代微调。**将未标注的指令输入到SFT模型中并生成相应的输出结果;然后将该结果输入到奖励模型中并得到一个奖励分数;最后根据分数利用PPO策略来对SFT模型进行迭代微调。在经过上述3个步骤以后便训练得到了最终的InstructGPT模型。具体地,PPO模型需要最大化如下目标函数