我正在使用策略梯度来训练我的网络,并将损失定义为:
<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.
这是可能的还是我的代码做错了什么?
谢谢。
答案 0 :(得分:1)
无需赘述,您需要计算方程的梯度:
其中是在时间t采取的动作,
是在t的状态,而
是在t时刻的折扣奖励(或没有折扣的奖励)。
因此,在时间t处,您知道动作,可以将其表示为单编码的矢量,对吗?现在,如果您看损失的第一项:
这实际上是对数似然或交叉熵。因此,您的方程应如下所示:
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)