我一直在研究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 值独立
任何想法为什么会这样?偏差是在乘法之后添加的,因此它在动作的维度中,而不是在输入中。我不明白为什么这会使学习失败。