在OpenAI baselines的代码中,关于DQN,在构建操作图时,tf.stop_gradient
被用于目标网络的q值上,以防止目标q值对损失最小化的贡献。(第213行)
然而,在调用minimize
时,var_list
被指定为仅包含正在优化的q网络范围内的tf.Variable
,而不包括目标q网络范围内的变量。(第223行)
我不确定他们为什么要同时使用这两种方法。这两种方法似乎能达到相同的效果。
回答:
这是多余的。在我看来,代码的可读性更好——你知道梯度不会通过那个表达式流动,并且你也清楚哪些变量会被影响。
确实,只使用其中一种方法就足以达到相同的效果。