小白也能看懂的RL-PPO

news/2025/10/30 22:22:55/文章来源:https://www.cnblogs.com/aifrontier/p/19178250

原文链接:https://mp.weixin.qq.com/s/cx3qY42Lp0L3RaSOgsH77A

1. 强化学习基本概念

强化学习(Reinforcement Learning, RL)作为机器学习的重要分支,目标是让智能体(agent)与环境(environment)不断交互,学习任意环境状态下的最优行为策略(policy),最终实现期望累积回报(cumulative reward)的最大化。形式上,可通过价值函数(Value Function)或动作价值函数(Q 函数)迭代优化达成最大化累积回报。

为了更好的说明什么是强化学习,以训练小狗学会坐下举例,当小狗听到主人"坐下" 的命令后坐下,小狗可以执行的动作是"坐下"、"地上打滚"、"奔跑"。如果小狗做对了,主任就给小狗骨头作为奖励,若小狗不执行"坐下",没有奖励。 这个过程中,智能体(小狗)通过与环境(人和骨头)进行动作(小狗的动作"坐下"、"地上打滚"、"奔跑")交互,不断尝试得到反馈(有骨头或没有骨头),最终完成强化学习过程,即听到主人"坐下"口令时执行坐下动作。

1

1.1 强化学习中的关键要素

  • 智能体(agent):行动的 "主角"

    完成某个特定任务的 "学习者" 或 "执行者",可主动完成特定动作、接受环境反馈,核心任务是 "学会做对的事",比如想学会走迷宫的机器人、玩游戏的 AI 角色。

  • 环境(environment):智能体所处的 "世界"

    智能体活动的场景,比如迷宫的布局、游戏的地图、城市的交通网络;环境会对智能体的执行动作作出回应,比如机器人碰到墙壁(环境反馈 "撞墙了")、AI 角色打赢敌人(环境反馈 "过关了")。

  • 状态 (State)\(s \in S\) : 决策的 "依据来源"

    智能体在某一时刻对所处环境的 "快照",是它做决策的核心依据,智能体不会凭空做动作,全靠 “状态” 判断局势。比如小狗学坐下过程,状态是 "听到主人命令 / 没听到命令"、"当前站立 / 已坐下"。

  • 动作 (Action) \(a \in A\):决策的 "执行输出"

    智能体可以采取的操作,如走一步棋或机器人移动一个关节角度,在小狗学坐下过程中,动作为"坐下"、"地上打滚"、"奔跑"。

  • 行为策略(policy)\(\pi_\theta\) :智能体的 "行动准则"

    智能体的 "行为习惯" 或 "决策逻辑",比如 "遇到岔路就走左边"、 "敌人靠近就反击"。策略会随着学习不断优化,从 "瞎蒙乱猜" 慢慢变成 "精准决策"。策略分成两种:确定性策略和随机性策略。我们用 \(\theta\) 表示策略的参数。

    • 确定性策略: \(a_t = \mu_\theta(s_t)\),智能体在状态 \(s_t\)下,确定地执行 \(a_t\)
    • 随机性策略: \(a_t \sim \pi_\theta(.|s_t)\),智能体在 \(s_t\)下,其可能执行的动作服从概率分布 \(\pi_\theta(.|s_t)\) 。也就是此时智能体是以一定概率执行某个动作 \(a_t\)
  • 折扣因子(Discount Factor)\(\gamma\):用于平衡当前奖励和未来奖励的重要性,数值通常在 (0, 1] 之间。

  • 奖励(Reward): 环境的 "反馈信号"

    奖励由当前状态、已经执行的行动和下一步的状态共同决定。

    • 单步奖励: \(r_t = R(s_t, a_t, s_{t+1})\),奖励和策略 \(\pi_\theta\)无关,用于评估当前动作的好坏,指导智能体的动作选择。
    • T步累积奖励: \(R(\tau)= \sum_{t=0}^{t=T-1} r_t\)。T步累积奖励等于一条运动轨迹的单步奖励的累加。
    • 折扣奖励: \(R(\tau)= \sum_{t=0}^{\infty} r_t\),这里 \(\gamma \in (0, 1)\),衡量短期与长期奖励的重要性, 越接近 1,越重视未来奖励。

    这里的单步激励 \(r_t\) 属于即时激励,T步累积奖励和折扣奖励属于累积回报。

  • 累积回报(cumulative reward)\(R(\tau)\):智能体的 "得分目标"

    环境给智能体的 "奖惩信号",比如游戏里的分数、完成任务的奖金。"累积" 意味着关注长期收益最大化 ,如通关获得的所有金币或奖金。

  • 轨迹(Trajectory)\(\tau\)智能体与环境交互的 "历程记录"

    在强化学习中,智能体从环境的初始状态 \(s_0\) 开始,与环境交互直至到达终止状态得到的state、action和reward序列,构成了一条完整的运行轨迹,也被称为episodes或者rollouts。数学表达式为\(\tau = (s_0, a_0, r_0, ..., s_{T-1}, a_{T-1}, r_{T-1})\) 其中, T 表示回合(Episode)结束的时间步。在某些不定长的任务中,可能是一个随机值。

  • 状态转移 \(s_{t+1} \sim P(.|s_t, a_t)\): 智能体与环境互动的 "动态轨迹"

    从当前状态 \(s_t\) 采取动作 \(a_t\) 后,会以一定的概率转移到下一个状态 \(s_{t+1}\),即 \(s_{t+1} \sim P(.|s_t, a_t)\)

  • 价值函数(Value Function)与动作价值函数(Q 函数):智能体的 "决策参考表 "

    作为智能体判断 “是否执行某个动作” 的参考依据,以量化的形式给出"某个状态或动作好不好",详细内容见下文。

    • 价值函数:评估"当前状态有多好",比如 "在迷宫的这个位置,距离出口还有多近"。
    • 动作价值函数(Q 函数):评估 "在当前状态下,做某个动作有多划算",比如 "现在走左边能拿到 10 分,走右边只能拿 2 分"。

1.2 强化学习的优化目标

智能体的目标是最大化初始状态的期望累计奖励:

\[argmax_{\pi_\theta} J({\pi_\theta}) = E_{\tau \sim {\pi_\theta}}[R(\tau)] = \Sigma_{\tau} R(\tau) P(\tau | {\pi_\theta}) \]

各个字符定义如下:

  • \(R(\tau)\)\(\pi_\theta\) ****、\(\tau\) 的含义已在 【强化学习中的关键要素】小节介绍

  • \(P(\tau | {\pi_\theta})\): 在 \(\pi_\theta\) 策略下,产出轨迹 \(\tau\) 的概率,似然表示为

    image

  • \(\tau \sim \pi_\theta\): 表示轨迹 \(\tau\) 是在策略 \(\pi_\theta\) ****策略下产生的,具体的含义如下

    • 随机性策略: \(a_t \sim \pi_\theta(.|s_t)\)
    • 智能体的环境状态所服从的分布: \(s_0 \sim \rho_0(.)\)
    • 状态转移服从的分布: \(s_{t+1} \sim P(.|s_t, a_t)\)
    • 单步奖励: \(r_t = R(s_t, a_t, s_{t+1})\)

\(J({\pi_\theta})\)表示累积回报期望,并非某个具体的回报值。这是因为策略 \(\pi_\theta(.|s_t)\)和状态转移 \(s_{t+1} \sim P(.|s_t, a_t)\) 具有随机性,即对于某个固定策略,让其与环境多次交互,每次获得的轨迹序列会不同,所以 \(R(\tau)\) 也会是个随机变量,因此采用期望的形式表示。简言之,在足够采集样本下,对某个策略的评测结果才更加真实、可靠,参见公式下文中的(10)。

对于 \(argmax_{\pi_\theta} J({\pi_\theta})\) 的梯度计算如下

\[\begin{align} \nabla J({\pi_\theta}) &= \Sigma_{\tau} R(\tau) \nabla P(\tau | {\pi_\theta}) \\&= \Sigma_{\tau} R(\tau) P(\tau | {\pi_\theta}) \frac {\nabla P(\tau | {\pi_\theta})} {P(\tau | {\pi_\theta})} \\&= \Sigma_{\tau} R(\tau) P(\tau | {\pi_\theta}) \nabla log(P(\tau | {\pi_\theta})) \\&= E_{\tau \sim {\pi_\theta}} [ R(\tau)\nabla log(P(\tau | {\pi_\theta})) ] \end{align}\]

其中,公式(2)~(3)行,由于 \(\nabla log(f(x)) = \frac {df(x)} {f(x)}\)

\(P(\tau | {\pi_\theta})\) 的似然表示带入 \(\nabla J({\pi_\theta}\) 公式中, 如下

\[\begin{align} \nabla log(P(\tau | {\pi_\theta})) ] &= \nabla[log\rho_0(s_0) + \Sigma_{t=0}^{T-1} logP(s_{t+1} | s_t, a_t) + \Sigma_{t=0}^{T-1}log\pi_\theta(a_t|s_t)] \\ &= \Sigma_{t=0}^{T-1} \nabla log\pi_\theta(a_t|s_t) \end{align} \]

被删除的两项与所求的策略梯度无关,最终的策略梯度为

\[\begin{align} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [ R(\tau)\nabla log(P(\tau | {\pi_\theta}))] \\ &= E_{\tau \sim {\pi_\theta}} [\Sigma_{t=0}^{T-1} R(\tau) \nabla log\pi_\theta(a_t|s_t)]\end {align} \]

对公式(8)的直观理解,当某条轨迹的累积期望 \(R(\tau)\) 越高,动作 \(a_t\) 贡献的梯度应该越多,即 \(a_t\) 被认为是一个好动作,应该提升 \(\pi_\theta(a_t|s_t)\) 执行的概率。

如本小节开头所说,实际应用中我们会采样多条轨迹保证累积回报期望的真实可靠,假设采样了N条轨迹,每条轨迹的时间步数为 \(T_n\),对应的优化目标函数为

\[\begin{align} J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [\Sigma_{t=0}^{T-1} R(\tau) log\pi_\theta(a_t|s_t)] \\ &\approx \frac {1} {N} \Sigma_{n=0}^N {\Sigma_{t=0}^{T_{n}-1} R(\tau_n) log\pi_\theta(a_t|s_t)}\end {align} \]

对应的梯度函数为

\[\begin{align} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [\Sigma_{t=0}^{T-1} R(\tau) \nabla log\pi_\theta(a_t|s_t)] \\ &\approx \frac {1} {N} \Sigma_{n=0}^N {\Sigma_{t=0}^{T_{n}-1} R(\tau_n) \nabla log\pi_\theta(a_t|s_t)}\end {align} \]

1.3 价值函数

公式(11)和(12)是用整条轨迹的累积回报 \(R(\tau)\) 去衡量单步动作 \(\pi_\theta(a_|s_t)\) 的贡献,其合理性值得进一步探讨,比如

  • 一条轨迹累积回报很高,并不能代表轨迹中的每一个动作都是最优的。
  • 不能完全忽视轨迹的最终回报,因为最终的优化目标是让轨迹回报最优。
  • 需要的是一种能够平衡【单步回报】和【轨迹整体回报】的价值函数形式,

因此,各种其他形式的价值衡量函数便产生了,如下

2

本文主要讨论PPO算法,重点关注动作价值函数 \(Q^\pi(s_t, a_t)\)优势函数 \(A^\pi(s_t, a_t)\)状态价值的TD error \(r_t + V^\pi(s_{t+1}) - V^\pi(s_t)\),我们先对其中 \(Q^\pi(s_t, a_t)\)\(V^\pi(s_t)\)做介绍。注意,这里 \(G_t\) 采用【累积折扣奖励】来定义单步(也就是某个t时刻)的回报,而非 \(R(\tau)\),两者的区别在于计算累积回报的起始时刻不同, \(G_t\) 是从t时刻开始, \(R(\tau)\) 从0时刻开始。 定义为\(G_t = r_t + \gamma r_{t+1} + ... + \gamma^{T-t-1} r_t\)

(1)状态值函数 (Value Function)

\[\begin{align} V^\pi(s_t) = E_\pi[G_t | s_t] \end{align} \]

表示从状态 \(s_t\) 开始,按策略 \(\pi\) 执行后,期望能够获得的累计奖励。以训练小狗学会坐下举例,公式(13)的意思为小狗光是听到"坐下"这个指令,平均能拿到多少骨头。假设小狗一共练过 100 次坐下命令,不管它做什么动作("坐下"、"地上打滚"、"奔跑"),最终平均可以得到 0.6 个骨头(有时给 1 个,有时不给),用状态价值函数表示即 \(V("坐下")=0.6\)。这就像一个躺平狗生小狗的命运,完全不遵从主人的指令,能够得到多少骨头。

对公式(13)展开,以便更好理解 \(V^\pi(s_t)\) 的计算过程

\[\begin{align} V^\pi(s_t) &= E_\pi[G_t | s_t] \\ &= E_\pi[\Sigma_{t=0}^{T-t} \gamma^t r_t | s_t] \\ &= E_\pi[r_t + \gamma(r_{t+1} + \gamma r_{t+2} + ...) | s_t] \\ &= E_\pi[r_t | s_t] + E_\pi[\gamma G_{t+1} | s_t] \\ &= E_\pi[r_t | s_t] + E_\pi[\gamma V^\pi(s_{t+1}) | s_t] \\ &= \sum_{\mathclap{a_t \in A}} \pi(a_t | s_t) \sum_{\mathclap{s_{t+1} \in S}} P(s_{t+1} | s_t, a_t)R(s_t, a_t, s_{t+1}) + \sum_{\mathclap{a_t \in A}} \pi(a_t | s_t) \sum_{\mathclap{s_{t+1} \in S}} P(s_{t+1} | s_t, a_t)\gamma V^\pi(s_{t+1}) \\ &= \sum_{\mathclap{a_t \in A}} \pi(a_t | s_t)\sum_{\mathclap{s_{t+1} \in S}} P(s_{t+1} | s_t, a_t)[r_t + \gamma V^\pi(s_{t+1})]\\ &= E_{{a_t} \sim \pi(.|s_t)}[E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V_{\pi}(s_{t+1})]] \end{align}\]

(2)动作价值函数 (Q Function)

\[\begin{align} Q^\pi(s_t, a_t) = E_\pi (G_t | s_t, a_t) \end{align} \]

表示对于策略 \(\pi\),在状态 \(s_t\) 选择动作 \(a_t\) 后,期望获得的累计奖励。小狗可以会各种动作,例如"坐下"、"地上打滚"、"奔跑"。动作价值函数的含义就是,在接收到"坐下"这个指令后,如果小狗选了"坐下"、"地上打滚"、"奔跑"中的某个动作,平均能拿到多少骨头。举例说明如下,

  • \(a_1 = 坐下,Q("坐下","坐下")=0.9\),小狗在听到这个指令后,主人会给它最爱吃的骨头,随着训练次数的增加,小狗会逐渐学会这个动作
  • \(a_2 = 地上打滚,Q("坐下","地上打滚")=0.1\),主人看到小狗地上打滚,可能会置之不理。
  • \(a_3 = 奔跑,Q("坐下","奔跑")=0.05\),可能最近对主人有所不满,听到主人的声音就想逃离。

同样的,对公式(22)进行展开

\[\begin{align} Q^\pi(s_t, a_t) &= E_\pi (G_t | s_t, a_t) \\ &= E_\pi[\Sigma_{t=0}^{T-t} \gamma^t r_t | s_t, a_t] \\ &= E_\pi[r_t | s_t, a_t] + E_\pi[\gamma V^\pi(s_{t+1}) | s_t, a_t] \\ &= \sum_{\mathclap{s_{t+1} \in S }} P(s_{t+1} |s_t, a_t)R(s_t, a_t, s_{t+1}) + \gamma \sum_{\mathclap{s_{t+1} \in S }} P(s_{t+1} |s_t, a_t)V^\pi( s_{t+1}) \\ &= E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V_{\pi}(s_{t+1})]] \end{align} \]

(3)动作价值函数和状态价值函数的关系

由状态价值函数的公式

\[\begin{align} V^\pi(s_t) &= E_{{a_t} \sim \pi(.|s_t)}[E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V_{\pi}(s_{t+1})]] \end{align}\]

及动作价值函数的公式

\[\begin{align} Q^\pi(s_t, a_t) &= E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V_{\pi}(s_{t+1})] \end{align} \]

可得两者得关系

\[\begin{align} V^\pi(s_t) &= E_{{a_t} \sim \pi(.|s_t, a_t)}[Q^\pi(s_t, a_t) ] \\ &= \sum_{\mathclap{a_t \in A }} \pi(a_t | s_t) Q^\pi(s_t, a_t) \end{align}\]

从公式(30)和(31)可得出一个直观的结论:状态价值函数 \(V^\pi(s_t)\) 是动作价值函数的期望。

(4)优势函数 (Advantage)

本小节,我们将按照为什么会有优势函数、优势函数的定义与理解、优势函数与 TD error的关系这个思路来介绍。

  • 为什么会有优势函数

    假设在某次采样中,通过\(Q^\pi(s_t, a_t)\)\(V^\pi(s_t)\)这类价值函数所估计的t时刻累积奖励很高,并非意味着策略 \(\pi_\theta(a_t|s_t)\) 所选择的动作 \(a_t\) 一定是最优的,并没有体现比其他动作价值大多少,一种合适的方式,采用当前动作 \(a_t\) 比其他动作好多少这样的相对概念。我们可以计算【执行动作\(a_t\) 的价值 - 执行其他工作的价值】,作为衡量在状态 \(s_t\)下,执行动作\(a_t\) 比其他动作好多少。这个差值即为"优势"(advantage),"优势"越大时,说明动作\(a_t\) 比其他动作更好,需要提升这个动作的概率 \(\pi_\theta(a_t|s_t)\)

  • 优势函数的定义与理解

\[\begin{align} A^\pi(s_t, a_t) = Q^\pi(s_t, a_t) - V^\pi(s_t) \end{align} \]

公式(32)衡量在状态 \(s_t\)下执行动作 \(a_t\) 比当前策略平均水平 \(V^\pi(s)\) 好多少。它衡量"在当前状态下,做这个动作比随便玩玩(按策略平均)多赚多少骨头"。

我们仍以训练小狗坐下为例,\(V("坐下")=0.6\)表示在"坐下"这个场景下,执行所有动作的平均累积激励,对于"坐下"这个动作,价值为 \(Q("坐下","坐下")=0.9\),优势值为\(A("坐下","坐下")=Q("坐下","坐下") - V("坐下") = 0.9 -0.6 = 0.3\),比平均水平多0.3个骨头,对于"地上打滚",\(A("坐下","地上打滚")=Q("坐下","地上打滚") - V("坐下") = 0.1 -0.6 = -0.5\),对于"奔跑",\(A("坐下","奔跑")=Q("坐下","奔跑") - V("坐下") = 0.05 -0.6 = -0.55\)。因此,小狗为了获取更多的骨头,自然会选择优势更大的动作去执行。

  • 优势函数与TD error的关系

在前面的推导中有

\[ Q^\pi(s_t, a_t) = E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V_{\pi}(s_{t+1})]\]

对于\(V^\pi(s_t)\) ,可以重新改写成:

\(V^\pi(s_t) = E_{s_{t+1} \sim P(.|s_t, a_t)}[ V_{\pi}(s_{t})]\)

之所以这样改写,是因为\(V^\pi(s_t)\)只依赖于这个确定的 \(s_t\) ,而与 \(s_{t+1}\) 无关。

根据上面两个式子,优势函数的表达式可以写成:

\[\begin{align} A^\pi(s_t, a_t) &= Q^\pi(s_t, a_t) - V^\pi(s_t) \\ &= E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V^{\pi}(s_{t+1})] - E_{s_{t+1} \sim P(.|s_t, a_t)}[ V^{\pi}(s_{t})] \\ &= E_{s_{t+1} \sim P(.|s_t, a_t)}[r_t + \gamma V^{\pi}(s_{t+1}) - V^{\pi}(s_{t})] \\ &= E_{s_{t+1} \sim P(.|s_t, a_t)}[TD\_error] \end{align} \]

在开始PPO之前,先简单PPO算法的基础——Actor-Critic算法,

2. Actor-Critic

2.1 定义

Actor-Critic 算法是一种结合了策略梯度(Actor)和价值函数(Critic)的混合算法,核心是用 Critic 评估 Actor 的行为,指导其优化策略。

  • Actor(执行者):负责输出动作策略,比如给定状态时选择哪个动作。
  • Critic(评论家):负责评估 Actor 动作的好坏,可以是图1中任意 \(\Psi_t\),比如计算动作价值函数 \(Q^\pi(s_t, a_t)\)优势函数 \(A^\pi(s_t, a_t)\)状态价值函数 \(V^\pi(s_t)\)反馈。
  • 两者协同:Critic 用价值函数减少策略梯度的方差,Actor 依据 Critic 的评估更新策略,提升学习效率

2.2 优势

  • 策略梯度的方差问题:纯策略梯度算法方差大、收敛慢,Critic 的价值评估能提供更稳定的梯度信号。
  • 时序差分(TD)误差:Critic 通常用 TD 误差(实际回报与预期价值的差值)作为评估依据,直接指导 Actor 更新。
  • 双网络优势:Actor 专注 "怎么选动作",Critic 专注 "选得好不好",分工明确且互补,兼顾探索与利用。

2.3 Actor和Critic目标函数

(1)符号定义

  • \(s_t\)t 时刻的状态
  • \(a_t\)t 时刻选择的动作
  • \(r_t\):动作 \(a_t\) 带来的即时奖励
  • \(\pi_\theta(a_t|s_t)\):Actor 策略(网络参数为 θ),表示状态 \(s_t\)下选择动作 \(a_t\) 的概率
  • \(V_\phi(s_t)\):Critic 价值函数(网络参数为 \(\phi\)),表示状态 \(s_t\) 的预期累积奖励,注意这里的 \(V_\phi(s_t)\) 和前文的 \(V^\pi(s_t)\) 只是形式上的差异,为了保持惯用写法。

(2)Actor优化目标

适用于任意Critic函数的目标函数

\[\begin{align} argmax_{\pi_\theta} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [ \psi_t \nabla log\pi_\theta(a_t | s_t)] \\\end {align} \]

将其中的 \(\Psi_t\) 换成优势评价函数,

\[\begin{align} argmax_{\pi_\theta} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [ A_{\phi}(s_t, a_t) \nabla log\pi_\theta(a_t | s_t)] \\ &= E_{\tau \sim {\pi_\theta}} [( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_{t})) \nabla log\pi_\theta(a_t | s_t)]\end {align} \]

在后面的PPO讨论中我们将采用这种形式

(3)Critic优化目标

\[\begin{align} argmin_{V_\phi} L({V_\phi}) &= E_t [(r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_{t}))^2] \end {align} \]

(4)Actor-Critic算法典型变种

  • A2C(Advantage Actor-Critic):用优势函数(动作价值 - 状态价值)进一步降低方差,是基础且常用的变种。
  • DDPG(深度确定性策略梯度):针对连续动作空间,用深度网络分别建模 Actor 和 Critic,加入目标网络提升稳定性。
  • PPO(近端策略优化):虽不算纯 Actor-Critic,但引入价值网络(Critic)辅助策略更新,平衡探索与更新幅度。

3. PPO算法

\[\begin{align} argmax_{\pi_\theta} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [ A_{\phi}(s_t, a_t) \nabla log\pi_\theta(a_t | s_t)] \\ &= E_{\tau \sim {\pi_\theta}} [( r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_{t})) \nabla log\pi_\theta(a_t | s_t)]\end {align} \]

对于公式(42)需要考虑以下问题:

  • 问题1:每次执行梯度更新时,需要对 \(\pi_\theta\) 进行若干次回合采样,由于采样过程具有随机性,可能会采样到了一些方差特别大的样本,进而使得更新方向发生错误。
  • 问题2:在训练过程中,用critic网络拟合的 \(V^\pi\) 不一定能准确衡量动作 \(a_t\) 价值,所以这里的优势估计函数 \(A_{\phi}(s_t, a_t)\) 是有偏的。GAE为平衡价值函数的方差和偏差提供了解决方法。

3.1 on-policy和off-policy

在强化学习中,会有on-policy 和 off-policy 的概念,判断标准在于【数据采样的策略(Policy)与学习/更新的策略是否相同】。

(1) on-policy

数据采样策略与当前正在学习/更新的策略相同。智能体执行的行为策略(Behavior Policy)就是要学习或评估的目标策略(Target Policy)。换言之,智能体在环境中如何行动,就和我们要学的那条策略完全一致。

(2) off-policy

数据采样策略与学习/评估的目标策略不必相同。用一种行为策略与环境交互,收集到的数据用来学习/更新另一种目标策略。常见做法是保留一个经验回放池(Replay Buffer),历史数据可以不断被重用(不一定是按照当前策略采样得到的)。

关键点 on-policy off-policy
数据采样策略 与目标策略相同 与目标策略不同,可自行选择或混用
数据利用率 只能使用最近采样数据,效率较低 可以反复使用历史数据,效率较高
学习稳定性 分布一致性更好,算法分析更直接 数据分布差异大时,学习可能会不稳定
示例算法 A2C/A3C、PPO 等 Q-Learning、DQN、SAC、TD3 等
适用场景 中小型或交互稳定场景 大规模、需要高数据效率或可以使用离线数据场景

3.2 重要性采样

本文要介绍的PPO 本质是 on-policy(同策略) 算法,但其核心设计兼顾了部分 off-policy 数据复用的优势。既然如此,就需要考虑数据采样的策略(Policy)与学习/更新的策略不一致的问题,这就是用到重要性采样,其核心为了解决数据分布不匹配问题,让不同策略下的经验能复用。

重要性采样通过引入重要性权重,衡量旧策略(采样策略)\(\pi_{old}(a_t|s_t)\) 与新策略(目标策略)\(\pi_\theta(a_t|s_t)\) 在相同状态下选择同一行动的概率比值。用该权重对旧数据的回报进行加权,就能得到无偏的目标策略价值估计。

采用重要性采样的原因可以归结如下:

  • 策略更新导致数据失效:强化学习中策略会不断迭代优化,新策略与旧策略的行动分布不同。直接用旧策略收集的数据评估新策略,会产生偏差。
  • 降低采样成本:重新为每个新策略收集数据会耗费大量计算资源,重要性采样可通过权重修正,让旧数据适配新策略,提升训练效率。
  • 支持离线强化学习:离线场景中无法实时与环境交互生成数据,需依赖历史数据集,重要性采样能修正数据集与目标策略的分布差异。

重要性采样是一种统计方法,用来在目标分布 \(p(x)\) 与采样分布 \(q(x)\) 不一致的情况下,调整采样结果的权重,使得从 \(q(x)\) 中采样的数据可以用于估计 \(p(x)\) 的期望。

假设我们希望计算目标分布 \(p(x)\) 下某个函数 \(f(x)\) 的期望:

\[E_{x \sim p(x)} = \int f(x)p(x)dx \]

如果 \(p(x)\) 很难直接采样,但可以从一个容易采样的分布 \(q(x)\) 中采样,则可以通过以下公式重写:

\[E_{x \sim p(x)} = \int f(x) \frac {p(x)}{q(x)} q(x)dx \]

其中,\(\frac {p(x)}{q(x)}\) 被称为【重要性权重,Importance Weight】,上述的转换过程叫【重要性采样】。

3

3.3 优化目标重写

重要性采样前,策略的梯度是:

\[\begin{align} argmax_{\pi_\theta} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_\theta}} [ A_{\phi}(s_t, a_t) \nabla log\pi_\theta(a_t | s_t)] \end {align} \]

重要性采样后,策略的梯度是:

\[\begin{align} argmax_{\pi_\theta} \nabla J({\pi_\theta}) &= E_{\tau \sim {\pi_{old}}} [\frac{\pi_\theta(a_t | s_t)}{\pi_{old}(a_t | s_t)} A_{\phi}(s_t, a_t) \nabla log\pi_\theta(a_t | s_t)] \end {align} \]

公式 (44)中的 \(\tau \sim {\pi_{old}}\) 意味着当前的训练数据是由 \({\pi_{old}}\) 策略采集来的。

但是到这步为止,我们还要在心里铭记一个问题,如何解决 和 分布差异过大的情况。我们先来看对优势函数的改进方法,然后再回来讲这个问题的解决办法。

3.4 GAE

在上一节中,我们介绍了如何解决采样偏差问题,这节来探讨GAE是如何改善优势估计函数 \(A_{\phi}(s_t, a_t)\) 中有偏问题的。

GAE(Generalized Advantage Estimation,广义优势估计) 是一种用于估计强化学习中优势函数(Advantage Function)的方法,它通过结合时间差分(TD)误差的加权和来平衡偏差和方差。GAE 的核心思想是通过加权短期和长期回报来估计优势函数。它通过引入超参数 λ 来控制短期和长期回报的权重,实现低方差和高偏差间的平衡。

GAE的计算可以通过 TD 残差的加权和表示,

\[A_\phi^{GAE(\lambda,\gamma)}=\sum_{\substack{0\le l<\infty}} (\gamma \lambda)^l \delta_{t+1} \]

其中:

  • \(\delta_t\) 是时间差分(TD)残差,定义为:

    \(\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)\)

  • \(\gamma\) 是折扣因子,用于控制未来回报的权重。

  • \(\lambda\) 是 GAE 的衰减系数,用于控制方差-偏差的平衡

(1)各类优势计算方法中的方差和偏差对比

  • MC方法高方差,无偏差的。因其依赖于整个轨迹的回报,估计时可能会带来较大波动,但它是无偏的,在长时间运行时可以获得精确的估计。
  • TD方法低方差,高偏差。通过引入当前估计来更新状态值或动作值,减少了方差。但其依赖于已有的估计,会引入偏差。
  • GAE折中,可通过 \(\lambda\) 灵活调控,实现偏差和方差平衡。当 \(\lambda = 0\) 时,GAE等价于TD,当 \(\lambda = 1\) 时,GAE等价于MC方法。

在下文的表述中,我们将 \(A_\phi^{GAE(\lambda,\gamma)}\) 引入了优化目标中。

3.5 TRPO:PPO的前身

TRPO(Trust Region Policy Optimization,置信域策略优化),可以说是PPO的前身。

在引入置信域、重要性采样(Importance Sampling)和GAE优势函数这些概念后,显著提升了算法的效果,对应的优化目标如下

\[\begin{align} argmax_{\pi_\theta} J({\pi_\theta}) &= E_{\tau \sim {\pi_{old}}}^t [\frac{\pi_\theta(a_t | s_t)}{\pi_{old}(a_t | s_t)} A_{\phi}^{GAE}(s_t, a_t) \\ \end {align} \]

\[\begin{align} subject \ to \quad E^t[KL(\pi_{old}(.|s_t),\pi(.|s_t) )] \leq \delta \end{align} \]

公式(45)根据之前的策略采样,用优势函数筛选贡献大的动作;公式(46)是新旧策略的平均 KL 散度(动作分布距离)不能超过常数 \(\delta\)。TRPO就像一个教官,指导小狗不要一下子把"坐下"这个动作的概率从 0.7 提到 0.99,要保证新旧策略相似度高,学习更"稳"。

由于这种限制不直接加在 \(J(\theta)\) 中,使得优化过程变得较为复杂。

3.6 PPO-Clip

PPO(Proximal Policy Optimization,近端策略优化),有多种变体,例如PPO-Penalty和PPO-Clip,这些算法继承了部分TRPO算法的思想。PPO-Clip因其更优的效果而获得了更多关注和应用,因此通常所说的PPO即指PPO-Clip。

PPO-Clip的目标是最大化累积回报的期望,即通过最大化目标函数 \(J(\theta)\) 来优化策略,目标函数如下。

\[\begin{align} argmax_{\pi_\theta} J({\pi_\theta})^{Clip} &= E_{\tau \sim {\pi_{old}}}^t [min( r_t(\theta) A_{\phi}^{GAE}(s_t, a_t), \ \ clip(r_t(\theta), 1-\varepsilon,1+\varepsilon)A_{\phi}^{GAE}(s_t, a_t))] \end {align} \]

其中,\(r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{old}(a_t | s_t)}\),下图给出了PPO-Clip运行机制示意图,注意图4中的 \(\eta_t^{clip}\) 对应式(47)中的 \(clip(r_t(\theta), 1-\varepsilon,1+\varepsilon)\)\(\eta_t^{r}\) 对应式(47)中的 \(r_t(\theta)\)

4

公式(47)解读

  • \(A_{\phi}^{GAE}(s_t, a_t) > 0\) 时,说明策略执行的动作 \(a_t\) 相较于别的动作更好,要提升 \(\pi_{\theta}(a_t | s_t)\) 的概率。但是考虑到在采样不足的情况下,新旧策略的分布差异不能太大,因此 \(r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{old}(a_t | s_t)}\) 是有上限的,需要保证在的信任阈 \(1+\varepsilon\) 内,超过这个阈值,直接采用 \(1+\varepsilon\)
  • \(A_{\phi}^{GAE}(s_t, a_t) < 0\) 时,说明策略执行的动作 \(a_t\) 相较于别的动作更差,要降低 \(\pi_{\theta}(a_t | s_t)\) 的概率。考虑到新旧策略的分布差异不能太大, \(r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{old}(a_t | s_t)}\) 是有上限的,需要保证在的信任阈 \(1-\varepsilon\) 内,低于这个阈值,直接采用 \(1-\varepsilon\)

本文是RL系列内容的第一篇,该系列主要介绍RL的理论、实战及与大模型结合的内容,下一篇我们将介绍大模型中的RL算法,敬请期待。

参考资料

【1】High-Dimensional Continuous Control Using Generalized Advantage Estimation

【2】人人都能看懂的RL-PPO理论知识

【3】大模型中的强化学习,PPO,DPO,GRPO

【4】大模型中的强化学习

【5】Reinforcement Learning: An Introduction

【6】蘑菇书EasyRL

【7】大模型算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十三天

今日深入学习了线索二叉树,这个数据结构的设计思路让我对“优化”与“权衡”有了更具体的认知。 此前学习普通二叉树时,其空指针域的浪费一直是明显的痛点——n个节点的二叉树有n+1个空指针,这些闲置的存储空间若能…

ICPC2022南京 游记(VP)

有效时长 $150min$,打出银尾。省流 有效时长 \(150min\),打出银尾。10.29 内含剧透,请vp后再来。 不是题解!!!!!!! 赛时 比赛开始,光速有人通过 I 题,我和 qwsxza 就去看。题目给了一个字符串,要求修改其…

[KaibaMath]1015 关于收敛数列迫敛性的证明

[KaibaMath]1015 关于收敛数列迫敛性的证明收敛数列的迫敛性(又称夹逼准则)是数列极限的核心性质。其可理解为:若三个数列满足“两边夹”关系且两边数列收敛到同一值,中间数列必收敛且极限相同。下面给出相应的证明…

Week 2 Homework

1. 找第k小的数的分治算法 首先,我们要先去找一个划分点,然后我们要去对划分点左右两边的数进行划分。 划分完之后,我们能得到 pivot 也就是划分点的最终位置,这个位置也是 pivot 最终排序的位置。 当我们发现 piv…

Manancher

初始化的len易错,忘记打mini的终止条件易错,写成 2*n-1咳咳,要不要仔细校准一下,容易眼花QAQ,作者:江海一归客,原文链接:https://www.cnblogs.com/jhygk/p/19178237

搜维尔科技:【技术分享】解析Xsens动捕与人形机器人的训练术语

随着人形机器人在现实应用中的普及,理解支撑其类人动作的技术非常重要。Xsens怀着浓厚兴趣探索这一领域,致力于为人形机器人训练开发最佳动作捕捉解决方案。为帮助您更好地理解相关术语,我们整理了正在塑造人形机器…

搜维尔科技:【技术分享】解析Xsens动捕与人形机器人的训练术语

随着人形机器人在现实应用中的普及,理解支撑其类人动作的技术非常重要。Xsens怀着浓厚兴趣探索这一领域,致力于为人形机器人训练开发最佳动作捕捉解决方案。为帮助您更好地理解相关术语,我们整理了正在塑造人形机器…

Python while循环 _ 捕捉日落

Python while循环 _ 捕捉日落count = 0total = 0user_input = input("请输入数字(完成所有数字输入后,请输入q终止程序):")while user_input != "q": num = float(user_input) total +=…

搜维尔科技:IROS 2025圆满落幕|MANUS手套展示世界级手部追踪技术,从遥操作到具身智能!

IROS 2025圆满落幕MANUS展示世界级手部追踪技术!「顶级水准。世界级的手部追踪技术,难以再超越。」 这是我们这几天在杭州IROS 2025展位上最常听到的话。 从遥操作到具身智能再到灵巧手的遥操作应用,MANUS正在为全球…

2024 暑期模拟赛 #9

100 + 100 + 100 + 20 = 320, Rank 1/6.2024暑期CSP-S&NOIP模拟赛第9套 链接:link 题解:link 的题解部分 时间:4h (2025..10.30 14:00~18:00) 题目数:4 难度:A B C D\(\color{#F39C11} 橙\) \(\color{#FFC116…

三值纠缠模型:智能价值权衡的元能力与实现路径探索

三值纠缠模型:智能价值权衡的元能力与实现路径探索 笔名/岐金兰 摘要 本研究基于岐金兰提出的“AI元人文”理论框架,深入剖析了智能进化下一阶段的本质特征——价值权衡元能力。通过系统梳理“三值纠缠模型”的理论内…

三值纠缠模型:智能价值权衡的元能力与实现路径探索

三值纠缠模型:智能价值权衡的元能力与实现路径探索 笔名/岐金兰 摘要 本研究基于岐金兰提出的“AI元人文”理论框架,深入剖析了智能进化下一阶段的本质特征——价值权衡元能力。通过系统梳理“三值纠缠模型”的理论内…

OceanBase系列---【如何拆分PMAX分区?】

OceanBase系列---【如何拆分PMAX分区?】因为OceanBase的oracle模式不支持自动创建分区,所以为了节省时间,我们往往会手动预先创建很多分区,然而,随着时间的流逝,手动创建的总会有用完的时候。为了防止数据插入报…

矩阵快速幂的构造技巧:从递推式到矩阵

矩阵快速幂是解决线性递推问题的“利器”,它能将递推的时间复杂度从朴素的 \(O(n)\) 优化到 \(O(\log n)\)。而这一技巧的核心,在于构造合适的转移矩阵。 一、从斐波那契数列入门:最基础的矩阵构造 斐波那契数列的递…

AutoDL+Deepseek 7B

1.下载huggingface_hub并指定源 pip install -U huggingface_hub export HF_ENDPOINT=https://hf-mirror.com2.下载DeepSeek-R1-Distill-Qwen-7B模型 mkdir autodl-tmp/DeepSeek-R1 huggingface-cli download --resume…

VLP平台与重组蛋白:新一代生物技术工具

VLP平台的基本概念与技术原理 病毒样颗粒(VLP)平台是一种新兴的生物技术工具,它利用重组蛋白自组装形成在结构上模拟天然病毒颗粒的空心颗粒。这些颗粒不含病毒遗传物质,因此不具备复制和感染能力,但保留了病毒的…

2025.10.30

今天早八数据结构,然后上跆拳道课,下午没有课,中午吃了荞麦刀削面配麻酱,下午睡觉

Python for循环 _ 找出不正常体温

Python for循环 _ 找出不正常体温total = 0#range(1,101) 其实是加到100,不会加到101for i in range (1,101): total = total + iprint("\n" + str(total))

10/30

今天只上了两节课,明天没课

实验任务3

任务一点击查看代码 #include <stdio.h>char score_to_grade(int score); int main() {int score;char grade;while(scanf("%d", &score) != EOF) {grade = score_to_grade(score); printf("…