Mi pregunta viene de otro pregunta respondido en Stackoverflow; la implementación de Keras de softmax
función de activación se personaliza para restar el valor máximo de los diferentes logits:
def softmax(x, axis=-1):
# when x is a 2 dimensional tensor
e = K.exp(x - K.max(x, axis=axis, keepdims=True))
s = K.sum(e, axis=axis, keepdims=True)
return e / s
Cuando se utiliza Tensorflow con la implementación normal de softmax significa hacer la siguiente operación antes del softmax
llamar:
logits = logits - tf.expand_dims(tf.reduce_max(logits, axis=-1), -1)
Pregunta: ¿Cómo es que restar el máximo de los logits ayuda al aprendizaje? No lo entiendo.
Pregunta subsidiaria: ¿Cómo es que el implemento Keras conocía este hack? ¿Hay alguna publicación relacionada con este descubrimiento?