Fonction Softmax vs Sigmoid dans un classificateur logistique?


63

Qu'est-ce qui détermine le choix de la fonction (Softmax vs Sigmoid) dans un classificateur logistique?

Supposons qu'il existe 4 classes de sortie. Chacune des fonctions ci-dessus donne les probabilités que chaque classe soit la sortie correcte. Alors lequel choisir pour un classificateur?


16
La fonction softmax n'est rien d'autre qu'une généralisation du sigmoïde. Ce que vous entendez par "softmax vs sigmoid" n'est donc pas tout à fait clair.
dsaxton

2
C'est le cas du sigmoïde. Lorsque nous utilisons le sigmoïde, une classe a une probabilité et l'autre une probabilité . exp(βTx)/(exp(βTx)+1)1/(exp(βTx)+1)
dsaxton

3
L’affiche de reddit fait une distinction que j'estime erronée ou du moins non pertinente. Que l'une des classes ait ou non un poids, il ne s'agit que de déplacer les scores, ce qui n'a pas d'incidence sur les probabilités.
dsaxton


3
"ce que vous entendez par" softmax contre sigmoïde "n'est pas tout à fait clair. Juste en dessous du titre, il y a le corps de la question - très facile à manquer, je sais. De plus, c’est un bon titre de diriger les requêtes google pour venir ici pour répondre exactement à ce qui a été demandé.
Michael

Réponses:


77

La fonction sigmoïde est utilisée pour la régression logistique à deux classes, tandis que la fonction softmax est utilisée pour la régression logistique multiclass (MaxEnt, régression logistique multinomiale, régression softmax, Classificateur d'entropie maximum).


Dans la régression logistique à deux classes, les probabilités prédites sont les suivantes, en utilisant la fonction sigmoïde:

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

Dans la régression logistique multi- classes , avec K classes, les probabilités prédites sont les suivantes, à l'aide de la fonction softmax:

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

On peut observer que la fonction softmax est une extension de la fonction sigmoïde au cas multiclass, comme expliqué ci-dessous. Regardons la régression logistique multi- classes , avec classes: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

avec . Nous voyons que nous obtenons les mêmes probabilités que dans la régression logistique à deux classes en utilisant la fonction sigmoïde. Wikipedia développe un peu plus à ce sujet.β=(β0β1)


1
Je suis naïf dans celui-ci, mais je le vois très souvent β = - (β0 − β1) Quelle explication possible? Pour autant que je sache dans Sigmoids, β serait un vecteur. Et ils sont généralement un pour une course donnée. Alors comment se fait-il que β0 et β1 apparaissent dans l’image?
Ishan Bhatt

1
@IshanBhatt ce commentaire peut aider.
Tom Hale

étrangement, je peux encore régresser en multiclasses en utilisant simplement sigmoïde :)
datdinhquoc

15

En fait, ils sont équivalents, en ce sens que l’un peut être transformé en un autre.

Supposons que vos données soient représentées par un vecteur , de dimension arbitraire, et que vous ayez construit un classificateur binaire à l'aide d'une transformation affine suivie d'un softmax:x

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

Transformons-le en un classifieur binaire équivalent qui utilise un sigmoïde au lieu du softmax. Tout d'abord, nous devons décider quelle est la probabilité que nous voulions que le sigmoïde produise une sortie (ce qui peut être pour la classe ou ). Ce choix est absolument arbitraire et j'ai donc choisi la classe . Ensuite, mon classificateur sera de la forme:C0C1C0

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

Les classificateurs sont équivalents si les probabilités sont les mêmes, il faut donc imposer:

σ(z)=softmax(z0)

Remplacement de , et par leurs expressions en termes de et et en effectuant quelques simples manipulation algébrique, vous pouvez vérifier que l'égalité ci-dessus est vraie si et seulement si et sont donnés par:z0z1zw0,w1,w,b0,b1,bxwb

w=w0w1,
b=b0b1.

@ Null Ok, si vous le demandez, vous n'avez pas compris mon explication. Permettez-moi de répondre à votre problème spécifique: si vous me dites que vous transmettez vos données à un sigmoïde, il doit alors s'agir d'un nombre unidimensionnel, . Lorsque vous l'alimentez dans un sigmoïde, vous obtenez la probabilité que soit dans l'une de vos deux classes, par exemple : . Alors, la probabilité que soit dans est: . Remplaçons maintenant votre sigmoïde par un softmax. (À suivre). xxC0P(C0|x)=σ(x)xC1P(C1|x)=1P(C0|x)=σ(x)
D ...

(Continuation). Pour appliquer une variable logicielle à un problème de classification à deux classes, vous avez besoin que vos données unidimensionnelles soient transformées en un vecteur bidimensionnel. Par conséquent, nous devons définir nos et . Choisissons . Puisque doit satisfaire , nous avons , donc . Nous avons maintenant et . En utilisant cela, vous pouvez immédiatement vérifier que . w0w1w0=1w1w=w0w11=1w1w1=0z0=w0x=xz1=w1x=0σ(x)=softmax(z0)
D ...

De plus, toute combinaison de et qui satisfait (c'est-à-dire, ) aboutirait exactement au même résultat. Cela montre que le softmax a un paramètre redondant. Bien que cela puisse paraître stupide, il s'agit en fait d'une propriété intéressante, car elle permet la normalisation des paramètres , ce qui favorise la stabilité numérique de l'algorithme d'apprentissage et l'inférence. Mais ceci est juste un commentaire supplémentaire, il n'est pas important de répondre à votre question :)w0w1w=w0w11=w1w0wi
D ...

Merci beaucoup. J? ai compris. Dans votre premier commentaire, la probabilité devrait probablement être . Je comprends maintenant quelle est l'idée derrière la transformation. P(C1|x)1σ(x)
null

Content que tu l'aies compris;) Oui, c'est une faute de frappe, ça devrait évidemment être . Merci de l'avoir signalé! P(C1|x)=1σ(x)
D ...

8

J'ai remarqué que les gens se posaient souvent cette question lorsqu'ils cherchaient à utiliser sigmoïde ou softmax dans des réseaux de neurones. Si vous faites partie de ces personnes qui construisent un classificateur de réseau neuronal, voici comment décider d’appliquer sigmoïde ou softmax aux valeurs de sortie brutes de votre réseau:

  • Si vous avez un problème de classification multi-étiquettes = il y a plus d'une "bonne réponse" = les sorties ne s'excluent PAS mutuellement, utilisez une fonction sigmoïde indépendamment sur chaque sortie brute. Le sigmoïde vous permettra d'avoir une probabilité élevée pour toutes vos classes, certaines ou aucune d'entre elles. Exemple: classer les maladies dans une image radiographique du thorax. L'image peut contenir une pneumonie, un emphysème et / ou un cancer, ou aucune de ces constatations.
  • Si vous avez un problème de classification multi-classes = il n’existe qu’une seule "bonne réponse" = les sorties s’excluent mutuellement, utilisez une fonction softmax. La variable logicielle imposera que la somme des probabilités de vos classes de sortie soit égale à un. Par conséquent, pour augmenter la probabilité d'une classe particulière, votre modèle doit réduire en conséquence la probabilité d'au moins une des autres classes. Exemple: classification des images à partir du jeu de données MNIST de chiffres manuscrits. Une seule image d'un chiffre n'a qu'une seule identité réelle - l'image ne peut pas être un 7 et un 8 en même temps.

Référence: pour une explication plus détaillée du moment d'utiliser sigmoïde par rapport à softmax dans la conception d'un réseau neuronal, y compris des exemples de calcul, veuillez consulter cet article: "Classification: Sigmoïde par rapport à Softmax."


-1

Ajoutant à toutes les réponses précédentes - je voudrais mentionner le fait que tout problème de classification multi-classes peut être réduit à plusieurs problèmes de classification binaire en utilisant la méthode "one-vs-all", c’est-à-dire avoir C sigmoids (lorsque C est le nombre de classes) et en interprétant chaque sigmoïde comme étant la probabilité d'être dans cette classe spécifique ou non, et en prenant la probabilité maximale.

Ainsi, par exemple, dans l'exemple des chiffres MNIST, vous pouvez utiliser un softmax ou dix sigmoids. En fait, c'est ce que fait Andrew Ng dans son cours Coursera ML. Vous pouvez voir ici comment Andrew Ng a utilisé 10 sigmoids pour la classification multiclass (adapté de Matlab à python par moi), et voici mon adaptation softmax en python.

Il convient également de noter que, si les fonctions sont équivalentes (aux fins de la classification multiclass), leur mise en œuvre diffère quelque peu (en particulier en ce qui concerne leurs dérivés et la manière de représenter y).

L’utilisation d’un grand nombre de classifications binaires (Sigmoids) par rapport à une classification multiclassique unique (Softmax) constitue un gros avantage: si votre softmax est trop volumineux (par exemple, si vous utilisez un mot unique incorporant une taille de dictionnaire de 10 000 ou plus) ) - il peut être inefficace de le former. Ce que vous pouvez faire à la place est de prendre une petite partie de votre kit d’entraînement et de l’utiliser pour entraîner une petite partie de vos sigmoids. C'est l'idée principale de l' échantillonnage négatif .


Les fonctions ne sont pas équivalentes car le réseau softmax est contraint de produire une distribution de probabilité entre les classes et les sorties: le vecteur est non négatif et vaut 1. Les unités sigmoïdes sont non négatives, mais elles peuvent totaliser n'importe quel nombre. entre 0 et ; ce n'est pas une distribution de probabilité valide. Cette distinction est cruciale pour caractériser la différence entre les deux fonctions. CC
Réintégrer Monica le

Quelle est votre définition d'équivalent? Le mien est: vous pouvez utiliser soit pour la classification multiclass sans aucun problème. De plus, toute classification multiclasse utilisant softmax peut être transformée en une classification binaire one-vs-all qui utilise sigmoids. Pourquoi devrais-je me soucier de la distribution des sorties en sommant à 1?
David Refaeli le

Votre argument sur la classification multi-étiquettes montre pourquoi sigmoid et softmax ne sont pas équivalents. Lorsque vous utilisez softmax, augmenter la probabilité d'une classe diminue la probabilité totale de toutes les autres classes (en raison de la somme à 1). En utilisant sigmoid, augmenter la probabilité d'une classe ne change pas la probabilité totale des autres classes. Cette observation est la raison pour laquelle sigmoid est plausible pour une classification multi-étiquettes: un seul exemple peut appartenir à classes. Sum-to-1 est également la raison pour laquelle softmax ne convient pas à la classification multi-étiquettes. 0,1,2,,C
Réintégrer Monica le

Je t'ai perdu. À toutes les fins pratiques que je connaisse, plusieurs sigmoids = 1 softmax. J'ai même ajouté le cas de l'échantillonnage négatif, où plusieurs sigmoïdes ont un avantage sur un softmax.
David Refaeli le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.