Spiegazione della perdita di entropia incrociata


35

Supponiamo che io costruisca un NN per la classificazione. L'ultimo livello è un livello denso con attivazione softmax. Ho cinque diverse classi da classificare. Supponiamo per un singolo esempio di allenamento, true labelè [1 0 0 0 0]mentre le previsioni sono [0.1 0.5 0.1 0.1 0.2]. Come calcolare la perdita di entropia incrociata per questo esempio?

Risposte:


50

La formula di entropia incrociata comprende due distribuzioni, , la distribuzione vera e , la distribuzione stimata, definita sulla variabile discreta ed è data dap(x)q(x)x

H(p,q)=xp(x)log(q(x))

Per una rete neurale, il calcolo è indipendente dal seguente:

  • Che tipo di strato è stato usato.

  • Che tipo di attivazione è stata utilizzata, anche se molte attivazioni non saranno compatibili con il calcolo perché le loro uscite non sono interpretabili come probabilità (ovvero, le loro uscite sono negative, maggiori di 1 o non equivalgono a 1). Softmax viene spesso utilizzato per la classificazione multiclasse perché garantisce una funzione di distribuzione della probabilità ben educata.

Per una rete neurale, di solito vedrai l'equazione scritta in una forma in cui è il vettore di verità di base e (o qualche altro valore preso direttamente dall'output dell'ultimo livello) è il preventivo. Per un singolo esempio, sarebbe simile al seguente:yyy^

L=ylog(y^)

dove è il prodotto punto vettoriale.

La tua verità di base di esempio dà tutta la probabilità al primo valore e gli altri valori sono zero, quindi possiamo ignorarli e usare semplicemente il termine corrispondente dalle tue stimeyyy^

L=(1×log(0.1)+0×log(0.5)+...)

L=log(0.1)2.303

Un punto importante dai commenti

Ciò significa che la perdita sarebbe la stessa, indipendentemente dal fatto che le previsioni siano o ?[0.1,0.5,0.1,0.1,0.2][0.1,0.6,0.1,0.1,0.1]

Sì, questa è una caratteristica chiave della perdita di log multiclasse, che premia / penalizza solo le probabilità di classi corrette. Il valore è indipendente dal modo in cui la probabilità rimanente viene suddivisa tra classi errate.

Vedrai spesso questa equazione mediata su tutti gli esempi come una funzione di costo . Non è sempre strettamente rispettato nelle descrizioni, ma di solito una funzione di perdita è di livello inferiore e descrive come una singola istanza o componente determina un valore di errore, mentre una funzione di costo è di livello superiore e descrive come viene valutato un sistema completo per l'ottimizzazione. Una funzione di costo basata sulla perdita di log multiclasse per un set di dati di dimensioni potrebbe apparire così:N

J=1N(i=1Nyilog(y^i))

Molte implementazioni richiederanno che i tuoi valori di verità di base siano codificati in modo diretto (con una sola vera classe), poiché ciò consente un'ulteriore ottimizzazione. Tuttavia, in linea di principio la perdita di entropia incrociata può essere calcolata - e ottimizzata - quando non è così.


1
Va bene. Ciò significa che la perdita sarebbe la stessa, indipendentemente dal fatto che le previsioni siano [0,1 0,5 0,1 0,1 0,2] o [0,1 0,6 0,1 0,1 0,1]?
Nain,

@Nain: è corretto per il tuo esempio. La perdita di entropia incrociata non dipende da quali siano i valori delle probabilità di classe errate.
Neil Slater,

8

La risposta di Neil è corretta. Tuttavia, ritengo importante sottolineare che mentre la perdita non dipende dalla distribuzione tra le classi errate (solo la distribuzione tra la classe corretta e il resto), il gradiente di questa funzione di perdita influisce in modo diverso sulle classi errate a seconda di come hanno torto. Pertanto, quando si utilizza il cross-ent nell'apprendimento automatico, i pesi cambieranno in modo diverso per [0,1 0,5 0,1 0,1 0,2] e [0,1 0,6 0,1 0,1 0,1]. Questo perché il punteggio della classe corretta è normalizzato dai punteggi di tutte le altre classi per trasformarlo in una probabilità.


3
Puoi elaborarlo con un esempio corretto?
Nain,

@Lucas Adams, puoi fare un esempio per favore?
koryakinp,

La derivata di OGNI y_i (uscita softmax) rispetto a OGNI logit z (o il parametro w stesso) dipende da OGNI y_i. medium.com/@aerinykim/…
Aaron

2

Vediamo come si comporta il gradiente della perdita ... Abbiamo l'entropia incrociata come funzione di perdita, che è data da

H(p,q)=i=1np(xi)log(q(xi))=(p(x1)log(q(x1))++p(xn)log(q(xn))

Passando da qui .. vorremmo conoscere la derivata rispetto ad alcuni : Poiché tutti gli altri termini vengono annullati a causa della differenziazione. Possiamo fare un ulteriore passo avanti di questa equazione fino a xi

xiH(p,q)=xip(xi)log(q(xi)).
xiH(p,q)=p(xi)1q(xi)q(xi)xi.

Da questo possiamo vedere che stiamo ancora penalizzando solo le classi vere (per le quali esiste un valore per ). Altrimenti abbiamo solo un gradiente di zero.p(xi)

Mi chiedo come gestire i pacchetti software con un valore previsto pari a 0, mentre il valore reale era maggiore di zero ... Dal momento che in questo caso stiamo dividendo per zero.


Penso che quello che vuoi sia prendere il parametro wrt derivato, non wrt x_i.
Aaron,

1

Cominciamo con la comprensione dell'entropia nella teoria dell'informazione: supponiamo che tu voglia comunicare una serie di alfabeti "aaaaaaaa". Potresti farlo facilmente come 8 * "a". Ora prendi un'altra stringa "jteikfqa". Esiste un modo compresso per comunicare questa stringa? Non c'è. Possiamo dire che l'entropia della seconda stringa è maggiore in quanto, per comunicarla, abbiamo bisogno di più "bit" di informazioni.

Questa analogia si applica anche alle probabilità. Se si dispone di un insieme di elementi, ad esempio frutti, la codifica binaria di quei frutti sarebbe dove n è il numero di frutti. Per 8 frutti sono necessari 3 pezzi e così via. Un altro modo di vedere questo è che data la probabilità che qualcuno selezioni un frutto a caso è 1/8, la riduzione dell'incertezza se viene selezionato un frutto è che è 3. Più specificamente,log2(n)log2(1/8)

i=1818log2(18)=3
Questa entropia ci dice dell'incertezza legata a certe distribuzioni di probabilità; maggiore è l'incertezza / variazione in una distribuzione di probabilità, maggiore è l'entropia (ad es. per 1024 frutti, sarebbe 10).

Nell'entropia "incrociata", come suggerisce il nome, ci concentriamo sul numero di bit necessari per spiegare la differenza in due diverse distribuzioni di probabilità. Lo scenario migliore è che entrambe le distribuzioni sono identiche, nel qual caso è richiesta la minima quantità di bit, ovvero l'entropia semplice. In termini matematici,

H(y,y^)=iyiloge(y^i)

Dove è il vettore di probabilità previsto (uscita Softmax) e è il vettore di verità di base (ad esempio one-hot). Il motivo per cui utilizziamo il log naturale è perché è facile distinguere (rif. Calcolo dei gradienti) e il motivo per cui non prendiamo il log del vettore di verità del terreno è perché contiene molti 0 che semplificano la somma.y^y

In conclusione: in termini laici, si potrebbe pensare all'entropia incrociata come la distanza tra due distribuzioni di probabilità in termini di quantità di informazioni (bit) necessarie per spiegare quella distanza. È un modo preciso per definire una perdita che diminuisce man mano che i vettori di probabilità si avvicinano l'uno all'altro.


0

Non sono d'accordo con Lucas. I valori di cui sopra sono già probabilità. Si noti che il post originale indicava che i valori avevano un'attivazione softmax.

L'errore viene propagato nuovamente sulla classe "calda" e la probabilità Q (i) non cambia se le probabilità all'interno delle altre classi si spostano tra loro.


2
Lucas ha ragione. Con l'architettura descritta dall'OP, quindi il gradiente di tutti i log (al contrario delle uscite) non è zero, perché la funzione softmax li collega tutti. Quindi il [gradiente dell'errore] nella classe "calda" si propaga a tutti i neuroni di output.
Neil Slater,

+1 per Neil e Lucas
Aaron

-1

Il problema è che le probabilità provengono da una funzione 'complicata' che incorpora le altre uscite nel valore dato. I risultati sono interconnessi, quindi in questo modo non stiamo derivando per quanto riguarda il risultato effettivo, ma da tutti gli input dell'ultima funzione di attivazione (softmax), per ogni risultato.

Ho trovato una descrizione molto bella su deepnotes.io/softmax-crossentropy in cui l'autore mostra che la derivata effettiva è .piyi

Altra descrizione accurata su gombru.github.io/2018/05/23/cross_entropy_loss .

Penso che l'uso di un semplice sigmoide come ultimo livello di attivazione porterebbe alla risposta approvata, ma l'uso di softmax indica una risposta diversa.


1
Benvenuto in Stack Exchange. Tuttavia, ciò che hai scritto non sembra essere una risposta alla domanda del PO sul calcolo della perdita tra entropia.
user12075,
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.