Part 1. 需求分析
DRL的过拟合天性
DRL解决的是从过去经验中学习有用知识,并用于后续决策的问题。比起视觉方面的检测、识别等,决策是一个更高层的行为,所以对环境要求更为严苛,导致DRL十分依赖过拟合,并且泛化能力非常差(唯一被允许在训练集上测试的算法的称号不是盖的)。此外,由于训练过程中缺乏直接监督的信号,DRL对数据量的要求也非常巨大。
所以在DRL训练中,Value函数去过拟合环境转移特性与reward函数,而Policy函数去过拟合Value函数。所以当环境特性发生改变时,Value和Policy就会失效,DRL自然也就不具备泛化能力。
适用DRL的特征
能不能
DRL有所为,有所不为。知道算法不能做什么(能力边界)与知道算法能做什么同样重要。
场景固定
场景固定是指决定系统动态演化趋势的主要因素保持恒定。即MDP(p(s’ | s, a))在训练过程中是否变化。我们要保证训练环境尽可能与测试环境相同
目标明确
任务要达到何种效果清晰具体,最好可以量化。目标越明确,设计优质的reward函数就越容易,从而训练得到更接近预期的policy。
数据廉价
我们知道DRL目前最成功的领域是视频游戏,它在运行过程中收集数据是十分方便的,所以DRL才能大施拳脚。而对于牵涉导硬件的应用,DRL算法就显得非常不友好。
值不值
过程复杂
们用DRL的目的无非是看中了其处理复杂场景的能力,人类看不透,DRL来凑。如果任务太简单,依靠规则和启发式就能解决问题了,相当于拿到了“解析解”,还用神经网络拟合个什么劲儿。
自由度高
自由度高指的是选择空间大、限制少,通过大量探索总能拟合出不错的value函数指导policy做选择。自由度越高,DRL优势越明显,自由度越低,越有利于规则。因此在决定用DRL之前,一定要认真评估任务场景是否有足够的优化空间,千万不要拎着锤子找钉子,否则即使训出了policy,性能也不如传统算法,白忙活一场。
Part 2. 算法选择
目前DRL巨人最厚实的肩膀大致是TD3 PPO SAC,其他算法多是在它们的基础上添砖加瓦。对于一个特定的任务,我们可以分别测试三种算法的效果,并从中择优选取。
这里贴两篇文章作为参考:
https://zhuanlan.zhihu.com/p/342919579
https://zhuanlan.zhihu.com/p/96010395
Part 3. 动作空间
在将DRL应用于实际项目时,可能最轻松愉快的部分就是动作空间定义了。因为agent的控制方式往往早就定死了,留给我们发挥的空间很小。
如果可以设计动作空间,算法对动作空间有以下三个要求:
完备性
动作空间首先要提供实现预期目标的可能性,避免在任务解空间中出现无法触及的“状态盲区”,尤其是要保证高性能区域的充分可达性。它要求动作空间具备功能完备性与时效完备性。
高效性
动作空间应该尽可能简单高效,从而有效降低训练难度和提升算法性能。一方面,可以将连续动作空间化整为零,在满足基本控制精度的前提下将其转化为离散动作空间,这样可以显著压缩解空间维度,提高探索效率;另一方面,可以根据实际情况,将一些基本动作进行有机组合构成宏动作,直接学习这些动作可能难度很大,但如果能将这些技巧直接作为常备选项,由算法学习如何合理运用它们,将起到事半功倍的效果。
合法性
在DRL应用中并不是所有action在任何state下都有效,比如AlphaGo就不能在棋盘上已经被占据的位置落子,自动驾驶车辆遇到行人时绝对不能撞上去。对于特定状态下规则不允许出现的action或者引发严重后果的action,我们应该直接屏蔽掉。DRL与其他AI算法一样,都属于统计学范畴,我们在理解policy输出时也应该使用概率思维,即使agent学会在99.99%的情况下输出合法action,但仍存在0.01%的可能性输出非法action,与其寄希望于DRL完全学会遵守规则,不如加一层“硬保险”来得靠谱。
Part 4. 状态空间
状态信息是agent制定决策和评估其长期收益的依据,而状态设计的好坏直接决定了DRL算法能否收敛、收敛速度以及最终性能,兹事体大,不可不察。增加一个优秀的新状态信息所带来的性能提升明显高于其他方面的工作(如调参),性价比非常高,因此状态空间的优化工作几乎贯彻项目始终。
直接进行端到端的学习&#x