0

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

self.loss =  -tf.reduce_mean(tf.log(OUTPUT_NN)* self.REWARDS))
self.opt = tf.train.AdamOptimizer(self.lr).minimize(self.loss)

我不明白的是,损失函数有时是正的,有时是负的。我不明白信号中的这种翻转。对我来说,它应该总是负数,因为我前面有减号tf.reduce_mean.

例子:

Train-> Reward: 0.257782, Hit Ration: 0.500564, True Positive: 0.433404, True Negative: 0.578182, loss: 6.698527 
Train-> Reward: 0.257782, Hit Ration: 0.500564, True Positive: 0.433404, True Negative: 0.578182, loss: -11.804675

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

谢谢。

4

1 回答 1

1

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

在此处输入图像描述

其中在是在时间 t 采取的行动,在此处输入图像描述是 t 时的状态,是 t在此处输入图像描述的折扣奖励(或不由您决定)。

因此,在时间 t,您知道 action 在,您可以将其表示为 one-hot 编码向量,对吗?现在,如果您查看损失的第一项:

在此处输入图像描述

这实际上是对数似然或交叉熵。所以你的方程应该是这样的:

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)
于 2019-07-03T11:56:56.587 回答