¿En qué se diferencia softmax_cross_entropy_with_logits de softmax_cross_entropy_with_logits_v2?

41

Específicamente, supongo que me pregunto acerca de esta declaración:

Las futuras versiones principales de TensorFlow permitirán que los gradientes fluyan a la entrada de etiquetas en backprop de forma predeterminada.

Que se muestra cuando lo uso tf.nn.softmax_cross_entropy_with_logits. En el mismo mensaje me insta a echar un vistazo tf.nn.softmax_cross_entropy_with_logits_v2. Revisé la documentación pero solo dice que para tf.nn.softmax_cross_entropy_with_logits_v2:

La propagación hacia atrás ocurrirá tanto en logits como en etiquetas. Para no permitir la propagación hacia atrás en las etiquetas, pase los tensores de la etiqueta a través de un stop_gradients antes de alimentarlo a esta función.

en oposición a, tf.nn.softmax_cross_entropy_with_logits's:

La propagación hacia atrás solo ocurrirá en logits.

Siendo muy nuevo en el tema (estoy tratando de hacer algunos tutoriales básicos) esas declaraciones no son muy claras. Tengo una comprensión superficial de la propagación hacia atrás, pero ¿qué significa realmente la declaración anterior? ¿Cómo se conectan la propagación hacia atrás y las etiquetas? ¿Y cómo cambia esto la forma en que trabajo tf.nn.softmax_cross_entropy_with_logits_v2en lugar del original?

Christian Eriksson
fuente

Respuestas:

56

Tiene todas las razones para estar confundido, porque en el aprendizaje supervisado no es necesario propagarse hacia atrás a las etiquetas. Se consideran verdad de terreno fijo y solo los pesos deben ajustarse para que coincidan.

Pero en algunos casos, las etiquetas mismas pueden provenir de una fuente diferenciable, otra red. Un ejemplo podría ser el aprendizaje contradictorio . En este caso, ambas redes podrían beneficiarse de la señal de error. Esa es la razón por la que tf.nn.softmax_cross_entropy_with_logits_v2se introdujo . Tenga en cuenta que cuando las etiquetas son los marcadores de posición (que también es típico), no hay diferencia si el gradiente a través de los flujos o no, porque no hay variables a las que aplicar el gradiente.

Máxima
fuente
55
Ah, ya veo, todavía tengo que ir más allá del aprendizaje supervisado, mucho que aprender. Solo para que te haya entendido correctamente, básicamente, siempre y cuando no indique que mis etiquetas están sujetas a optimización (las guardo como variables), ¿no se tocarán y softmax_..._with_logits_v2funcionarán como softmax_with_logits? (O podría usar tf.stop_gradient en la variable de etiquetas).
Christian Eriksson
3
Si, eso es correcto.
Maxim
2
Muy claro y educativo, muchas gracias!
Haitao Du