Я не могу обернуться вопросом: как именно отрицательные награды помогают машине избежать их?
Происхождение вопроса пришло от
решения Google для игры Pong .По их логике, когда игра закончена (агент выиграл или потерял очко), окружение возвращает награду (+1 или -1).Любые промежуточные состояния возвращают 0 в качестве награды.Это означает, что каждый выигрыш / проигрыш будет возвращать либо [0,0,0, ..., 0,1] либо [0,0,0, ..., 0, -1] массивы вознаграждений.Затем они дисконтируют и стандартизируют вознаграждения:
#rwd - array with rewards (ex. [0,0,0,0,0,0,1]), args.gamma is 0.99
prwd = discount_rewards(rwd, args.gamma)
prwd -= np.mean(prwd)
prwd /= np.std(prwd)
discount_rewards предполагают, что это какая-то стандартная функция, impl может быть , найденная здесь .Результат для победы (+1) может быть примерно таким:
[-1.487 , -0.999, -0.507, -0.010, 0.492, 0.999, 1.512]
Для лузов (-1):
[1.487 , 0.999, 0.507, 0.010, -0.492, -0.999, -1.512]
В результате каждый ход получает вознаграждение,Их функция потерь выглядит следующим образом:
loss = tf.reduce_sum(processed_rewards * cross_entropies + move_cost)
Пожалуйста, помогите мне ответить на следующие вопросы:
- Функция перекрестной энтропии может выдавать выходные данные от 0 -> инф.Правильно?
- Оптимизатор Tensorflow минимизирует потери по абсолютной величине (не заботится о знаке, идеальная потеря всегда равна 0).Правильно?
- Если утверждение 2 верно, тогда потери 7.234 столь же плохи, как -7.234.Правильно?
- Если все перечисленное верно, то как отрицательное вознаграждение говорит машине, что оно плохое, а положительное говорит машине, что это хорошо?
Я также прочитал этот ответ , однако мне так и не удалось понять, , почему именно негатив хуже положительного .Для меня более разумно иметь что-то вроде:
loss = tf.reduce_sum(tf.pow(cross_entropies, reward))
Но этот эксперимент не удался.