添加偏差会使 Q-learning 算法无效

数据挖掘 张量流 强化学习 q学习
2022-03-01 14:11:22

我一直在研究Arthur Juliani 博客中的 Q-Network 学习示例。它基于漂亮的琐事Open Gym Frozen Lake示例。它的基本实现在 3000 次迭代中获得了大约 47% 的成功率。我决定在实现中添加一个偏差,发现它严重损害了结果,不比随机更好。

也就是说,我在下面添加了偏差项:

inputs1 = tf.placeholder(shape=[1,16],dtype=tf.float32)
bias = tf.Variable(tf.zeros(shape=[1,4]))
W = tf.Variable(tf.random_uniform([16,4],0,0.01))
Qout = tf.matmul(inputs1,W) + bias
predict = tf.argmax(Qout,1)

其余代码与原始解决方案相同。任何想法为什么这会对性能产生如此负面的影响?

更新 看起来其他人遇到了这个问题,给出的答案是

使用 one-hot 编码的偏置项可以防止每个状态的 Q 值独立

任何想法为什么会这样?偏差是在乘法之后添加的,因此它在动作的维度中,而不是在输入中。我不明白为什么这会使学习失败。

1个回答

使用 one-hot 编码的偏置项可以防止每个状态的 Q 值独立

任何想法为什么会这样?

在 Q 学习中使用线性回归或其他函数逼近的通常点是泛化,从而防止 Q 值故意独立。所以这不是关于 Q 学习和线性函数逼近的一般性陈述。一般来说,是的,您可以添加偏差项 - 而且,通常在使用线性回归或神经网络来估计动作值时,您应该有偏差项。

话虽如此,我希望偏差在这里应该没有什么不同,因为状态的一个热编码使它变得多余 - 您已经可以仅使用权重表达任何状态到每个可能动作的 Q 值的映射。尽管您使用的是线性回归模型,但本质上这只是 Q 学习的表格形式。

使用函数逼近的 Q 学习可能是不稳定的。离线策略、引导更新和函数逼近的组合被称为“致命三元组”,您需要添加经验回放等技巧来保持稳定。虽然理论上线性回归应该学习正确的偏差,但可能添加偏差会使算法进入不稳定区域。