我查看了两个有关策略梯度的示例,并且想知道为什么有两种不同的方法来获取优势函数。 https://github.com/flyyufelix/VizDoom-Keras-RL/blob/master/reinforce.py的其中一位,将优势直接设置为折扣奖励
advantages[i][self.actions[i]] = discounted_rewards[i]
并将其直接传递给分类交叉熵。
loss = tf.reduce_mean(neg_log_prob * self.tf_vt)
然后他尝试最小化(tf_vt只是Discounted_reward,其计算方法与上述方法相同)。
第一个方法不是
advantages[i][self.actions[i]] = probability_from_softmax * discounted_rewards[i]
如果要相同的话?还是我误解了此处手动计算负对数概率之间的区别?
答案 0 :(得分:0)
我认为这是相同的。他们只是以两种不同的方式写作。第一个定义计算优势函数,而第二个定义直接计算损失。优势函数仅给出该特定奖励与平均奖励(值)相比有多少优势。如果您提供的值为零,则将获得第一个定义。现在,需要计算损失。因此,分类交叉熵给出了对数概率乘以优势。在第二个定义中,这整个过程是手动完成的。