我正在使用PPO2在稳定基线(OpenAI的基线叉)中的实现来解决强化学习问题。
我的观察空间是9x9x191,我的动作空间是144。在一个国家,只有一些行动是“合法的”。如果采取“非法”行动,环境将返回相同的状态。把它想象成一个游戏,你试着把一块石头放在一个已经被占据的十字路口上。
当采取法律行动时,它可能会导致一个与以前完全不同的状态。它也可能导致完全不同的法律诉讼。所以,石头留在木板上的地方就不一样了。
我目前给模型一个包含法律行为的向量(一个多热向量,一个合法向量,0表示非法行为)。当模型对动作进行采样时,我首先通过乙状结肠运行动作手段,所以它们都是正的,但仍然保持相对大小的顺序。然后,我用法律行动向量将这些手段乘以,将非法行为设为零。然后,该模型仅用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)
我猜这些毕业生会变得无穷无尽。
总的趋势是新的和旧的否定行为概率开始增加(这意味着新旧政策的行为概率开始下降)。它们之间的Kullback Leiber距离也在迅速增加。这将导致本论文中的比率(r(θ) )增加,这也将导致极不稳定的政策损失。
如果在更新前增加步骤数,它可以运行更长时间,但偶尔会崩溃。
我试图惩罚非法行为,而不是消除这些行为,但趋同的速度很慢。
我的问题是:
发布于 2019-03-13 02:16:30
我相信,字母表在输入到最终的softmax输出之前,通过掩盖非法日志来处理非法操作。
https://datascience.stackexchange.com/questions/45950
复制相似问题