212 votes

Pourquoi utiliser softmax au lieu de la normalisation standard?

Dans la couche de sortie d'un réseau de neurones, il est typique d'utiliser la fonction softmax pour approximer une distribution de probabilité :

entrez la description de l'image ici

C'est coûteux à calculer en raison des exposants. Pourquoi ne pas simplement effectuer une transformation Z afin que toutes les sorties soient positives, puis normaliser en divisant simplement toutes les sorties par la somme de toutes les sorties ?

14 votes

La fonction n'est pas coûteuse à calculer en raison des exposants, mais parce que vous devez calculer chaque qj. L'exponentiation est bon marché par rapport à la quantité totale de calcul nécessaire.

3 votes

Quel type de transformée Z mentionnez-vous? Le sens du traitement du signal du terme ne convient pas ici, et le remplacement des valeurs par leur score Z donne une sortie négative si l'entrée est en dessous de la moyenne.

0 votes

Voir aussi: Stats.SE

184voto

Piotr Czapla Points 8626

Il y a un bel attribut de Softmax par rapport à la normalisation standard.

Il réagit à une faible stimulation (pensez à une image floue) de votre réseau neuronal avec une distribution plutôt uniforme et à une forte stimulation (c'est-à-dire de grands chiffres, pensez à une image nette) avec des probabilités proches de 0 et 1.

Alors que la normalisation standard ne se soucie pas tant que les proportions sont les mêmes.

Regardez ce qui se passe lorsque le softmax a une entrée 10 fois plus grande, c'est-à-dire que votre réseau neuronal obtient une image nette et de nombreux neurones sont activés

>>> softmax([1,2])              # image floue d'un furet
[0.26894142,      0.73105858])  #     c'est peut-être un chat !?
>>> softmax([10,20])            # image nette d'un chat
[0.0000453978687, 0.999954602]) #     c'est définitivement un CHAT !

Et ensuite comparez-le avec la normalisation standard

>>> std_norm([1,2])                      # image floue d'un furet
[0.3333333333333333, 0.6666666666666666] #     c'est peut-être un chat !?
>>> std_norm([10,20])                    # image nette d'un chat
[0.3333333333333333, 0.6666666666666666] #     c'est peut-être un chat !?

55 votes

Pas sûr pourquoi cette réponse est la plus votée. Pourquoi [1,2] correspond à une image floue alors que [10,20] correspond à une image plus nette? Il s'agit simplement d'une question de mise à l'échelle et les deux cas sont essentiellement les mêmes. En fait, cela semble soutenir la normalisation standard, qui considère correctement les deux cas comme équivalents.

3 votes

Lorsque les valeurs sont déjà garanties d'être dans [0, 1], y a-t-il encore un avantage à prendre softmax au lieu de simplement diviser par la somme ?

2 votes

@MartinThoma les valeurs étaient arbitraires simplement pour aider à suivre les mathématiques, si votre réseau a une certaine normalisation (par exemple la normalisation par lots) et des valeurs de sortie dans [0,1], alors en utilisant softmax vous pouvez toujours savoir quand vos sorties s'excitent. Considérez [0.001, 0.002] (0.49975, 0.50025) par rapport à [0.5, 1.0] (0.37, 0.62)

105voto

Kilian Batzner Points 5420

J'ai cette question depuis des mois. Il semble que nous avons simplement deviné habilement le softmax comme fonction de sortie, puis interprété l'entrée du softmax comme des log-probabilités. Comme vous l'avez dit, pourquoi ne pas simplement normaliser toutes les sorties en les divisant par leur somme? J'ai trouvé la réponse dans le livre de Deep Learning de Goodfellow, Bengio et Courville (2016) à la section 6.2.2.

Disons que notre dernière couche cachée nous donne z en tant qu'activation. Ensuite, le softmax est défini comme

Explication Très Courte

La fonction exp dans le softmax annule approximativement le log dans la perte de cross-entropie, provoquant la perte d'être approximativement linéaire en z_i. Cela conduit à un gradient approximativement constant, lorsque le modèle a tort, lui permettant de se corriger rapidement. Ainsi, un softmax faux saturé ne provoque pas un gradient s'éteignant.

Explication Courte

La méthode la plus populaire pour entraîner un réseau neuronal est l'estimation de probabilité maximale. Nous estimons les paramètres theta d'une manière qui maximise la probabilité des données d'entraînement (de taille m). Parce que la probabilité de l'ensemble du jeu de données d'entraînement est un produit des probabilités de chaque échantillon, il est plus facile de maximiser la log-vraisemblance du jeu de données et donc la somme de la log-vraisemblance de chaque échantillon indexée par k :

Maintenant, nous nous concentrons uniquement sur le softmax ici avec z étant déjà donné, donc nous pouvons remplacer

avec i étant la classe correcte de l'échantillon k. Maintenant, nous voyons que lorsque nous prenons le logarithme du softmax, pour calculer la log-vraisemblance de l'échantillon, nous obtenons :

, ce qui pour des différences importantes de z approxime approximativement à

En premier lieu, nous constatons la composante linéaire z_i ici. Deuxièmement, nous pouvons examiner le comportement de max(z) pour deux cas :

  1. Si le modèle est correct, alors max(z) sera z_i. Ainsi, la log-vraisemblance tend vers zéro (c'est-à-dire une vraisemblance de 1) avec une différence croissante entre z_i et les autres entrées dans z.
  2. Si le modèle est incorrect, alors max(z) sera un autre z_j > z_i. Ainsi, l'addition de z_i n'annule pas entièrement -z_j et la log-vraisemblance est approximativement (z_i - z_j). Cela dit clairement au modèle ce qu'il doit faire pour augmenter la log-vraisemblance : augmenter z_i et diminuer z_j.

Nous voyons que la log-vraisemblance globale sera dominée par les échantillons où le modèle est incorrect. De plus, même si le modèle est vraiment incorrect, ce qui entraîne un softmax saturé, la fonction de perte ne se sature pas. Elle est approximativement linéaire en z_j, ce qui signifie que nous avons un gradient approximativement constant. Cela permet au modèle de se corriger rapidement. Notez que ce n'est pas le cas de l'erreur quadratique moyenne par exemple.

Explication Longue

Si le softmax vous semble toujours être un choix arbitraire, vous pouvez jeter un coup d'oeil à la justification de l'utilisation de la sigmoïde dans la régression logistique :

Pourquoi une fonction sigmoïde plutôt que quelque chose d'autre?

Le softmax est la généralisation de la sigmoïde pour les problèmes multi-classes justifiée de manière analogique.

0 votes

Salut, pouvez-vous s'il vous plaît expliquer cette déclaration et comment avez-vous pu approximer ? ", qui pour de grandes différences de z s'approche approximativement de"

0 votes

@Londonguy. Laissez M = max(z_j), alors z_i - logexp(z_j) = z_i - logexp(M + z_j - M) = z_i - log(exp(M) * exp(z_j - M)) = z_i - M + logexp(z_j - M). Lorsqu'il y a de grandes différences dans z, nous pouvons approximer exp(z_j - M) 0 pour z_j M. Donc z_i - M + logexp(z_j - M) z_i - M + log(exp(M - M)) = z_i - M

53voto

IzRey Points 554

J'ai trouvé l'explication ici très bonne: CS231n: Convolutional Neural Networks for Visual Recognition.

En surface, l'algorithme softmax semble être une simple normalisation non linéaire (nous élargissons les données avec une exponentielle). Cependant, il y a plus que ça.

Plus précisément, il y a quelques points de vue différents (même lien que ci-dessus):

  1. Théorie de l'information - du point de vue de la théorie de l'information, la fonction softmax peut être vue comme essayant de minimiser l'entropie croisée entre les prévisions et la vérité.

  2. Vue probabiliste - de ce point de vue, nous regardons en fait les log-probabilités, donc lorsque nous effectuons l'exponentiation, nous obtenons les probabilités brutes. Dans ce cas, l'équation softmax trouve le MLE (Estimation du Maximum de Vraisemblance)

En résumé, même si l'équation softmax semble être arbitraire, elle ne l'est PAS. C'est en fait une façon plutôt fondée de normaliser les classifications pour minimiser l'entropie croisée/la vraisemblance négative entre les prédictions et la vérité.

2 votes

Ajouter aux commentaires précédents, la dérivée de la fonction softmax est simplement softmax(1-softmax)

17 votes

Je comprends les raisons d'utiliser la perte de Cross-Entropy, mais comment cela est-il lié à la fonction softmax? Vous avez dit que "la fonction softmax peut être vue comme cherchant à minimiser la cross-entropie entre les prédictions et la vérité." Supposons que j'utiliserais une normalisation standard / linéaire, mais que j'utiliserais quand même la perte de Cross-Entropy. Alors je chercherais également à minimiser la Cross-Entropy. Alors, comment la softmax est-elle liée à la Cross-Entropy sauf pour les bénéfices numériques?

22 votes

En ce qui concerne la vue probabiliste : quelle est la motivation pour regarder les probabilités enregistrées sous forme de logarithmes ? Le raisonnement semble un peu être "Nous utilisons e^x dans le softmax, car nous interprétons x comme des log-probabilités". Avec le même raisonnement, nous pourrions dire que nous utilisons e^e^e^x dans le softmax, car nous interprétons x comme des log-log-log-probabilités (exagérant ici, bien sûr). Je comprends les avantages numériques du softmax, mais quelle est la motivation théorique pour son utilisation ?

16voto

nojka_kruva Points 1434

Les valeurs de q_i sont des scores non bornés, parfois interprétés comme des log-vraisemblances. Sous cette interprétation, pour récupérer les valeurs de probabilité brutes, vous devez les exponentier.

Une raison pour laquelle les algorithmes statistiques utilisent souvent des fonctions de perte de log-vraisemblance est qu'elles sont plus numériquement stables : un produit de probabilités peut être représenté par un nombre en virgule flottante très petit. En utilisant une fonction de perte de log-vraisemblance, un produit de probabilités devient une somme.

Une autre raison est que les log-vraisemblances se produisent naturellement lors de la dérivation d'estimateurs pour les variables aléatoires supposées être tirées de distributions gaussiennes multivariées. Voir par exemple l'estimateur du Maximum de Vraisemblance (ML) et la manière dont il est connecté aux moindres carrés.

16 votes

Q_i ne représentent pas implicitement les log-vraisemblances. ce n'est que lorsque nous utilisons le softmax que nous assumons explicitement qu'ils le font.

8voto

GabrielChu Points 2000

Nous examinons un problème de classification multi-classe. C'est-à-dire, la variable prédite y peut prendre l'une des k catégories, où k > 2. En théorie des probabilités, cela est généralement modélisé par une distribution multinomiale. La distribution multinomiale est un membre des distributions de la famille exponentielle. Nous pouvons reconstruire la probabilité P(k=?|x) en utilisant les propriétés des distributions de la famille exponentielle, elle coïncide avec la formule softmax.

Si vous pensez que le problème peut être modélisé par une autre distribution, autre que multinomiale, alors vous pourriez arriver à une conclusion qui est différente de softmax.

Pour plus d'informations et une dérivation formelle, veuillez vous référer aux notes de cours CS229 (9.3 Régression Softmax).

De plus, une astuce utile habituellement effectuée pour softmax est : softmax(x) = softmax(x+c), softmax est invariant aux décalages constants dans l'entrée.

entrer la description de l'image ici

0 votes

Comment fonctionne-t-il en tant que fonction d'activation, car il renvoie la même valeur pour 'x' et 'x + c'?

2 votes

Strictement parlant, softmax n'est pas une fonction d'activation. La fonction d'activation est une opération élémentaire -- donnant un tenseur opérant de manière élémentaire une opération non linéaire pour produire un autre tenseur. Mais softmax est une opération vectorielle, elle produit un vecteur normalisé, il y a des dépendances internes entre chaque élément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X