-
从头实现一些基本的强化学习算法。
-
适当地实现论文细节。当你实现这些方法的时候,不要过拟合到论文细节上,而是去理解论文作者为何在这些特定情形下选择使用这些技巧。
-
如果解决一个具体任务,先探索一下环境。
检查一下环境的细节,包括观察量和动作的性质,如维度、值域、连续或离散值类型等。如果环境观察量的值在一个很大的有效范围内或者是未知范围的,那么应该把它的值归一化。比如,如果使用 Tanh 或者Sigmoid 作为激活函数,较大的输入值将可能使第一个隐藏层的节点饱和,训练开始后将导致较小的梯度值和较慢的学习速度。
-
给每一个网络选取一个合适的输出激活函数。
应当根据环境来对动作网络选择一个合适的输出激活函数。比如,常用的像 ReLU 可能从计算时间和收敛表现上都对隐藏层来说可以很好地工作,但是它对有负值的动作输出范围来说可能是不合适的。最好将策略输出值的范围跟环境的动作值域匹配起来,比如对于动作值域 (−1, 1) 在输出层使用 Tanh 激活函数。
-
从简单例子开始逐渐增加复杂度。
-
=从密集奖励函数开始==。
奖励函数的设计可以影响学习过程中优化问题的凸性,因此应当从一个平滑的密集奖励函数开始尝试。
-
选择合适的网络结构。
- 对于深度强化学习而言,神经网络深度通常不会太深,超过 5 层的神经网络在强化学习应用中不是特别常见。这是由于强化学习算法本身的计算复杂度造成的。
- 在监督学习中,如果网络相比于数据而言足够大,它可以过拟合到数据集上,而在深度强化学习中,它可能只是缓慢地收敛甚至是发散,这是因为探索和利用之间的强关联作用。
- 网络大小的选择经常是依据环境状态空间和动作空间而定的。一个有几十个状态动作组合的离散环境可能可以用一个表格方法,或者一个单层或两层的神经网络解决。
- 对于网络的结构而言,文献中很常见的有多层感知机( Multi-Layer Perceptrons, MLPs)、卷积神经网络( CNNs)和循环神经网络( RNNs)。
- 一个低维的矢量输入可以用一个多层感知机处理,而基于视觉的策略经常需要一个卷积神经网络主干来提前提取信息,要么与强化学习算法一起训练,要么用其他计算机视觉的方法进行预训练。也有其他情况,比如将低维的矢量输入和高维的图像输入一起使用,实践中通常先采用从高维输入中提取特征的主干再与其余低维输入并联的方法。循环神经网络可以用于不是完全可观测的环境或者非马尔可夫过程,最优的动作选择不仅依赖当前状态,而且依赖之前状态。
-
熟悉你所用的强化学习算法的性质。
- 举例来说,像 PPO 或 TRPO 类的基于信赖域的方法可能需要较大的batch size来保证安全的策略进步。对于这些信赖域方法,我们通常期待策略表现稳定的进步,而非在学习曲线上某些位置突然有较大下降。 TRPO 等信赖域方法需要用一个较大batch size的原因是,它需要用共轭梯度来近似 Fisher 信息矩阵,这是基于当前采样到的批量样本计算的。如果batch size太小或者是有偏差的,可能对这个近似造成问题,并且导致对 Fisher 信息矩阵(或逆 Hessian 乘积)的近似不准确而使学习表现下降。因此,实践中,算法 TRPO 和 PPO 中的batch size需要被增大,直到智能体有稳定进步的学习表现为止。TRPO 有时也无法较好地扩展到大规模的网络或较深的卷积神经网络和循环神经网络上。
- DDPG 算法则通常被认为对超参数敏感,尽管它被证明对许多连续动作空间的任务很有效。当把它应用到大规模或现实任务上时,这个敏感性会更加显著。比如,尽管在一个简单的模拟测试环境中通过彻底的超参数搜索可以最终找到一个最优的表现效果,但是在现实世界中的学习过程由于时间和资源上的限制可能不允许这种超参数搜索,因此 DDPG 相比与其他 TRPO 或 SAC 算法可能不会有很好的效果。另一方面,尽管 DDPG 算法起初是设计用来解决有连续值动作的任务,这并不意味着它不能在离散值动作的情况下工作。如果尝试将它应用到有离散值动作的任务上,那么需要使用一些额外的技巧,比如用一个有较大 t 值的 Sigmoid(tx) 输出激活函数并且将其修剪成二值化的输出,还得保证这个截断误差比较小,或者你可以直接使用 Gumbel-Softmax 技巧来更改确定性输出为一个类别的输出分布。其他算法也可以有相似处理。
-
归一化值处理。
- 通过缩放而不是改变均值来归一化奖励函数值,并且用同样的方式标准化值函数的预测目标值。
- 奖励函数的缩放基于训练中采样的批样本。只做值缩放(即除以标准差)而不做均值平移(为得到零均值而减去统计均值)的原因是,均值平移可能会影响到智能体的存活意愿。这实际上与整个奖励函数的正负号有关,而且这个结论只适用于你使用“ Done”信号的情况。其实,如果事先没有用“ Done”信号来终止片段,那么可以使用均值平移。
- 考虑以下一种情况,如果智能体经历了一个片段,而“ Done=True”信号在最大片段长度以内发生,那么假如我们认为智能体仍旧存活,则这个“ Done”信号之后的奖励值实际为 0。如果这些为 0 的奖励值总体上比之前的奖励值高(即之前的奖励值基本是负数),那么智能体会倾向于尽可能早地结束片段,以最大化整个片段内的奖励。相反,如果之前的奖励函数基本是正值,智能体会选择“活”得更久一些。如果我们对奖励值采取均值平移方式,它会打破以上情形中智能体的存活意愿,从而使得智能体即使在奖励值基本为正时不会选择存活得更久,而这会影响训练中的表现。
- 归一化值函数的目标也是相似的情况。举例来说,一些基于 DQN 的算法的平均 Q 值会在学习过程中意外地不断增大,而这是由最大化优化公式中对 Q 值的过估计造成的。归一化目标 Q 值可以缓解这个问题,或者使用其他的技巧如 Double Q-Learning。
-
注意奖励函数和最终目标之间的分歧。
- 强化学习经常被用于一个有最终目标的具体任务,而通常需要人为设计一个与最终目标一致的奖励函数来便于智能体学习。
- 在这个意义上说,奖励函数是目标的一种量化形式,这也意味着它们可能是两个不同的东西。在某些情况下它们之间会有分歧。因为一个强化学习智能体能够过拟合到你为任务所设置的奖励函数上,而你可能发现训练最终策略在达成最终目标上与你所期望的不同。这其中一个最可能的原因是奖励函数和最终目标之间的分歧。
- 在多数情况下,奖励函数倾向于最终的任务目标是容易的,但是设计一个奖励函数与最终目标在所有极端情况下都始终一致,是不平庸的。你应该做的是尽可能减少这种分歧,来保证你设计的奖励函数能够平滑地帮助智能体达到最终真实目标。
-
非马尔可夫情况。
- 非马尔可夫决策过程和部分可观测马尔可夫过程( POMDP)的差异有时是细微的。比如,如果一个在Atari Pong游戏中状态被定义为同时包含小球的位置和速度信息(假设小球运动没有加速度),而观察量只有位置,那么这个环境是 POMDP 而不是非马尔可夫过程。然而, Pong 游戏的状态通常被认为是每一个时间步静态帧,那么当前状态只包含小球的位置而没有智能体能够做出最优动作选择的所有信息,比如,小球速度和小球运动方向也会影响最优动作。所以这种情况下它是一个非马尔可夫环境。一种提供速度和运动方向信息的方法是使用历史状态,而这违背了马尔可夫过程下的处理方法。
- 在DQN原文中,使用堆叠帧可以以一种近似的 MDP 来解决 Pong 任务。如果我们把所有的堆叠帧看作一个单一状态,并且假设堆叠帧可以包含做出最优动作选择的所有信息,那么这个任务实际上仍旧遵从马尔可夫过程假设。
- 循环神经网络或更高级的 LSTM方法也可以用于以历史记忆进行决策的情况,来解决非马尔可夫过程的问题。