转自知乎专栏, 原文 深度强化学习落地方法论 https://zhuanlan.zhihu.com/p/95989190

需求分析

这里作者强主要强调DRL并不是万能的解药
弱点(过拟合与环境和泛化能力弱)。作者单独强调这俩是想和监督学习做对比。监督学习是在training set上训练test set上测试,但是强化学习是在真正环境中也就是test set上训练继而把自己好的经验都保留下来。这样就导致DRL是很依赖于环境的,一方面为了训练得足够多的数据,这也就依赖于模拟器;另一方面一旦环境发生变化,得重新训练。作者把这一现象描述为value function过拟合于环境,policy function过拟合于value function.
适用场景:作者给出了适用DRL的五个条件
场景固定:这里所谓的场景,是非agent之外的所有环境dynamics一定要是stationary的. 比如在multi-agent RL (MARL) 中, 其他agent的不断演化就属于非稳态环境。
目标明确:这个一般问题的目标都是确定了的,目标越明确,reward越好design
数据廉价:这个很好理解,因为具体环境中的learning需要大量的data
过程复杂:实际环境的规律难以总结或者很难找到解决方法才有学习的必要
自由度高:选择空间越大,自由度越高,人越容易出现选择困难症,但是这对DRL却是极好的。

算法选择

本节作者主要highlight了三种最基本的框架,一般在这三重大的框架下我们还要进行微调。
总的来说,DRL是一种由exploration慢慢转化为exploitation的算法,充分的探索对学习性能的影响至关重要,各种exploration的设计本文没有提及
DQN:DQN一般大家都很熟悉了,就是一个Q值网络由状态学习到各个action的values再选最大的。几个需要注意的特性:1)离散状态空间;2)off-policy当前用于学习的经验并不一定是当前policy采集的;3)epsilon greedy exploration。DQN也有很多问题,其中一个我想重复的是:off-policy对历史数据重复利用但是环境不能变化。比如MARL中off policy效果就不是很好,因为各个agent都在不断进化。
DDPG(soft actor critic?):DQN是离散action space,DDPG可以用在连续action space,它的主要特征是:1)与DQN相比有了一个显式的policy,而且这个policy是确定性,而非传统 actor-critic 中概率分布式的policy;2)action + noise to explore. DDPG也有一些问题,我们强调1)连续动作一般比离散动作要难,所以离散化连续空间也许比连续动作空间学习的更好;2)高维度action表现不好,维度灾难;3)critic的误差全部传给了actor,稳定性不足。
A3C (→同步版本A2C):这是作者着力推荐的框架, 与DDPG相比actor输出的是action的概率分布,因此梯度无法直接由critic流向actor, instead梯度定义为advantage function和actor梯度的乘积A(s,a)▽logπ(a|s) (这里得复习一下A3C+PPO以回顾具体算法流程)。它是一种on-policy方法,即每次训练policy net的经验都是由当前policy net产生的,更适用于MARL场景。总之,作者根据自己的经验最推荐A3C+PPO或者其同步版本A2C+PPO的组合,说比DQN和DDPG都要好。

动作空间

动作空间的选择一般比较简单,一般这个是由具体问题直接决定的,几个注意事项:
尽量选择离散空间(互斥,可穷举,表示成one-hot vector );注意离散化并不是代表着性能差,反而还会因为容易学习带来性能提升!
one-hot vector
如果实在无法离散化比如高维action,那么最好把action space归一化到 [-1,1].
特定状态下引起严重后果的action应该直接屏蔽。

状态空间

状态空间的优化非常重要,也就是所谓的feature engineering. 一般,用未经处理的状态空间做端到端学习效果是极差的,一方面时间成本,一方面干扰信息是致命的。所以说设计状态空间非常重要。
四步设计状态空间:

  1. 任务分析:本文举例在一个遍布障碍物的的区域内有若干小车在随机位置待命。目的是让他们最短时间内行驶到各自终点停下来,且过程中不发生任何碰撞。目标可以分解为1)到达终点;2)避免碰撞;3)最快。这三部分的要求分别对应着1)各个小车知道自己在哪终点在哪;2)知道障碍物和其他小车的位置运动状态;3)少绕路行驶速度快,尽量避免减速刹车。因此,我们第一步要总结出所有的可用的信息。
    2.相关信息筛选:在列出所有可用信息之后,我们要去筛选与主任务和子任务相关的那些信息。RL中action的质量最终是要通过reward来反馈回来的,所以说实际上我们在学习的就是各个状态和reward/value之间的关系,进而利用这层关系来指导action。所以说状态的设计和reward的设计息息相关,我们要设计的让神经网络更快更好的学习到他俩之间的关系!可以想象,在某个状态下得到的reward反馈越快,那么这层关系越容易学习到。因此,给定reward的设计之后,我们可以根据反馈时间长短把信息分为两类
    1) 直接相关信息:与某个reward直接相关的信息,比如距离周围障碍物的距离,这一信息直接影响着碰撞这一事件(假设碰撞引起很大的负reward),因此我们称其为直接相关信息。
    2) 间接相关信息:间接相关信息指的是这一信息的反馈得很久很久之后才能得到。比如小车到达终点得先拿到钥匙开门,但是我们没有设置拿钥匙这一奖励。那么,距离钥匙远近这一信息就是间接相关信息,因为我们只有在打开了门最终到达终点才发现拿钥匙是必要条件。
    Remark: 显然间接信息是可以转换为直接信息的,因为我们可以单独设计一个吃钥匙的奖励,所以说状态设计和reward设计是相关的。
    Remark: 其实已经不言自明了,如果我们把状态设计为一幅地图让小车自己学习拿钥匙这个动作,肯定会比直接告诉他钥匙坐标来的慢,因此状态的设计直接影响到学习效率。

  2. 统一性考虑:这一步是保证我们设计的状态有泛化性而不只是局限于某一场景
    1)外在形式统一。比如说,如果我们把所有小车的数据都当做状态,那么当小车的个数变化时,这一状态就不可用了尼?所以这就属于bad design。好的design比如我们把整个地图当做一幅图,原本环境是一幅图,所有小车位置是一幅图,重点位置是一幅图,然后把图叠在一起。
    2) 逻辑统一。比如说我们把小车当前位置和终点位置当做信息输入。那么神经网络会记住这张图和终点位置坐标,如果换一幅图就得重新学习。一个更好的设计是输入两个位置的差,这样的话神经网络看到的是终点在小车自身坐标系中的相对位置,如果换一幅图,那么学习到的内容勉强还能用。这样的policy就和具体地图脱钩了。再比如我们设计防撞机制,说距离障碍物低于一个阈值时就要减速,那么如果我们把当前距离和绝对距离阈值输入,那么换一个阈值就得重新学习,因此我们其实可以输入一个相对比例阈值,即当前还差多少就到了阈值该减速了。

  3. 效果验证。在设计好状态空间后,我们需要验证自己设计的状态是不是合理。
    1)模仿学习验证:如果我们已经有了一个比较好的baseline,那我们可以搭建一个policy net用自己设计的状态来验证输出结果是否接近baseline。
    2)直接验证:没有baseline就直接把程序跑完把policy训练出来在比较好坏了。
    3)缺省验证:我们如果已经train得到了一个比较好的policy,那么可以用缺省验证来比较状态中不同信息对policy的影响程度,即控制变量法,其他正常输入把待测试的信息取一个平均值看看train完之后的性能。

reward

DRL是极度依赖于优秀的reward的,因为我们要靠reward来不断诱导神经网络的学习。

  1. 怎么消除对reward的依赖尼?
  1. inverse RL 利用专家示范expert demonstration来学习到reward函数,在用这个reward函数训练RL策略.
  2. Imitation Learning, 抛开reward直接拟合expert的policy
  3. Reward很难设计时,用DL自动学习reward函数,比如在actor-critic框架下再加一个reward函数(state, action直接算reward), see this paper: Deep Reinforcement Learning from Human Preferences.
  1. 主线reward和稀疏回报问题
    一般一个任务的主要任务是很容易理清楚的,所以主线reward是很好设计的。简单任务里我们只需要主线reward就够了,但是复杂的问题里通常情况下主线任务是很难难碰到的,比如说操控机器人打开盒子扔进去一个东西再拿出来再观赏盒子,这一操作的复杂程度使得机器人根本无法在主线任务上前进,因为大部分状态信息相对于主线reward也就都属于间接相关信息。这一类问题称为稀疏回报问题,解决这一问题的方案有很多比如通过鼓励agent探索未见过的状态,提高正样本利用率,或者干脆用遗传算法或进化策略代替RL学习policy网络。本文讨论的是,如何通过reward设计本身来规避稀疏回报问题,并尽可能提高训练效率和最终性能。
    解决方案是,design引导信号来诱导agent学习,也叫 credit assignment。比如说,我们要求小车尽快到终点,可以加一些转弯处罚。一些经验:
    1) 贪婪。实际上,除了主线reward应该提供正向奖励以外,其他辅助reward最好都设置为惩罚项。除非某个子目标与主线事件之间存在强关联,而且该子目标的达成是一次性的或者数量可控,否则不应轻易设置额外奖励项,因为这样很容易诱导agent学习到短视的贪婪策略,只捡芝麻,不要西瓜。
    2) 胆怯。如果惩罚项很多且绝对值相对于主线reward太大,那么agent在探索过程中会收到大量负反馈,从而变得畏首畏尾,学习到各种意想不到的“绥靖”策略。此时,只需要将惩罚项绝对值减小,突出主线奖励的影响,还可以适当降低折扣因子,让agent变成“近视眼”,更多关注眼前利益,忽略长期的负收益期望(靠后的负反馈都被折扣掉了),只要agent“迈开腿”出来探索,就有更大可能遇到主线事件。

3)鲁莽: 某个不希望出现的事件的惩罚太小,比如小车可能为了尽快到达终点宁愿撞到其他小车上也不绕远。
3. Reward Shaping
一个让RL收敛更快的方法是reward shaping:在原有reward基础上增加一项shaping reward,该项代表某种势能函数,与最终目标的差距决定了势能大小。比如说把reward修改为离终点越近奖励越高,那么agent就很容易被引导到G位置,从而大大加速算法收敛。理论上,Ng证明了理想势能函数就是V(s)因为它就是长期收益的期望,policy就是根据它优化的。如果一开始就把完美的V(s)提供给小车,那也就不用学了。对小车到终点的应用而言,用小车当前位置与终点的距离作为势能函数,增加一个惩罚项 -alpha*dist ,离终点较远时惩罚得多一些,较近时惩罚得小一些,这样就能起到reward shaping的作用。

  1. Optimal Reward Problem(ORP),
    另一个问题是,是否存在一组最优reward使得DRL算法在同等条件下收敛最快、性能最高?答案是肯定的,但要想找到它是困难的,该问题在学术界被称为ORP. 解决方案文中也列了一些。

总结一下,reward设计的原则是:尽可能稠密(最好每步都有反馈),能够反映任务目标/子目标逻辑,与状态空间相呼应,控制好各项取值和相对大小,避免异常行为,适时采用reward shaping。当算法选择好,动作空间定义好,状态空间和回报函数都设计好,接下来就该进入训练环节了

训练

在最后一节,作者介绍了DRL training的一些经验。
训练开始前:
最好可视化environment随着action的变化,因为这样可以直观发现问题。
状态空间归一化,reward scaling and clipping r=

2. 关于DRL的一些经验相关推荐

  1. 《强化学习周刊》第59期:GCRL、DNN-RCUCPD-MORL

    No.59 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 周刊订阅 告诉大家一个好消息,<强化学习周刊>已经开启"订阅功能",以后我们会向您自动推送最 ...

  2. 《强化学习周刊》第38期:DreamingV2、Shadow-price DRL、离线强化学习

    No.38 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  3. 生物,AI,心理:目前的大脑/认知/意识/AGI/DRL模型

    来源:人工智能前沿讲习 一   基于生物和经验的模型 首先是 2012 年的 Spaun,基于生物基础(脑图谱),类生物神经元(尖峰放电 SNN). 在训练后可完成多种识别和生成和反应任务. map ...

  4. 人工智障学习笔记——强化学习(5)DRL与DQN

    在普通的Q-learning中,当状态和动作空间是离散且维数不高时可使用Q-Table储存每个状态动作对的Q值,而当状态和动作空间是高维连续时,Q-Table则不再适用. 通常做法是把Q-Table的 ...

  5. 拔掉机器人的一条腿,它还能学走路?| 三次元里优化的DRL策略

    行走栗 发自 凹非寺  量子位 出品 | 公众号 QbitAI  迪士尼的机器人,不管剩几条腿 (n>0) ,都能学会走路. 那么,是怎么学的? 研究团队不用模拟器,直接在硬件上修炼深度强化 ...

  6. 【Tensorflow教程笔记】深度强化学习(DRL)

    基础 TensorFlow 基础 TensorFlow 模型建立与训练 基础示例:多层感知机(MLP) 卷积神经网络(CNN) 循环神经网络(RNN) 深度强化学习(DRL) Keras Pipeli ...

  7. 【深度强化学习】DRL算法实现pytorch

    DRL Algorithms DQN (deep Q network) Policiy_Gradient 策略梯度是强化学习的一类方法,大致的原理是使用神经网络构造一个策略网络,输入是状态,输出为动作 ...

  8. OptaPlanner将弃用DRL(Drools)评分方式!!!

    本来这段时间一直都在加紧我家"三胎"(易排通用智能规划平台)建设,毕竟我们的通用规划平台原定6月初就能上线,但因为其中遇到的各种技术问题及其它项目的突发情况,导致也只能跟随国家的0 ...

  9. 深度强化学习(DRL)简介与常见算法(DQN,DDPG,PPO,TRPO,SAC)分类

    简单介绍深度强化学习的基本概念,常见算法.流程及其分类(持续更新中),方便大家更好的理解.应用强化学习算法,更好地解决各自领域面临的前沿问题.欢迎大家留言讨论,共同进步. (PS:如果仅关注算法实现, ...

最新文章

  1. RabbitMQ 入门系列(7)— 如何保证 RabbitMQ 高可用性
  2. Network Broadcast
  3. Interview and paper based test
  4. jsonp模拟获取百度搜索相关词汇
  5. redis分布式锁的这些坑,我怀疑你是假的开发
  6. 高手教您编写简单的JSON解析器
  7. WebService的简单实现
  8. 我的新书《Android App开发从入门到精通》终于出版啦
  9. 方正计算机如何用u盘安装系统,方正电脑用u盘装系统操作方法
  10. 3Dmax转cad及批量出图
  11. python label显示图片_Python3 tkinter基础 Label imag显示图片
  12. 代码传奇 张一鸣的成长之路
  13. vue添加cnzz统计
  14. 信度效度难度区分度是什么意思_信度、效度、难度、区分度
  15. 解决Win2000 不能启动的几种方法
  16. java中怎么引用圆周率_Java简单计算圆周率完整示例
  17. [WebSocket]使用WebSocket实现实时多人答题对战游戏
  18. 如何在微信小程序中下载APP?
  19. 记录四川移动盒子打开adb命令的方法 型号:UNT401H
  20. windows8 下载

热门文章

  1. gitblit 自定义URL复制按钮
  2. JavaScript(11) - 阻止事件冒泡和默认行为,拖拽,事件监听器
  3. 桌面mini计算机,迷你电脑来袭:市场中10款最小的电脑
  4. 分享 - 微信域名检测API接口
  5. 关于NodeMCU烧写的坑(load 0x33333333, len 858993459, room 0)
  6. 浪潮服务器nf5270m5做raid_浪潮服务器PM8060阵列卡,如何做热备盘?操作相对有点复杂...
  7. 微信语音如何转发,如何将语音内容转换成文字,这个方法非常的简单
  8. elk插件x-pack安装以及破解
  9. 学会使用jupyter来编写代码
  10. 原创程序|基于AutoCAD的宗海界址图快速自动化绘制技术