Nel classificatore softmax, perché usare la funzione exp per eseguire la normalizzazione?


30

Perché usare softmax in contrapposizione alla normalizzazione standard? Nell'area dei commenti della risposta principale a questa domanda, @Kilian Batzner ha sollevato 2 domande che mi confondono molto. Sembra che nessuno dia una spiegazione tranne i vantaggi numerici.

Ottengo i motivi per usare la perdita di entropia incrociata, ma come si collega al softmax? Hai detto "la funzione di softmax può essere vista come un tentativo di minimizzare l'entropia incrociata tra predizioni e verità". Supponiamo che userei la normalizzazione standard / lineare, ma continuerò a usare la perdita di entropia incrociata. Quindi proverei anche a minimizzare l'entropia incrociata. Quindi, in che modo il softmax è collegato all'entropia crociata tranne che per i benefici numerici?

Per quanto riguarda la visione probabilistica: qual è la motivazione per guardare le probabilità del registro? Il ragionamento sembra essere un po 'come "Usiamo e ^ x nel softmax, perché interpretiamo x come log-probabilties". Con lo stesso ragionamento che potremmo dire, usiamo e ^ e ^ e ^ x nel softmax, perché interpretiamo x come probabilità log-log-log-log (esagerando qui, ovviamente). Ottengo i vantaggi numerici di softmax, ma qual è la motivazione teorica per usarlo?


È differenziabile, porta a risultati non negativi (come sarebbe necessario per una probabilità in modo da poter calcolare l'entropia crociata) e si comporta come la funzione max, che è appropriata in un'impostazione di classificazione. Benvenuti nel sito!
Emre,

@Emre Thanks! Ma cosa significa "si comporta come la funzione massima"? Inoltre, se ho un'altra funzione che è anche differenziabile, in aumento monotono e porta a risultati non negativi, posso usarla per sostituire la funzione exp nella formula?
Hans,

Quando si normalizza usando , l'argomento più grande viene mappato su 1 mentre il resto viene mappato su zero, a causa della crescita della funzione esponenziale. max
Emre,

Risposte:


37

È più di un semplice numero. Un rapido promemoria della softmax:

P(y=j|x)=exjk=1Kexk

Dove è un vettore d'ingresso con lunghezza pari al numero di classi . La funzione softmax ha 3 proprietà molto belle: 1. normalizza i tuoi dati (genera una corretta distribuzione di probabilità), 2. è differenziabile e 3. utilizza l'esp che hai citato. Alcuni punti importanti:xK

  1. La funzione di perdita non è direttamente correlata al softmax. È possibile utilizzare la normalizzazione standard e continuare a utilizzare l'entropia incrociata.

  2. Una funzione "hardmax" (cioè argmax) non è differenziabile. Il softmax dà almeno una minima quantità di probabilità a tutti gli elementi nel vettore di output, e quindi è ben differenziabile, da cui il termine "soft" in softmax.

  3. Ora arrivo alla tua domanda. La in softmax è la funzione esponenziale naturale. Prima di normalizzare, trasformiamo come nel grafico di :exex

funzione esponenziale naturale

Se è 0, allora , se è 1, quindi e se è 2, ora ! Un grande passo! Questa è quella che viene chiamata una trasformazione non lineare dei nostri punteggi dei log non normalizzati. La proprietà interessante della funzione esponenziale combinata con la normalizzazione nel softmax è che i punteggi alti in diventano molto più probabili dei punteggi bassi.xy=1xy=2.7xy=7x

Un esempio . Di ' e il tuo punteggio di registro è vettore . La semplice funzione argmax genera:K=4[ 2 , 4 , 2 , 1 ]x[2,4,2,1]

[0,1,0,0]

L'argmax è l'obiettivo, ma non è differenziabile e non possiamo allenare il nostro modello con esso :( Una semplice normalizzazione, che è differenziabile, produce le seguenti probabilità:

[0.2222,0.4444,0.2222,0.1111]

È davvero lontano dall'argmax! :( Considerando che le uscite softmax:

[0.1025,0.7573,0.1025,0.0377]

È molto più vicino all'argmax! Poiché utilizziamo l'esponenziale naturale, aumentiamo enormemente la probabilità del punteggio più grande e diminuiamo la probabilità dei punteggi più bassi rispetto alla normalizzazione standard. Da qui il "massimo" in softmax.


3
Informazioni fantastiche. Tuttavia, invece di usare e, che ne dici di usare una costante dire 3 o 4? Il risultato sarà lo stesso?
Cheok Yan Cheng il

7
@CheokYanCheng, sì. Ma eha un derivato più bello;)
vega

Ho visto che il risultato di softmax è in genere usato come probabilità di appartenenza a ciascuna classe. Se la scelta di 'e' invece di un'altra costante è arbitraria, non ha senso vederla in termini di probabilità, giusto?
javierdvalle,

@vega Siamo spiacenti, ma continuo a non vedere come risponde alla domanda: perché non utilizzare e ^ e ^ e ^ e ^ e ^ x per gli stessi motivi? Per favore, spiega
Gulzar,

@jvalle non è eciò che lo rende interpretabile come una probabilità, è il fatto che ogni elemento dell'output di softmax è limitato in [0,1] e l'intero somma a 1.
vega

2

Oltre alla spiegazione di Vega,

definiamo il softmax generico: dove è una costante> = 1

P(y=j|x)=ψxjk=1Kψxk
ψ

se , allora sei abbastanza lontano da argmax come menzionato da @vega.ψ=1

Supponiamo ora , ora sei abbastanza vicino all'argmax ma hai anche numeri molto piccoli per valori negativi e numeri grandi per positivi. Questi numeri overflow il limite aritmetica punto galleggiante facilmente (ad esempio limite massimo di float64 NumPy è ). Inoltre, anche se la selezione è che è molto più piccola di , i framework dovrebbero implementare una versione più stabile di softmax (moltiplicando sia numeratore che denominatore con costante ) poiché i risultati diventano troppo piccoli per poter esprimere con tale precisione.ψ=10010308ψ=e100C

Quindi, vuoi scegliere una costante abbastanza grande da approssimare bene argmax, e anche abbastanza piccola da esprimere questi numeri grandi e piccoli nei calcoli.

E, naturalmente, ha anche un bel derivato.e


2

Questa domanda è molto interessante. Non conosco il motivo esatto, ma penso che il seguente motivo possa essere usato per spiegare l'uso della funzione esponenziale. Questo post è ispirato alla meccanica statistica e al principio della massima entropia.

Spiegherò questo usando un esempio con N immagini, che sono costituiti da n1 immagini dalla classe C1 , n2 immagini dalla classe C2 , ..., e nK immagini dalla classe CK . Quindi supponiamo che la nostra rete neurale sia stata in grado di applicare una trasformazione non lineare sulle nostre immagini, in modo tale da poter assegnare un "livello di energia" Ek a tutte le classi. Partiamo dal presupposto che questa energia è su una scala non lineare che ci consente di separare linearmente le immagini.

L'energia media E¯ è correlata alle altre energie Ek dalla seguente relazione

NE¯=k=1KnkEk.()

Allo stesso tempo, vediamo che la quantità totale di immagini può essere calcolata come la seguente somma

N=k=1Knk.()

n1

Nn1n2nK

(N!n1!,n2!,,nK!)=N!k=1Knk!.

N()()βαL(n1,n2,,nk;α,β)

L(n1,n2,,nk;α,β)=N!k=1Knk!+β[k=1KnkEkNE¯]+α[Nk=1Knk]

Nnk

lnn!=nlnnn+O(lnn).

lnn!n

nk~

Lnk~=lnnk~1α+βEk~.

Se impostiamo questa derivata parziale su zero, possiamo trovare

nk~=exp(βEk~)exp(1+α).()

()

exp(1+α)=1Nk=1Kexp(βEk).

()

nk~=exp(βEk~)1Nk=1Kexp(βEk).

nk~/NCk~pk~

pk~=exp(βEk~)k=1Kexp(βEk).

βEk~=wkTxkth

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.