我在稳定基线(OpenAI 基线的一个分支)中使用 PPO2 的实现来解决强化学习问题。
我的观察空间是我的行动空间是. 给定一个状态,只有一些动作是“合法的”。如果采取“非法”操作,环境将返回相同的状态。把它想象成围棋游戏,你试图在一个已经被占用的十字路口放一块石头。
当采取法律行动时,可能会导致与之前的状态完全不同的状态。它还可能导致完全不同的法律行动。所以它不像围棋那样,棋子留在棋盘上。
我目前为模型提供了一个包含合法行为的向量(一个多热向量,1 表示合法,0 表示非法)。当模型对动作进行采样时,我首先通过 sigmoid 运行动作手段,因此它们都变为正数,但仍保持相对大小顺序。然后我将均值与将非法行为设置为零的合法行为向量相乘。然后,该模型仅从具有 argmax 的法律行为中采样。我不会更改动作的潜在概率,因此在计算动作的后遗症时,它们将是真正的后遗症。
这在一段时间内效果很好,但过了一段时间我收到以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Found Inf or NaN global norm. : Tensor had NaN values
当我计算 tf.clip_by_global_norm 时抛出错误:
grads, _grad_norm = tf.clip_by_global_norm(grads, self.max_grad_norm)
我猜毕业生变得无限大。
总体趋势是新旧 neglog 动作概率开始增加(这意味着新旧策略的动作概率开始减小)。他们之间的 Kullback Leiber 距离也迅速增加。这将导致比率(论文中的r(θ))增加,这也将导致非常不稳定的政策损失。
如果我在更新前增加步数,它可以运行更长时间,但最终它会崩溃。
我试图惩罚非法行为而不是消除它们,但收敛速度很慢。
我的问题是:
- 毕业生去香蕉的原因可能是什么?
- 如果我选择法律行动,它会以意想不到的方式影响模型吗?
- 有没有其他更好的方法可以将行动空间限制在法律行动上?我还没有找到任何分析它的论文。有谁知道 AlphaZero 如何处理非法行为?