3、基础回顾:监督学习与强化学习的区别、策略与价值函数、奖励信号与回报、PPO算法核心思想

好,咱们正式开始RLHF之前,我得先带你把这些基础概念捋一遍。说实话,我见过太多同学一上来就冲PPO代码,结果调了三天三夜,loss死活不降,最后发现连“奖励”和“回报”都没分清楚。嗯,咱们不干这种傻事。

3.1 监督学习 vs 强化学习:到底差在哪?

先问个问题:你训练一个图像分类模型,和训练一个下围棋的AI,本质区别是什么?

监督学习,说白了就是“抄答案”。我给你一堆猫和狗的图片,每张都标好了“这是猫”、“这是狗”。模型的任务就是学会这个映射关系。错了我就告诉你正确答案是什么。你想想看,这像不像你上学时做选择题,老师直接给你标准答案?

强化学习就不一样了。它没有标准答案,只有一个“感觉”。比如让AI学走路,你不能告诉它“第37步要抬腿5厘米”,你只能说“走得好就给你颗糖,摔倒了就罚站”。模型得自己去试,去摸索,去总结“原来抬腿高一点不容易摔”。

我个人习惯用一个表格来对比,清晰明了:

维度 监督学习 强化学习
数据来源 人工标注的(x, y)对 与环境交互产生的轨迹
反馈形式 每个样本都有正确答案 稀疏的、延迟的奖励信号
目标 最小化预测误差 最大化累积奖励
典型场景 分类、回归、图像识别 游戏、机器人控制、对话生成
训练方式 独立同分布样本 时序依赖,当前决策影响未来

我在项目中遇到过最典型的坑是什么?有人把RLHF里的奖励模型当成监督学习来训,给每个token都打一个“正确/错误”标签。这其实不对。奖励模型学的是“偏好”,不是“对错”。说白了,它判断的是“A回答比B回答好”,而不是“A回答是对的”。

3.2 策略与价值函数:RL的两大支柱

强化学习里有两个核心概念,你搞懂了它们,RLHF就懂了一半。

策略(Policy):就是智能体的“行为准则”。给定当前状态,它告诉你该做什么动作。比如你看到棋盘上这个局面(状态),策略说“走右上角”(动作)。

策略有两种:

  • 确定性策略:状态s下,动作a是确定的。比如围棋AI,给定局面,它只输出一个落子位置。
  • 随机性策略:状态s下,输出一个动作的概率分布。比如对话模型,给定用户问题,它输出每个词的概率。

价值函数(Value Function):就是“未来收益的预测”。它回答一个问题:“我现在处于这个状态,未来能拿到多少奖励?”

价值函数也分两种:

  • 状态价值函数 V(s):从状态s开始,按照当前策略走,能拿到的期望回报。
  • 动作价值函数 Q(s, a):在状态s下执行动作a,然后按照当前策略走,能拿到的期望回报。

嗯,这里要注意一个细节。我刚开始学的时候,总觉得V和Q差不多。后来做项目才明白:V(s)评估的是“这个局面好不好”,Q(s,a)评估的是“在这个局面下,做这个动作好不好”。比如下棋,V(s)告诉你“当前局势领先”,Q(s,a)告诉你“走这一步能领先更多”。

核心关系:策略决定了智能体怎么走,价值函数告诉智能体走得好不好。两者相辅相成,缺一不可。

3.3 奖励信号与回报:别把“糖”和“幸福感”搞混

这是初学者最容易混淆的地方。我当年也栽过跟头。

奖励(Reward)是每一步环境给你的即时反馈。比如玩游戏,每吃到一个金币,+1分;每撞到一次墙,-1分。奖励是即时的、局部的。

回报(Return)是从当前时刻开始,到游戏结束,所有奖励的累积和。回报是全局的、长期的。

举个例子:你让AI写一篇作文。每一步生成一个词,奖励模型会给一个即时分数(奖励)。但最终这篇作文好不好,要看整篇文章的累积分数(回报)。

这里有个关键问题:为什么我们不直接用每一步的奖励来训练,非要算回报?

因为很多任务里,奖励是延迟的。比如下围棋,你前面走了一步看似无关紧要的棋,直到50步之后才发现这步棋决定了胜负。如果只看即时奖励,你根本不知道这步棋是好是坏。只有算回报,才能把“延迟的因果”体现出来。

我的经验:在RLHF里,奖励模型给出的分数往往比较稀疏。我曾经试过直接拿每一步的奖励去训练,结果模型学得乱七八糟。后来改成用GAE(广义优势估计)算回报,效果立竿见影。这个后面会细讲。

3.4 PPO算法核心思想:稳中求进

PPO(Proximal Policy Optimization)是目前RLHF里最主流的算法。为什么它这么火?说白了就一个字:稳。

在PPO出现之前,大家用Policy Gradient方法。这个方法有个毛病:每次更新策略的时候,步子迈大了容易扯着蛋。你可能辛辛苦苦训了一周,一次更新就把模型搞崩了。

PPO的核心思想很简单:每次更新策略的时候,不要变化太大。它通过一个“裁剪(Clipping)”机制,限制新策略和旧策略的差异。如果新策略想走得太远,PPO就会说:“慢着,先别急,咱们再看看。”

具体来说,PPO做了两件事:

  1. 重要性采样:用旧策略采样的数据来估计新策略的梯度,提高数据利用率。
  2. 裁剪目标函数:如果新旧策略的比值超出范围(比如[0.8, 1.2]),就把梯度裁剪掉,防止更新过大。

下面这张图展示了PPO的核心逻辑:

PPO算法核心流程 旧策略 π_old 与环境交互,收集轨迹 采样数据 轨迹数据 (状态, 动作, 奖励, 回报) 计算优势 优势 A GAE估计 新策略 π_new(待更新) 计算重要性采样比率 r(θ) = π_new / π_old 裁剪目标函数 L^CLIP(θ) clip(r(θ), 1-ε, 1+ε) · A → 限制更新幅度 梯度上升更新 θ

你看这个流程,其实不复杂。旧策略先跑一遍,收集数据。然后算优势函数,告诉模型“哪些动作比平均好,哪些比平均差”。接着用裁剪目标函数更新策略,确保每次只改一点点。

避坑指南:我曾经在调PPO时,把裁剪系数ε设成了0.5,结果模型更新太慢,训了三天都没收敛。后来改成0.2,效果立竿见影。ε一般取0.1~0.3之间,别太大也别太小。

最后总结一下PPO的核心公式,你记住这个就行:

L^CLIP(θ) = E_t[ min( r(θ) * A_t, clip(r(θ), 1-ε, 1+ε) * A_t ) ]

其中:
r(θ) = π_new(a|s) / π_old(a|s)  # 新旧策略比值
A_t = 优势函数估计值
ε = 裁剪系数(通常0.2)

说白了,PPO就是在说:“你想往好的方向走,可以,但步子别迈太大。如果新策略和旧策略差太多,我就把你拽回来。” 这种“稳中求进”的思路,让PPO成了RLHF里最可靠的算法之一。

我的建议:刚开始学PPO,别急着看数学推导。先跑通一个简单的demo,比如用PPO训练一个倒立摆。亲眼看到模型从“乱晃”到“稳稳站立”的过程,你对策略、价值函数、回报这些概念的理解会深刻很多。


公众号:蓝海资料掘金营,微信deep3321