专栏首页嘘、小点声李宏毅的强化学习视频用于梳理翻阅

李宏毅的强化学习视频用于梳理翻阅

本文主要是整理策略迭代的部分,重在阐明原理。李宏毅的视频,见网上。

最终说明OpenAI的默认强化学习算法PPO的部分。(Proximal Policy Optimization)

蓝色标记为有待查阅具体代码。不同于强化学习的值迭代的容易理解和表达,策略迭代更需要耐心、细心、思考。

优化目标

策略 ? 是可以用,带着训练参数?的神经网络表示。策略?网络,输入当前观察值observation(state),输出action的概率。

该网络的输出action,如果是连续的,每个动作用一个神经元表示,大小可以为连续值。动作是离散行为,则每个神经元输出一个概率。该概率表示为,该行为可能采取的可能性。在实际行为过程中,从该概率中进行采样。

下图,当输入状态S,则输出的三个离散动作的概率。

强化学习中,Agent的目标是,在MDP(马尔科夫决策过程)模型中,最大化累积奖励R。如下:在每一幕的运行过程中,最大化累积奖励R,为所有r的和。

在一条马尔科夫链中,其每一条轨迹的表达使用 ? 表示。?_? (?)表示为该条轨迹 ? 出现的概率。?(?_1 )为初始时,出现?_1的概率。?_? (?_1 |?_1 )等,为在?_1下选择?_1的概率。之后的?(?_2 |?_1,?_1 )等类似,表示在?_1,?_1下,能到达?_2的概率(转移概率)。

在每个轨迹 ? 中,每一对s与a,产生一个奖励r。最终,在每一个轨迹中,产生一个累积奖励R。

针对同一个策略模型 ? ,其每次交互的环境、每次的行为等,都是不确定的,最终有不同的轨迹 ? 。

但是,轨迹都是由该策略模型 ? 得到的,并得到不同的累积奖励R。强化学习的优化目标,则是优化该模型,使得平均累积(期望奖励)奖励最大化。

如下的表达中,平均奖励(奖励期望)为,在每条轨迹 下产生的累积奖励,和该轨迹产生的概率?_? (?),的乘积和。

使用期望的表达中,为,在概率?_? (?)下,采样轨迹 ? ,在所有轨迹 ? 下的,平均奖励R。

策略梯度(Policy Gradient)

优化目标为奖励期望,使得其最大化,则直接通过求梯度方式,对其求梯度,使用梯度上升的方法,得到最大化期望奖励。

实质上,对奖励R求梯度,作为自变量的为?。?为策略模型 ? 的参数(神经网络的权值、训练参数),实质上也就是,通过训练模型 ? ,最终获得最大的期望奖励R。

通过蓝色方框的公式调用,得到第二行,通过期望的表示变换,得到第三行左。

在执行足够多的N次轨迹后,首先,该N个轨迹,仍然是由策略 ? 中的?决定的。在足够多的N下,基本服从期望下标?~?_? (?)中的轨迹分布,所以可以约等。

第四行对第三行右,进行了进一步推导,将?_?的时间线进行了展开。但是是不是少了一个转移概率。

不过很明显的是,转移概率在轨迹中,是由环境Environment确定的,因此使用?作为自变量求梯度,其为常数表示,不影响最终梯度方向。

因此,策略梯度的训练表示如下:其中的梯度在上图中已经得到计算。

在实际实现过程中,如使用TensorFlow计算梯度,其计算过程可以和交叉熵有关。

策略梯度的实现过程与修正

策略梯度的计算流程上:

1 根据Agent和环境的交互,通过策略模型 ? 得到一条轨迹? 。在该轨迹结束后,得到累积奖励R。

2 使用梯度上升的方法,最大化R。在梯度上升的计算过程中,????_?其实就是策略网络 ? 输出的概率,实质上也就是梯度上升,改变 ?,从而最大化R。

重复以上步骤,使得R越来越大即可。

策略梯度在应用过程中发现有两个问题:

1 在一些强化学习环境中,轨迹?下的所有行为奖励,都是正的奖励值,则根据公式,每次都是梯度上升。

那么,使得R最大化的过程中,即,策略网络 ? 被训练时,采样的影响导致,针对同一个状态observation(state)时,输出的行为概率分布更倾向于采样更多的地方训练。

在同一状态下,abc三个行为的概率和为1,理想情况是b的动作最优。但是a采样次数更多而b更少,则根据梯度上升时R都是大于0,策略网络对a的行为强度增强,导致了相对于b行为的强度减少。同理图中第二行,当a没有被采样一定数量多,则a会相对于理想情况下减少。

因此应用过程中,对R增加baseline,使得R可以出现负值,只增加哪些高于平均奖励的R对应的轨迹策略。出现了负值,则表示该轨迹不够优秀,应该降低,采样越多,则降低越多。

2 奖励R的度量问题。在策略网络 ? 下,整条轨迹的累积奖励R,不足以度量 ? 中每一个输出行为概率的好坏。每个输出应该对应到每个奖励,而不是整条轨迹R。

在轨迹中,当前行为a,在一定程度上决定了,后面的状态-行为对,越往后的状态行为对,其决定性的影响越小。因此,当前行为a的奖励r,为该行为和之后所有行为的和。并使用?衰减因子,模拟其决定性影响越小导致的本次行为a的奖励越小。

重要性采样

重要性采样表示为:无法得知f(x)在p分布上的期望,则使用任意的分布q,来间接得到f(x)在p分布上的期望。

具体操作如第二行,最终:f(x)在p分布上的期望,转化为了f(x)*p(x)/q(x)在分布q上的期望。

虽然期望相等,但是方差是不等的。下图中,第一行为重要性采样,第三行为方差展开为期望形式,第四行前者又使用了一次重要性采样,后者直接代换。

结论是,重要性采样前后使用的未知分布p和已知分布q,若比值为1(完全相同),则方差也相同。比值越偏,方差越偏。

方差越偏导致的问题是,当采样次数不够多,则导致重要性采样定理的前后期望值的偏差,出现的可能性越大。

使用如下所述,前者在p分布上的期望,f(x)*p(x)的累加和,基本为负值。后者,当采样点过少时,由于q(x)集中在f(x)的正值部分,虽然p(x)*f(x)/q(x)也很小,但是其值为正。只有采样到一个另外的点,p(x)*f(x)/q(x)又对应了很大,才导致了期望为负。才使得重要性采样定理的前后期望一致性。

在线策略到离线策略

on-policy,其过程和上述策略梯度一样:策略模型? 和环境交互获得轨迹,然后使用该轨迹进行训练。重复该过程。

off-policy,其策略模型?' 和环境交互得到轨迹,策略模型? 学习该轨迹,而策略模型? 自身没有和环境进行交互。

在线策略中,其学习完的轨迹,直接丢弃不能再学习了,因为模型?学习了自身的轨迹以后,模型有了变化,之前的轨迹不再是由该变更过的模型?产生。

离线策略中,其使用另外的模型?',获得的多条轨迹,用于策略模型?的学习,学习完以后的轨迹,因为?'没有改变,其生成的轨迹仍然可用。

(认为是学习的目标,本应该是一个固定的分布,而不是一个变来变去的分布)相对于在线策略,离线策略效率,因为轨迹的生成和学习过程的方便性,而变得更高。

?′对应于模型?',使用重要性采样定理,将在线策略转化为离线策略:

其中第一行为在线策略(之前的策略梯度的大致表现形式,从?中获得轨迹),第二行使用?'中采样,获得轨迹,计算梯度。

在多次采样后,二者的梯度应该相等的。

如下是策略梯度的详细表示形式,并使用重要性采样定理进行的变换。第一行为在线策略,第二行变为离线策略,由于离线策略的奖励部分A,为?'所产生,则变为了?^(?′ )。变了以后和之前的式子,还能相等吗,不能吧,假设能够,继续推导

第三行中,?_? (?_?,?_? )表示的是?_?,?_?出现的概率,通过概率逻辑,变换为两项。而后项的上下两个就姑且认为相等了,比值为1。其实应该是不等的。但是不易求得,并认为相等。

最后一行,通过图中的蓝色框公式,反推得到的f(x),即离线策略下的优化目标函数J(其实和原始情况下的目标函数R的期望类似吧)。

PPO与TRPO

TRPO (Trust Region Policy Optimization)算法是先于Proximal Policy Optimization (PPO)算法提出的。

在TRPO中,其实使用的方法就是在线转离线的策略了,并额外要求?,?′有一个相似性(KL散度,数据的原始分布和近似分布之间的相似性)

在PPO中,将相似性写入了优化目标中。要求优化目标尽可能的大,则KL散度尽可能小。

KL散度过小,则?'和?之间的相似度高,可能学不到什么吧?相似度过低,则因为重要性采样的问题,方差影响加之采样量不足,使得前后等式不成立。

这里的?^?表示有多个?',用于生成轨迹。

对比PPO2,其实质仍然是控制?,?′的相似性。但是没有使用KL散度,而是使用clip方法,限制两者的比值在一个范围内。使得当A大于0增强该策略,或者A<0压制该策略的强度,都在一个范围内。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MYSQL多表查询与事务

    select * from emp,dept where emp.`dept_id` = dept.`id`;#设置过滤条件(隐式内连接)

    嘘、小点声
  • python的Email提醒

    from_addr定义了发送的邮箱地址,password定义了SMTP的授权码(非实际密码)

    嘘、小点声
  • java学习与应用(5.1)--Mybatis

    mybatis框架,java持久层框架,ORM(Object Relational Mapping对象关系映射)思想实现结果集封装。 三层架构(表现层展示数据,...

    嘘、小点声
  • 前端|npm全局创建wps加载项

    基于vscode的方式创建wps加载项在获取类型之后,无法自动生成wps加载项,在网上查询相关问题内容也无果。不过Wps官方文档又更新了通过npm全局的方式创建...

    算法与编程之美
  • webrtc笔记(4): kurento 部署

    kurento是一个开源的webrtc mcu服务器,按官方的文档,建议在ubtntu上安装,过程如下:

    菩提树下的杨过
  • 推荐一个我梦寐以求的开源库

    注意:今天我分享的这个开源库,真的是非常的好,是我近半年以来非常需要的一个开源库。这个开源库是关于微信小程序的。

    非著名程序员
  • 5G测试用例竟然和奥迪汽车攀上关系?

    德国汽车制造商奥迪与网络和移动硬件供应商爱立信建立了新的合作伙伴关系,该公司将在Gaimersheim小镇的奥迪生产实验室进行5G移动网络技术的现场测试。

    SDNLAB
  • dom啦4 Node增删改查

    用户7873631
  • 解决“真机上不能读取本地路径”的问题d

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 解决python脚本中error: unrecognized arguments: True错误

    简单来说,其实不用管,可以直接去掉赋值,认为其保存了一个布尔值,不是真的,就是假的。若设置了默认值是false,所以当然的就是false,但是如果不设置的话,s...

    砸漏

扫码关注云+社区

领取腾讯云代金券