前言
做强化学习大约8个月了,经历了无头苍蝇般的各种尝试,到开始有自己的一些感受,再到可以从原理出发对模型进行一些适应于当下任务的改造,总结下来就是实践出真知。boss之前的态度也是觉得强化学习是一个重要的方向,在当下可以多通过测试来逐渐积累经验,以后能够应用的方向还有很多,多测试还是有益处的。后面的个人经验也恰好说明了这点。这段时间下来给我的感受是,可能从功利的角度并没有真正的breakthrough,但是从应用上,我开始能够说我在驾驭强化学习的路上了。
这篇博文就是记录一些自己的主观经验,我不希望放公式进去,因为那些东西是网上易于找到的。在8个月之前,即使我已经学习了诸如策略梯度定理、贝尔曼方程这些公式,我还远没有建立对这些东西的一个感性认识,我对agent在环境中如何更新参数缺乏感觉,对一些现象的理解也是错的。对于强化学习来说,经验显得非常重要,它能够给你一些方向判断上的能力。
1. 关于价值
价值可以从采样中得到(蒙特卡罗方法),也可以通过建模得到(价值网络)。采样带来高方差,但可以增大batchsize;网络建模带来误差,如果是Actor-Critic架构还会带来训练步调的问题,需要一些trick解决(delay steps,学习率差异等)。
不论是策略梯度,还是价值网络,本质上都是提高一个轨迹上的期望收益。
2. 关于神经网络
强化学习容易陷入局部最优,合适的奖励函数非常重要,牵扯到reward shaping的技巧。
从简单到复杂的研发步调不一定适用,有时候真实环境有利于向期望的训练方向发展。
时刻注意设计的奖励是否能被有效建模?比如,是否可导、是否缺失输入特征。
3. 关于动作
注意不同的动作类型(离散、连续)很可能适用于不同的强化学习模型。如离散动作用策略梯度定理、DQN等,连续动作用SAC、td3等)。但有时候也可以灵活改造。
需要仔细评估动作噪声的必要性,在模型收敛之前不要轻易怀疑是不是加了动作噪声。