一、强化学习是在干啥?

想象你是一个在玩一个新游戏的玩家,你不知道怎么做才最好,只能靠“试试看”,如果做对了有奖励,做错了被惩罚。你想通过不断尝试,学会一套最好的行为方式,让自己得分最高(或更安全、赢得游戏)。

  • 强化学习的核心组成部分(5个要素)

    名称 说明
    Agent(智能体) 学习和决策的主体,例如一个机器人或游戏玩家。
    Environment(环境) 智能体交互的外部世界,比如迷宫、棋盘、市场等。
    State(状态)s 环境当前的情况或描述,比如棋盘的布局、机器人的位置等。
    Action(动作)a 智能体可以执行的操作,比如向左移动、跳跃、购买股票等。
    Reward(奖励)r 智能体每次行动后环境返回的分数,表示好坏。例如赢一局得+1,输得-1。

    在这里插入图片描述

  • 我们通过玩游戏来举例子,从上图来进行演示,强化学习是一种让智能体(agent)通过与环境交互、不断试错来学习决策策略的方法。agent 就像是玩家(马里奥),它在游戏中根据当前的状态选择动作,环境则根据这个动作返回新的状态(state)奖励(reward)。agent 的目标是不断尝试,逐步学会一种策略,使它在游戏中获得尽可能高的累计奖励。这个过程就像玩家不断练习游戏技巧,从失败中学习,最终掌握通关的方法。

  • 交互过程(马尔可夫决策过程)

    根据上述有关马里奥游戏的讲解,我们可以将强化学习建模成一个马尔可夫决策过程(Markov Decision Process, MDP),在时间步 ttt

    1. Agent 观察当前状态 sts_tst
    2. Agent 选择动作 ata_tat
    3. 环境根据动作给出新状态 st+1s_{t+1}st+1 和奖励 rtr_trt
    4. Agent 更新策略(或值函数)以更好地决策
    5. 重复上述步骤直到终止
  • 强化学习的目标是什么?

  • 智能体(Agent)通过与环境交互,学习一个策略 π(a∣s)\pi(a|s)π(as),使得获得的长期累计奖励最大

    即:

    max⁡πEπ[∑t=0∞γtrt] \max_\pi \mathbb{E}_{\pi} \left[ \sum_{t=0}^\infty \gamma^t r_t \right] πmaxEπ[t=0γtrt]

    其中:

    • π(a∣s)\pi(a|s)π(as):策略函数,给定状态下选择动作的概率;
    • rtr_trt:在 t 时刻获得的奖励;
    • γ∈[0,1]\gamma \in [0,1]γ[0,1]:折扣因子,用来平衡“现在奖励”与“将来奖励”,现在的点附近的奖励对rrr的影响最大,将来的奖励对现在有一定的衰减。

二、如何让长期累计奖励最大

我们这里讲三种方法,基于值的方法基于策略的方法两者结合的方法


  • 🤖 基于值的方法(value-based):想象你在迷宫里,每个格子都可以向上、下、左、右走,你不知道哪条路最好。于是给每个格子每个方向打个分数,这个分数表示你走这步之后未来可能会得到多少奖励。然后你每次都选分数最高的方向走,这就是 基于值的方法(value-based)

    • 对应到算法上:这个“分数”就是 Q(s,a)Q(s, a)Q(s,a),表示“在状态 s 选择动作 a 的预期得分”;
    • 最常见的算法叫 Q-learning 或 DQN。
    • 如果你可以无穷多种选择(比如控制机器人的转向角度是 0.1° ~ 359.9°),是一个连续的值,那就说明:每一个动作都要打分?那也太复杂了!

  • 🤖基于策略的方法(policy-based): 不用每次都去算值了,我直接学一套行为习惯:在不同情况怎么行动比较好。比如你学到了: 路口看到红灯就刹车; 前方没有车就加速;看到绿灯就直行。
    这就是一套策略,它告诉你:在某种情境下,做什么动作是最靠谱的。这就是 基于策略的方法(policy-based),直接学一个策略函数 π(a∣s)\pi(a|s)π(as),输入是状态,输出是动作(可以是概率分布)

  • 🤖结合两种方法 Actor-Critic:你可能想如果我既想学一套风格,又想有个“参谋”帮我打分,岂不是更好?这就是 Actor-Critic 方法

    • Actor:负责做决定(策略);
    • Critic:负责打分、判断这决定好不好(值函数);
    • 两者互相配合,走得更稳、学得更快,这类方法的代表就是我们后面要讲的 PPO算法

📘 1.基于值的方法(Value-Based)

✅ 代表算法:

  • Q-Learning
  • Deep Q-Network(DQN)
  • SARSA

🌟 核心思路:

学习一个动作价值函数 Q(s,a)Q(s,a)Q(s,a),表示在状态 sss 下采取动作 aaa 后,未来能够获得的总期望奖励:

Q(s,a)=E[∑t=0∞γtrt∣s0=s,a0=a] Q(s,a) = \mathbb{E} \left[ \sum_{t=0}^\infty \gamma^t r_t \mid s_0=s, a_0=a \right] Q(s,a)=E[t=0γtrts0=s,a0=a]

策略是间接获得的

  • π(s)=arg⁡max⁡aQ(s,a)\pi(s) = \arg\max_a Q(s,a)π(s)=argmaxaQ(s,a)

也就是说:动作就是“价值最大的动作”,在价值迭代算法中,只进行一轮的策略评估,然后直接根据更新后的价值进行策略评估。

🔁 Q-Learning 更新公式(表格法):

Q(s,a)←Q(s,a)+α[r+γmax⁡a′Q(s′,a′)−Q(s,a)] Q(s,a) \leftarrow Q(s,a) + \alpha \left[ r + \gamma \max_{a'} Q(s',a') - Q(s,a) \right] Q(s,a)Q(s,a)+α[r+γamaxQ(s,a)Q(s,a)]

  • α\alphaα:学习率
  • γ\gammaγ:折扣因子

🧠 缺点:

  • 动作空间太大/连续时难以处理
  • 策略不易直接优化(无法表达概率策略);
  • 训练不稳定(如 DQN 时 Q 函数易发散);

📗 2.基于策略的方法(Policy-Based)

✅ 代表算法:

  • REINFORCE(策略梯度)
  • PPO(Proximal Policy Optimization)
  • TRPO(Trust Region Policy Optimization)

🌟 核心思路:

直接建模策略函数 πθ(a∣s)\pi_\theta(a|s)πθ(as),目标是最大化累计期望回报:

J(θ)=Eπθ[∑t=0Trt] J(\theta) = \mathbb{E}_{\pi_\theta} \left[ \sum_{t=0}^{T} r_t \right] J(θ)=Eπθ[t=0Trt]

🔧 策略梯度定理:

∇θJ(θ)=E[∇θlog⁡πθ(at∣st)⋅A^t] \nabla_\theta J(\theta) = \mathbb{E} \left[ \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot \hat{A}_t \right] θJ(θ)=E[θlogπθ(atst)A^t]

  • 用样本估计这个梯度,再通过优化器(如 Adam)优化参数 θ。

🧠 优点:

  • 可直接用于连续动作空间(如机器人控制);
  • 可学习随机策略,适合不确定性强的任务;
  • 容易和深度学习结合,输出策略分布;

😕 缺点:

  • 收敛慢;
  • 高方差(策略梯度估计);
  • 易陷入局部最优;

🔀 3.Actor-Critic:融合两者优点

✅ 代表算法:

  • A2C(Advantage Actor Critic)
  • A3C(异步)
  • PPO(可视为 actor-critic 的一个变种)

🎬 思想:

策略函数值函数结合:

  • Actor:输出策略 πθ(a∣s)\pi_\theta(a|s)πθ(as),选择动作
  • Critic:输出状态值 Vπ(s)V^\pi(s)Vπ(s),评价动作好坏

用值函数提供的优势函数 A(s,a)A(s,a)A(s,a)指导策略优化,减少方差,提高收敛速度。


三、PPO算法

PPO 的核心公式讲解

PPO 的优化目标函数为:

LCLIP(θ)=Et[min⁡(rt(θ)A^t, clip(rt(θ),1−ϵ,1+ϵ)A^t)] L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min \left( r_t(\theta) \hat{A}_t, \ \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t \right) \right] LCLIP(θ)=Et[min(rt(θ)A^t, clip(rt(θ),1ϵ,1+ϵ)A^t)]

下面,我们一个一个解释:


1. 什么是 rt(θ)r_t(\theta)rt(θ)

这是新旧策略的比值:

rt(θ)=πθ(at∣st)πθold(at∣st) r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} rt(θ)=πθold(atst)πθ(atst)

  • πθ\pi_{\theta}πθ:当前的策略参数;
  • πθold\pi_{\theta_{old}}πθold:之前的策略参数;
  • ata_tat:在时间 t 做出的动作;
  • sts_tst:当前状态。

这个比值告诉我们:新策略比旧策略更倾向于选择动作 ata_tat 的程度。


2. 什么是 A^t\hat{A}_tA^t

这是优势函数(Advantage),表示某个动作比平均水平好多少:

A^t=Q(st,at)−V(st) \hat{A}_t = Q(s_t, a_t) - V(s_t) A^t=Q(st,at)V(st)

  • 如果 A^t>0\hat{A}_t > 0A^t>0,说明这个动作是个好动作;

  • 如果 A^t<0\hat{A}_t < 0A^t<0,说明这个动作是个坏动作。

  • V(st)V(s_t)V(st)是回报的期望

    • 但是,这样我们需要训练两个函数,因此有GAE,Generalized Advantage Estimation,广义优势估计方法,GAE 是策略梯度中用于估计 Advantage 的方法。
    • Qπ(s,a)Q^\pi(s,a)Qπ(s,a)Vπ(s)V^\pi(s)Vπ(s) 都是关于未来长期回报的期望,它们在环境中不是直接可观测的、只能通过采样估计,且估计误差大

GAE,Generalized Advantage Estimation,广义优势估计方法

  • 一步 Advantage 的近似(TD 误差):

    我们不能直接得到 Aπ(s,a)A^\pi(s,a)Aπ(s,a),所以尝试用 TD 误差来近似:

    δt=rt+γV(st+1)−V(st) \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) δt=rt+γV(st+1)V(st)

    这个就是我们说的一步 TD 误差,也可以写成:

    δt≈At \delta_t \approx A_t δtAt

    但这个只利用了一步信息,可能方差大,我们希望更稳定的估计,所以考虑多步回报:

      • 1-step TD advantage:

      A^t(1)=δt \hat{A}_t^{(1)} = \delta_t A^t(1)=δt

      • 2-step TD advantage:

      A^t(2)=δt+γδt+1 \hat{A}_t^{(2)} = \delta_t + \gamma \delta_{t+1} A^t(2)=δt+γδt+1

      • 3-step TD advantage:

      A^t(3)=δt+γδt+1+γ2δt+2 \hat{A}_t^{(3)} = \delta_t + \gamma \delta_{t+1} + \gamma^2 \delta_{t+2} A^t(3)=δt+γδt+1+γ2δt+2

      • k-step TD Advantage:

      A^t(k)=∑l=0k−1γlδt+l \hat{A}_t^{(k)} = \sum_{l=0}^{k-1} \gamma^l \delta_{t+l} A^t(k)=l=0k1γlδt+l

      这个越多步,越接近蒙特卡洛估计(低偏差,高方差)。

      将所有这些不同步数的 Advantage 用指数衰减加权求和:

A^tGAE(γ,λ)=∑l=0∞(γλ)lδt+l \hat{A}_t^{\text{GAE}(\gamma, \lambda)} = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l} A^tGAE(γ,λ)=l=0(γλ)lδt+l

  • 注意:这里的衰减因子是 γλ\gamma \lambdaγλ,其中:

    • γ\gammaγ:未来奖励的折扣因子
    • λ\lambdaλ:控制偏差/方差的因子(越接近1越偏向多步)

    这个估计叫广义优势估计(Generalized Advantage Estimation)


3. 为什么要用 clip 函数?

clip 是为了防止策略更新太大:

clip(rt,1−ϵ,1+ϵ) \text{clip}(r_t, 1 - \epsilon, 1 + \epsilon) clip(rt,1ϵ,1+ϵ)

比如说设 ϵ=0.2\epsilon = 0.2ϵ=0.2,那么策略的更新只能在 [0.8,1.2][0.8, 1.2][0.8,1.2] 范围内,超过这个范围就被“剪掉”了。

举例:

  • 如果 A^t>0\hat{A}_t > 0A^t>0,策略会鼓励增加 rtr_trt,但最多只能涨到 1.2;
  • 如果 A^t<0\hat{A}_t < 0A^t<0,策略会压低 rtr_trt,但不能低于 0.8。

这就是 PPO 的“近端”本质。


🌟 PPO 训练流程(简洁版)

  1. 初始化策略 πθ\pi_{\theta}πθ 和值函数 VϕV_{\phi}Vϕ
  2. 用旧策略与环境交互,收集一批数据 (st,at,rt,st+1)(s_t, a_t, r_t, s_{t+1})(st,at,rt,st+1)
  3. 估算优势值 A^t\hat{A}_tA^t
  4. 构造 PPO 的目标函数并优化策略
  5. 更新值函数 VϕV_{\phi}Vϕ
  6. 将新策略设为旧策略,重复第 2 步

三、PPO与RHLF

PPO(Proximal Policy Optimization,近端策略优化)是目前强化学习中最常用、最稳定、效果最好的策略梯度方法之一,尤其在大模型(如ChatGPT、GPT-4 等语言模型)的训练中被广泛应用,用于强化学习微调(Reinforcement Learning from Human Feedback,简称 RLHF)的阶段。
在这里插入图片描述
我们一共需要四个模型:

序号 模型名称 模型作用 输入 输出
1️⃣ 基准模型(Initial Model) 预训练语言模型,用作起点或对照参考 用户 Prompt 回答文本
2️⃣ 训练模型(SFT Model) 通过人类标注数据进行监督微调,提高模型对齐能力,不能和基准模型相差太大 用户 Prompt 高质量回答文本
3️⃣ 奖励模型(Reward Model,RM) 评估多个回答的优劣,用人类偏好训练得到 用户 Prompt + 回答文本(多个) 奖励分数(实数,如 1.5、-0.7)
4️⃣ 状态价值模型(Value Model) 估计当前策略在给定状态下的期望长期回报,用于计算 Advantage 状态(如 Prompt + 回答) 状态值估计 V(s)V(s)V(s),标量也是一个分数

RLHF 训练流程详解

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

📌 第 1 步:监督微调(Supervised Fine-Tuning, SFT)

  • 目的:利用高质量人类数据让模型学会“合理地回答问题”
  • 输入:Prompt(提问)+ 优质回答(人工标注)
  • 训练目标:最小化交叉熵损失,提升回答质量
  • 输出:SFT 模型,作为初始策略(Actor

📌 第 2 步:奖励模型训练(Training the Reward Model)

  • 目的:学习如何比较多个回答的优劣(对齐人类偏好)

  • 数据:Prompt + 多个回答 + 人类偏好标签(如哪个更好

  • 损失函数:排序损失(Pairwise loss):

    L=−log⁡(erpreferrederpreferred+erother) L = -\log \left( \frac{e^{r_{\text{preferred}}}}{e^{r_{\text{preferred}}} + e^{r_{\text{other}}}} \right) L=log(erpreferred+erothererpreferred)

  • 输出:训练好的奖励模型 RM,输入回答可输出一个分数

📌 第 3 步:强化学习优化(如 PPO)

  • 目的:用奖励模型指导 SFT 策略,使其产生更对齐人类偏好的回答

  • 步骤

  • 1.用当前策略模型(Actor)生成回答
    2.奖励模型对回答打分(得分为 rrr

    3.状态价值模型估值 V(s)V(s)V(s)

    4.计算 Advantage(如用 GAE):

    At=rt+γV(st+1)−V(st) A_t = r_t + \gamma V(s_{t+1}) - V(s_t) At=rt+γV(st+1)V(st)

    1. 使用 PPO 策略梯度优化目标更新策略
    • 损失函数(PPO Clip)

      LPPO=Et[min⁡(rt(θ)At, clip(rt(θ),1−ϵ,1+ϵ)At)] L^{\text{PPO}} = \mathbb{E}_t \left[ \min\left( r_t(\theta) A_t, \ \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) A_t \right) \right] LPPO=Et[min(rt(θ)At, clip(rt(θ),1ϵ,1+ϵ)At)]

      其中,rt(θ)=πθ(at∣st)πθold(at∣st)r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)}rt(θ)=πθold(atst)πθ(atst),对比与我们之前提到的基准模型

  • 输出强化学习后的模型,称为 RLHF 模型(策略优化后)

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐