Dans la fonction TensorFlow suivante, nous devons alimenter l’activation des neurones artificiels dans la couche finale. Ça je comprends. Mais je ne comprends pas pourquoi ça s'appelle des logits? N'est-ce pas une fonction mathématique?
loss_function = tf.nn.softmax_cross_entropy_with_logits(
logits = last_layer,
labels = target_output
)
Logits est un terme surchargé qui peut signifier beaucoup de choses différentes:
En math , Logit est une fonction qui mappe les probabilités ([0, 1]
) à R ((-inf, inf)
)
La probabilité de 0,5 correspond à un logit de 0. Les logits négatifs correspondent à des probabilités inférieures à 0,5, positives à> 0,5.
En ML , il peut être
le vecteur de prédictions brutes (non normalisées) générées par un modèle de classification, qui est généralement transmis à une fonction de normalisation. Si le modèle résout un problème de classification multi-classes, les logits deviennent généralement une entrée pour la fonction softmax. La fonction softmax génère ensuite un vecteur de probabilités (normalisées) avec une valeur pour chaque classe possible.
Les logits également parfois font référence à l'inverse élémentaire de la fonction sigmoïde.
Logit est une fonction qui mappe les probabilités [0, 1]
à [-inf, +inf]
.
Softmax est une fonction qui mappe [-inf, +inf]
à [0, 1]
similaire à Sigmoid. Mais Softmax normalise également la somme des valeurs (vecteur de sortie) à 1.
Tensorflow "with logit": Cela signifie que vous appliquez une fonction softmax pour logit les nombres afin de le normaliser. Input_vector/logit n'est pas normalisé et peut évoluer à partir de [-inf, inf].
Cette normalisation est utilisée pour les problèmes de classification multiclass. Et pour les problèmes de classification multilabel, la normalisation sigmoïde est utilisée, à savoir tf.nn.sigmoid_cross_entropy_with_logits
Ajoutez simplement cette clarification pour que quiconque fait défiler autant de questions puisse au moins bien comprendre, car il y a tellement de mauvaises réponses qui ont été votées.
Diansheng's réponse et JakeJ's réponse font bien les choses.
ne nouvelle réponse posté par Shital Shah est une réponse encore meilleure et plus complète.
Oui, logit
sous forme de fonction mathématique en statistique, , mais le logit
utilisé dans le contexte des réseaux de neurones est différent. Statistique logit
ne N'a même aucun sens ici.
Je n'ai pu trouver de définition formelle nulle part, mais logit
signifie essentiellement:
Les prévisions brutes qui sortent de la dernière couche du réseau de neurones.
1. C'est le tenseur sur lequel vous appliquez la fonctionargmax
pour obtenir la classe prédite.
2. C'est le tenseur même que vous introduisez dans la fonctionsoftmax
pour obtenir les probabilités pour les classes prédites.
En outre, à partir d'un tutoriel sur le site officiel de tensorflow:
Couche logits
La couche finale de notre réseau de neurones est la couche logits, qui renverra les valeurs brutes de nos prédictions. Nous créons une couche dense avec 10 neurones (un pour chaque classe de cible 0–9), avec activation linéaire (par défaut):
logits = tf.layers.dense(inputs=dropout, units=10)
Si vous êtes toujours confus, la situation est la suivante:
raw_predictions = neural_net(input_layer)
predicted_class_index_by_raw = argmax(raw_predictions)
probabilities = softmax(raw_predictions)
predicted_class_index_by_prob = argmax(probabilities)
où, predicted_class_index_by_raw
et predicted_class_index_by_prob
seront égaux.
Un autre nom pour raw_predictions
dans le code ci-dessus est logit
.
En ce qui concerne le pourquoi logit
... Je n'en ai aucune idée. Pardon.
[Edit: voir cette réponse pour connaître les motivations historiques du terme.]
Cependant, si vous le souhaitez, vous pouvez appliquer des statistiques logit
à probabilities
qui sortent de la fonction softmax
.
Si la probabilité d'une certaine classe est p
,
Alors le log-odds de cette classe est L = logit(p)
.
De plus, la probabilité de cette classe peut être récupérée sous la forme p = sigmoid(L)
, à l'aide de la fonction sigmoid
.
Pas très utile pour calculer le log-odds cependant.
Résumé
Dans le contexte de l'apprentissage en profondeur, le couche logit désigne la couche qui alimente softmax (ou toute autre normalisation de ce type). La sortie de softmax représente les probabilités de la tâche de classification et son entrée est la couche logits. La couche logits produit généralement des valeurs de -infinity à + infinity et la couche softmax la transforme en valeurs de 0 à 1.
Contexte historique
D'où vient ce terme? Dans les années 1930 et 1940, plusieurs personnes tentaient d'adapter la régression linéaire au problème de la prédiction des probabilités. Cependant, la régression linéaire produit une sortie de -infinity à + infinity alors que, pour les probabilités, la sortie souhaitée est 0 à 1. Une façon de procéder consiste à mapper les probabilités de 0 à 1 à -infinity à + infinity, puis à utiliser une régression linéaire comme d'habitude. Une telle cartographie est la distribution normale cumulative utilisée par Chester Ittner Bliss en 1934 et il a appelé ce modèle "probit", abréviation de "unité de probabilité". Cependant, cette fonction est onéreuse en termes de calcul, sans certaines des propriétés souhaitables pour la classification multi-classes. En 1944, Joseph Berkson utilisa la fonction log(p/(1-p))
pour effectuer ce mappage et l'appela logit, abréviation de "unité logistique". Le terme régression logistique en découle également.
La confusion
Malheureusement, le terme logits est utilisé abusivement dans l'apprentissage en profondeur. Du point de vue purement mathématique, logit est une fonction qui effectue le mappage ci-dessus. Dans l'apprentissage en profondeur, les gens ont commencé à appeler la couche "couche logits" qui alimente la fonction logit. Ensuite, les gens ont commencé à appeler la sortie les valeurs de cette couche "logit", créant ainsi une confusion avec logit de la fonction .
Code TensorFlow
Malheureusement, le code TensorFlow ajoute à la confusion par des noms tels que tf.nn.softmax_cross_entropy_with_logits
. Que signifie logits ici? Cela signifie simplement que l'entrée de la fonction est supposée être la sortie de la dernière couche de neurones, comme décrit ci-dessus. Le suffixe _with_logits
est redondant, déroutant et inutile . Les fonctions doivent être nommées sans tenir compte de ces contextes très spécifiques car il s'agit simplement d'opérations mathématiques pouvant être effectuées sur des valeurs dérivées de nombreux autres domaines. En fait, TensorFlow a une autre fonction similaire sparse_softmax_cross_entropy
où ils ont heureusement oublié d’ajouter _with_logits
suffixe créant une incohérence et ajoutant à la confusion. En revanche, PyTorch nomme simplement sa fonction sans ce type de suffixe.
Référence
Le diapositives de la conférence Logit/Probit est l’une des meilleures ressources pour comprendre logit. J'ai également mis à jour article Wikipedia avec certaines des informations ci-dessus.
Compréhension personnelle, dans le domaine TensorFlow, les logits sont les valeurs à utiliser comme entrée dans softmax. Je suis arrivé à cette compréhension basée sur ce tutoriel tensorflow.
https://www.tensorflow.org/tutorials/layers
Bien qu'il soit vrai que logit soit une fonction en maths (en particulier en statistique), je ne pense pas que ce soit le même "logit" que vous envisagez. Dans le livre Deep Learning de Ian Goodfellow, il a mentionné,
La fonction σ−1(x) est appelé le logit dans les statistiques, mais ce terme est plus rarement utilisé en apprentissage automatique. σ−1(x) représente la fonction inverse de la fonction logistique sigmoïde.
Dans TensorFlow, il apparaît souvent comme le nom de la dernière couche. Au chapitre 10 de l'ouvrage Apprentissage automatique avec Scikit-learn et TensorFLow d'Aurélien Géron, je suis tombé sur ce paragraphe, dans lequel il était écrit: logits
couche clairement.
notez que
logits
est la sortie du réseau de neurones avant que passe par la fonction d'activation de softmax: pour des raisons d'optimisation, nous allons gérer le calcul softmax plus tard.
En d'autres termes, bien que nous utilisions softmax comme fonction d'activation dans la dernière couche de notre conception, pour faciliter le calcul, nous supprimons logits
séparément. En effet, il est plus efficace de calculer la perte softmax
et cross-entropy
ensemble. Rappelez-vous que cross-entropy
est une fonction de coût, non utilisée dans la propagation en aval.
Voici une réponse concise pour les futurs lecteurs. Tensorflow
'logit
est défini comme la sortie d'un neurone sans application de la fonction d'activation:
logit = w*x + b,
x: entrée, w: poids, b: biais. C'est ça.
Ce qui suit est sans rapport avec cette question.
Pour les conférences historiques, lisez les autres réponses. Chapeau à la convention de nommage "créative" déroutante de Tensorflow
. Dans PyTorch
, il n'y a qu'un seul CrossEntropyLoss
et il accepte les sorties non activées. Convolutions, multiplications matricielles et activations sont des opérations de même niveau. Le design est beaucoup plus modulaire et moins déroutant. C'est l'une des raisons pour lesquelles je suis passé de Tensorflow
à PyTorch
.
C’est fondamentalement le modèle le plus complet que vous pouvez obtenir du réseau, avant qu’il n’ait été réduit à s’appliquer uniquement au nombre de classes qui nous intéressent. Découvrez comment certains chercheurs les utilisent pour former un réseau de neurones peu profonds le réseau a appris: https://arxiv.org/pdf/1312.6184.pdf
C'est un peu comme si lors de l'apprentissage d'une matière en détail, vous apprendrez de nombreux points mineurs, mais ensuite, lorsque vous enseignerez à un étudiant, vous essayerez de la compresser au cas le plus simple. Si l'élève essayait maintenant d'enseigner, ce serait assez difficile, mais il serait capable de le décrire juste assez bien pour utiliser la langue.
La fonction logit (/ ˈloʊdʒɪt/LOH-jit) est l'inverse de la fonction "logistique" sigmoïdale ou de la transformation logistique utilisée en mathématiques, en particulier en statistique. Lorsque la variable de la fonction représente une probabilité p, la fonction logit donne le log-odds, ou le logarithme des probabilités p/(1 - p).
Voir ici: https://en.wikipedia.org/wiki/Logit
( FOMO sapiens).
Si vous vérifiez la fonction mathématique Logit, elle convertit l'espace réel de [0,1]
intervalle en infini [-inf, inf]
.
Sigmoid et softmax feront exactement le contraire. Ils convertiront l'espace réel [-inf, inf]
en [0, 1]
espace réel.
C'est pourquoi il est logique que, dans l'apprentissage automatique, nous puissions utiliser logit avant la fonction sigmoïde et la fonction softmax (puisqu'elles correspondent).
Et c’est pourquoi "nous pouvons appeler" tout élément en apprentissage automatique qui passe devant sigmoïde ou fonction softmax du logit.
Voici J. Hinton vidéo usign ce terme.
PS Je ne vous recommande pas de regarder la vidéo uniquement pour vérifier le terme.