| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 强化学习 | 策略梯度 | Natural PG | TRPO | PPO -> 正文阅读 |
|
[人工智能]强化学习 | 策略梯度 | Natural PG | TRPO | PPO |
学习情况: ?🌱 耗时10天,学习了策略梯度。从基础概念开始,对Gradient、PG (REINFORCE、Q Actor-Critic、Advantage Actor-Critic)、Natural PG、TRPO、PPO?递进学习 🌱 近1个月的学习,发现RL跟我以前做DL (偏重对某个dataset调一个好的NN structure) 不太一样,很重视理论推导,且涉及多数学概念 🌱 查阅出现的数学概念,并根据论文推导每一步,这花了我很多时间。到后面发现这点很重要,尤其在从NPG到TRPO时 🌱 全文共1.3w字,含大量手写笔记。如有理解错误,欢迎指正 博客特色: 🌟 循序渐进,从 Gradient 至 Policy Gradient?至 Natural Policy Gradient 至 TRPO 至 PPO 递进式进习,夯实基础 🌟 从概览到细节,避免一叶障目。如写TRPO时,首先总结其在目标函数和梯度更新 (基于NPG) 两方面的改进,而后进行细节推导,最后将TRPO套入 "Trust Region Algorithm" 框架中深化理解 🌟 对涉及到的数学概念均撰写注释,包括导数、偏导、方向导数、梯度、概率分布、信息几何学、黎曼流形、KL divergence、熵、信息量、Fisher矩阵、Hessian矩阵、Jacobi矩阵、Lagrange Multiplier Method、Importance Sampling、MM算法、Conjugate Gradient、Trust Region等30余数学概念 🌟 大量手写笔记,逻辑清晰 🌟 前序文章:强化学习入门笔记 | UCL silver RL | UC Berkely cs285 目录: 🌻?Gradient 🌵?MC Policy Gradient (REINFORCE) 🌵?Q Actor-Critic Policy Gradient 🌵?Advantage Actor-Critic Policy Gradient 🌻?TRPO 🌴?TRPO核心概述 🌴?TRPO推导细节 🌵?目标函数 🌵?梯度更新 🌻?PPO 🌴?PPO核心概述 🌴?PPO1:Adaptive KL Penalty Coefficient 🌵?步骤 🌵?伪代码 🌴?PPO2:Clipped Surrogate Objective 🌵?步骤 🌵?伪代码 Gradient这一系列方法都是基于梯度的。简单复习下梯度概念,手写了下 Poliy Gradient定义Policy Objective Function首先,定义一下策略目标函数 求解Policy Gradient那么对Policy Objective Function求一下Policy Gradient: 推导到上面红框里的公式后,发现对所有动作都使用同一个加权 (整条trajectory的reward),这显然不合适。 如何对每个动作都采用不同的加权呢? 很自然地想到,可以使用从此动作之后的reward (即这个动作造成的后果有多好),而非整条trajectory的reward(即所有动作累加起来的效果有多好),这就是REINFORCE的思想了,如下 MC Policy Gradient (REINFORCE)REINFORCE算法的伪代码如下: Q Actor-Critic Policy Gradient?REINFORCE算法也有点问题,方差比较大,这是由于无偏估计问题: 简单比较一下使用MC采样的REINFORCE算法和使用TD采样的Q Actor-Critic算法,如下图: Advantage Actor-Critic Policy GradientQ Actor-Critic可能存在这样一个问题: 当采样很少时,有的动作可能不会被取到。而这时其它被采样到的动作的Q都是正的。 这样的话,动作被Q加权后,被采样到的动作的概率在迭代中会升高,未被采样到的动作的概率在迭代中会降低(因为概率和为1)。 这并不有利于Exploration,况且未被采样到的动作的表现未必不好。 所以,我们需要 "负" 的奖励,即 "相对好",直接的思路就是引入baseline作为 "好" 与 "不好" 的基准。 这就产生了Advantage Function (优势函数) 的概念,,这里的V(s)就是基准。 直观来理解一下,Q是在状态s下动作a的好坏,V是状态s的好坏 (其实V(s)是所有Q(s,a)的期望)。 那么如果Q>V,就是说当前动作能使当前状态更好,即相对是好的。如果Q<V,就是说当前动作使得当前状态更差,即相对是差的。 则使用A加权动作时,如果A>0,即这个动作是相对好的,则该动作的概率在迭代中会被提高;如果A<0,即这个动作是相对差的,则该动作的概率在迭代中会被降低。 在中,一般将Q用V表示。表示V时,可以使用TD或MC采样方法,一般使用TD方法,TD(0)和n-step TD都可以。 在TD(0)中,,则 其中,S'为S的后继状态 在n-step TD中,,则 其中,S'为S的后继状态 则Advantage Actor-Critic算法的策略梯度表示为, 常见Policy Gradient表达形式那么最后总结一下策略梯度家族,一般策略梯度有以下几种表达形式:
一份总结得更全面的:
Natural Policy Gradient1998 - Armani - Why Natural Gradient? 1998 - Armani - Natural Gradient Works Efficiently in Learning 2002 - Kakade - A Natural Policy Gradient 常规梯度下降中,参数优化方向: 这个迭代公式的合理性依赖于一个底层事实:J(θ)的变化量和参数变化量在同一个Euclid空间中度量。
参数变化量固然在Euclid空间中度量,但是在很多问题中,J(θ)的变化量并不适合在欧氏空间中度量。例如当模型为,即概率分布模型。 此时,分布函数的数量变化并不是概率属性变化的合理表征。
所以如何衡量分布和的概率属性距离? 在信息几何中,可以将概率分布模型全体视为参数空间中的一个黎曼流形,可以使用KL-divergence来衡量分布的概率属性距离,此时Fisher Information Matrix是黎曼流形的Riemann度量。
KL-div能够更好地衡量两个策略间的距离。使用KL-div对策略进行约束,能够使得两个策略之间不要相差太大。通过KL约束,解决了传统梯度算法中的"学习率"和"梯度方向"(策略空间上的) 的问题。
在使用KL-div进行约束时,可以规定,即规定两个策略的概率分布之间差异为ε(一个常数),即进行等式约束。 当然,不等式约束也可以。不过是需要满足的KKT条件不同罢了。 使用Lagrange乘子法,将KL-div约束代入目标函数,则最大优化问题变成 其中, 其中,G(θ)是Fisher Information Matrix,即
那么继续。 将代入,得到:? 要求极值,求个导数吧 解出,。 λ不重要,这个系数标量可以随便取。重要的是方向! 遂记参数的最佳变动方向为,它就是自然梯度Natural Gradient啦 再回忆一下,Natural Gradient其实就是对策略加入了KL-div约束后算出来的梯度方向 则使用Natural Gradient的参数更新方程为: , 其中,,G(θ)是Fisher矩阵(部分文献中也喜欢用F或者I代表Fisher矩阵)
TRPO2015 - John Schulman - Trust Region Policy Optimization TRPO核心概述TRPO (Trust Region Policy Optimization),即置信域策略优化。 TRPO分别在目标函数和梯度更新两方面做了改进 梯度更新方面的改进TRPO基于Natural Policy Gradient (即用KL divergence约束policy,避免policy剧烈迭代),做了以下两点改进: 第一点,为避免求解复杂的Fisher/Hessian逆运算,使用了conjugate gradient 第二点,将学习率换成 α^j?* NPG原始的学习率,α∈(0,1),由大至小线性搜索使目标函数大于0 (即本次迭代比上次好),且符合KL divergence?的最小整数j值 (防止泰勒展开带来的误差) 即像原文讲的,"TRPO is related to prior methods(e.g.natural policy gradient) but make several changes,most notably by using a fixed KL divergence rather than a fixed penalty coeffificient"? 目标函数方面的改进在目标函数中引入Importance Sampling,提升了sample efficiency (原来每次采样完后只能更i性能一次梯度就把样本扔掉。引入IS后,可以多次使用θ'采样得的数据更新θ,即使用一批数据进行多次gradient ascent)。 还有一点有意思的是,作者将新的expeted disconted reward拆成了两部分,即旧的reward+某一部分。思想是,如果,理想情况下,"某一部分"恒为正,则reward是单调不减的,即每次策略都比之前的好。 这之外还有一点特殊的,在推导surrogate function的过程中,作者使用了MM算法,即找了目标函数的下界作为surrogate function
TRPO推导细节那么对TRPO的行文细节理解一下 目标函数先推导下目标函数
这其实就是trust region algorithm的图,取自?这篇?,讲得蛮好的这块
好了,目标函数推导出来了!下面就可以计算natural gradient,然后梯度上升了。跟上一part讲的梯度更新思路一样。 (但是好像看伪代码中,还是用的advantage value) 在实际应用中,会用样本平均值表示期望,论文中提到了两种采样方法: 关于vine sampling中的rollout,这篇?解释得蛮清晰。且在vine sampling中,"trunk" 是回合更新的,而 "brank" 是单步更新的 "The vine method gives much better estimates of the advantage values. But the vine method must perform far more calls to the simulator for each these advantage estimates." "The vine method requires us to generate multiple trajectories from each state in the rollout set ,which limits this algorithm to setting where the system can be reset to an arbitrary state. In contrast,the single path algorithm requires no state reset?and can be directly implemented on a physical system." 梯度更新接下来看下梯度的更新方程 首先按照Natural Policy Gradient的推导过程,我们得到以下更新方程:
TRPO做了两点改进 其一,使用conjugate gradient (CG) 避免求解复杂的Hessian / Fisher矩阵逆运算
其二,TRPO将学习率换成 α^j * NPG原始的学习率,α∈(0,1),j∈{0,1,2...},由大至小线性搜索最小的j使得满足"improvement of the surrogate objective and satisfaction of the KL divergence constraint".
"Starting with the maximal value of the step length β(即NPG算出来的原始学习率)" in the previous paragraph,we shrink β exponentially (指数地,即α^j) until the objective improves. "With this line search,the algorithm occasionally computes large steps that cause a catastrophic degradation of performance" 感觉line search是起到trust region的作用吧,通过这里可以再理解下TRPO将KL div放到约束项而非惩罚项的问题 贴下Natrual Gradient Algorithm和TRPO的伪代码对比下: TRPO将KL div放在了约束项中,而非惩罚项,原因是δ好调,C不好调且太大。具体看?这篇,这篇?里也提到了这一点 看下TRPO更详细的伪代码: Trust Region好了,最后总结下Trust Region Policy Optimization中的 "Trust Region" 及 "Trust Region Algorithm"?(数值优化领域的经典算法) 来看下什么是 "Trust Reigon" 看懂什么是Trust Region,再看下 Trust Region Algorithm是怎样的 它分为两步,"approximation" 和 "maximization"。 回想一下TRPO的整个流程,还真的是遵循这个大框架,即可以分为这两步,然后反复迭代: PPO2017 - John Schulman - Proximal Policy Optimization Algorithms PPO核心概述PPO同样是OpenAI的作品,它和TRPO是一个作者。PPO延续了TRPO的核心思想,即引入IS提高sample efficiency和约束两个策略间差异不要过大 但是相较TRPO,PPO简化了问题的求解方式,降低了计算复杂度,在实际工程中用得更多
PPO有许多version,在最初的论文中只介绍了两种,PPO1和PPO2 PPO1:TRPO之所以将KL div放到约束项而非惩罚项中,就是因为参数β难调。PPO1将KL div放到约束项中,自适应地动态调整KL前的参数,被称为 "Adaptive KL Penalty Coefficient" PPO2:PPO2同样想使两个策略间差异不要过大,但是未使用KL约束,而是通过clip,巧妙设置新旧策略比值的范围
其实有NPG和TRPO的基础后,PPO就很好理解了。PPO与TRPO相同的部分将不再描述 PPO1:Adaptive KL Penalty Coefficient"The theory justifying TRPO actually suggests using a penalty instead of a constraint".但因为权重β难以调整的问题,TRPO没有选择将KL div作为惩罚项放到目标函数进而解决无约束问题,而是将KL div作为hard constraint处理 而PPO1将KL div放到约束项中: 那么KL div前面的权重如何设置呢? "Experiments show that it is not sufficient to simply choose a fixed penalty cofficient β and optimize the penalized objective with SGD.Additional modifications are required”.简单地设定一个权重值β在实验中表现不佳 所以PPO1中使用了自适应调整权重β的方法 步骤即首先设置一个可接受的KL div最大值???和可接受的KL div最小值? 如果一轮优化完后,KL div太大,则说明后面的惩罚项??没有发挥作用,则增大β 如果一轮优化完后,KL div太小,则说明后面的惩罚项的效果太强了,担忧只优化了后一项,这不是我们想要的,则减小β 即时,减小β;时,增大β 伪代码PPO2:Clipped Surrogate Objective首先定义了新旧策略间的比值r(θ),将L写成 步骤PPO2的main objective为: min函数:在两个式子间取最小值 clip函数: 假设ε=2,则clip函数为, 即当<0.8,则输出0.8;当>1.2,则输出1.2;当∈[0.8,1.2],则不裁剪,照旧输出 这样就保证了新旧策略的比值在区间 [0.8,1.2] 内,即两个策略不至于相差太大
PPO2设计得很巧妙的还有一点,就是在clip函数后乘了 是有正负的啊。当这个动作 "相对好" 的时候,>0;当这个动作 "相对差" 的时候,<0 那么再搭配上min这个函数,就会有这样较有意思的效果:
直观理解下,当A>0,即该state-action是相对好的,则希望增大这个state-action的概率,但是又不能增得太大导致太大,即前后策略相差太大,故限制其比例不得大于1+ε 当A<0,即该state-action是相对差的,则希望减小这个state-action得概率,但是又不能减小太多使得太小,即前后策略相差太大,故限制其比例不得小于1-ε 结合一些其它考虑,PPO2最后的objective: ?是quared-error,表示为,S是entropy bonus
其中,估计advantage value用到了GAE (Generalized Advantage Estimator): 伪代码
AC训练过程: 每轮迭代中,并行开N个Actor (θ') 与环境交互,采样N条长度为T的trajectory,即共收集NT个样本 使用GAE估计advantage value,和action probability一起存入buffer 从buffer中采样M (Minibatch Size)个样本,训练K个epoch (K其实是一个样本复用次数) OpenAI baseline中的一般设置是,K = 3,Minibatch Size = NT / 4,则一轮迭代中,通过?SGD,参数更新12次 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 16:38:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |