Mi sono posto questa domanda per mesi. Le risposte su CrossValidated e Quora elencano tutte belle proprietà della funzione sigmoidistica logistica, ma sembra che abbiamo abilmente indovinato questa funzione. Quello che mi mancava era la giustificazione per averlo scelto. Ne ho finalmente trovato uno nella sezione 6.2.2.2 del libro "Deep Learning" di Bengio (2016) . A parole mie:
In breve, vogliamo che il logaritmo dell'output del modello sia adatto per l'ottimizzazione basata su gradiente della probabilità logaritmica dei dati di addestramento.
Motivazione
- Vogliamo un modello lineare, ma non possiamo usare direttamente come .z=wTx+bz∈(−∞,+∞)
- Per la classificazione, ha senso assumere la distribuzione di Bernoulli e modellare il suo parametro in .θP(Y=1)=θ
- Quindi, abbiamo bisogno di mappare da a per fare la classificazione.z(−∞,+∞)[0,1]
Perché la funzione sigmoidistica logistica?
Tagliare con produce un gradiente zero per al di fuori di . Abbiamo bisogno di un forte gradiente ogni volta che la previsione del modello è sbagliata, perché risolviamo la regressione logistica con discesa del gradiente. Per la regressione logistica, non esiste una soluzione a forma chiusa.zP(Y=1|z)=max{0,min{1,z}}z[0,1]
La funzione logistica ha la bella proprietà di asintendere un gradiente costante quando la previsione del modello è errata, dato che utilizziamo la stima della massima verosimiglianza per adattarsi al modello. Questo è mostrato di seguito:
Per i benefici numerici, è possibile eseguire la stima della massima verosimiglianza minimizzando la probabilità logaritmica negativa dei dati di allenamento. Quindi, la nostra funzione di costo è:
J(w,b)=1m∑i=1m−logP(Y=yi|xi;w,b)=1m∑i=1m−(yilogP(Y=1|z)+(yi−1)logP(Y=0|z))
Poiché , possiamo concentrarci sul caso . Quindi, la domanda è come modellare dato che abbiamo .P(Y=0|z)=1−P(Y=1|z)Y=1P(Y=1|z)z=wTx+b
I requisiti ovvi per la funzione mappingfzP(Y=1|z)
- ∀z∈R:f(z)∈[0,1]
- f(0)=0.5
- f(0,0.5)f(−x)=1−f(x)
- f
f(z)=11+e−zf(z)=0.5+0.5z1+|z|f(z)=11+e−z
Y=1
P(Y=1|z)=11+e−zY=1m=1
J(z)=−log(P(Y=1|z))=−log(11+e−z)=−log(ez1+ez)=−z+log(1+ez)
−z
- Quando z è grande, la previsione del modello era corretta, poiché Y=1 . Nella funzione di costo, il log(1+ez)zz−z
- z|z|Y=1log(1+ez)0z−zz−1z, non vi è saturazione in corso, che causerebbe gradienti di fuga.
Y=0
Y=1Y=0
J(z)Y=1
Y=0
alternative
z1+|z|[0,1]P(Y=1|z)=0.5+0.5z1+|z|
Y=1
J(z)=−log(0.5+0.5z1+|z|)
che assomiglia a questo:
z→−∞