PPO学习笔记

PPO(近端策略优化) 绝对是目前工业界和学术界最受欢迎的算法,经常用来当baseline

概念:

1.优势函数

2.优化目标

影响策略该更新多少步长

主要部分
结论:

策略函数在比值超过设定的范围的时候,就会触发截止,然后直接把梯度设置为0,不再进行状态动作对的概率的更新了,因为动作更新幅度已经超过一定阈值了,不再进行梯度上面对参数的优化。

价值损失在工程上一般不做截断,因为被证明了,有时候正确的识别价值比稳健的识别价值好。价值损失用的是MSE。

3.价值估计

蒙特卡洛方法(MC)model free online

蒙特卡洛方法是从一个状态出发,完成了一整个回合后,获取到了一条轨迹。然后通过对多条轨迹获取的累计奖励求平均来得到这个状态的价值。本质是大数定律。

优点:直观,正确

致命的缺点:方差极大

MC是一种基于完整轨迹求均值的无偏估计,本质是大数定律;它是回合制(Episodic)的无模型方法。

时序差分误差(TD)model free online

时序差分误差是自举法,采用的是真实获取的奖励 𝑅 + 对未来的价值估计 𝛾𝑉(𝑠′)作为目前价值的估计。本质是不动点定理,初始值不管设为什么,最终都会收敛到一个确定的值。

TD 是一种基于 自举法的方法,它用单步真实奖励加上对未来的估值作为目标,产生 TD 误差来更新当前状态。它不依赖大数定律,而是利用贝尔曼算子的压缩映射/不动点原理,保证了无论初始值是什么都会收敛。它是一种单步的在线、无模型算法。

广义优势估计(GAE)

GAE是MC和TD的中和

TD和MC的优缺点

公式

GAE是MC和TD的中和(更加趋近于MC,TD增加了一些平滑效果)

4.主体网络

Actor(策略网络):输出动作的概率分布(连续空间下为均值 + 标准差),负责生成策略;

Critic(价值网络):输出状态的价值V(s),负责估计优势函数。

两者可共享骨干网络(降低参数规模),也可分离;连续动作空间中,Actor 通常输出动作分布的均值(μ)和标准差(σ),通过高斯分布采样动作。

5.KL散度

KL散度用来衡量两个概率分布之间的差异。是在算智能体更新策略后,新策略的行为模式和老策略相比,偏离了多少

最终理解:

既然贝尔曼方程是真理,为什么还要搞出 MC、TD、GAE 这么多花样?

因为动态规划 (DP) 有一个致命弱点:它必须知道"转移概率 P"(也就是说,你必须有这个宇宙的上帝视角的源码,这叫 Model-based)。

但在现实中,机器人不知道风刮多大它会摔倒,它没有 P。面对未知的 MDP,机器人不能"算",只能去"试错(采样)"。

MC,TD,GAE这种估计价值的函数,本质上是在估计底层的贝尔曼公式中的价值,因为转移概率P是没有办法知道的(model-free)。

策略迭代和值迭代都是贝尔曼公式的变体。贝尔曼公式又是可以由马尔可夫过程推出来的,所以说,这两者是等价的。

贝尔曼期望方程 (Bellman Expectation Equation): 描述的是在特定策略下,当前状态价值等于"当前奖励 + 下一个状态价值的期望"。(策略迭代里的策略评估,用的就是这个)。

贝尔曼最优方程 (Bellman Optimality Equation): 描述的是在最优策略下,当前状态价值等于"所有可能动作中,收益最大的那个动作的价值"。(值迭代,用的就是这个)。

它们在学术上统称为 动态规划(Dynamic Programming, DP),本质上就是用全微分的思想,暴力求解贝尔曼方程。

一个完整的现代 RL 算法 = 如何评估价值 + 如何更新策略

我对PPO的理解:

GAE是负责估计价值的,也就是用来算价值头的损失MSE的,更新价值头的参数。

同时GAE也可以算优势函数A,从而得到优化目标最重要的一项,动作策略截断项,如果发现策略更新过多,就进行梯度截断,停止更新策略头的参数。

相关推荐
努力学习_小白3 小时前
ResNeXt-50——学习记录
pytorch·深度学习·学习
三品吉他手会点灯4 小时前
C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
c语言·开发语言·笔记·算法
2601_colin4 小时前
Codex插件全流程实战指南
开发语言·经验分享·笔记·微信开放平台
疯狂打码的少年5 小时前
输入输出控制方式:DMA(直接存储器存取)
网络·笔记
cuso4win5 小时前
Feed 流面试笔记
笔记·面试·职场和发展
毕竟是shy哥5 小时前
基于提示引导适配器的实体级对齐遥感图文检索
人工智能·学习·bert·transformer
happyness446 小时前
向AI学习,而不是把任务扔给AI
人工智能·学习
世人万千丶6 小时前
鸿蒙PC问题解决:窗口拖动与拉伸时页面布局瞬间错乱、回弹后恢复
学习·华为·开源·harmonyos·鸿蒙·鸿蒙系统
zyl837216 小时前
Python NumPy 学习
python·学习·numpy
装不满的克莱因瓶7 小时前
学习使用 Python 机器学习工具 sklearn
人工智能·python·学习·机器学习·ai·agent·智能体