前言
虽然每年RL方向的paper满天飞,但真正具有普遍实用价值的突破性工作实在不多,大多数还是在经典框架基础上的改进和扩展。DRL常规武器库里的存货主要还是老三样:DQN,DDPG和A3C,它们是深度学习时代最成熟、最能体现智慧结晶的三个DRL框架,你可以在GitHub上找到无数相关代码,有OpenAI,DeepMind和Nvidia这些大公司的,也有个人爱好者的。对于DRL初学者,它们是最佳的敲门砖;对于算法研究者,它们是最厚实的“巨人肩膀”;对于算法工程师,它们是最顺手的试金石。你完全可以把三个框架都放到项目模拟器上跑一跑,看哪个效果好就用哪个。当然,这三个算法框架都有各自的特点和适用domain,结合对项目的分析,是可以提前评估最合适的算法的。
2021年6月16日更新
考虑到这篇文章写作时间较早,这里统一更新算法选择方面的建议:对于连续控制任务,推荐SAC、TD3和PPO,三种算法都值得试一试并从中择优;对于离散控制任务,推荐SAC-Discrete(即离散版SAC)和PPO。至于TD3和SAC的详细介绍,网上资料很多,暂时就不写了,有机会再说。
强化学习——探索和利用的平衡游戏
总体来说,强化学习是一个探索(Exploration)和利用(Exploitation)的平衡游戏,前者使agent充分遍历环境中的各种可能性,从而有机会找到最优解;后者利用学到的经验指导agent做出更合理的选择。两者之间可以说是相爱相杀的关系:
- 充分的探索才能带来有效的利用,从而使RL走在正确的道路上。对于那些难度特别高的任务,改进探索策略是性价比最高的手段,比如AlphaGo使用蒙特卡洛决策树征服了围棋,Go-Explore利用状态回访打爆了Montezuma’s Revenge
- 充分的利用才能探索到更好的状态,agent往往需要掌握基本技能,才能解锁更高级的技能。就好像小孩先要学会站起来,才能学会走,然后才能学会跑。这种从易到难、循序渐进的思想在RL中也很受用,著名的Curriculum Learning就是由此而来
- 过量的探索阻碍及时的利用。如果随机探索噪声强度过高,已经学到的知识会被噪声淹没,而无法指导agent解锁更好的状态,导致RL模型的性能停滞不前
- 机械的利用误导探索的方向。如果刚刚学到一点知识就无条件利用,agent有可能被带偏,从而陷入局部最优,在错误道路上越走越远,在训练早期就扼杀了最好的可能性
强化学习的训练过程其实就是从以探索为主到以利用为主的过渡过程,训练早期通过广泛试错找准一个方向,然后沿着该方向一路试探下去直到达到最优。请牢牢记住这“两点一线”,因为这是所有RL算法的主要内容,任何RL算法都能以此为切入点进行解构,有助于不断加深对算法的理解。