详细摘要 摘要
生成:2025-06-01 22:17摘要详情
- 音频文件
- BiliBili | IBM RethinkFun | 零基础学习强化学习算法:PPO
- 摘要类型
- 详细摘要
- LLM 提供商
- openai
- LLM 模型
- gemini-2.5-pro-exp-03-25
- 已创建
- 2025-06-01 22:17:46
摘要内容
概览/核心摘要 (Executive Summary)
该视频旨在为具备机器学习和深度学习基础但未接触过强化学习的观众讲解PPO(Proximal Policy Optimization)算法。内容首先介绍了强化学习的核心概念,如环境 (Environment)、智能体 (Agent)、状态 (State)、动作 (Action)、奖励 (Reward)、动作空间 (Action Space)、策略 (Policy) 和轨迹 (Trajectory)、回报 (Return)。强化学习的目标是训练一个策略网络,使得在所有状态下或所有可能的轨迹中,获得的期望回报最大化。视频详细推导了策略梯度 (Policy Gradient) 算法,指出其通过梯度上升更新网络参数,并解释了其直观意义:增大高回报轨迹中动作的概率,减小低回报轨迹中动作的概率。
随后,视频探讨了策略梯度算法的改进方向,包括基于因果关系的奖励计算(仅考虑动作发生后的奖励)、引入衰减因子 (γ) 以及使用基线 (Baseline) 来减少方差、加速训练,引出了Actor-Critic架构。接着深入讲解了动作价值函数 (Q-function)、状态价值函数 (V-function) 和优势函数 (Advantage Function),并推导了如何用状态价值函数表示优势函数,从而简化模型。为了平衡估计优势函数时的偏差和方差,引入了泛化优势估计 (GAE)。
最后,视频重点转向PPO算法,旨在解决On-Policy训练效率低的问题。通过引入重要性采样 (Importance Sampling),实现了Off-Policy训练,允许使用旧策略采集的数据多次训练当前策略。PPO通过两种方式约束新旧策略的差异:一种是加入KL散度作为惩罚项,另一种是使用裁剪 (Clipping) 目标函数,限制策略概率比率的变化范围(例如在 [1-ε, 1+ε] 区间内),从而保证训练的稳定性并提高样本利用率。
强化学习基础概念
Speaker 1 详细解释了学习PPO算法前必须掌握的强化学习基本术语:
- 环境 (Environment): 游戏运行的整体,负责产生游戏画面、根据动作切换画面、生成敌人和奖励、决定游戏结束等。例如超级玛丽游戏中,游戏本身就是环境。
- 智能体 (Agent): 观察环境,并根据自身策略做出动作,以获取最大化游戏得分的程序。强化学习的目标是让程序学出一个优秀的策略。
- 状态 (State): 游戏在某一时刻的完整情况。Agent根据当前状态做决策。
- 观察 (Observation): State的一部分,特指Agent能感知到的信息。在超级玛丽这类游戏中,通常认为State等于Observation。
- 动作 (Action): Agent根据当前状态和策略做出的具体操作。例如,在超级玛丽中,动作为向左、向右、跳跃。
- 奖励 (Reward): Agent做出一个动作后,环境给予的即时反馈,可以是正向(奖励)或负向(惩罚)。
- 例如:吃到金币+10分,吃到蘑菇+20分,被怪物打死-100分。
"Reward的值你可以参考游戏里的实际的值,也可以完全由你自己定义。最终agent会尽可能让得到的reward之和最大,你reward定义的好坏很大程度上会影响模型的训练。"
- 动作空间 (Action Space): Agent所有可选动作的集合。
- 策略 (Policy, π): 一个函数,输入是当前状态 (State),输出是各个动作 (Action) 的概率分布。
- 训练和推理时,通常根据概率分布进行采样,而非直接选择概率最高的动作。
- 原因:1. 训练时探索各种可能性以学习更优策略;2. 推理时增加输出多样性。
- 轨迹 (Trajectory, τ): 一连串的状态和动作序列,也称作Episode或Rollout。
- 例如:S0 -> A0 -> S1 -> A1 -> ... -> 游戏结束。
- 状态转移可以是确定的(如大语言模型生成token),也可以是不确定的(如游戏中开宝箱)。
- 回报 (Return, G): 从当前时间点到游戏结束的所有奖励 (Reward) 的累积和(通常带衰减)。
"Return很重要,因为我们希望在每一个状态,St agent做出的action不是追求当前部的reward最大,而是追求return最大,要有长远考虑。"
强化学习的目标
Speaker 1 指出,强化学习的根本目标是:
- 训练一个策略神经网络
π,使其在所有状态S下给出相应的动作A,从而让得到的期望回报 (Expected Return) 最大化。 - 或者说,训练一个策略神经网络
π,使其在所有可能的轨迹τ中得到的期望回报最大化。 - 数学表示为:最大化
E_{τ ~ P_θ(τ)} [R(τ)],其中θ是策略网络的参数,R(τ)是轨迹τ的总回报。
策略梯度 (Policy Gradient) 算法
为了实现上述目标,Speaker 1 介绍了策略梯度算法:
- 梯度上升: 通过计算目标函数(期望回报)对策略网络参数
θ的梯度,并沿着梯度方向更新参数,以增大期望回报。∇_θ E_{τ ~ P_θ(τ)} [R(τ)]
- 数学推导 (Log-Derivative Trick):
- 原始梯度:
E_{τ ~ P_θ(τ)} [R(τ) ∇_θ log P_θ(τ)] - 其中,一个轨迹
τ = (s_0, a_0, s_1, a_1, ..., s_T, a_T)的概率P_θ(τ)(假设状态转移确定或与策略无关)可以表示为:P_θ(τ) = p(s_0) Π_{t=0}^{T} π_θ(a_t|s_t) p(s_{t+1}|s_t, a_t)。 - 简化后,
∇_θ log P_θ(τ) = Σ_{t=0}^{T} ∇_θ log π_θ(a_t|s_t)。 - 最终梯度表达式近似为:
E_{τ ~ P_θ(τ)} [ (Σ_{t=0}^{T} ∇_θ log π_θ(a_t|s_t)) R(τ) ]。
- 原始梯度:
- 直观意义:
"如果一个trajectory得到的return是大于0的,那么就增大这个trajectory里面所有状态下采取当前action的概率。""如果一个trajectory得到的return是小于0的,那么就减小这个揣这个水里面所有状态下采取当前action的概率。"
- 训练流程 (On-Policy):
- 定义损失函数:
Loss = - E_{τ ~ P_θ(τ)} [ (Σ_{t=0}^{T} log π_θ(a_t|s_t)) R(τ) ](因为优化器通常最小化损失)。 - 使用神经网络(如CNN处理游戏画面)作为策略网络,输出动作概率。
- Agent使用当前策略网络玩N场游戏,收集N个轨迹及其回报。
- 使用收集到的数据计算损失,更新策略网络参数。
- 重复此过程。
"这种更新策略叫做on policy,也就是我们采集数据用的policy和我们训练的policy是同一个。这样有个问题就是我们大部分时间都在采集数据,训练非常慢,这也是ppo算法要解决的问题。"
- 定义损失函数:
策略梯度算法的改进
Speaker 1 提出了对基础策略梯度算法的几点改进:
- 因果性 (Causality) 与奖励分配:
- 一个动作只应影响其发生后的奖励,而非整个轨迹的总回报。
- 修改回报计算:
R(τ)替换为从当前时刻t到轨迹结束的累积奖励Σ_{t'=t}^{T} r_{t'}。
- 衰减因子 (Discount Factor, γ):
- 未来的奖励具有不确定性,且对当前决策的影响应小于即时奖励。
- 引入衰减因子
γ < 1,距离当前步越远的奖励,其权重呈指数衰减。 - 修改后的回报 (Discounted Return):
G_t = Σ_{k=0}^{T-t} γ^k r_{t+k}。 "也就是说距离当前越远的reward受当前部动作影响越小。"
- 基线 (Baseline):
- 解决在普遍好/坏局势下,所有动作回报均为正/负,导致训练缓慢的问题。
- 从回报中减去一个基线值
b(s_t),使得算法关注动作的相对好坏。 "最好是能让相对好的动作概率增加,相对差的动作概率减小,这样训练就会加快很多。"- 目标函数中的
G_t变为G_t - b(s_t)。 - 基线的选择后续会与Critic网络关联。
Actor-Critic 架构
引入基线的思想自然地导向了Actor-Critic架构:
- Actor (演员): 即策略网络 (Policy Network),负责根据状态选择动作。
- Critic (评论家): 即价值网络 (Value Network),负责评估Actor所选动作的好坏,通常用于估计基线或价值函数。
价值函数与优势函数 (Advantage Function)
Speaker 1 引入了几个重要的价值函数概念:
- 动作价值函数 (Action Value Function, Qπ(s,a)):
- 定义:在状态
s下执行动作a,然后遵循策略π所能获得的期望回报。 Q^π(s,a) = E_{s_{t+1:T}, a_{t+1:T} ~ π} [ Σ_{k=0}^{T-t} γ^k r_{t+k} | s_t=s, a_t=a ]"它反映了一个动作的价值,所以叫做动作价值函数"。
- 定义:在状态
- 状态价值函数 (State Value Function, Vπ(s)):
- 定义:在状态
s下,遵循策略π所能获得的期望回报。 V^π(s) = E_{a_t, s_{t+1:T}, a_{t+1:T} ~ π} [ Σ_{k=0}^{T-t} γ^k r_{t+k} | s_t=s ] = E_{a ~ π(·|s)} [Q^π(s,a)]"它表示这个状态的价值"。
- 定义:在状态
-
优势函数 (Advantage Function, Aπ(s,a)):
- 定义:在状态
s下,执行动作a相对于平均情况下(遵循策略π)能多带来多少回报。 A^π(s,a) = Q^π(s,a) - V^π(s)"就表示了这个动作相对其他动作的优势。"- 策略梯度目标函数中的
G_t - b(s_t)可以用优势函数A^π(s_t, a_t)替换,其中基线b(s_t)可以用V^π(s_t)来估计。
优势函数的计算:
* 关系:Q^π(s_t, a_t) = E [r_t + γV^π(s_{t+1})](单步TD估计)
* 代入优势函数:A^π(s_t, a_t) = E [r_t + γV^π(s_{t+1}) - V^π(s_t)]
* 这样,只需要训练一个状态价值网络V^π(s)即可估计优势函数。
*r_t + γV^π(s_{t+1}) - V^π(s_t)这一项被称为TD误差 (Temporal Difference Error),用δ_t表示。 - 定义:在状态
泛化优势估计 (Generalized Advantage Estimation, GAE)
Speaker 1 解释了GAE如何平衡优势函数估计中的偏差和方差:
- 采样步数与偏差-方差权衡:
- 采样步数越多(如蒙特卡洛估计,使用实际的多步回报),方差越大,偏差越小。
- 采样步数越少(如单步TD估计,更多依赖价值函数估算),方差越小,偏差越大。
- GAE思想:
"小孩子才做选择,我全都要。"- 通过对不同采样步数的优势估计进行加权平均,引入参数
λ(介于0和1之间)。 A^{GAE}(s_t, a_t) = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}- 其中
δ_{t+l} = r_{t+l} + γV(s_{t+l+1}) - V(s_{t+l})是第t+l步的TD误差。 - 当
λ=0时,A^{GAE}(s_t, a_t) = δ_t(单步TD,高偏差低方差)。 - 当
λ=1时,A^{GAE}(s_t, a_t) = Σ_{l=0}^{∞} (γ)^l δ_{t+l} = Σ_{l=0}^{∞} γ^l r_{t+l} - V(s_t)(蒙特卡洛估计,低偏差高方差)。
- 价值网络的训练:
- 目标:让价值网络
V(s)拟合实际观测到的衰减回报G_t。 - 损失函数:例如均方误差
(G_t - V_θ(s_t))^2。
- 目标:让价值网络
PPO (Proximal Policy Optimization) 算法
Speaker 1 详细阐述了PPO算法如何解决On-Policy训练效率低的问题,并引入Off-Policy学习:
- Off-Policy 与重要性采样 (Importance Sampling):
- On-Policy: 采集数据的策略和训练的策略是同一个,数据用一次即丢弃。
- Off-Policy: 训练的模型 (目标策略
π_θ) 和采集数据的模型 (行为策略π_θ') 可以不同,数据可复用。 - 重要性采样: 用于修正不同策略采样数据分布的差异。
E_{x~P} [f(x)] = E_{x~Q} [f(x) * P(x)/Q(x)]- 应用到策略梯度:
∇_θ J(θ) = E_{τ ~ π_θ'} [ (P_θ(τ)/P_θ'(τ)) (Σ log π_θ(a_t|s_t)) A^{π_θ'}(s_t,a_t) ](简化形式) - 更常用的形式是针对每一步的概率比:
r_t(θ) = π_θ(a_t|s_t) / π_θ'(a_t|s_t) - 目标函数变为:
L^{CPI}(θ) = E_t [ (π_θ(a_t|s_t) / π_θ'(a_t|s_t)) A_t^{π_θ'} ] "这个公式也很符合直觉...比如小明上课玩手机,老师批评小明,小明上课玩手机的概率是10%,你上课玩手机的概率是20%。那么你在更新自己玩手机这个行为时,强度应该是小明的二倍才对。"
- PPO 的核心思想与约束:
- 重要性采样要求行为策略
π_θ'和目标策略π_θ不能相差太大,否则重要性权重r_t(θ)的方差会很大。 - PPO通过约束策略更新的幅度来解决此问题。
- 重要性采样要求行为策略
- PPO 的两种主要实现:
- PPO-Penalty (KL散度约束):
- 在目标函数中加入KL散度作为惩罚项,惩罚
π_θ与π_θ'之间的差异。 L^{KLPEN}(θ) = E_t [ r_t(θ) A_t^{π_θ'} - β KL[π_θ'(·|s_t) || π_θ(·|s_t)] ]β是调整KL散度约束大小的系数。
- 在目标函数中加入KL散度作为惩罚项,惩罚
- PPO-Clip (裁剪目标函数):
- 这是更常用的PPO形式。
- 目标函数:
L^{CLIP}(θ) = E_t [ min( r_t(θ)A_t^{π_θ'}, clip(r_t(θ), 1-ε, 1+ε)A_t^{π_θ'} ) ] ε是一个超参数,通常取0.1或0.2。- 裁剪 (clip) 函数:
- 如果
r_t(θ)在[1-ε, 1+ε]之间,则clip(r_t(θ), 1-ε, 1+ε) = r_t(θ)。 - 如果
r_t(θ) < 1-ε,则clip(r_t(θ), 1-ε, 1+ε) = 1-ε。 - 如果
r_t(θ) > 1+ε,则clip(r_t(θ), 1-ε, 1+ε) = 1+ε。
- 如果
- 直观解释:
- 当优势
A_t为正时,希望增大r_t(θ)(即增大π_θ(a_t|s_t)),但r_t(θ)最大被限制在1+ε,防止策略更新过大。 - 当优势
A_t为负时,希望减小r_t(θ)(即减小π_θ(a_t|s_t)),但r_t(θ)最小被限制在1-ε,同样防止策略更新过大。 "这就限制了P西塔和P西塔一撇的概率值不能相差太大。"
- 当优势
- PPO-Penalty (KL散度约束):
总结与展望
Speaker 1 总结了从强化学习基础到PPO算法的讲解过程,强调PPO通过Off-Policy学习和策略更新限制,有效提高了训练效率和稳定性。
视频最后预告,下一个视频将深入Hugging Face强化学习库的源码,讲解如何对大语言模型进行强化学习。