In cosa differisce softmax_cross_entropy_with_logits da softmax_cross_entropy_with_logits_v2?


41

In particolare, suppongo di chiedermi questa affermazione:

Le versioni principali future di TensorFlow consentiranno ai gradienti di fluire nelle etichette immesse sul backprop per impostazione predefinita.

Che è mostrato quando uso tf.nn.softmax_cross_entropy_with_logits. Nello stesso messaggio mi spinge a dare un'occhiata tf.nn.softmax_cross_entropy_with_logits_v2. Ho consultato la documentazione ma afferma solo che per tf.nn.softmax_cross_entropy_with_logits_v2:

La backpropagazione avverrà sia nei logit che nelle etichette. Per impedire la backpropagation in etichette, passare i tensori di etichette attraverso uno stop_gradients prima di inviarlo a questa funzione.

al contrario di tf.nn.softmax_cross_entropy_with_logits:

La backpropagation avverrà solo nei logit.

Essendo molto nuovo sull'argomento (sto cercando di farmi strada attraverso alcuni tutorial di base) queste affermazioni non sono molto chiare. Ho una comprensione superficiale della backpropagation, ma cosa significa in realtà la precedente dichiarazione? Come sono collegate la backpropagation e le etichette? E come cambia il modo in cui lavoro tf.nn.softmax_cross_entropy_with_logits_v2rispetto all'originale?

Risposte:


56

Hai tutti i motivi per essere confuso, perché nell'apprendimento supervisionato non è necessario riprogrammare le etichette. Sono considerati verità di base fisse e solo i pesi devono essere regolati per abbinarli.

Ma in alcuni casi, le etichette stesse possono provenire da una fonte differenziabile, un'altra rete. Un esempio potrebbe essere l' apprendimento contraddittorio . In questo caso, entrambe le reti potrebbero trarre vantaggio dal segnale di errore. Questo è il motivo per cui è tf.nn.softmax_cross_entropy_with_logits_v2stato introdotto . Si noti che quando le etichette sono i segnaposto (che è anche tipico), non vi è alcuna differenza se il gradiente fluisce o meno, perché non ci sono variabili a cui applicare il gradiente.


5
Ah, vedo, devo ancora andare oltre l'apprendimento supervisionato, molto da imparare. Solo così ti ho capito correttamente, in pratica finché non indico che le mie etichette sono soggette a ottimizzazione (e le memorizziamo come tf.Variable) non verranno toccate e softmax_..._with_logits_v2funzioneranno come softmax_with_logits? (O potrei usare tf.stop_gradient sulla variabile label.)
Christian Eriksson

3
Sì, è giusto.
Massimo

2
Molto chiaro ed educativo, grazie mille!
Haitao Du,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.