强化学习中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 ------------------------------------------------ ...
随机推荐
- Linux操作系统RedHat6.5安装
1.说明 安装Linux操作系统Red Hat 6.5, 安装镜像为rhel-server-6.5-x86_64-dvd.iso. 2.开始安装 在BIOS里设置成从光驱启动, 服务器上电后会加载光驱 ...
- 『无为则无心』Python函数 — 30、Python变量的作用域
目录 1.作用于的概念 2.局部变量 3.全局变量 4.变量的查找 5.作用域中可变数据类型变量 6.多函数程序执行流程 1.作用于的概念 变量作用域指的是变量生效的范围,在Python中一共有两种作 ...
- websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用
1.前言 描述一下今天用websocket踩得坑 --->空指针异常! 我想在websocket里面使用service 层的接口,从中获取数据库的一些信息 , 使用 @Autowired 注 ...
- UVA 10815 Andy's First Dictionary (C++ STL map && set )
原题链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- test_4 实现一个统计函数运行时间
1.datetime显示当前时间 import datetimeimport timedef func(): t = datetime.datetime.now() print t print &qu ...
- 离线下载第三方Python包
1.进入Python第三方包下载地(https://pypi.org/)搜索自己需要的包 2.下载需要的包的版本 3.将.whl格式的文件更改为.zip文件,并且解压 4.将解压的2个文件放到Pyth ...
- 网络协议学习笔记(六)http和https
概述 之前讲解了传输层的相关知识,现在讲解一下关于应用层的知识,主要是大家所熟悉的http和https,这2中是咱们最熟悉的协议了,但是也是最不熟悉的协议. HTTP协议:看个新闻原来这么麻烦 HTT ...
- 【代码优化】Bean映射之MapStruct
[代码优化]Bean映射之MapStruct 一.背景 领域模型相互转换就只能靠手工的 get()/set()? 普遍的做法有以下几种: 手工 get()/set(): 构造器: BeanUtils ...
- 谱分解(SD)
前提:矩阵A必须可相似对角化! 充分条件: $A$ 是实对称矩阵 $A$ 有 $n$ 个互异特征值 $A^{\wedge} 2=A $ $\mathrm{A}^{\wedge} 2=\mathrm{E ...
- [硬拆解]拆解一个USB转CAN-FD总线设备-PCAN-USB FD
描述 CAN FD适配器PCAN-USB FD允许通过USB将CAN FD和CAN网络连接到计算机.高达500伏的电流隔离将PC与CAN总线分离.简单的操作及其紧凑的塑料外壳使该适配器适用于移动应用. ...