我已经实施了 PPO 来解决 Atari 环境。很长一段时间以来,我都无法弄清楚为什么我的模型不会像其他开源解决方案那样快速收敛。最终归结为 CNN 的单一权重初始化(在 PyTorch 中):
init_ = lambda m: init(m, nn.init.orthogonal_, lambda x: nn.init.constant_(x, 0), nn.init.calculate_gain("relu"))
然后将其应用于每一层。换句话说,神经网络必须正交初始化。一旦我添加了这个,我的模型就会按预期收敛。
为什么正交初始化比 PPO 的 xavier 初始化要好得多?