智能体通过采取行动与环境进行交互,并返回状态和奖励。奖励我们想要优化的目标,状态只是当前时间智能体所处环境的一种表示,智能体使用策略将该状态映射到一个动作。
强化学习的精妙之处在于其学习过程是开放式的,所以智能体只通过看到这些奖励信号并学习如何随着时间的推移对获取到的奖励进行优化,而不去关注奖励实际的来源如何。
这样可以使得我们构建一个可以解决复杂问题的智能体,这是为什么我们选用强化学习来解决场景对话这样一个开放式问题的原因,而这也是我们开始讨论RLHF(Reinforcement Learning From Human Feedback)的地方。
其中的关键问题是我们想要建模的损失函数是什么?即我们在机器学习系统中要以一种有意义的可持续的方对人类的价值观进行编码,像解决日常生活中最常见的复杂问题一样。
问题是如何创建和实现一个损失函数?一个损失函数可能要对以下方面进行评估:
基于人类反馈的强化学习的目标是将一些复杂的数据集集成到机器学习模型中以对这些值进行编码,或者将这些值编码到模型而非函数中。
我们想做的是直接与大多数人一起学习这些价值观,而不是直接将其赋予给所有人,并在某种程度上对一些价值观进行主观的甚至错误的标记。
所以基于人类反馈的强化学习的确是一种及时且有效的,能够为模型创建复杂损失函数的方法之一。
我们将从三方面对RLHF进行介绍:
RLHF起源于决策制定阶段,在深度强化学习广泛应用之前,其通过简单的非神经网络方法即评价智能体的行为来形成策略。研究者会将每一个智能体的动作标记为好或坏,这就像是创建了一个给予奖励或惩罚的模型,并基于这个模型来形成行动策略。
在图片左侧的论文提出了一种名为Tamer的框架来解决俄罗斯方块的智能体训练问题,该框架中的奖励模型和策略存在一定程度的分离。
当基于人类反馈的强化学习在深度强化学习中得到普及时,图片右侧的论文使用了基于人类轨迹反馈的奖励预测器,所以上述框架流程中的环境状态也可以被称为RL框架中的观察结果,被提供给人们对其进行标记,奖励预测器会根据这些反馈学习预期奖励,也就是在每个状态下,各种可能的动作应得到的奖励。当智能体在新的状态下需要选择动作时,它可以使用奖励预测器来预测每个可能动作的预期奖励,并选择预期奖励最高的动作。
OpenAI在早期试图使用RLHF训练一个模型来总结文本,这就像很多人在考试中做的阅读理解一样,所以这包含人类的能力在其中
prompt:
如果你将其传递到一个刚刚经过总结训练的语言模型中,你会得到以下的输出:
这显然不是人们书写的逻辑和方式,并且该语言模型有时会出现语法错误, 使得阅读起来有困难
所以在此基础上,OpenAI做了一件事即对该promot写了一段人工注释案例:
我们现在知道了早期的实验在做什么,而现在我们要使用RLHF来组合这些以获得更好的、更人性化的输出结果:
现实中有大量这样的例子,所以很明显,使用RLHF在这样的任务上有很好的效果,特别是当你问到了一些比较关键和重要的话题,你可能不想获得没有用处的或者错误的信息
OpenAI告诉我们可以在大模型中使用RLHF,但是我们并不清楚其中的细节,显然在这件事情上OpenAI没有那么的open。
但是有一些关于ChatGPT中使用RLHF的猜测:
很明显使用了RLHF之后语言模型的效果有着显著的提升,使用过ChatGPT的人能够明确的感受到
RLHF 是一项涉及多个模型和不同训练阶段的复杂概念,这里我们按三个步骤分解:
通常语言模型基于transformer进行构建,在训练过程中涉及以下内容:
Language model pretraining : dataset
Dataset:
- Reddit, other forums, news, books
- Optionally include human-written text from predefined prompts
Prompts & Text Dataset -> Train Language Model(Initial Language Model)
| ^
|-----------------------|
Human Augmented Text(Optional)
人类增强文本是可选步骤,使用它只是为了覆盖我们原有的数据集。人类增强文本中包含提示和原始的文本数据集,这使得这个数据集看起来像从Reddit、其他论坛或新闻中获取的。这样的组合可以为语言模型提供更丰富和多样化的输入,使其更好地理解和模仿真实世界中的对话和讨论。
关于该可选步骤,公司可以雇佣一些数据标注人员对数据进标注,即对其中的重要问题或重要的提问进行回答和标注,这些处理后的数据将是真正的高质量的训练语料,可以基于此进一步的训练语言模型,一些论文将其称之为监督式微调
接下来我们来讨论怎么使用特定的数据集来训练奖励模型引入人类的偏好信息并降低损失,因为我们刚讨论了怎么从人类不同的价值观中降低损失,而不是使用具体的损失函数。
RM 的训练是 RLHF 区别于旧范式的开端,该模型的目标是将一段输入文本序列映射到奖励值,数值上对应人的偏好。我们可以用端到端的方式用 LM 建模,或者用模块化的系统建模 (比如对输出进行排名,再将排名转换为奖励) 。这一奖励数值将对后续无缝接入现有的 RL 算法至关重要。
RM 的提示 - 生成对文本是从预定义数据集中采样生成的,并用初始的 LM 给这些提示生成文本。即该奖励模型的训练数据集与语言模型预训练中使用的数据集不同,它包含更多期望输出的目标数据,这和互联网上的一些偏好数据集类似,也和一些聊天机器人类似,他们在更具体的场景使用更加具体的数据集和语料。
这些数据集和语言模型预训练使用的数据集相比在数量上要少几个数量级,因为它们更关注于获得具体的内容,就像一种真正人性化交互式的文本类型,而不是互联网上的大多数较为嘈杂并难以处理的数据。
经过从预定义数据集中的采样之后,语言模型会基于一个prompt将输出多个文本,之后我们会对其进行排名。这有点像我们将一个prompt输入到多个语言模型中,这些模型将生成不同的文本,然后我们标记这些输出并进行相应的排名。
在得到模型的多个输出之后,我们可以采用一些排序方法,例如Elo对它们进行逐个比较排序,有很多种排序方法都可以使用,但本质上都是使用一个较为人工的方式将文本映射到下游的分数。
在我们有了一些输出结果的排名之后,我们就需要考虑使用输入输出对来训练监督学习模型,具体的我们实际训练一系列的文本并将其作为输入,基于Transformer模型对其进行解码操作,得到输出后将根据奖励的特定标量值对其进行训练,最后我们就得到了奖励模型或称之为偏好模型。
奖励模型也是一种非常大的基于Transformer的语言模型,因此它也可以有很多的参数,例如50B。但其参数量大小也会有变化,例如chatGPT的奖励模型有6B个参数,但最关键的是其从输入文本到输出标量中实际训练方式的变化。
最后一步我们基于RL进行微调,在其中状态和操作都是语言,奖励模型将环境信息从语言转换到标量奖励值。
我们希望从用户的prompt或模型的输出中获取一些有用的信息,然后通过策略来传递这些信息。该策略是一个经过训练的的大型语言模型,它会生成一些文本,我们将其传入奖励模型并获取相应的标量值,该奖励模型也使用文本进行训练,然后将其放入反馈循环中,以便我们可以随着时间的推移对其进行更新。
与此同时还有其他一些较为重要的步骤,其中之一已经被人们广泛的使用到,并且几乎该方向的论文都使用了这种方法的某种变体,即KL散度。
KL散度在机器学习中较为常用,它是分布之间的距离度量。当用户传入一个prompt时,语言模型会生成一个时间序列,一个随时间变化的分布,我们可以查看这些分布相对于彼此的差异。在上图中我们试图限制灰色板块中的语言模型的策略,因为当我们随着时间的推移对其进行迭代,其与已知具有准确的文本描述能力的初始语言模型的输出分布差异较大。
采取KL散度对语言模型的输出分布进行评估可以有效的防止出现异常,即语言模型即使输出乱码也能从奖励模型中获得高奖励,而我们希望的是在它给出有效的文本信息后从奖励模型中获得高奖励。因此采取KL散度对语言模型进行约束可以使我们处于理想的优化环境。
现在我们有了奖励模型的输出和KL散度对模型的约束,然后我们将奖励的标量与KL比例因子进行结合,这表达了我们对奖励模型给予的奖励值和尾部约束的关心程度。实际我们可以选择向KL散度和奖励模型的求和运算中添加更多的输入。例如chatGPT为经过训练的模型的文本输出添加了奖励项,该模型将进行迭代更新以匹配他们付费人工编写的一些高质量注释,对于具体的prompt,就像上述关于就业和读博问题的总结那样,他们希望文本能够与所有人性化文本相匹配,但这显然非常依赖于数据。
最后我们将奖励输入到RL优化器中,RL优化器处理该奖励会像处理来自环境中的奖励一样,之后经过一个RL循环,其中语言模型是策略,奖励模型和文本采样技术是环境,我们得到状态和奖励,并随着RL更新规则正常工作。其中有一些技巧,例如该RL策略可能会冻结一些参数对环境进行优化使其更容易处理,但实际上这就像只将PPO应用到语言模型上,这是一种策略分级添加算法。
PPO算法是一种相对较旧的强化学习算法,当数据通过系统时仅根据该数据计算梯度,而不保留最近转化的重放缓冲区。PPO算法适用于连续或离散操作,这就是为什么它可以处理之前的语言数据。
PPO 算法确定的奖励函数具体计算如下:将提示 x 输入初始 LM 和当前微调的 LM,分别得到了输出文本 y1, y2,将来自当前策略的文本传递给 RM 得到一个标量的奖励 r_θ。将两个模型的生成文本进行比较计算差异的惩罚项,在来自 OpenAI、Anthropic 和 DeepMind 的多篇论文中设计为输出词分布序列之间的KL散度的缩放。此外,OpenAI 在 InstructGPT 上实验了在 PPO 添加新的预训练梯度,可以预见到奖励函数的公式会随着 RLHF 研究的进展而继续进化。
作为一个可选项,RLHF 可以通过迭代 RM 和策略共同优化。随着策略模型更新,用户可以继续将输出和早期的输出进行合并排名。Anthropic 在他们的论文中讨论了迭代在线 RLHF,其中策略的迭代包含在跨模型的 Elo 排名系统中。这样引入策略和 RM 演变的复杂动态,代表了一个复杂和开放的研究问题。
尽管 RLHF 取得了一定的成果和关注,但依然存在局限。这些模型依然会不确定性地输出有害或者不真实的文本。这种不完美也是 RLHF 的长期挑战和发展的动力 —— 在人类的固有领域中运行意味着永远不会到达一个完美的标准。
收集人类偏好数据的质量和数量决定了 RLHF 系统性能的上限。RLHF 系统需要两种人类偏好数据:人工生成的文本和对模型输出的偏好标签。生成高质量回答需要雇佣兼职人员 (不能依赖产品用户和众包) 。另一方面,训练 RM 需要的奖励标签规模大概是 50k 左右,所以并不那么昂贵 (当然这远超学术实验室的预算) 。
目前相关的数据集只有一个基于通用 LM 的 RLHF 数据集 (来自Anthropic和几个较小的子任务数据集 (如来自 OpenAI的摘要数据集) 。另一个挑战来自手工标注者的偏见,不同的人类标注者对于一个文本可能有不同的意见,导致了训练数据存在一些潜在差异。
抛开数据方面的限制,一些有待开发的设计可以让 RLHF 取得长足进步。例如对 RL 优化器的改进方面,PPO 是一种较旧的算法,但目前没有什么结构性原因让其他算法可以在现有 RLHF 工作中更具有优势。另外,微调 LM 策略的一大成本是策略生成的文本都需要在 RM 上进行评估,通过离线 RL 优化策略可以节约这些大模型 RM 的预测成本。
最近,出现了新的 RL 算法如隐式语言 Q 学习 (Implicit Language Q-Learning,ILQL) 也适用于当前 RL 的优化。在 RL 训练过程的其他核心权衡,例如探索和开发 (exploration-exploitation) 的平衡也有待尝试和记录。探索这些方向至少能加深我们对 RLHF 的理解,更进一步提升系统的表现。