420 votes

Quelle est la signification du mot logits dans TensorFlow?

Dans la fonction TensorFlow suivante, nous devons alimenter l'activation de neurones artificiels dans la couche finale. Ça je comprends. Mais je ne comprends pas pourquoi cela 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
)
 

393voto

Salvador Dali Points 11667

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


En Mathématiques, Logit est une fonction que les cartes de probabilités ([0, 1]) R ((-inf, inf))

enter image description here

La probabilité de 0,5 correspond à un logit de 0. Négatif logit correspondent à des probabilités de moins de 0,5, positif à > 0.5.

En ML, il peut être

le vecteur de cru (non normalisée) des prédictions de classification modèle de produit, qui est normalement ensuite transmis à une normalisation fonction. Si le modèle de résolution d'un multi-classe de la classification problème, les logits deviennent généralement une entrée à la fonction softmax. L' softmax fonction génère alors un vecteur de (normalisée) des probabilités avec une seule valeur pour chaque classe.

Logits aussi parfois faire référence à l'élément-sage inverse de la fonction sigmoïde.

205voto

AneesAhmed777 Points 410

Juste l'ajout de cette précision pour que tous ceux qui défile vers le bas autant atleast est juste, car il ya tellement de nombreuses réponses erronées upvoted.

Diansheng de réponse et JakeJ de réponse .
Une nouvelle réponse posté par Shital Shah est une encore meilleure et plus complète de la réponse.


Oui, logit comme une mathématique de la fonction dans les statistiques, mais l' logit utilisé dans le contexte des réseaux de neurones est différent. Statistiques logit n'a même pas de sens ici.


Je ne pouvais pas trouver un formel definitoin n'importe où, mais logit signifie en gros:

Les premières prédictions qui sortent de la dernière couche du réseau de neurones.
1. C'est le tenseur sur lequel vous appliquez l' argmax fonction pour obtenir les prédit de classe.
2. C'est le tenseur qui vous alimentez l' softmax fonction pour obtenir les probabilités pour prédire la classe.


Aussi, à partir d'un tutoriel sur officiel tensorflow site web:

Logits Couche

La dernière couche de notre réseau de neurones est les logits de la couche, qui sera de retour les valeurs brutes de nos prédictions. Nous avons créer une couche dense avec 10 neurones (un pour chaque classe cible de 0 à 9), avec un linéaire d'activation (par défaut):

logits = tf.layers.dense(inputs=dropout, units=10)

Si vous êtes encore confus, la situation est comme ceci:

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.


Comme pour le pourquoi logit... je n'ai aucune idée. Désolé.
[Edit: Voir cette réponse pour l'historique des motivations derrière le terme.]


Trivia

Bien que, si vous le souhaitez, vous pouvez appliquer de la statistique logit de probabilities qui sortent de l' softmax fonction.

Si la probabilité d'une certaine classe est - p,
Puis le journal de la cote de la classe est - L = logit(p).

Aussi, la probabilité de cette classe peut être récupéré p = sigmoid(L), à l'aide de l' sigmoid fonction.

Pas très utile pour calculer la log-odds.

134voto

ShitalShah Points 2213

Résumé

Dans le contexte de l'apprentissage en profondeur les logits couche signifie que la couche qui se nourrit à softmax (ou d'autres normalisation). La sortie de la softmax sont les probabilités pour la tâche de classification et son entrée est logits couche. Les logits de la couche de produit, en général, les valeurs de -l'infini à +l'infini et la softmax couche transforme les valeurs de 0 à 1.

Contexte Historique

D'où vient ce terme provient de l'? Dans les années 1930 et 40, plusieurs personnes ont essayé de s'adapter de la régression linéaire pour le problème de la prédiction des probabilités. Cependant, la régression linéaire, produit un résultat de -l'infini à +l'infini, tandis que pour les probabilités de notre sortie est de 0 à 1. Une façon de le faire est en quelque sorte de cartographie des probabilités de 0 à 1 à l'infini à +l'infini et ensuite utiliser la régression linéaire, comme d'habitude. Une telle cartographie est la distribution normale cumulative qui a été utilisé par Chester Ittner Bonheur en 1934 et il a appelé ce "probit", abréviation de "probabilité de l'unité". Toutefois cette fonction est gourmand en ressources tout en manquant de certaines des propriétés souhaitables pour le multi-classe de la classification. En 1944, Joseph Berkson utilisé la fonction log(p/(1-p)) pour ce faire, la cartographie et l'a appelé "logit", abréviation de "unité logistique". Le terme de régression logistique dérivées à partir de ce.

La Confusion

Malheureusement, le terme logits est abusé dans l'apprentissage en profondeur. De la pure mathématique de la perspective logit est une fonction qui effectue au-dessus de la cartographie. Dans l'apprentissage en profondeur les gens ont commencé à appeler le calque "logits couche" qui alimente en fonction logit. Puis les gens ont commencé à appeler la sortie des valeurs de cette couche "logit", créant la confusion avec le logit de la fonction.

TensorFlow Code

Malheureusement TensorFlow code ajoute encore à la confusion par des noms comme tf.nn.softmax_cross_entropy_with_logits. Qu'est-logits dire par là? Il veut simplement dire que l'entrée de la fonction est censé être la sortie du dernier neurone de la couche, comme décrit ci-dessus. L' _with_logits suffixe est redondant, déroutant et inutile. Les fonctions doivent être nommés sans égard à un tel contexte spécifique parce qu'ils sont tout simplement mathématique opérations qui peuvent être effectuées sur les valeurs dérivées de nombreux autres domaines. En fait TensorFlow a une autre fonction similaire sparse_softmax_cross_entropy où ils heureusement oublié d'ajouter, _with_logits suffixe de la création de l'incohérence et l'ajouter à la confusion. PyTorch d'autre part tout simplement les noms de sa fonction sans ce genre de suffixes.

Référence

Le Logit/Probit conférence des diapositives est l'une des meilleures ressources pour comprendre logit. J'ai également mis à jour l'article de Wikipedia avec certaines des informations ci-dessus.

87voto

Trideep Rath Points 1

Logit est une fonction que les cartes de probabilités [0, 1] de [-inf, +inf].

Softmax est une fonction qui maps [-inf, +inf] de [0, 1] similaire comme la Sigmoïde. Mais Softmax normalise également la somme des valeurs(vecteur de sortie) à 1.

Tensorflow "avec logit": Cela signifie que vous êtes en appliquant une fonction softmax à logit numéros de la normaliser. Le input_vector/logit n'est pas normalisée et peut évoluer à partir de [-inf, inf].

Cette normalisation est utilisée pour les problèmes de classification multiclasse. Et pour multilabel les problèmes de classification sigmoïde normalisation est utilisée c'est à dire tf.nn.sigmoid_cross_entropy_with_logits

43voto

Diansheng Points 584

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

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


Même s'il est vrai que le logit est une fonction en mathématiques(en particulier dans les statistiques), je ne pense pas que c'est la même "logit" vous êtes en train de regarder. Dans le livre de l'Apprentissage Profond par Ian Goodfellow, il a mentionné,

La fonction σ-1(x) est appelé le logit dans les statistiques, mais ce terme est plus rarement utilisé dans l'apprentissage de la machine. σ-1(x) représente l' fonction inverse de la fonction sigmoide.

Dans TensorFlow, il est souvent vu comme le nom de la dernière couche. Dans le Chapitre 10 du livre des Mains sur l'Apprentissage de la Machine avec Scikit-learn et TensorFLow par Aurélien Géron, je suis tombé sur ce paragraphe, qui a déclaré, logits couche clairement.

notez que logits est la sortie du réseau de neurones avantd'aller par le biais de la softmax fonction d'activation: pour des raisons d'optimisation, nous va gérer le softmax calcul plus tard.

C'est-à-dire, bien que nous utilisons softmax que la fonction d'activation dans la dernière couche dans notre conception, pour la facilité du calcul, nous prenons logits séparément. C'est parce qu'il est plus efficace de calculer les softmax et cross-entropy perte de l'ensemble. Rappelez-vous que cross-entropy est une fonction de coût, n'a pas utilisé le terme de propagation.

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