欢迎来到图解强化学习的世界博客主页卿云阁欢迎关注点赞收藏⭐️留言首发时间2026年5月26日✉️希望可以和大家一起完成进阶之路目录PPO 算法的基础认识PPO 算法的网络结构① Actor —— 策略网络② Critic —— 价值网络网络更新① Actor 网络更新策略更新② Critic 网络更新价值评估更新手动计算广义优势估计模型更新updatePPO 算法的基础认识PPO Proximal Policy Optimization近端策略优化算法PPO 是目前落地最广、上手最简单、训练稳定性极强的通用强化学习算法兼顾离散与连续动作场景游戏AI、机器人控制、大模型对齐、工业决策等任务普遍首选它。它属于策略梯度类算法核心思想是严格限制新旧策略的更新幅度在保证策略稳步提升的同时避免参数更新幅度过大导致训练震荡、模型崩溃还支持重复利用采样样本大幅提升数据效率。PPO 算法的网络结构① Actor —— 策略网络输入状态 s输出动作分布均值 方差、动作 a、对数概率 log π(a|s)作用根据状态输出要执行的动作是负责 “做决策” 的网络② Critic —— 价值网络输入状态 s输出状态价值 V (s)评估当前状态好不好、未来能拿多少奖励作用评价 Actor 做得好不好计算优势函数 A网络更新① Actor 网络更新策略更新使用PPO-Clip 损失函数目的更新策略让好动作概率变高坏动作变低但更新幅度被限制不会崩。输入状态 s旧动作概率 π_old新动作概率 π_new优势函数 A计算求概率比 r π_new / π_old裁剪到 [1-ε, 1ε]取 min (r*A, clip (r)*A) → 得到最终损失反向传播更新 Actor特点只在 “近端” 小范围更新训练超级稳定不会像传统策略梯度那样炸掉② Critic 网络更新价值评估更新使用MSE 均方误差损失目的让价值估计 V (s) 更准从而让优势函数 A 更准。输入状态 s实际回报 G / TD 目标值计算Critic 输出 V (s)计算 V (s) 与 目标回报 的误差MSE 损失反向传播更新 Critic特点简单、稳定帮助 Actor 获得更准确的优势信号手动计算当前执行 → 永远用旧策略动作更新网络 → 只用新策略算旧动作的概率新策略的动作要等到【下一轮】才会执行广义优势估计TD 误差td_deltatd_delta 即时奖励 折扣×下一个状态价值 - 当前状态价值GAE 优势advantageadvantage 当前TD误差 衰减系数 × 下一步的advantagetd_delta [10, 5, -10] gamma * lamda 0.81 衰减系数t2r -10 advantage -10 0.81×0 -10 r 5 advantage 5 0.81×(-10) -3.1 r 10 advantage 10 0.81×(-3.1) 7.489 GAE 优势 [7.489, -3.1, -10]模型更新updategamma 0.9 lamda 0.9 clip_eps 0.2 → 裁剪范围 [0.8, 1.2] # 两条样本 state0 [1.0, 0.0, 1.0, 0.0, 0.0, 0.0] state1 [0.9, 0.1, 0.8, 0.2, 0.5, 0.1] action0 0 action1 2 advantage [-0.82, -2.0]新旧概率比 ratio旧策略 s0 动作 0 概率 0.70 旧策略 s1 动作 2 概率 0.10 old_log_prob0 ln(0.70) ≈ -0.357 old_log_prob1 ln(0.10) ≈ -2.303 新策略 s0 动作 0 概率 0.91 → ratio≈1.3 新策略 s1 动作 2 概率 0.05 new_log_prob0 ln(0.91) ≈ -0.094 new_log_prob1 ln(0.05) ≈ -3.000 new_log_prob0 - old_log_prob0 (-0.094) - (-0.357) 0.263 ratio0 exp(0.263) ≈ 1.30 new_log_prob1 - old_log_prob1 (-3.000) - (-2.303) -0.697 ratio1 exp(-0.697) ≈ 0.50 ratio0 1.30 超过 1.2需要裁剪 ratio1 0.50 低于 0.8需要裁剪PPO Clip 损失adv0 -0.82 adv1 -2.0part1 1.30 * (-0.82) -1.066 part2 clamp(1.30) → 1.2 → 1.2 * (-0.82) -0.984 取 min min(-1.066, -0.984) -1.066part1 0.50 * (-2.0) -1.0 part2 clamp(0.50) → 0.8 → 0.8 * (-2.0) -1.6 取 min min(-1.0, -1.6) -1.6策略损失 policy_losspolicy_loss - [ (-1.066) (-1.6) ] / 2 policy_loss - [ -2.666 / 2 ] policy_loss - [ -1.333 ] policy_loss 1.333价值损失 value_lossV(s0) -3.18 V(s1) 0.0 td_target0 -1.0 0.9*0 -1.0 td_target1 0.0 loss0 (-3.18 1.0)^2 ( -2.18 )^2 4.75 loss1 0 value_loss (4.75 0)/2 2.375手算结果ratio0 1.30 ratio1 0.50 policy_loss 1.333 value_loss 2.375
图解强化学习 |手算近端策略优化算法(PPO)
欢迎来到图解强化学习的世界博客主页卿云阁欢迎关注点赞收藏⭐️留言首发时间2026年5月26日✉️希望可以和大家一起完成进阶之路目录PPO 算法的基础认识PPO 算法的网络结构① Actor —— 策略网络② Critic —— 价值网络网络更新① Actor 网络更新策略更新② Critic 网络更新价值评估更新手动计算广义优势估计模型更新updatePPO 算法的基础认识PPO Proximal Policy Optimization近端策略优化算法PPO 是目前落地最广、上手最简单、训练稳定性极强的通用强化学习算法兼顾离散与连续动作场景游戏AI、机器人控制、大模型对齐、工业决策等任务普遍首选它。它属于策略梯度类算法核心思想是严格限制新旧策略的更新幅度在保证策略稳步提升的同时避免参数更新幅度过大导致训练震荡、模型崩溃还支持重复利用采样样本大幅提升数据效率。PPO 算法的网络结构① Actor —— 策略网络输入状态 s输出动作分布均值 方差、动作 a、对数概率 log π(a|s)作用根据状态输出要执行的动作是负责 “做决策” 的网络② Critic —— 价值网络输入状态 s输出状态价值 V (s)评估当前状态好不好、未来能拿多少奖励作用评价 Actor 做得好不好计算优势函数 A网络更新① Actor 网络更新策略更新使用PPO-Clip 损失函数目的更新策略让好动作概率变高坏动作变低但更新幅度被限制不会崩。输入状态 s旧动作概率 π_old新动作概率 π_new优势函数 A计算求概率比 r π_new / π_old裁剪到 [1-ε, 1ε]取 min (r*A, clip (r)*A) → 得到最终损失反向传播更新 Actor特点只在 “近端” 小范围更新训练超级稳定不会像传统策略梯度那样炸掉② Critic 网络更新价值评估更新使用MSE 均方误差损失目的让价值估计 V (s) 更准从而让优势函数 A 更准。输入状态 s实际回报 G / TD 目标值计算Critic 输出 V (s)计算 V (s) 与 目标回报 的误差MSE 损失反向传播更新 Critic特点简单、稳定帮助 Actor 获得更准确的优势信号手动计算当前执行 → 永远用旧策略动作更新网络 → 只用新策略算旧动作的概率新策略的动作要等到【下一轮】才会执行广义优势估计TD 误差td_deltatd_delta 即时奖励 折扣×下一个状态价值 - 当前状态价值GAE 优势advantageadvantage 当前TD误差 衰减系数 × 下一步的advantagetd_delta [10, 5, -10] gamma * lamda 0.81 衰减系数t2r -10 advantage -10 0.81×0 -10 r 5 advantage 5 0.81×(-10) -3.1 r 10 advantage 10 0.81×(-3.1) 7.489 GAE 优势 [7.489, -3.1, -10]模型更新updategamma 0.9 lamda 0.9 clip_eps 0.2 → 裁剪范围 [0.8, 1.2] # 两条样本 state0 [1.0, 0.0, 1.0, 0.0, 0.0, 0.0] state1 [0.9, 0.1, 0.8, 0.2, 0.5, 0.1] action0 0 action1 2 advantage [-0.82, -2.0]新旧概率比 ratio旧策略 s0 动作 0 概率 0.70 旧策略 s1 动作 2 概率 0.10 old_log_prob0 ln(0.70) ≈ -0.357 old_log_prob1 ln(0.10) ≈ -2.303 新策略 s0 动作 0 概率 0.91 → ratio≈1.3 新策略 s1 动作 2 概率 0.05 new_log_prob0 ln(0.91) ≈ -0.094 new_log_prob1 ln(0.05) ≈ -3.000 new_log_prob0 - old_log_prob0 (-0.094) - (-0.357) 0.263 ratio0 exp(0.263) ≈ 1.30 new_log_prob1 - old_log_prob1 (-3.000) - (-2.303) -0.697 ratio1 exp(-0.697) ≈ 0.50 ratio0 1.30 超过 1.2需要裁剪 ratio1 0.50 低于 0.8需要裁剪PPO Clip 损失adv0 -0.82 adv1 -2.0part1 1.30 * (-0.82) -1.066 part2 clamp(1.30) → 1.2 → 1.2 * (-0.82) -0.984 取 min min(-1.066, -0.984) -1.066part1 0.50 * (-2.0) -1.0 part2 clamp(0.50) → 0.8 → 0.8 * (-2.0) -1.6 取 min min(-1.0, -1.6) -1.6策略损失 policy_losspolicy_loss - [ (-1.066) (-1.6) ] / 2 policy_loss - [ -2.666 / 2 ] policy_loss - [ -1.333 ] policy_loss 1.333价值损失 value_lossV(s0) -3.18 V(s1) 0.0 td_target0 -1.0 0.9*0 -1.0 td_target1 0.0 loss0 (-3.18 1.0)^2 ( -2.18 )^2 4.75 loss1 0 value_loss (4.75 0)/2 2.375手算结果ratio0 1.30 ratio1 0.50 policy_loss 1.333 value_loss 2.375