Je me suis posé cette question pendant des mois. Les réponses sur CrossValidated et Quora répertorient toutes les propriétés intéressantes de la fonction logistique sigmoïde, mais il semble que nous ayons intelligemment deviné cette fonction. Ce qui m'a manqué était la justification pour le choisir. J'en ai finalement trouvé un dans la section 6.2.2.2 du livre "Deep Learning" de Bengio (2016) . Avec mes propres mots:
En bref, nous voulons que le logarithme de la sortie du modèle convienne à une optimisation basée sur le gradient de la vraisemblance logarithmique des données d'apprentissage.
Motivation
- Nous voulons un modèle linéaire, mais nous ne pouvons pas utiliser directement comme .z=wTx+bz∈(−∞,+∞)
- Pour la classification, il est logique de supposer la distribution de Bernoulli et de modéliser son paramètre dans .θP(Y=1)=θ
- Nous devons donc mapper de à pour procéder à la classification.z(−∞,+∞)[0,1]
Pourquoi la fonction logistique sigmoïde?
Couper avec donne un gradient nul pour dehors de . Nous avons besoin d'un fort gradient chaque fois que la prédiction du modèle est fausse, car nous résolvons la régression logistique avec la descente du gradient. Pour la régression logistique, il n'y a pas de solution sous forme fermée.zP(Y=1|z)=max{0,min{1,z}}z[0,1]
La fonction logistique a la propriété intéressante d’asymptoter un gradient constant lorsque la prédiction du modèle est fausse, étant donné que nous utilisons l’estimation de la vraisemblance maximale pour s’ajuster au modèle. Ceci est montré ci-dessous:
Pour les avantages numériques, l'estimation de vraisemblance maximale peut être réalisée en minimisant la log-vraisemblance négative des données d'apprentissage. Notre fonction de coût est donc:
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))
Puisque , nous pouvons nous concentrer sur le cas . La question est donc de savoir comment modéliser étant donné que nous avons .P(Y=0|z)=1−P(Y=1|z)Y=1P(Y=1|z)z=wTx+b
Les exigences évidentes pour la fonction mappant sur sont les suivantes:fzP(Y=1|z)
- ∀z∈R:f(z)∈[0,1]
- f(0)=0.5
- f doit être à rotation symétrique par rapport à , c’est-à-dire que , de sorte que l’inversion des signes des classes n’a pas d’effet sur la fonction de coût.(0,0.5)f(−x)=1−f(x)
- f devrait être non décroissant, continu et différentiable.
Ces exigences sont toutes remplies en redimensionnant les fonctions sigmoïdes . Les deux et remplissent. Cependant, les fonctions sigmoïdes diffèrent en ce qui concerne leur comportement lors de l'optimisation de la vraisemblance log par gradient. Nous pouvons voir la différence en intégrant la fonction logistique à notre fonction de coût.f(z)=11+e−zf(z)=0.5+0.5z1+|z|f(z)=11+e−z
Saturation pourY=1
Pour et , le coût d'un seul échantillon incorrectement classé (c'est-à-dire que ) est le suivant: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)
Nous pouvons voir qu'il existe un composant linéaire . Maintenant, nous pouvons examiner deux cas:−z
- Lorsque est grand, la prédiction du modèle était correcte puisque . Dans la fonction de coût, le terme asymptote en pour les grands . Ainsi, cela annule approximativement le , ce qui entraîne un coût approximativement nul pour cet échantillon et un gradient faible. Cela a du sens, car le modèle prédit déjà la classe correcte.zY=1log(1+ez)zz−z
- Lorsque est petit (mais est grand), la prédiction du modèle n'était pas correcte, car . Dans la fonction de coût, le terme asymptote à pour les petits . Ainsi, le coût global de cet échantillon est approximativement à , ce qui signifie que le gradient par rapport à est approximativement à . Cela permet au modèle de corriger sa prédiction erronée en fonction du gradient constant qu'il reçoit. Même pour les très petits , il n'y a pas de saturation, ce qui causerait des gradients qui disparaissent.z|z|Y=1log(1+ez)0z−zz−1z
Saturation pourY=0
Ci-dessus, nous nous sommes concentrés sur le cas . Pour , la fonction de coût se comporte de manière analogue, ne fournissant de forts gradients que lorsque la prédiction du modèle est erronée.Y=1Y=0
C’est la fonction de coût pour :J(z)Y=1
C'est la fonction softplus inversée horizontalement. Pour , c'est la fonction softplus.Y=0
Des alternatives
Vous avez mentionné les alternatives à la fonction sigmoïde logistique, par exemple . Normalisé à , cela voudrait dire que nous modélisons .z1+|z|[0,1]P(Y=1|z)=0.5+0.5z1+|z|
Pendant MLE, la fonction de coût pour serait alorsY=1
J(z)=−log(0.5+0.5z1+|z|) ,
qui ressemble à ceci:
Vous pouvez voir que le gradient de la fonction de coût devient de plus en plus faible pour .z→−∞