I-ChatGPT核心技术简介
ChatGPT是一个聚焦于对话生成的大模型,能够根据用户输入的文本描述,结合历史对话,产生相应的只能回复。
GPT3模型通过对大量文本数据的学习,能够流畅的生成对话,但是有时候的回复并不符合预期,OpenAI认为生成的回复应该具备真实性、无害性和有用性。此外,GPT3主要限制在于缺乏复杂任务的推理能力,例如完成代码和解决数学问题。
为了增强思维链推理能力,提出了代码训练(Codex Initial),即在大量的GitHub代码上训练模型,结果极大地提升了模型的思维推理能力,并且从结果看,文字推理的能力有可能来自于代码的数据集的训练。
为了使生成的回答满足上述提到的特性,引入了人类反馈强化学习 (Reinforcement Learning From Human Feedback,RLHF) – 这也成为LLM生成领域的新训练范式。此外,还使用了**指示学习(Instruction Learning)**来指导奖励模型的训练。
II-指示学习(Instruction Learning)
指示学习(instruct)在2021年由谷歌Quoc V.Le团队提出,与提示学习(prompt)的核心思想相同,都是通过一些信息激发模型本身具备的知识和能力。
不同之处在于,prompt采取的形式类似于完形填空,激发模型的补全能力,instruct采取的是给出明显的指令,激发模型的理解能力。如:
- prompt:提示学习:老师讲解的通俗易懂,学生很喜欢,这门课太____了。
- instruct:这句话的情感是非常正向的:老师讲解的通俗易懂,学生很喜欢。选项:A = 好;B = 一般;C = 差。
指示学习的优点是它经过多任务的微调后,也能够在其他任务上做 zero-shot,而提示学习都是针对一个任务的。泛化能力不如指示学习。
III-RLHF
模型的本质是对训练数据的拟合,生成的内容基于训练数据的分布情况。为了使生成结果更满足人的需求,即增强模型的输出内容和人类喜欢的输出内容的对齐,提出用生成文本的人工反馈作为性能衡量标准,或者更进一步用该反馈作为损失来优化模型。这就是RLHF的核心思想。
在分析RLHF前,我们先了解一下强化学习(Reinforcement Learning,RL)。
强化学习
强化学习的目标就是学习一个好的策略做出最优选择,从而最大化得到的奖励。强化学习通过奖励(Reward)机制来指导模型训练,奖励机制可以看做传统模型训练机制的损失函数。奖励的计算要比损失函数更灵活和多样(AlphaGO的奖励是对局的胜负),这带来的代价是奖励的计算是不可导的,因此不能直接拿来做反向传播。强化学习的思路是通过对奖励的大量采样来拟合损失函数,从而实现模型的训练。
强化学习是主体在与环境的互动中为了达成一个目标而进行的学习过程,将强化学习分为3层结构。
第一层——包括3个基本元素:Agent、Enviroment、Goal。
第二层——强化学习的过程主要围绕3个主要元素展开:State、Action、Reward,State指当前Agent和Enviroment的所有状态,Action是指当前State下Agent的行动,这就会产生新的State,State和Action的循环往复就是强化学习的主体部分。Reward指的是Agent在当前State下Action后得到的及时反馈,在强化学习中Reward通常是一个实数。Reward的设置与Goal息息相关。以围棋为例:
将下围棋看作强化学习过程,那么
-
Agent:人
-
Enviroment:棋盘
-
Goal:取胜
-
State:当前棋子在棋盘上的状态
-
Action:落棋的行为
-
Reward:赢棋为1,输棋或和棋为0
强化学习的目的是最大化总的Reward。
第三层——包括两个核心元素Policy、Value。Policy是指在某一个State下,应该采取什么样的行动,从数学的角度看,Policy就是一个函数,在围棋中,将当前棋盘和棋子的State输入这个函数,就会告诉你下一步应该在哪里落子。Value同样也是一个函数,并且是Policy函数的前提(Value函数决定了Policy函数),Value函数通常有两种:
- State Value:输入是一个状态,输出是一个价值实数(Value),指的是预期将来会得到的所有Reward之和的期望值。
- State-Action Value:指的是在特定状态下,采取某种行动所具有的价值。
强化学习还有两个主要特点:
- Trial and Eror(试错)
- Delayed Reward:Action可能没有及时的Reward,但对最后的Goal都有贡献
RLHF
RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,训练的整体过程如下图所示
按三个步骤分解:
-
预训练一个语言模型 (LM) :与经典的预训练目标训练一个语言模型的方式相同,这里可以用额外的文本或者条件对这个 LM 进行微调,但并不是 RLHF 必须的一步。
接下来,基于 LM 来生成训练奖励模型 (RM,也叫偏好模型) 的数据,并在这一步引入人类的偏好信息。
-
聚合问答数据并训练一个奖励模型 (Reward Model,RM) :
RM 的训练是 RLHF 区别于旧范式的开端。这一模型接收一系列文本并返回一个标量奖励,数值上对应人的偏好。模型的输入输出可以看作是[x=[prompt,模型回答],y=人类满意度]。
关于模型选择方面,RM 可以是另一个经过微调的 LM,也可以是根据偏好数据从头开始训练的 LM。对于哪种 RM 更好尚无定论。
关于训练文本方面,RM 的提示 - 生成对(x=[prompt,模型回答])文本是从预定义数据集中采样生成的,并用初始的 LM 给这些提示生成文本。
关于训练奖励数值方面,需要人工对 LM 生成的回答进行排名。即通过LM针对prompt生成多段回答文本,然后打标人比较这些段文本哪个好。最终,这些不同的排序结果会通过某种归一化的方式变成标量信号进入模型训练。
接下来是最后一步:利用 RM 输出的奖励,用强化学习方式微调优化 LM。
-
用强化学习 (RL) 方式微调 LM:
首先将微调任务表述为 RL 问题,两个核心元素即
- Policy:接受提示并返回一系列文本 (或文本的概率分布) 的 LM
- Value:偏好模型 (RM) 和策略转变约束 (Policy shift constraint) 的结合
PPO 算法持续更新策略的参数的流程如下:
-
将提示x输入初始LM和当前微调的LM,分别得到输出y1,y2;
-
利用RM模型计算两个生成文本的reward rθ,将两个模型的生成文本进行比较计算差异的惩罚项,在来自 OpenAI、Anthropic 和 DeepMind 的多篇论文中,设计为输出词分布序列之间的 Kullback–Leibler (KL) 散度的缩放,公式为
r = r θ − λ r K L r=r_θ-\lambda r_{KL} r=rθ−λrKL -
根据 PPO 算法,我们按当前批次数据的奖励指标进行参数更新优化。