OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮, 它面对多种多样的问题对答如流, 似乎已经打破了 机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model,LLM) 生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback) ,即以强化学习方式依据人类反馈优化语言模型。
过去几年里各种 LLM 根据人类输入提示 (prompt) 生成多样化文本的能力令人印象深刻。然而, 对生成结果 的评估是主观和依赖上下文的, 例如, 我们希望模型生成一个有创意的故事、一段真实的信息性文本, 或者是 可执行的代码片段, 这些结果难以用现有的基于规则的文本生成指标 (如 BLEU 和 ROUGE) 来衡量。除了评估 指标, 现有的模型通常以预测下一个单词的方式和简单的损失函数 (如交叉熵) 来建模, 没有显式地引入人的偏 好和主观意见。
前面通过有监督微调, 大语言模型已经初步具备了服从人类指令, 并完成各类型任务的能力。然而有监督 微调需要大量指令和所对应的标准回复, 获取大量高质量的回复需要耗费大量的人力和时间成本。由于, 有监 督微调通常采用交叉熵损失做为损失函数, 目标是调整参数使得模型输出与标准答案完全相同, 不能从整体上 对模型输出质量进行判断。因此, 模型不能适用自然语言多样性, 也不能解决微小变化的敏感性问题。强化学 习则将模型输出文本作为一个整体进行考虑, 其优化目标是使得模型生成高质量回复。此外, 强化学习方法还 不依赖于人工编写的高质量回复。模型根据指令生成回复, 奖励模型针对所生成的回复给出质量判断。模型也 可以生成多个答案, 奖励模型对输出文本质量进行排序。模型通过生成回复并接收反馈进行学习。强化学习方 法更适合生成式任务,也是大语言模型构建中必不可少的关键步骤。
如果我们用生成文本的人工反馈作为性能衡量标准, 或者更进一步用该反馈作为损失来优化模型, 那不是 更好吗?这就是 RLHF 的思想:使用强化学习的方式直接优化带有人类反馈的语言模型。RLHF 使得在一般文本 数据语料库上训练的语言模型能和复杂的人类价值观对齐。
强化学习
先了解一下强化学习的一些基础概念,强化学习需要一个交互的过程,而且要解决的是序列决策问题。
强化学习是机器学习的范式和方法论之一, 用于描述和解决智能体在与环境的交互过程中通过学习策略以 达成回报最大化或实现特定目标的问题。其中心思想是让智能体在环境里学习。每个行动会对应各自的奖励, 智 能体通过分析数据来学习, 怎样的情况下应该做怎样的事情。其要解决的是序列决策问题, 一个决策代理与离 散的时间动态系统进行迭代地交互。在每个时间步的开始时, 系统会处于某种状态。基于代理的决策规则, 它会 观察当前的状态, 并从有限状态集中选择一个。然后,动态系统会进入下一个新的状态并获得一个对应的收益。 这样循环进行状态选择,以获得一组最大化收益。强化学习可以用一个闭环示意图来表示,如下图所示。
强化学习的闭环示意图。
强化学习有一些基本要素:
-
状态(State):是对环境的描述,可以是离散的或连续的;
-
行为(Action):环境中智能体某一轮采取的动作, 这个动作会作用于环境, 且执行后将获得一个奖励(可 正可负);
-
奖励(Reward):本质就是为了完成某一目标的动作质量。从长远的角度看什么是好的, 一个状态的价值 是一个智能体从这个状态开始,对将来累积的总收益的期望。
-
策略(Policy):策略定义了智能体在特定时间的行为方式,即策略是环境状态到动作的映射。
两个可以进行交互的对象:
-
智能体(Agent):感知环境状态(State),根据反馈奖励(Reward) 选择合适行为(Action) 最大化长期收 益,在交互过程中进行学习。
-
环境(Environment):游戏发生的场景, 可以被智能体做出的动作改变。接受智能体执行的一系列动作, 对 这一系列动作进行评价并转换为一种可量化的信号,最终反馈给智能体。环境中包含状态(State)信息。
强化学习有许多在游戏上的应用。用熟悉的超级玛丽来举个例子, 我们可以操纵的游戏角色玛丽是可以交 互的智能体 agent,游戏中每一帧的画面中要交互的场景即 enviroment,游戏角色依据当前环境做出新的动作, 而 环境会对角色的每个动作作出反馈, 例如吃到了金币会有加成, 而被击中则不是一个好消息, 这样的反馈可以 量化为奖励 reward ,这种奖励值可以帮助学习如何选择最合适的动作,也就是在交互中学习。
强化学习是和监督学习, 非监督学习并列的第三种机器学习方法。下图说明了强化学习与我们熟悉的监督 学习、无监督学习的关系。
强化学习与监督学习、无监督学习的关系示意图。
强化学习与监督学习的区别
随着 ChatGPT、Claude 等通用对话模型的成功, 强化学习在自然语言处理领域获得了越来越多的注意力。在 深度学习中,有监督学习和强化学习不同,下面是它们之间的对比:
-
( 1)强化学习处理的大多数是序列数据,其很难像监督学习的样本一样满足独立同分布。在强化学习的训 练过程中, 时间非常重要。因为我们得到的是有时间关联的数据(sequential data), 而不是独立同分布的 数据。在机器学习中, 如果观测数据有非常强的关联, 会使得训练非常不稳定。这也是为什么在监督学习中,我们希望数据尽量满足独立同分布,这样就可以消除数据之间的相关性。
-
(2) 在强化学习过程中, 没有非常强的监督者(supervisor),只有奖励信号(reward signal) , 并且奖励信号 是延迟的。
-
(3)强化学习智能体会从环境中获得延迟的奖励,即环境会在很久以后才告诉我们之前所采取的动作到底 是不是有效的。因为我们没有得到即时反馈, 所以智能体使用强化学习来学习就非常困难。当我们采取一 个动作后, 如果使用监督学习, 就可以立刻获得一个指导, 比如, 我们现在采取了一个错误的动作, 正确 的动作应该是什么。而在强化学习中, 环境可能会告诉我们这个动作是错误的, 但是它并不会告诉我们正 确的动作是什么。而且更困难的是, 它可能是在一两分钟过后才告诉我们这个动作是错误的。所以这也是 强化学习和监督学习不同的地方。
-
(4)强化学习会试错探索,它通过探索环境来获取对环境的理解。学习器并没有告诉我们每一步正确的动 作应该是什么, 学习器需要自己去发现哪些动作可以带来最多的奖励, 只能通过不停地尝试来发现最有利 的动作。智能体获得自己能力的过程, 其实是不断地试错探索(trial-and-error exploration) 的过程。探索 (exploration) 和利用(exploitation) 是强化学习中非常核心的问题。其中, 探索指尝试一些新的动作, 这些 新的动作有可能会使我们得到更多的奖励, 也有可能使我们“一无所有”;利用指采取已知的可以获得最 多奖励的动作, 重复执行这个动作, 因为我们知道这样做可以获得一定的奖励。因此, 我们需要在探索和 利用之间进行权衡,这也是在监督学习中没有的情况。
-
(5)智能体的动作会影响它随后得到的数据,这一点是非常重要的。在训练智能体的过程中,很多时候我 们也是通过正在学习的智能体与环境交互来得到数据的。所以如果在训练过程中, 智能体不能保持稳定, 就会使我们采集到的数据非常糟糕。我们通过数据来训练智能体, 如果数据有问题, 整个训练过程就会失 败。所以在强化学习中一个非常重要的问题就是, 怎么让智能体的动作一直稳定地提升。用下棋来举个形 象的例子, 在监督学习中, 棋手的上限往往取决于老师的上限, 也就是俗话说的”和臭棋篓子下棋, 越下 越臭“;而在强化学习的设置下, 即使有着资质平平甚至有些笨的起点, 也有自己和自己下, 有朝一日悟 道飞升的可能性。
强化学习和非监督学习的区别
再来看看强化学习和非监督学习的区别。也还是在奖励值这个地方。非监督学习是没有输出值也没有奖励 值的, 它只有数据特征。同时和监督学习一样, 数据之间也都是独立的, 没有强化学习这样的前后依赖关系。可 以总结说, 监督学习是从外部监督者提供的带标注训练集中进行学习, 也就是由任务驱动型;非监督学习是一个 典型的寻找未标注数据中隐含结构的过程, 也就是数据驱动型;强化学习则更偏重于智能体与环境的交互, 这 带来了一个独有的挑战—— “试错(exploration)”与“开发(exploitation)”之间的折中权衡, 智能体必须开发已有的经验来获取收益, 同时也要进行试探, 使得未来可以获得更好的动作选择空间, 也就是说可以从错误中 学习。
文本生成中的强化学习
让我们落到文本生成的实际场景中。如图所示, 文本生成的问题, 可以建模为一个 token 空间上的序列决策 问题(选择一个 token 后继续选择另一个 token) :
-
State:对话上下文
-
Action:回复的 token space 相关 token 集合中的 token
-
Reward:生成的质量判别
-
Episode:一次完整的解码生成回复的过程
强化学习在大语言模型上的重要作用可以概括为以下几个方面:
-
(1) 强化学习比有监督学习更可以考虑整体影响:有监督学习针对单个词元进行反馈, 其目标是要求模型 针对给定的输入给出的确切答案。而强化学习是针对整个输出文本进行反馈, 并不针对特定的词元。这种 反馈粒度的不同, 使得强化学习更适合大语言模型, 既可以兼顾表达多样性, 还可以增强对微小变化的敏 感性。自然语言十分灵活, 可以用多种不同的方式表达相同的语义。而有监督学习很难支持上述学习方式。 强化学习则可以允许模型给出不同的多样性表达。另外一方面, 有监督微调通常采用交叉熵损失做为损失 函数, 由于总和规则, 造成这种损失对个别词元变化不敏感, 如果改变个别的词元, 只会对整体损失产生小的影响。但是, 一个否定词可以完全改变文本的整体含义。强化学习则可以通过奖励函数达到同时兼顾多样性和微小变化敏感性两个方面。
-
(2) 强化学习更容易解决幻觉问题:用户在大语言模型时主要有三类输入:(a) 文本型 (Text-Grounded):用 户输入相关文本和问题, 让模型基于所提供的文本生成答案 (例如,“本文中提到的人名和地名有哪些”); (b) 求知型 (Knowledge-Seeking):用户仅提出问题, 模型根据内在知识提供真实回答 (例如,“流感的常见 原因是什么”);(c) 创造型 (Creative):用户为提供问题或说明, 让模型进行创造性输出 (例如,“写一个关 于... 的故事”)。有监督学习算法非常容易使得求知型查询产生幻觉。在模型并不包含或者知道答案的情况 下, 有监督训练仍然会促使模型给出答案。而使用强化学习方法, 则可以通过定制奖励函数, 将正确答案 赋予非常高的分数, 放弃回答的答案赋予中低分数, 不正确的答案赋予非常高的负分, 使得模型学会依赖 内部知识选择放弃回答,从而在一定程度上缓解模型幻觉问题。
-
(3) 强化学习可以更好的解决多轮对话奖励累积问题:多轮对话能力是大语言模型重要的基础能力之一, 多 轮对话是否达成最终目标, 需要考虑多次交互过程的整体情况, 因此很难使用有监督学习方法构建。而使 用强化学习方法,可以通过构建奖励函数,将当前输出考虑整个对话的背景和连贯性。
强化学习的分类
根据一种比较通行的分类法,强化学习可以分为基于值的方法、基于策略的方法和 actor-critic 方法这三类。
-
基于值函数的学习方法要学习一个价值函数, 去计算每个动作在当前环境下的价值, 目标就是获取最大的 动作价值, 即我每一步采取回报最大的动作和环境进行互动。Value-Based 的方法输出的是动作的价值, 选 择价值最高的动作。适用于非连续的动作。常见的方法有 Q-learning 、Deep Q Network 和Sarsa。其基础网 络结构如下图所示,在编码网络之后,直接用一个全连接层来为每个状态输出一个分数。
-
基于策略梯度的学习方法去学习策略函数, 去计算当前前环境下每个动作的概率, 目标是获取最大的状态 价值, 即该动作发生后期望回报越大越好。Policy-Based 的方法直接输出下一步动作的概率, 根据概率来 选取动作。但不一定概率最高就会选择该动作, 还是会从整体进行考虑。适用于非连续和连续的动作。常 见的方法有 Policy gradients。
-
Actor-Critic 融合了上述两种方法, 价值函数和策略函数一起进行优化。价值函数负责在环境学习并提升自 己的价值判断能力,而策略函数则接受价值函数的评价,尽量采取在价值函数那可以得到高分的策略。
ps: 欢迎扫码关注公众号^_^.