回顾一下,学期快结束了,这门课涵盖了多个模块。从AI基础、AI研究、数据和常见模型架构开始;然后看了多模态AI,包括对齐不同模态、利用它们、在模态间迁移信息;之后有几节关于大语言模型和大型多模态模型的课;还有一堂客座讲生成式AI,讲扩散模型和流匹配模型来生成更多数据。
本周和下周最后两讲将聚焦更具交互性的AI:今天讲强化学习、推理和交互式AI,下周讲人机交互、AI智能体以及如何确保这些系统在现实世界中安全、合乎伦理。今天的内容包括:强化学习基础、现代强化学习及其如何被用于对齐和改进大语言模型、推理,最后介绍一些应用和AI智能体。
首先,强化学习基础。目标不是涵盖RL的全部深度,而是理解今天所有RL方法及其在现代AI中的应用所需的基本程度。RL与非RL方法(如监督学习)最大的区别在于RL是动态的。你有在某个环境中的智能体,不是只做一个预测(如分类一张图像),而是通常需要在环境中采取一系列动作,环境会给予新的状态、新的位置,然后智能体可能采取更多动作。这个模式持续进行:采取更多动作,与环境交互,进入新状态。最终目标是最大化智能体在该环境中的长期奖励。
更形式化地说,人们通常在马尔可夫决策过程的背景下讨论RL。它形式化了如下概念:存在一组状态,比如机器人导航时的位置(现在人们也将语言模型已生成的词视为状态,即模型当前所看到的世界的某种快照);一组动作,机器人可以上下左右移动,语言模型则可以输出一组词;通常有一个转移函数,告诉你从某个状态采取某个动作后会到达哪个下一个状态,有时是确定的,有时环境中有随机性。
非常重要的是奖励函数:在某个状态下采取某个动作,你会得到什么奖励?奖励可以是是否成功完成任务,可以是对花费过多时间或资源的惩罚,也可以是用户对交互的满意度。还有其他要素,如起始状态、折扣因子(对确保方法收敛很重要,本质上表明当下的奖励比未来的奖励更有价值),以及视野范围,即智能体与环境交互的总步数。
智能体在不同状态间移动、采取不同动作并观察不同奖励时,有几个关键概念需要关注。首先是回报的概念:我们不只训练智能体在当前状态获取最大奖励,而是要最大化交互过程中所有奖励的累积长期总和。回报包括立即的下一个时间步的奖励,加上折扣因子乘以下下个时间步的奖励,一直加到交互结束。关键在于不止最大化即时奖励,而是最大化未来所有奖励之和。很多情况下即时奖励并不好,但未来有更好的奖励值得去优化。这就是RL的全部目标——最大化长期回报。
你是通过学习一个策略来最大化长期回报的。策略就是给定当前状态,我应该采取什么动作的分布:机器人在这里,应该向上或向前移动;语言模型看到这些词后,应该输出这些词。这里说是分布,是因为策略有时是确定性的,有时随机策略也非常有用,比如现在的大语言模型都有温度参数,所以生成的下一个动作或下一个词存在一定随机性。目标就是找到最佳策略——从每个状态出发应采取的最佳动作分布——来最大化长期累积奖励。
RL与监督学习有几个关键区别。RL涉及做出一系列可能任意的决策,监督学习只做一步决策;RL最大化由一系列决策导致的累积奖励,监督学习只最大化即时奖励。RL中有时奖励非常稀疏,你可能交互了很长的序列,一千步后才得到一个奖励,比如语言模型与人类对话一千个词,每个词都考量才得到反馈,这使得RL天然具有挑战性;而监督学习总得到密集奖励,你知道标签是什么。
有时在RL中环境是未知的,存在探索问题——设计机器人或自动驾驶汽车时,你无法提前绘制每一条路,必须对环境进行一定探索,这又增加了一层难度;监督学习中通常知道可能的预测集合和输入范围。不过,监督学习方法可以非常简单地应用到RL中,这就是模仿学习。
举个例子,假设你要训练一个自动驾驶汽车的策略。状态是挡风玻璃上看到的内容,动作是如何转动方向盘。你可以让人类专家长时间驾驶,利用这些数据——人类看到的状态序列、采取的动作序列、下一个状态、下一个动作——得到所谓的"专家轨迹",即专家司机执行此任务的数据。然后你可以做监督学习:学习一个函数,输入人类专家数据中的状态S,预测人类采取的动作。这就是一个简单的分类模型。这就是模仿学习,它是强化学习的一种。
但模仿学习可能失败,有几个重要原因。最大的问题是分布不匹配:人类专家司机开得很好,该停就停,该转弯就转弯,因此模型只知道在正确路径上该做什么。但一旦模型意外走上错误路径,就无法恢复,因为它从未见过人类专家如何从不该停却没停、意外偏离道路这类次优状态中恢复。分布不匹配非常难处理。在专家示范中你永远看不到次优状态,所以模型很难恢复。此外还有后勤问题:专家轨迹并不总是可获取,即使可获取也需要大量人类操作,成本非常高昂。不过,如果有可能收集人类专家示范,模仿学习可以作为初始化好策略的一种方式,但你仍需解决让策略探索一些次优轨迹并学习如何从中恢复的问题。
深入RL,有两大类范式。一类叫基于模型的RL方法。基于模型的方法中,我们常看到画出的树状结构:从某个状态开始,可能有两个动作选择,每个动作又可能有两种下一个状态,并观察到奖励(比如上面+1,下面-1),然后再有两个可能动作,再有两个状态。节点是状态,边是动作,奖励在状态转移时观察到,整棵树呈指数级增长。基于模型的RL本质上就是构建这棵树,并为树中的节点赋予正确的值,这些值代表从该节点出发将获得的长期奖励。图中蓝色标出的是策略,即从某个状态应该走哪条边的遍历路径。
基于模型的方法需要学习几个概念。一是状态价值函数:给定每个状态,它的价值是多少?价值意味着如果我在那个状态下,预期能获得的长期回报是多少?关键在于长期回报,而非即时奖励。我们不想只说这个状态是-1,而要考虑到未来可能得到+100,从而赋予它一个价值。这通常记为V(s)。另一种写法是遵循当前策略的价值:如果你遵循当前策略,从这个状态得到-1,然后得到+100,等等,所以价值是99,它包含的不仅是即时-1,还有策略在未来为你带来+100的事实。
有人问长期回报如何定义。正如所说:如果我试图为当前状态找到一个好的价值,我不能只说采取一个动作就会得到-1,而要考虑到一旦走到这里,未来会有+100的可能性。此处没有使用折扣因子,所以总价值是-1加100等于99。步数没有限制,可能是-10、-20然后+1。通常还会有一个折扣因子,表示未来事物的价值可能更低。折扣因子就是:回报是下一时间步的奖励,加上折扣因子乘以下一个时间步的奖励,再加上折扣因子的平方乘以下下个时间步的奖励。通常折扣因子设为小于1的值,比如0.9。有时折扣因子对确保方法收敛非常必要,否则就会无限进行下去。
这是遵循策略的状态价值。另一个关键定义是状态的最优价值,即在所有可能策略中能获得的最佳价值。还有一点:有时人们不仅定义状态的价值,还定义状态-动作对的价值。如果我在特定状态采取特定动作,这个状态-动作对的长期价值是多少?这通常记为Q。例如,从S1采取向上动作,遵循某个策略,得到+1然后+2,所以价值是+3;如果向下走,你看到的是99。这就是评估状态以及从该状态采取的动作的价值的方法。同样可以问什么是最优状态-动作函数Q*:你会发现向上走的策略是次优的,其实应该走另一条路,所以最优价值是4而非3。
很多基于模型的RL正是围绕推导这些Q(s,a)和V(s)展开。以前人们用动态规划探索这棵树,现在当然用神经网络来近似Q和V。一旦推导出来,最优策略本质上可以看作一个树搜索问题:在树中遍历,每次都找到能最大化V(s)或Q(s,a)的动作。此外,Q和V是可以互换的,知道一个就能推导出另一个。好,这就是基于模型的RL简介。
AlphaGo和许多下棋博弈的AI大多是基于模型的。它们有状态——棋局状态,有可采取的动作,目标是估算每一种潜在棋局状态的长期奖励。不只是刚刚吃了一个子,而是长期来看获胜的可能性多大。AlphaGo本质上是用CNN训练这些棋盘,把棋盘当图像输入,训练CNN输出状态V值——状态的长期价值。有了每个状态的V值后,就能在局部做树搜索,因为V值已经包含了长期回报,所以只需做局部的最大搜索。
另一类范式是基于策略的RL。基于策略的RL不构建树,也不估计每个状态或动作的价值,而是直接学习一个策略——一个输入状态、输出动作的函数。比如乒乓游戏中,状态是游戏图像,动作是向上还是向下移动。大多数现代方法都属于基于策略的方法。
两者之间存在巨大争论:基于模型的方法学习环境模型——这棵树和每个可能的状态-动作转移;基于策略的方法只学策略,不关心环境模型。因此,基于模型的方法更擅长规划,可以模拟其他潜在动作,样本效率更高,但代价是更复杂。基于策略的方法不允许规划,样本效率较低,但训练算法通常更容易实现。各有优缺点,代表性的算法也不同。
好,现在讲基于策略的RL。用乒乓游戏作为例子:你控制一个拍子对抗对手,有两个选项,上移或下移,把球弹回对手一侧。球过线你得分,球落到自己一侧你失分。目标就是训练一个模型,输入游戏截图状态,输出两个动作之一:上移或下移。这是个二分类问题。
假设你有标签——比如人类专家在每个状态下是向上还是向下移动。这就是专家标签、专家轨迹。那么你会直接把它当作监督学习问题:输入状态,标签是向上或向下,最大化对数概率(即交叉熵损失)。但你没有标签或标签昂贵时,基于策略的方法会这样做:先有一个策略。策略的意思是,给定一些状态,我采样一些动作。比如第一轮策略输出是上、上、下、下,第二轮采样出别的序列,第三轮又不同。这是模型根据当前策略行动的结果。
假设在游戏中运行后发现,第一轮序列你赢了,第二、三轮输了。赢或输取决于分数是判给你还是对手。然后你会把赢的序列视为好例子,最大化序列中每个动作的概率;把输的序列视为坏例子,惩罚序列中的每个动作。具体做法是:赢的序列最大化每个动作的对数概率,输的序列最大化负的每个动作的对数概率。一般化的目标函数是:对序列中每个动作求和,用奖励R(此处+1或-1)乘以该动作的对数概率。
这基本上就是基于策略的RL,也就是第一个算法REINFORCE。具体流程:从某个可微策略π(a|s)开始(比如神经网络),随机初始化参数,然后不断循环——用策略生成动作构成一个回合,观察到奖励;对回合中的每一步,最大化目标函数J。函数中的G是序列中的奖励总和,加上折扣因子。这就是策略梯度:采样不同动作,看奖励是多少,根据奖励正负来推高或压低动作的概率。
这里ε非常重要。ε意味着什么?刚初始化时策略很差,基本给出随机动作,所以你不应该总按策略行动,有时应该随机行动——这叫探索。以ε概率随机采取动作,不管策略怎么说。随着模型逐渐训练,你会推高好动作的概率、压低坏动作的概率,策略变得更好。策略变好后,你逐渐倾向于遵循策略而非随机采样。所以ε一开始设得很高,然后慢慢减小。这就是探索(随机采样)和利用(遵循策略)的平衡。
这就是基本的策略梯度:用奖励缩放对数概率来最大化目标。奖励为正,增加动作概率;奖励为负,降低动作概率。这是最原始的版本,后来有很多改进,因为它存在几个问题。一个主要问题是方差很大。为什么?因为原始奖励本身可能意义不大。有些游戏你总是获得正奖励,你只想更多正奖励和更少正奖励的区别;有些游戏总是负奖励,你只想更接近零。所以有时原始奖励不够有意义,重要的是奖励随时间相对于滚动平均值的变化。一个重大创新是用基线来比较奖励,使用相对提升。新函数的关键是减去一个基线,基线可以是指数移动平均的奖励。减去基线极大提升了基于策略方法的稳定性。
当然,人们还探索了更好的基线,由此发展出演员-评论家方法。更好的基线将基于策略的方法和基于模型的方法结合起来了。回想我们定义了Q和V。V(s)是状态的价值——从该状态出发的长期回报;Q(s,a)是状态-动作对的价值。实际上,Q(s,a)和V(s)之间的差通常记为A(s,a),称为优势函数。优势意味着从该状态采取特定动作相比平均水平有多大的优势,同样是用长期预期回报来衡量。如果A(s,a)很大,说明我们对这个动作很满意,因为它带来更好的长期回报;如果很小或为负,则不满意。这就给出了新的估计:仍最大化序列中动作的对数概率,但用优势函数来缩放——Q(s,a)比基线V(s)好多少。这就是演员-评论家方法。
这类方法在2016到2020年间极大推动了深度强化学习研究。你需要学习两个模型:一个模型学策略(演员),给定状态学习动作分布,这就是你的策略或演员;另一个模型叫评论家,学习Q(s,a)或V(s),评估状态和动作的价值。两个函数用不同目标一起训练:评论家评估动作的好坏,演员决定策略,更新公式是策略梯度:对数概率乘以优势函数。
快讲到激动人心的部分了——这些RL方法如何与大语言模型交汇。在此之前还有几个小改进。一个是近端策略优化。之前的都是策略梯度、策略优化,后来出现了TRPO和PPO。最大区别是仍然做策略梯度,仍然最大化对数概率,但现在试图确保策略不随时间变化太大,通过限制新旧策略之间的KL散度来衡量。TRPO在2015年提出,PPO进一步近似:你不需要正式计算两个策略分布的KL散度,只需对策略梯度进行裁剪,将对数概率比限制在1-ε到1+ε之间。PPO正是今天用于对齐大语言模型的RLHF中所使用的RL方法。
这些方法的工作原理:第0步,预训练大语言模型;然后做监督微调(指令微调),收集人类撰写的问答示范,做下一个词元预测。第1步,RL对齐介入。将语言模型视为策略——给定状态(提示词和已生成的词)输出动作序列(词)。对每个提示采样多个不同回应,就像乒乓游戏那样。第2步,让人工对这些输出按质量排序(人类反馈环节)。但你不能总依赖人类标注,这无法泛化到实验室之外。第3步,训练一个奖励模型来预测和模仿人类偏好。这样即使没有人类标注的回应,也能由奖励模型打分。乒乓球例子中奖励是+1/-1,这里稍微复杂一些。第4步,使用RL,最早用的就是PPO(近端策略优化),通过微调来最大化这些奖励。最大化奖励就是用奖励乘以序列中动作的对数概率。
更具体地说,人类排序和奖励模型:提示词输入语言模型,生成文本,人类对每个句子打分(喜欢与否)。然后用这些输入和人类打分作为奖励,通过监督学习训练出奖励模型——给定没有人类真值标签的数据,恢复出人类会给出的奖励。正如David在大语言模型课提到的,给一段对话直接打8分或1.2分这样的绝对分数很难,通常更容易做比较:你更偏好这个胜过那个。所以论文中常见成对偏好的建模:用一个函数来衡量一种输出比另一种更受偏好的可能性,作为两边各自奖励的函数——这本质上是将比较型奖励与绝对奖励联系起来。所有这些都是让人类排序并学习奖励模型的方法。
在PPO中,你有演员模型(策略,即大语言模型),状态是提示词和模型目前生成的内容,动作是下一个词。有之前已训练好且冻结的奖励模型,它从人类评分中训练得到,现在直接预测人类偏好作为标量奖励(在完整模型回应的基础上)。第三个组件是价值模型,相当于评论家,用于估计V(s)——状态的价值。状态在这里是模型的部分或完整回应(词序列),输出标量价值。这几乎就是演员-评论家模型:演员生成动作(词),评论家评估生成词的价值。
如何应用RL?首先,大语言模型为每个提示生成多个回应。对每个回应运行奖励模型分配奖励,并计算优势函数——语言模型基于提示生成输出,输出通过奖励模型得到奖励R,同时价值模型给出基线值。优势就是奖励比预期基线好多少。这个A函数正是你在策略梯度中用来更新策略模型(语言模型)的项。同时,优化策略后也更新价值函数,训练更好的价值模型(评估平均词的好坏)。
这看起来相当复杂。而GRPO很大程度上简化了这一点。之前你有策略模型、参考模型、奖励模型,蓝色冻结、黄色训练。策略模型是语言模型,价值模型估计平均词有多好,奖励模型估计新词有多好。你将新词的奖励与参考模型的价值进行比较,还有KL惩罚确保模型变化不太大(TRPO/PPO中KL散度用来确保策略变化不太大)。非常复杂。
GRPO做了几点改变。首先,移除了价值模型。不再有追踪平均词好坏的价值模型,而是从策略中采样一组回应,每个都算奖励,优势直接通过这个回应在组内的相对好坏来估计。如果采样足够多组回应,组内的奖励本身就能让你计算平均值,从而知道你的奖励比平均值好多少。因此,去掉价值模型就省掉了一个需要训练的东西,大大简化了流程。
GRPO的目标函数关键在优势函数:奖励减去组内奖励的均值,除以组内奖励的标准差。关键创新在于:用一组回应计算优势和梯度更新,用简单统计量取代了需要学习的价值函数。
后来还有进一步创新,甚至放弃了奖励模型。你不必训练一个复杂的奖励模型来复制人类偏好,直接使用简单的、基于分组的验证器,比如二元检查——代码是否跑通,代码通过了多少测试用例,回答长度,或回答是否遵循特定格式。所以你看,很多创新来源于简化,而非更复杂的算法。
RL圈内很多人都在讨论这件事。很多以前做机器人RL、深度RL的人,现在都在研究用RL训练大语言模型。RL社区很多人认为GRPO极大简化了PPO。有人好奇为什么之前没人试过GRPO?这有点像REINFORCE——我们讲过的第一个算法。在REINFORCE中,你通过减去基线来更新策略,基线通常是多条轨迹的平均奖励或奖励的指数移动平均,这有助于降低方差。
理论表明,理想基线是从状态出发的总预期未来奖励,通常叫价值V(s),使用价值函数作基线就是演员-评论家方法。演员学策略,评论家学V(s)并用作基线。PPO是其稳定版本。传统REINFORCE的基线可以是当前状态的任何函数,传统上就是一批轨迹的平均奖励。GRPO的基线是在每个提示下采样的成千上万个样本上计算的,这是其新颖之处。所以从学习价值函数回归到了对多个采样提示的简单滚动平均奖励统计。
最后两个要点。DPO大家可能也见过,是PPO的另一种变体。你有偏好数据:提示词X,以及人类排序(一个回应优于另一个)。PPO的路径是:训练奖励模型反映人类评分,然后用策略梯度更新策略模型。DPO走另一条线:从相同的偏好数据开始,跳过训练奖励模型,跳过PPO,直接对偏好数据做训练——在偏好数据之上做类似监督学习的预测。细节不再展开。
关键区别:DPO计算效率更高,因为无需训练单独的奖励模型并用奖励模型做RL,计算和工程成本更低。它不需要单独的奖励模型,训练时也不需要解码在线回应(这通常是PPO最慢的部分)。PPO必须在线数据上训练,始终在刚收集的回应上训练;DPO离线训练。所以PPO可视为在线RL,DPO可视为离线RL,这是两者争论的核心。
一个简单类比:假设你要为自动驾驶汽车训练策略。你部署到车上,边开车边收集更多数据,观察奖励,根据真实在线体验更新模型——这就是在线RL。离线RL则是:你看别人在不同场景下开车的视频,不是你实际在驾驶,而是从离线数据中学习。PPO做在线RL,DPO做离线RL,这就是两者最大区别。DPO的一大吸引力在于简单得多,省去了以前需要的很多额外步骤。
时间不多了,我快速总结一些RL的训练技巧。通常用固定策略做健全性检查是好的做法——随机初始化的策略或从人类专家示范初始化的策略。RL最大的挑战之一是你正在学策略,而奖励本身和环境本身也在变化。监控散度很重要,尤其是在试图强制策略变化不太大的算法中,要确保变化平滑。
熵(entropy)代表动作的方差有多大。你希望动作一开始高方差以便探索,最终希望动作更接近只采取一个确定动作。所以一开始探索,之后利用好动作。用贪婪推演做评估,或单独调试价值函数。演员-评论家方法通常很难训练,因为你同时训练两个模型:演员(策略)和评论家(价值),两者某种程度上是相互对抗训练的,就像GAN一样难训。所以有时冻结一个训练另一个很有用。如今梯度范数裁剪也很关键。
检查优势分布。如果优势函数学得好,应该始终接近均值0、方差1的分布,因为本质上就是减去均值(基线)再除以标准差。这有助于训练。在冻结的重放缓冲区上训练,使用课程学习,警惕奖励模型崩溃。这些是总结的10条经验。