深度强化学习_深度强化学习的正确入坑姿势

在强化学习的自学路上,我从一年多以前的零基础到现在可以做简单的research project,中间走了非常多弯路。我深深感到在没有指导的情况下(现实情况是国内关注这个领域的老师确实比较少),深度强化学习(以下简称DRL)的学习曲线确实是比较陡峭的。学习资料用什么很多大神已经总结的非常清晰了,比如强化学习从入门到放弃的资料,但是方法论的部分谈的人比较少,所以我就想结合自己的经历分享一下DRL入门的方法论,希望能够帮到一些想要入坑的小伙伴。学识浅薄,如有不足,敬请指出!

入坑前的准备

  • 一点点数学就够了

在刚开始入门的时候,我就发现强化学习涉及的公式很多,而且还包含很多看似复杂的理论证明和推导。DRL确实涉及很多艰深的理论,但是那是在深入学习的情况下。而入门的时候的公式和推导,看似繁多,实则涉及的数学知识很简单:多元微积分中的积分和导数,概率论与统计中的随机变量、期望与方差、极大似然估计等。这些内容大学本科都会教授,所以数学这一关是很容易过的,不必被那些公式吓住。

  • 机器学习和深度学习的基本知识

DRL既是机器学习的一个分支,同时又利用了神经网络做函数近似,所以这两部分的基础知识都是需要掌握的。机器学习方面比如回归和预测,正则化、归一化和常用的优化方法,而深度学习方面主要是了解一些常见的网络结构和优化器,理解不同结构的的用途。我个人的感觉是模型的细节并没有特征工程和算法本身的影响大,而且随着学习的深入,这部分的知识会自然熟悉起来,所以入门DRL的时候,这部分不用过分深究。

  • Python和一个深度学习的框架

由于现在大多数深度学习的框架都是提供Python的API的,而且绝大部分DRL的实现也都是基于Python的,所以熟悉Python是非常重要的。当然,这并不意味着要对Python整门语言都非常熟悉,但是Python里面跟机器学习有关的部分,特别是像numpy这样的运算库是一定要很熟悉的,否则在看别人代码的时候会非常痛苦。在此基础之上还需要用熟一个常用的深度学习的框架,理解里面的各个模块,做到能够独立实现常见的简单算法。这部分的学习没有什么特别的方法,主要就是自己多写多看。

  • 熟悉经典强化学习的内容

恐怕这一点才是让很多小伙伴感到难以入门的原因。在CV和NLP中,深度学习的应用在很大程度上替换了旧有的理论(我对这两块了解非常浅薄这个说法可能不恰当),但是对于DRL来说,深度学习主要是用在了函数近似上,其他各部分还是还是沿袭旧有的理论,所以想要入门DRL,一定要先把经典强化学习的内容理解了。这也是我在学习过程中走过的弯路,在没有很理解经典强化学习的情况就开始看DRL的课程和论文,总是搞得自己云里雾里。结果后来把Sutton老师的Reinforcement Learning:An Introduction读完之后再去看DRL的课程和论文,豁然开朗。这部分熟悉到什么程度呢?举个例子,比如看到MDP、Value、Q-Learning、Policy、Reward、Model这些词要知道它们的意思和相关的公式。

入坑的正确姿势

入坑阶段的学习个人认为可以总结为如下的流程,其关键在于快速迭代,尽快取得可量化的学习成果来获得正反馈,而不是深陷于算法或者理论中,这也是受到了RL中Reward的启发。

9399d2784f186de467be07d0a443e667.png
  • 学习新算法和相关理论

学习新的算法的时候一定要从简单的开始,比如VPG、DQN、A2C。对于这些基本的算法,一定要细嚼慢咽,理解算法中各个部分包括理论证明。原因在于很多fancy的算法都是对这些基础算法的改进,深入的理解这些基础的算法和它们背后的理论才能更好的理解新的算法。这里需要注意的是,学习算法和理论的时候不要贪多,学习完一个新的算法就要尽快开始下一步,不要沉迷于理论本身,因为理论有很多并且越深入越难,这会让自己陷入一个死循环,这在入门的时候绝对是有害无利的。这部分的学习最好的方法就是细读原论文,并搭配上别人的讲解,这样可以帮助自己更快的理解。

  • 自行实现算法

因为我们这里都是在讲入门的比较简单的算法,所以完全可以自行实现。这部分主要是有以下几点需要注意:1. 遇到觉得思路不清楚的时候,一定要回看paper里面的实现,不要按照自己的理解来,否则算法很可能fail掉。2. 遇到有些自己不知道怎么用代码实现的地方,可以上github看看别人的代码找思路,但是千万不要抄;3. 尽量在简单的环境下实验代码,入门阶段的代码可能有很多bug,简单的环境对于这些bug的暴露比较直接,而且训练起来效率也比较高;4. 打印出训练阶段的各种数值,一来方便判断训练过程是否有问题,二来是帮助自己熟悉训练时各项指标的变化规律。

  • 在debug和调参中优化性能

第三步看似不重要,实则非常重要。DRL是一个理论和工程各占一半的领域,算法本身重要,但是具体实现时的trick也同样重要。在第二步时很可能得到一个性能“差不多”的模型,毕竟照着算法实现代码是相对容易的,但是让自己的算法性能接近或达到已有的baseline就不是一件容易的事情了。可能一个参数不恰当或者某些特征没有考虑到就会让整个算法fail掉。所以debug和调参能够让自己更加熟悉这些算法的特性,逼迫自己思考算法里面每一部分每一个参数的作用,以及对应的修改可能造成何种后果。

在坑里应该怎么进阶

什么时候学到了这一步再写吧。。。

参考资料:

Spinning Up as a Deep RL Researcher By Joshua Achiam

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值