Funzione Softmax vs Sigmoid nel classificatore logistico?


63

Cosa decide la scelta della funzione (Softmax vs Sigmoid) in un classificatore logistico?

Supponiamo che ci siano 4 classi di output. Ciascuna delle funzioni di cui sopra fornisce le probabilità che ciascuna classe sia l'output corretto. Quindi quale prendere per un classificatore?


16
La funzione softmax non è altro che una generalizzazione del sigmoide, quindi non è del tutto chiaro cosa intendi con "softmax vs. sigmoide".
Dsaxton,

2
È il caso del sigmoide. Quando usiamo il sigmoide una classe ha probabilità e l'altra ha probabilità . exp(βTx)/(exp(βTx)+1)1/(exp(βTx)+1)
dsaxton,

3
Il poster di reddit sta facendo una distinzione che penso sia sbagliata o almeno irrilevante. Indipendentemente dal fatto che una delle classi abbia o meno un peso, si tratta solo di spostare i punteggi, il che non ha alcun effetto sulle probabilità.
Dsaxton,


3
"Non è del tutto chiaro cosa intendi per" softmax vs. sigmoid "." Appena sotto il titolo, c'è il corpo della domanda - molto facile da perdere, lo so. Inoltre, è un buon titolo indirizzare le query di Google a venire qui per rispondere esattamente a ciò che è stato chiesto.
michael

Risposte:


77

La funzione sigmoide viene utilizzata per la regressione logistica a due classi, mentre la funzione softmax viene utilizzata per la regressione logistica multiclasse (ovvero MaxEnt, regressione logistica multinomiale, Regressione softmax, Classificazione massima entropia).


Nella regressione logistica a due classi, le probabilità previste sono le seguenti, usando la funzione sigmoid:

Pr(Yi=0)=eβXi1+eβ0XiPr(Yi=1)=1Pr(Yi=0)=11+eβXi

Nella regressione logistica multiclasse, con le classi , le probabilità previste sono le seguenti, utilizzando la funzione softmax:K

Pr(Yi=k)=eβkXi 0cKeβcXi

Si può osservare che la funzione softmax è un'estensione della funzione sigmoide al caso multiclasse, come spiegato di seguito. Diamo un'occhiata alla regressione logistica multiclasse, con classi :K=2

Pr(Yi=0)=eβ0Xi 0cKeβcXi=eβ0Xieβ0Xi+eβ1Xi=e(β0β1)Xie(β0β1)Xi+1=eβXi1+eβXiPr(Yi=1)=eβ1Xi 0cKeβcXi=eβ1Xieβ0Xi+eβ1Xi=1e(β0β1)Xi+1=11+eβXi

con . Vediamo che otteniamo le stesse probabilità della regressione logistica a due classi usando la funzione sigmoid. Wikipedia si espande un po 'di più su questo.β=(β0β1)


1
Sono ingenuo in questo, ma vedo questo molto tempo β = - (β0 − β1) Cosa potrebbe essere possibile spiegarlo? Per quanto ne so in Sigmoids β sarebbe un vettore. E di solito sono uno per una determinata corsa. Allora come mai β0 e β1 entrano in scena?
Ishan Bhatt, il

1
@IshanBhat questo commento può essere d'aiuto.
Tom Hale,

stranamente, posso ancora regredire alle multiclasse usando solo
sigmoid

15

Sono, infatti, equivalenti, nel senso che uno può essere trasformato nell'altro.

Supponiamo che i tuoi dati siano rappresentati da un vettore , di dimensione arbitraria, e che tu abbia creato un classificatore binario per esso, usando una trasformazione affine seguita da una softmax:x

(z0z1)=(w0Tw1T)x+(b0b1),
P(Ci|x)=softmax(zi)=eziez0+ez1,i{0,1}.

Trasformiamolo in un classificatore binario equivalente che utilizza un sigmoid invece del softmax. Prima di tutto, dobbiamo decidere quale è la probabilità che vogliamo che il sigmoid emetta (che può essere per la classe o ). Questa scelta è assolutamente arbitraria e quindi scelgo la classe . Quindi, il mio classificatore sarà nel formato:C0C1C0

z=wTx+b,
P(C0|x)=σ(z)=11+ez,
P(C1|x)=1σ(z).

I classificatori sono equivalenti se le probabilità sono uguali, quindi dobbiamo imporre:

σ(z)=softmax(z0)

Sostituendo , e con le loro espressioni in termini di e e facendo un po' di semplicità manipolazione algebrica, puoi verificare che l'uguaglianza di cui sopra sia valida se e solo se e sono dati da:z0z1zw0,w1,w,b0,b1,bxwb

w=w0w1,
b=b0b1.

@null Ok, se lo chiedi, allora non hai capito la mia spiegazione. Lasciami affrontare il tuo problema specifico: se mi dici che stai fornendo i tuoi dati a un sigmoide, allora deve essere un numero unidimensionale, . Quando lo si alimenta a un sigmoide, si ottiene la probabilità che sia in una delle due classi, ad esempio : . Quindi, la probabilità che sia in è: . Ora sostituiamo il tuo sigmoide con un softmax. (Continua). xxC0P(C0|x)=σ(x)xC1P(C1|x)=1P(C0|x)=σ(x)
D ...

(Continuazione). Per applicare un softmax a un problema di classificazione con due classi, è necessario che i dati unidimensionali vengano trasformati in un vettore bidimensionale. Pertanto, dobbiamo definire i nostri e . Scegliamo . Poiché deve soddisfare , abbiamo , quindi . Ora, abbiamo e . Usando questo, puoi verificare immediatamente che . w0w1w0=1w1w=w0w11=1w1w1=0z0=w0x=xz1=w1x=0σ(x)=softmax(z0)
D ...

Inoltre, qualsiasi combinazione di e che soddisfa (ovvero ) porterebbe allo stesso esatto risultato. Questo dimostra che il softmax ha un parametro ridondante. Sebbene ciò possa sembrare stupido, in realtà è una proprietà interessante, poiché consente la normalizzazione dei parametri , che promuove la stabilità numerica dell'algoritmo di apprendimento e l'inferenza. Ma questo è solo un commento in più, non è importante rispondere alla tua domanda :)w0w1w=w0w11=w1w0wi
D ...

Molte grazie. Capito. Nel tuo primo commento la probabilità dovrebbe probabilmente essere . Ora capisco qual è l'idea alla base della trasformazione. P(C1|x)1σ(x)
null,

Sono contento che tu l'abbia capito;) Sì, è un refuso, ovviamente dovrebbe essere . Grazie per segnalarlo! P(C1|x)=1σ(x)
D ...

8

Ho notato che le persone spesso vengono indirizzate a questa domanda quando cercano se usare sigmoid vs softmax nelle reti neurali. Se sei una di quelle persone che costruiscono un classificatore di rete neurale, ecco come decidere se applicare sigmoid o softmax ai valori di output non elaborati dalla tua rete:

  • Se hai un problema di classificazione multi-etichetta = c'è più di una "risposta giusta" = le uscite NON si escludono a vicenda, quindi usa una funzione sigmoid su ogni uscita grezza in modo indipendente. Il sigmoide ti consentirà di avere un'alta probabilità per tutte le tue classi, alcune o nessuna. Esempio: classificare le malattie in una radiografia del torace. L'immagine potrebbe contenere polmonite, enfisema e / o cancro o nessuna di queste scoperte.
  • Se hai un problema di classificazione multi-classe = c'è solo una "risposta giusta" = le uscite si escludono a vicenda, quindi usa una funzione softmax. Il softmax imporrà che la somma delle probabilità delle tue classi di output sia uguale a una, quindi per aumentare la probabilità di una particolare classe, il tuo modello deve ridurre di conseguenza la probabilità di almeno una delle altre classi. Esempio: classificazione delle immagini dal set di dati MNIST di cifre scritte a mano. Una singola immagine di una cifra ha una sola vera identità: l'immagine non può essere un 7 e un 8 contemporaneamente.

Riferimento: per una spiegazione più dettagliata di quando utilizzare sigmoid vs. softmax nella progettazione di reti neurali, compresi calcoli di esempio, consultare questo articolo: "Classificazione: Sigmoid vs. Softmax".


-1

Aggiungendo a tutte le risposte precedenti - Vorrei menzionare il fatto che qualsiasi problema di classificazione multi-classe può essere ridotto a più problemi di classificazione binaria usando il metodo "one-vs-all", ovvero con sigmoidi C (quando C è il numero di classi) e interpretare ogni sigma per essere la probabilità di essere in quella classe specifica o meno, e prendere la massima probabilità.

Ad esempio, nell'esempio delle cifre MNIST, è possibile utilizzare un softmax o dieci sigmoidi. In effetti questo è ciò che Andrew Ng fa nel suo corso di Coursera ML. Puoi vedere qui come Andrew Ng ha usato 10 sigmoidi per la classificazione multiclasse (adattato da Matlab a Python da me), ed ecco il mio adattamento softmax in Python.

Inoltre, vale la pena notare che mentre le funzioni sono equivalenti (ai fini della classificazione multiclasse) differiscono un po 'nella loro implementazione (soprattutto per quanto riguarda i loro derivati e come rappresentare y).

Un grande vantaggio dell'utilizzo di classificazioni binarie multiple (ad es. Sigmoidi) rispetto a una singola classificazione multiclasse (ad es. Softmax) è che se il tuo softmax è troppo grande (ad esempio se stai utilizzando una parola con un solo punto di inserimento di una dimensione del dizionario di 10K o più ) - può essere inefficiente addestrarlo. Quello che puoi fare invece è prendere una piccola parte del tuo set di allenamento e usarlo per allenare solo una piccola parte dei tuoi sigmoidi. Questa è l'idea principale dietro il campionamento negativo .


Le funzioni non sono equivalenti perché la rete softmax è vincolata a produrre una distribuzione di probabilità sulle classi come output: il vettore non è negativo e si somma a 1. Le unità sigmoidi non sono negative, ma possono sommare a qualsiasi numero tra 0 e ; non è una distribuzione di probabilità valida. Questa distinzione è cruciale per caratterizzare la differenza tra le due funzioni. CC
Ripristina Monica il

Qual è la tua definizione di equivalente? Il mio è: puoi usarlo per la classificazione multiclasse senza alcun problema. Inoltre, qualsiasi classificazione multiclasse che utilizza softmax può essere trasformata in classificazioni binarie una contro tutte che utilizzano sigmoidi. Perché dovrei preoccuparmi delle distribuzioni degli output che sommano a 1?
David Refaeli,

La tua argomentazione sulla classificazione multi-etichetta mostra perché sigmoid e softmax non sono equivalenti. Quando si utilizza softmax, aumentando la probabilità di una classe si riduce la probabilità totale di tutte le altre classi (a causa della somma-a-1). Usando sigmoid, aumentare la probabilità di una classe non cambia la probabilità totale delle altre classi. Questa osservazione è la ragione per cui sigmoid è plausibile per la classificazione multi-etichetta: un singolo esempio può appartenere a classiSum-to-1 è anche il motivo per cui softmax non è adatto per la classificazione multi-etichetta. 0,1,2,,C
Ripristina Monica il

Ti ho perso. Per tutti gli scopi pratici che conosco, sigmoidi multipli = 1 softmax. Ho anche aggiunto il caso del campionamento negativo, in cui più sigmoidi hanno effettivamente un vantaggio rispetto a un softmax.
David Refaeli,
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.