前言
曾在游戏世界挥洒创意,也曾在前端和后端的浪潮间穿梭,如今,而立的我仰望AI的璀璨星空,心潮澎湃,步履不停!愿你我皆乘风破浪,逐梦星辰!
简单回顾RLHF & PPO
RLHF (Reinforcement Learning from Human Feedback) 和 PPO (Proximal Policy Optimization) 是强化学习中的两个重要概念,它们常用于训练代理系统,以便让它们在复杂环境中做出更好的决策。下面是对它们的简单介绍:
RLHF - 强化学习从人类反馈学习
RLHF 是一种基于人类反馈的强化学习方法。在这种方法中,代理并不是直接从环境中得到奖励信号,而是通过人类的反馈来调整行为。人类通过提供一些关于代理行为的反馈(比如点赞或批评),来引导代理改进其决策过程。这种方法特别适用于那些难以定义明确奖励函数的任务。
-
基本流程:
-
代理首先通过环境进行探索,产生一些行为序列。
-
然后,代理将这些行为展示给人类或使用预先设计的评分系统来获取反馈。
-
代理根据反馈调整策略,优化其未来的行为。
-
RLHF 的一个著名应用是在 GPT 等大型语言模型的训练中,通过人类评审来调整模型的输出,使其更符合人类的期望和价值观。
PPO - 近端策略优化
PPO(Proximal Policy Optimization)是一种基于策略梯度的强化学习算法,它在训练过程中优化代理的行为策略。PPO 通过在每一步更新中采取保守的更新策略,避免了策略更新过大,从而提高了学习的稳定性和效率。
-
基本原理: PPO 通过最大化一个目标函数来更新策略,其中目标函数包括:
-
旧策略的行为概率与新策略的行为概率的比值。
-
该比值的变化被限制在一个小范围内(通过剪切函数),从而避免策略更新过大导致的训练不稳定。
-
-
特点:
-
易于实现:PPO 算法相对简单且稳定,常被应用于各种强化学习任务。
-
样本效率较高:通过限制策略更新的幅度,PPO 能够更好地利用训练数据。
-
-
优点:
-
比传统的策略梯度方法更稳定。
-
能够处理连续动作空间和离散动作空间。
-
RLHF 与 PPO 结合
在许多实际应用中,RLHF 和 PPO 可以结合使用。例如,GPT 类模型训练中,代理可以通过 PPO 来学习一个合适的策略,同时通过 RLHF 进一步从人类的反馈中进行微调。这样的结合使得模型能够在复杂任务中不断优化,不仅符合环境奖励,还能符合人类的需求和期望。
简而言之:
-
RLHF 用人类的反馈来辅助强化学习过程,使得模型能更好地理解和优化行为。
-
PPO 通过稳定的策略更新来优化代理的行为策略,确保训练过程的稳定性和高效性。
这两者结合时,可以在不完备或复杂的奖励环境中,提供更加符合人类价值观的决策和行为。
✅ 一、回顾 PPO Loss 核心公式:
L(θ) = E[min(r(θ) * A, clip(r(θ), 1 - ε, 1 + ε) * A)]
其中:
r(θ) = πθ(a|s) / πθ_old(a|s)
A = advantage(优势值)
ε = 超参数(通常 0.1 ~ 0.2)
我们现在就用这个公式走一遍真实数值计算。
✅ 二、假设的数字输入(模拟一次模型行为)
我们设定以下场景:
项目 | 值 | 解释 |
---|---|---|
状态 s(prompt) | "讲一个笑话" | 当前输入 |
动作 a(生成的回复) | "有一天程序员掉进了 Bug 坑..." | 模型输出 |
πθ_old(a | s) | 0.05 |
πθ(a | s) | 0.06 |
Advantage A | +3.0 | 表示这是一个非常好的动作(好回答) |
ε(clip range) | 0.2 | 超参数,常用值 |
✅ 三、代入公式开始计算
1. 计算概率比值 r(θ)
r = πθ(a|s) / πθ_old(a|s)
= 0.06 / 0.05 = 1.2
👉 表示新模型比旧模型更倾向于这个回答(增加了 20%)
2. 计算 unclipped loss
unclipped_loss = r * A = 1.2 * 3.0 = 3.6
3. 计算 clipped loss
先 clip r 到 [1 - ε, 1 + ε] = [0.8, 1.2]
clip(r) = min(max(1.2, 0.8), 1.2) = 1.2(没被截断)
clipped_loss = clip(r) * A = 1.2 * 3.0 = 3.6
4. 最终 loss 取两者中较小值:
L = min(unclipped_loss, clipped_loss) = min(3.6, 3.6) = 3.6 ✅
✅ 四、换一种情况(r 超过 clip)
比如 πθ(a|s) = 0.08:
r = 0.08 / 0.05 = 1.6
A = 3.0
r * A = 1.6 * 3.0 = 4.8
clip(r) = min(max(1.6, 0.8), 1.2) = 1.2
clip(r) * A = 1.2 * 3.0 = 3.6
→ L = min(4.8, 3.6) = **3.6**
🔺虽然模型越来越偏向这个动作,但为了稳定,我们最多只让它提升 20%!
✅ 再来一个负优势的情况(坏动作)
| πθ_old | 0.10 | | πθ | 0.06 | | A | -2.0 |
r = 0.06 / 0.10 = 0.6
r * A = 0.6 * (-2) = -1.2
clip(r) = clip(0.6, 0.8, 1.2) = 0.8
clip(r) * A = 0.8 * (-2) = -1.6
→ L = min(-1.2, -1.6) = **-1.6**
👉 模型太不想选这个动作了,但 clip 限制不能太快降低,否则会误伤潜力动作。
✅ 五、总结
情况 | 概率比 r | Advantage A | Loss 结果 | 解读 |
---|---|---|---|---|
动作比原来好一点 | 1.2 | 3.0 | 3.6 | 允许优化 |
动作太偏离原来 | 1.6 | 3.0 | 3.6(被 clip) | 限制更新,防止过拟合 |
坏动作 | 0.6 | -2.0 | -1.6 | 惩罚,但不能惩罚太狠 |