Recorte de pérdidas en el flujo del tensor (en DQN de DeepMind)

Estoy probando mi propia implementación del documento DQN por Deepmind en flujo de tensor y estoy teniendo dificultades con el recorte de la función de pérdida.

Aquí hay un extracto del documento de la naturaleza que describe el recorte de pérdida:

También nos pareció útil recortar el término de error de la actualización para que esté entre -1 y 1. Debido a que la función de pérdida de valor absoluto | x | tiene una derivada de −1 para todos los valores negativos de x y una derivada de 1 para todos los valores positivos de x, recortar el error al cuadrado para estar entre −1 y 1 corresponde al uso de una función de pérdida de valor absoluto para errores fuera de (- 1,1) intervalo. Esta forma de recorte de errores mejoró aún más la estabilidad del algoritmo.

(enlace al documento completo:http://www.nature.com/nature/journal/v518/n7540/full/nature14236.html)

Lo que he intentado hasta ahora es usar

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

para recortar la pérdida calculo entre -1 y +1. El agente no está aprendiendo la política adecuada en este caso. Imprimí los gradientes de la red y me di cuenta de que si la pérdida cae por debajo de -1, ¡todos los gradientes de repente se vuelven a 0!

Mi razonamiento para que esto suceda es que la pérdida recortada es una función constante en (-inf, -1) U (1, inf), lo que significa que tiene un gradiente cero en esas regiones. Esto a su vez garantiza que los gradientes en toda la red sean cero (piense en ello, independientemente de la imagen de entrada que proporcione a la red, la pérdida se mantiene en -1 en el vecindario local porque se ha recortado).

Entonces, mi pregunta es de dos partes:

¿Qué quiso decir Deepmind exactamente en el extracto? ¿Significaron que la pérdida por debajo de -1 se recorta a -1 y por encima de +1 se recorta a +1. Si es así, ¿cómo trataron con los gradientes (es decir, ¿qué es todo eso sobre las funciones de valor absoluto?)

¿Cómo debo implementar el recorte de pérdida en el flujo del tensor de modo que los gradientes no lleguen a cero fuera del rango recortado (pero tal vez permanezcan en +1 y -1)? ¡Gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta