TensorFlow 中的资格跟踪
Eligibility traces in TensorFlow
根据 Sutton 的书 - Reinforcement Learning: An Introduction,Network weights 的更新方程为:
其中 et 是资格跟踪。
这类似于带有额外 et.
的梯度下降更新
这个资格跟踪可以包含在 TensorFlow 中的 tf.train.GradientDescentOptimizer
中吗?
这是一个使用 tf.contrib.layers.scale_gradient
进行梯度元素乘法的简单示例。在正向传递中,它只是一个恒等运算,而在反向传递中,它将梯度乘以它的第二个参数。
import tensorflow as tf
with tf.Graph().as_default():
some_value = tf.constant([0.,0.,0.])
scaled = tf.contrib.layers.scale_gradient(some_value, [0.1, 0.2, 0.3])
(some_value_gradient,) = tf.gradients(tf.reduce_sum(scaled), some_value)
with tf.Session():
print(scaled.eval())
print(some_value_gradient.eval())
打印:
[ 0. 0. 0.]
[ 0.1 0.2 0.30000001]
根据 Sutton 的书 - Reinforcement Learning: An Introduction,Network weights 的更新方程为:
其中 et 是资格跟踪。
这类似于带有额外 et.
的梯度下降更新
这个资格跟踪可以包含在 TensorFlow 中的 tf.train.GradientDescentOptimizer
中吗?
这是一个使用 tf.contrib.layers.scale_gradient
进行梯度元素乘法的简单示例。在正向传递中,它只是一个恒等运算,而在反向传递中,它将梯度乘以它的第二个参数。
import tensorflow as tf
with tf.Graph().as_default():
some_value = tf.constant([0.,0.,0.])
scaled = tf.contrib.layers.scale_gradient(some_value, [0.1, 0.2, 0.3])
(some_value_gradient,) = tf.gradients(tf.reduce_sum(scaled), some_value)
with tf.Session():
print(scaled.eval())
print(some_value_gradient.eval())
打印:
[ 0. 0. 0.]
[ 0.1 0.2 0.30000001]