Qual a diferença entre softmax_cross_entropy_with_logits e softmax_cross_entropy_with_logits_v2?

41

Especificamente, suponho que me pergunto sobre essa afirmação:

As principais versões futuras do TensorFlow permitirão que os gradientes fluam para a entrada de etiquetas no backprop por padrão.

O que é mostrado quando eu uso tf.nn.softmax_cross_entropy_with_logits. Na mesma mensagem, exorta-me a dar uma olhada tf.nn.softmax_cross_entropy_with_logits_v2. Examinei a documentação, mas apenas afirma que tf.nn.softmax_cross_entropy_with_logits_v2:

A retropropagação ocorrerá nos logits e nos rótulos. Para desabilitar a retropropagação nos rótulos, passe os tensores dos rótulos por um stop_gradients antes de alimentá-lo com esta função.

ao contrário de tf.nn.softmax_cross_entropy_with_logits:

A retropropagação ocorrerá apenas em logits.

Sendo muito novo no assunto (estou tentando passar por alguns tutoriais básicos) essas declarações não são muito claras. Eu tenho um entendimento superficial da retropropagação, mas o que a declaração anterior realmente significa? Como a retropropagação e os rótulos estão conectados? E como isso muda a maneira como trabalho, tf.nn.softmax_cross_entropy_with_logits_v2em oposição ao original?

Christian Eriksson
fonte

Respostas:

56

Você tem todos os motivos para se confundir, porque no aprendizado supervisionado não é necessário retropropagar para rótulos. Eles são considerados verdade fixa e apenas os pesos precisam ser ajustados para corresponder a eles.

Mas, em alguns casos, os próprios rótulos podem vir de uma fonte diferenciável, de outra rede. Um exemplo pode ser o aprendizado contraditório . Nesse caso, as duas redes podem se beneficiar do sinal de erro. Essa é a razão pela qual tf.nn.softmax_cross_entropy_with_logits_v2foi introduzida . Observe que, quando os rótulos são os espaços reservados (o que também é típico), não há diferença se o gradiente passar ou não, porque não há variáveis ​​para aplicar gradiente.

Máxima
fonte
5
Ah, entendo, ainda tenho que ir além do aprendizado supervisionado, muito o que aprender. Só para que você entenda corretamente, basicamente, desde que não indique que meus rótulos estão sujeitos à otimização (e os armazene como tf.Variable), eles não serão tocados e softmax_..._with_logits_v2funcionarão como softmax_with_logits? (Ou eu poderia usar tf.stop_gradient sobre a variável etiquetas.)
Christian Eriksson
3
Sim está certo.
Maxim
2
Muito claro e educativo, muito obrigado!
Haitao Du