背景就不介绍了,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算法在算法理论和实际代码设计中的区别的更多相关文章

  1. mahout中kmeans算法和Canopy算法实现原理

    本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...

  2. 用Spark学习FP Tree算法和PrefixSpan算法

    在FP Tree算法原理总结和PrefixSpan算法原理总结中,我们对FP Tree和PrefixSpan这两种关联算法的原理做了总结,这里就从实践的角度介绍如何使用这两个算法.由于scikit-l ...

  3. 强化学习(五)—— 策略梯度及reinforce算法

    1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...

  4. (转)两种高效过滤敏感词算法--DFA算法和AC自动机算法

    原文:https://blog.csdn.net/u013421629/article/details/83178970 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十 ...

  5. 强化学习(十七) 基于模型的强化学习与Dyna算法框架

    在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL),本篇我们讨论最后一种强化学习流派,基于模型的强化学习(Model Base ...

  6. Prim算法和Kruskal算法的正确性证明

    今天学习了Prim算法和Kruskal算法,因为书中只给出了算法的实现,而没有给出关于算法正确性的证明,所以尝试着给出了自己的证明.刚才看了一下<算法>一书中的相关章节,使用了切分定理来证 ...

  7. 深度强化学习中稀疏奖励问题Sparse Reward

    Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 ​ 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...

  8. 强化学习(十)Double DQN (DDQN)

    在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...

  9. 【转载】 强化学习(十)Double DQN (DDQN)

    原文地址: https://www.cnblogs.com/pinard/p/9778063.html ------------------------------------------------ ...

随机推荐

  1. C# double类型精度丢失问题

    我们先看一段代码,可以在控制台程序中执行看看结果 { double d = 500; double d1 = 233.84; double d2 = d - d1; //d2=266.15999999 ...

  2. Python 国内镜像源

    让 python pip 使用国内镜像源 国内镜像源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.co ...

  3. Echart可视化学习(十)

    文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 官网找到类似实例, 适当分析,并且 ...

  4. Word2010格式化可爱的家乡

    原文链接:https://www.toutiao.com/i6487795632349118990/ 准备样文 选中"可爱的家乡",选择"开始"选项卡,&quo ...

  5. 离线下载第三方Python包

    1.进入Python第三方包下载地(https://pypi.org/)搜索自己需要的包 2.下载需要的包的版本 3.将.whl格式的文件更改为.zip文件,并且解压 4.将解压的2个文件放到Pyth ...

  6. 读《疯狂Java讲义》笔记总结二

    1.变量分类图 2.通过实例访问静态变量(类变量) 3.静态导入 4.构造器 5.创建对象内存过程

  7. 《剑指offer》面试题28. 对称的二叉树

    问题描述 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的.     1    / \   2   ...

  8. [Anti-AV] 从攻防对抗辩证性分析jsp免杀(一)

    从攻防对抗辩证性分析jsp免杀 从最早的最朴素木马 <%@ page import="java.io.InputStream" %> <%@ page impor ...

  9. JUC之阻塞队列(BlockingQueue)基础

    阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作支持阻塞的插入和移除方法. 阻塞队列常用于生产者和消费者的场景: 当队列为空的,从队列中获取元素的操作将会 ...

  10. iptables匹配条件总结1

    源地址 -s选项除了指定单个IP,还可以一次指定多个,用"逗号"隔开即可 [root@web-1 ~]# iptables -I INPUT -s 172.16.0.116,172 ...