损失政策梯度-强化学习

时间:2019-07-03 10:32:59

标签: tensorflow reinforcement-learning policy-gradient-descent

我正在使用策略梯度来训练我的网络,并将损失定义为:

<table frame="box">

我不了解的是,损失函数有时为正,有时为负。我不明白信号中的这种翻转。对我来说,它应该永远是负数,因为我在self.loss = -tf.reduce_mean(tf.log(OUTPUT_NN)* self.REWARDS)) self.opt = tf.train.AdamOptimizer(self.lr).minimize(self.loss)

前面有减号

示例:

tf.reduce_mean.

这是可能的还是我的代码做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

无需赘述,您需要计算方程的梯度:

enter image description here

其中a_t是在时间t采取的动作,enter image description here是在t的状态,而enter image description here是在t时刻的折扣奖励(或没有折扣的奖励)。

因此,在时间t处,您知道动作a_t,可以将其表示为单编码的矢量,对吗?现在,如果您看损失的第一项:

enter image description here

这实际上是对数似然或交叉熵。因此,您的方程应如下所示:

self.loss = -tf.reduce_mean(tf.multiply(tf.nn.softmax_cross_entropy_with_logits_v2(labels=ONE_HOT_ACTIONS, logits=OUTPUT_NN),REWARDS))
self.opt = tf.train.AdamOptimizer(self.lr).minimize(self.loss)