Quelle est la signification du mot logits dans TensorFlow?

250

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
)
Milad P.
la source

Réponses:

215

Logits est un terme surchargé qui peut signifier beaucoup de choses différentes:


En mathématiques , Logit est une fonction qui mappe les probabilités ( [0, 1]) à R ( (-inf, inf))

entrez la description de l'image ici

Une probabilité de 0,5 correspond à un logit de 0. Un logit négatif correspond à des probabilités inférieures à 0,5, positives à> 0,5.

En ML , il peut être

vecteur de prédictions brutes (non normalisées) générées par un modèle de classification, qui est ensuite 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 alors un vecteur de probabilités (normalisées) avec une valeur pour chaque classe possible.

Les logits font aussi parfois référence à l'inverse élément par élément de la fonction sigmoïde.

Salvador Dali
la source
127
Pour Tensorflow: c'est un nom qui est censé impliquer que ce tenseur est la quantité qui est mappée aux probabilités par le Softmax.
thertweck
1
est-ce la même chose que la chose qui est exponentiée avant le softmax? c'est à dire softmax(logit) = exp(logit)/Z(logit)alors logit = h_NN(x)? alors logit est le même que "score"?
Charlie Parker
4
Compréhension personnelle, dans le domaine TensorFlow, les logits sont les valeurs à utiliser comme entrée pour softmax. Je suis arrivé à cette compréhension sur la base de ce tutoriel tensorflow.
Diansheng
2
Je ne sais pas si cela répond à la question. C'est peut-être pour cela qu'il n'a jamais été accepté. Je comprends ce qu'est la fonction logit, mais cela m'intrigue aussi pourquoi Tensorflow appelle ces arguments logits. C'est aussi la même désignation pour plusieurs des paramètres dans les fonctions de
Tensorflow
1
Pouvez-vous faire un exemple simple? Est-ce correct? [1, 0.5, 0.5]grâce à la normalisation devenir [0.5, 0.25, 0.25]puis soft max devenir [0,]si on est chaud [1, 0, 0]? ou tout simplement [1, 0, 0]parce que la sortie doit être un vecteur?
Tina Liu
92

Il suffit d'ajouter cette clarification pour que quiconque fait défiler autant puisse au moins bien faire les choses, car il y a tellement de mauvaises réponses votées.

De Diansheng réponse et de JakeJ réponse il faut.
Une nouvelle réponse publiée par Shital Shah est une réponse encore meilleure et plus complète.


Oui, en logit tant que fonction mathématique en statistique, mais celle logitutilisée dans le contexte des réseaux de neurones est différente. La statistique logitn'a même aucun sens ici.


Je n'ai pu trouver de définition formelle nulle part, mais cela logitsignifie essentiellement:

Les prédictions brutes qui sortent de la dernière couche du réseau neuronal.
1. C'est le tenseur même sur lequel vous appliquez la argmaxfonction pour obtenir la classe prédite.
2. C'est le tenseur même que vous introduisez dans la softmaxfonction pour obtenir les probabilités pour les classes prédites.


Aussi, à partir d'un tutoriel sur le site Web officiel de tensorflow:

Couche Logits

La dernière couche de notre réseau de neurones est la couche logits, qui renverra les valeurs brutes de nos prévisions. Nous créons une couche dense avec 10 neurones (un pour chaque classe cible 0–9), avec une 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_rawet predicted_class_index_by_probsera égal.

Un autre nom pour raw_predictionsdans le code ci-dessus estlogit .


Quant au pourquoi logit ... je n'en ai aucune idée. Désolé.
[Modifier: Voir cette réponse pour les motivations historiques derrière le terme.]


Trivia

Cependant, si vous le souhaitez, vous pouvez appliquer des statistiques logità probabilitiescelles issues de la softmaxfonction.

Si la probabilité d'une certaine classe est p,
alors les log-cotes de cette classe sont L = logit(p).

En outre, la probabilité de cette classe peut être récupérée en p = sigmoid(L)utilisant la sigmoidfonction.

Pas très utile pour calculer les cotes de log cependant.

AneesAhmed777
la source
80

Logit est une fonction qui mappe les probabilités [0, 1]à [-inf, +inf].

Softmax est une fonction qui [-inf, +inf]à [0, 1]même que sigmoïde. Mais Softmax normalise également la somme des valeurs (vecteur de sortie) à 1.

Tensorflow "avec logit" : Cela signifie que vous appliquez une fonction softmax aux numéros logit pour 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 multiclasse. Et pour les problèmes de classification multi-étiquettes, la normalisation sigmoïde est utiliséetf.nn.sigmoid_cross_entropy_with_logits

Trideep Rath
la source
10
donc logit est le même que le "score"
Charlie Parker
1
Je suggère d'ajouter une ligne dans votre réponse en différenciant explicitement la Logitfonction (statistiques) et la logitscouche (tensorflow)
AneesAhmed777
62

Résumé

Dans le contexte de l'apprentissage en profondeur, la couche logits désigne la couche qui alimente softmax (ou toute autre normalisation de ce type). La sortie du softmax correspond aux 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 30 et 40, 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 à + infini tandis que pour les probabilités, notre sortie souhaitée est de 0 à 1. Une façon de le faire est de mapper d'une manière ou d'une autre les probabilités de 0 à 1 à -infinity à + infini, puis d'utiliser la régression linéaire comme d'habitude. Une telle cartographie est la distribution normale cumulative qui a été 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 coûteuse en termes de calcul tout en manquant de certaines des propriétés souhaitables pour une classification multiclasse. En 1944, Joseph Berkson a utilisé la fonctionlog(p/(1-p))pour faire cette cartographie et l'a appelé logit, abréviation de "unité logistique". Le terme de régression logistique en dérive également.

La confusion

Malheureusement, le terme logits est utilisé abusivement dans le deep learning. Du point de vue mathématique pur, 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 les valeurs de sortie de cette couche "logit" créant la confusion avec logit la fonction .

Code TensorFlow

Malheureusement, le code TensorFlow ajoute encore à la confusion par des noms comme tf.nn.softmax_cross_entropy_with_logits. Que signifient les logits ici? Cela signifie simplement que l'entrée de la fonction est censée être la sortie de la dernière couche de neurones, comme décrit ci-dessus. Le _with_logitssuffixe est redondant, déroutant et inutile . Les fonctions doivent être nommées sans tenir compte de ces contextes très spécifiques car ce sont simplement des opérations mathématiques qui peuvent être effectuées sur des valeurs dérivées de nombreux autres domaines. En fait, TensorFlow a une autre fonction similaire sparse_softmax_cross_entropyoù ils ont heureusement oublié d'ajouter un _with_logitssuffixe créant une incohérence et ajoutant à la confusion. PyTorch, d'autre part, nomme simplement sa fonction sans ce genre de suffixes.

Référence

Les diapositives de la conférence Logit / Probit sont l'une des meilleures ressources pour comprendre Logit. J'ai également mis à jour un article Wikipédia avec certaines des informations ci-dessus.

Shital Shah
la source
31

Compréhension personnelle, dans le domaine TensorFlow, les logits sont les valeurs à utiliser comme entrée pour softmax. Je suis arrivé à cette compréhension sur la base de ce tutoriel tensorflow.

https://www.tensorflow.org/tutorials/layers


Bien qu'il soit vrai que le logit soit une fonction en mathématiques (en particulier en statistiques), je ne pense pas que ce soit le même 'logit' que vous regardez. Dans le livre Deep Learning de Ian Goodfellow, il a mentionné:

La fonction σ −1 (x) est appelée le logit dans les statistiques, mais ce terme est plus rarement utilisé dans l'apprentissage automatique. σ −1 (x) représente la fonction inverse de la fonction sigmoïde logistique.

Dans TensorFlow, il est souvent considéré comme le nom de la dernière couche. Au chapitre 10 du livre Hands-on Machine Learning avec Scikit-learn et TensorFLow par Aurélien Géron, je suis tombé sur ce paragraphe, qui énonçait logitsclairement la couche.

notons que logitsc'est la sortie du réseau neuronal avant de passer par la fonction d'activation softmax: pour des raisons d'optimisation, nous traiterons le calcul softmax plus tard.

C'est-à-dire, bien que nous utilisions softmax comme fonction d'activation dans la dernière couche de notre conception, pour faciliter le calcul, nous les supprimons logitsséparément. En effet, il est plus efficace de calculer softmaxet de cross-entropyperdre ensemble. N'oubliez pas qu'il cross-entropys'agit d'une fonction de coût, non utilisée dans la propagation directe.

Diansheng
la source
12

Voici une réponse concise pour les futurs lecteurs. Tensorflow« s logitest définie comme la sortie d'un neurone sans appliquer la fonction d'activation:

logit = w*x + b,

x: entrée, w: poids, b: biais. C'est tout.


Ce qui suit n'est pas pertinent pour cette question.

Pour les conférences historiques, lisez les autres réponses. Chapeau à Tensorflowla convention de dénomination "créative" déroutante. En PyTorch, il n'y en a qu'un CrossEntropyLosset il accepte les sorties non activées. Les convolutions, les multiplications matricielles et les activations sont des opérations de même niveau. La conception est beaucoup plus modulaire et moins déroutante. C'est l'une des raisons pour lesquelles je suis passé de Tensorflowà PyTorch.

Jonathan Lee
la source
8

( FOMO sapiens).

Si vous cochez la fonction Logit mathématique, il convertit l'espace réel de l' [0,1]intervalle à l'infini [-inf, inf].

Sigmoid et softmax feront exactement le contraire. Ils convertiront l' [-inf, inf]espace [0, 1]réel en espace réel.

C'est pourquoi, dans l'apprentissage automatique, nous pouvons utiliser logit avant les fonctions sigmoïde et softmax (car elles correspondent).

Et c'est pourquoi «nous pouvons appeler» tout ce qui, dans l'apprentissage automatique, va devant la fonction sigmoïde ou softmax du logit .

Voici la vidéo de J. Hinton utilisant ce terme.

PS. Je ne recommande pas de regarder la vidéo juste pour vérifier le terme.

prosti
la source
5

Ils sont fondamentalement le modèle le plus complet que vous puissiez obtenir du réseau, avant qu'il ne soit réduit pour ne s'appliquer qu'au nombre de classes qui nous intéressent. Découvrez comment certains chercheurs les utilisent pour former un réseau neuronal peu profond basé sur ce qu'est un profond le réseau a appris: https://arxiv.org/pdf/1312.6184.pdf

C'est un peu comme comment, en apprenant un sujet en détail, vous apprendrez un grand nombre de points mineurs, mais lorsque vous enseignerez à un étudiant, vous essaierez de le compresser dans le cas le plus simple. Si l'étudiant essayait maintenant d'enseigner, ce serait assez difficile, mais il serait capable de le décrire juste assez bien pour utiliser la langue.

JakeJ
la source
1

La fonction logit (/ ˈloʊdʒɪt / LOH-jit) est l'inverse de la fonction "logistique" sigmoïdale ou 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 les log-odds, ou le logarithme des cotes p / (1 - p).

Voir ici: https://en.wikipedia.org/wiki/Logit

Jagger Yu
la source
4
C'est dans les statistiques / mathématiques. Nous parlons ici d'apprentissage automatique, où logita une signification différente. Voyez ceci , ceci , ceci .
AneesAhmed777
1

logits

Vecteur de prédictions brutes (non normalisées) générées par un modèle de classification, qui est ensuite 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 alors un vecteur de probabilités (normalisées) avec une valeur pour chaque classe possible.

De plus, les logits font parfois référence à l'inverse élément par élément de la fonction sigmoïde. Pour plus d'informations, consultez tf.nn.sigmoid_cross_entropy_with_logits.

documentation officielle tensorflow

Vinay Jaju
la source
-3

Les logits sont souvent les valeurs de la fonction Z de la couche de sortie dans Tensorflow.

Myron Leskiv
la source
Pas nécessairement, voir les autres réponses.
quant