Градиент политики потерь - обучение по усилению - PullRequest
1 голос
/ 03 июля 2019

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

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 Ответ

1 голос
/ 03 июля 2019

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

enter image description here

, где a_t - действие, предпринятое в момент времени t, enter image description here - это состояние в момент времени t, а enter image description here - дисконтированное вознаграждение ( или не со скидкой до вас) опять за т.

Итак, в момент времени 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)
...