相关疑难解决方法(0)

张量流中的损失限幅(在DeepMind的DQN上)

我正在尝试使用Deepmind在张量流中自己实现的DQN文件,并且在剪切损失函数时遇到了困难.

以下是描述损失裁剪的自然纸的摘录:

我们还发现将更新中的错误项剪辑在-1和1之间是有帮助的.因为绝对值损失函数| x | 对于x的所有正值,其导数为-1,对于x的所有正值,导数为1,将平方误差限制在-1和1之间,对应于使用绝对值损失函数(? 1,1)间隔.这种形式的错误限幅进一步提高了算法的稳定性.

(链接到完整论文:http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html)

到目前为止我尝试过的是使用

clipped_loss_vec = tf.clip_by_value(loss, -1, 1)
Run Code Online (Sandbox Code Playgroud)

剪辑我在-1和+1之间计算的损失.在这种情况下,代理商没有学习正确的政策.我打印出网络的渐变,并意识到如果损失低于-1,渐变都会突然变为0!

我发生这种情况的原因是削减损失是(-inf,-1)U(1,inf)中的常数函数,这意味着它在这些区域中具有零梯度.这反过来确保整个网络中的梯度为零(想象一下,无论我提供给网络的任何输入图像,由于它已被剪切,损失在本地邻域中保持为-1).

所以,我的问题是两部分:

  1. Deepmind在摘录中究竟是什么意思?他们是否意味着低于-1的损失被削减为-1,高于+1的损失被削减为+1.如果是这样,他们是如何处理渐变的(即关于绝对值函数的那部分是什么?)

  2. 我应该如何在张量流中实现损耗限幅,使得梯度在限幅范围之外不会变为零(但可能保持在+1和-1)?谢谢!

neural-network deep-learning conv-neural-network tensorflow

9
推荐指数
1
解决办法
3889
查看次数