Градиент политики потерь - обучение по усилению

Я тренирую свою сеть, используя градиент политики и определяя потери как:

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

Это возможно, или я делаю что-то не так в моем коде?

Благодарю.

1 ответ

Не вдаваясь в подробности, вам нужно вычислить градиент уравнения:

где это действие, предпринятое в момент времени 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)
Другие вопросы по тегам