Quelle est la différence entre softmax_cross_entropy_with_logits et softmax_cross_entropy_with_logits_v2?

41

Plus précisément, je suppose que je m'interroge sur cette affirmation:

Les futures versions majeures de TensorFlow permettront par défaut aux gradients de s’intégrer dans l’entrée des étiquettes sur backprop.

Qui est montré quand j'utilise tf.nn.softmax_cross_entropy_with_logits. Dans le même message, il m’incite à regarder tf.nn.softmax_cross_entropy_with_logits_v2. J'ai parcouru la documentation, mais elle indique seulement que tf.nn.softmax_cross_entropy_with_logits_v2:

La rétro-propagation se produira à la fois dans les logits et les étiquettes. Pour interdire la rétropropagation dans les étiquettes, faites passer les tenseurs d’étiquette à un stop_gradients avant de l’alimenter à cette fonction.

par opposition à, tf.nn.softmax_cross_entropy_with_logitsde:

La rétro-propagation ne se produira que dans les logits.

Étant très nouveau sur le sujet (j'essaie de parcourir quelques tutoriels de base), ces déclarations ne sont pas très claires. J'ai une compréhension superficielle de la rétropropagation, mais que signifie réellement la déclaration précédente? Comment les backpropagations et les étiquettes sont-elles connectées? Et en quoi cela change-t-il la façon dont je travaille avec tf.nn.softmax_cross_entropy_with_logits_v2l'original?

Christian Eriksson
la source

Réponses:

56

Vous avez toutes les raisons d'être confus, car dans l'apprentissage supervisé, il n'est pas nécessaire de rétrograder aux étiquettes. Ils sont considérés comme une vérité sur le terrain et seuls les poids doivent être ajustés en conséquence.

Mais dans certains cas, les étiquettes elles - mêmes peuvent provenir d’une source différentiable, d’un autre réseau. Un exemple pourrait être un apprentissage contradictoire . Dans ce cas, les deux réseaux pourraient bénéficier du signal d'erreur. C'est la raison pour laquelle a tf.nn.softmax_cross_entropy_with_logits_v2été introduit . Notez que lorsque les étiquettes sont les espaces réservés (ce qui est également typique), il n'y a pas de différence si le gradient traverse ou non les flux, car il n'y a pas de variables pour appliquer le gradient.

Maxime
la source
5
Ah je vois, je n'ai pas encore dépassé l'apprentissage supervisé, il y a beaucoup à apprendre. Juste pour que je vous ai bien compris, si je n'indique pas que mes étiquettes sont sujettes à une optimisation (par exemple, les stocker en tant que variables.), Elles ne seront pas touchées et softmax_..._with_logits_v2ne fonctionneront pas softmax_with_logits. (Ou je pourrais utiliser tf.stop_gradient sur la variable labels.)
Christian Eriksson
3
Oui c'est vrai.
Maxim
2
Très clair et instructif, merci beaucoup!
Haitao Du