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做了两件事:
- 重要性采样:用旧策略采样的数据来估计新策略的梯度,提高数据利用率。
- 裁剪目标函数:如果新旧策略的比值超出范围(比如[0.8, 1.2]),就把梯度裁剪掉,防止更新过大。
下面这张图展示了PPO的核心逻辑:
你看这个流程,其实不复杂。旧策略先跑一遍,收集数据。然后算优势函数,告诉模型“哪些动作比平均好,哪些比平均差”。接着用裁剪目标函数更新策略,确保每次只改一点点。
避坑指南:我曾经在调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