Ограничение потерь в тензорном потоке (по DQN DeepMind)

Я пытаюсь реализовать собственную реализацию DQN от Deepmind в тензорном потоке и сталкиваюсь с трудностями с отсечением функции потерь.

Вот выдержка из статьи о природе, описывающая отсечение потерь:

Мы также сочли целесообразным обрезать термин ошибки из обновления между -1 и 1. Поскольку функция потери абсолютного значения | x | имеет производную от -1 для всех отрицательных значений x и производную от 1 для всех положительных значений x, ограничение квадрата ошибки до значения от -1 до 1 соответствует использованию функции потери абсолютного значения для ошибок вне (- 1,1) интервал. Эта форма отсечения ошибок дополнительно улучшила стабильность алгоритма.

(ссылка на полный текст статьи:http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html)

То, что я пробовал до сих пор, использует

clipped_loss_vec = tf.clip_by_value(loss, -1, 1)

Чтобы обрезать потери, я рассчитываю от -1 до +1. Агент не изучает правильную политику в этом случае. Я распечатал градиенты сети и понял, что если потеря падает ниже -1, все градиенты внезапно превращаются в 0!

Я считаю, что это связано с тем, что урезанная потеря является постоянной функцией в (-inf, -1) U (1, inf), что означает, что в этих регионах у нее нулевой градиент. Это, в свою очередь, гарантирует, что градиенты по всей сети равны нулю (представьте себе, что при любом входном изображении, которое я предоставляю сети, потери остаются равными -1 в локальной окрестности, поскольку они были обрезаны).

Итак, мой вопрос состоит из двух частей:

Что именно Deepmind имел в виду в отрывке? Они означали, что потеря ниже -1 обрезается до -1, а выше +1 обрезается до +1. Если да, то как они справились с градиентами (то есть, что это за функция абсолютных значений?)

Как мне реализовать ограничение потерь в тензорном потоке так, чтобы градиенты не уходили в ноль за пределами ограниченного диапазона (но, возможно, оставались на +1 и -1)? Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос