强化学习中REIINFORCE算法和AC算法在算法理论和实际代码设计中的区别
背景就不介绍了,REINFORCE算法和AC算法是强化学习中基于策略这类的基础算法,这两个算法的算法描述(伪代码)参见Sutton的reinforcement introduction(2nd)。
AC算法可以看做是在REINFORCE算法基础上扩展的,所以这里我们主要讨论REINFORCE算法中算法描述和实际代码设计中的一些区别,当然这也适用于AC算法:
1. 时序折扣项为什么在实际代码中不加入
REINFORCE算法中是需要对状态动作对出现在episode内的顺序进行折扣加权的,即 γt 。但是在实际代码设计中我们并不会在实际计算中对每个状态动作对进行时序折扣加权的,个人总结原因:
在论文推导中我们其实是假设在整个状态动作对都是可以遍历的条件下进行的,或许可以这样理解,在一个batch size中就已经包括了所有的状态动作对(准确的说是包括了所有的episodes,按照概率采样到了所有的episodes),所以每个状态动作对需要根据理论推导加入时序折扣,但是在实际代码中我们都是面对较大规模的问题,此时我们的一个batch size可以看做是对整体状态动作对的一个mini抽样,此时加入时序折扣非但可能不会更好的贴近实际分布而更可能造成扰乱并偏离实际状态动作对的分布,况且加入时序折扣更会增加实际计算的复杂性。因此在REINFORCE算法和AC算法的实际代码中我们不加入时序折扣。
2. REINFORCE算法实际代码中为什么会对一个episode内的所有状态动作对的折扣奖励和进行规则化(Regularize)
总所周知在REINFORCE算法的论文和实际理论中并没有对一个episode内的所有状态动作对的折扣奖励sum做Regularize,但是在实际代码中却进行了Regularize。在REINFORCE的实际代码编写中一个episode内的每个状态动作对的折扣奖励sum都是相当于通过蒙特卡洛方式得到的,然后再对一个episode内的所有状态动作的折扣奖励和做规则化(减去均值除去方差),最后获得一个episode内每个状态动作对的规则化后的折扣奖励和。
可以知道对episode内的每个状态动作对的折扣奖励sum进行规则化是代码编写中的trick,这个trick并不是论文中给出的而是实际代码编写和运行中得到的trick,经过大量实验后发现该trick确实好用。为什么这个trick好用呢,分析一下可以知道REINFORCE属于蒙特卡洛方式的采样估计,该种方式虽然无偏但却高方差不利于收敛,所以要是严格按照论文不采用这个trick会不利于收敛。同时可以参考安德鲁.NG.吴恩达的博士论文“reinforcement learning reward shape”可以知道通过对reward的shape可以提高算法的训练性能。REINFORCE算法采用这个trick后可以很好的减少训练时候的方差,有利于收敛。
===========================================
强化学习中REIINFORCE算法和AC算法在算法理论和实际代码设计中的区别的更多相关文章
- mahout中kmeans算法和Canopy算法实现原理
本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...
- 用Spark学习FP Tree算法和PrefixSpan算法
在FP Tree算法原理总结和PrefixSpan算法原理总结中,我们对FP Tree和PrefixSpan这两种关联算法的原理做了总结,这里就从实践的角度介绍如何使用这两个算法.由于scikit-l ...
- 强化学习(五)—— 策略梯度及reinforce算法
1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...
- (转)两种高效过滤敏感词算法--DFA算法和AC自动机算法
原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十 ...
- 强化学习(十七) 基于模型的强化学习与Dyna算法框架
在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...
- Prim算法和Kruskal算法的正确性证明
今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明.刚才看了一下<算法>一书中的相关章节,使用了切分定理来证 ...
- 深度强化学习中稀疏奖励问题Sparse Reward
Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...
- 强化学习(十)Double DQN (DDQN)
在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...
- 【转载】 强化学习(十)Double DQN (DDQN)
原文地址: https://www.cnblogs.com/pinard/p/9778063.html ------------------------------------------------ ...
随机推荐
- openmesh - impl - Remove Duplicated Vertices
openmesh - impl - Remove Duplicated Vertices 关于openmesh元素删除实现的介绍参见:openmesh - src - trimesh delete a ...
- 【优雅代码】07-spring下的优秀工具类
[优雅代码]07-spring下的优秀工具类 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺手点 ...
- Jenkins执行远程服务器的脚本-Hudson SCP publisher plugin插件
1.搜索插件 2.配置远程服务器账号密码 3.配置远程服务器 4.构建配置
- Python_闭包
闭包并不只是一个python中的概念,在函数式编程语言中应用较为广泛.理解python中的闭包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设计思想. 1.概念介绍 首先看一下维基上对闭 ...
- nginxWebUI
nginx网页配置工具 github: https://github.com/cym1102/nginxWebUI 功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, ...
- AP原理与最终一致性 强一致性 弱一致性
转载自:http://www.blogjava.net/hello-yun/archive/2012/04/27/376744.html https://blog.csdn.net/c28905453 ...
- python中addict模块,设置和读取嵌套字典
源码地址: https://github.com/mewwts/addict/blob/master/README.md
- 获取js代码运行的时间
console.time('yue') //代码部分 console.timeEnd('yue')
- BeanUtils.copyProperties 选择性赋值字段
BeanUtils.copyProperties 在字段赋值上有强大的功能,如果有两个的类,如果需要将相同的字段赋值,就可以直接赋制.而不需要每个字段都需要一个一个赋制. BeanUtils.copy ...
- 默认安装的phpMyAdmin会存在哪些安全隐患
利用: 1. 利用慢查询日志写入webshell 2. phpMyAdmin的setup目录暴露一些隐私信息 3. 通过phpMyAdmin修改php的ini配置 ...