Was bedeuten die Wortprotokolle in TensorFlow?

250

In der folgenden TensorFlow-Funktion müssen wir die Aktivierung künstlicher Neuronen in der letzten Schicht füttern. Das verstehe ich. Aber ich verstehe nicht, warum es Logits heißt? Ist das nicht eine mathematische Funktion?

loss_function = tf.nn.softmax_cross_entropy_with_logits(
     logits = last_layer,
     labels = target_output
)
Milad P.
quelle

Antworten:

215

Logits ist ein überladener Begriff, der viele verschiedene Dinge bedeuten kann:


In Math ist Logit eine Funktion, die Wahrscheinlichkeiten ( [0, 1]) auf R ( (-inf, inf)) abbildet.

Geben Sie hier die Bildbeschreibung ein

Eine Wahrscheinlichkeit von 0,5 entspricht einem Logit von 0. Negatives Logit entspricht Wahrscheinlichkeiten von weniger als 0,5, positiv von> 0,5.

In ML kann es sein

Der Vektor der rohen (nicht normalisierten) Vorhersagen, die ein Klassifizierungsmodell generiert, wird normalerweise an eine Normalisierungsfunktion übergeben. Wenn das Modell ein Klassifizierungsproblem für mehrere Klassen löst, werden Protokolle normalerweise zu einer Eingabe für die Softmax-Funktion. Die Softmax-Funktion erzeugt dann einen Vektor von (normalisierten) Wahrscheinlichkeiten mit einem Wert für jede mögliche Klasse.

Logits beziehen sich manchmal auch auf die elementweise Umkehrung der Sigmoidfunktion.

Salvador Dali
quelle
127
Für Tensorflow: Es wird angenommen, dass dieser Tensor die Größe ist, die vom Softmax auf Wahrscheinlichkeiten abgebildet wird.
Thertweck
1
ist das genau das gleiche wie das, was vor dem softmax potenziert wird? dh softmax(logit) = exp(logit)/Z(logit)dann logit = h_NN(x)? Logit ist also dasselbe wie "Score"?
Charlie Parker
4
Persönliches Verständnis In der TensorFlow-Domäne sind Protokolle die Werte, die als Eingabe für softmax verwendet werden sollen. Ich bin zu diesem Verständnis gekommen, basierend auf diesem Tensorflow-Tutorial.
Diansheng
2
Ich bin mir nicht sicher, ob dies die Frage beantwortet. Vielleicht wurde es deshalb nie akzeptiert. Ich verstehe, was die Logit-Funktion ist, aber es verwirrt mich auch, warum Tensorflow diese Argumente als Logs bezeichnet. Es ist auch die gleiche Bezeichnung für einige der Parameter in Tensorflows Funktionen
dleal
1
Können Sie ein einfaches Beispiel geben? Ist das richtig? [1, 0.5, 0.5]durch normalisierung werden [0.5, 0.25, 0.25]und dann soft max werden [0,]wenn man heiß ist [1, 0, 0]? oder einfach nur [1, 0, 0]ausgeben , weil die Ausgabe ein Vektor sein sollte?
Tina Liu
91

Nur diese Klarstellung hinzufügen, damit jeder, der so viel nach unten scrollt, es zumindest richtig machen kann, da es so viele falsche Antworten gibt, die positiv bewertet wurden.

Dianshengs Antwort und JakeJs Antwort machen es richtig.
Eine neue Antwort von Shital Shah ist eine noch bessere und vollständigere Antwort.


Ja, logit als mathematische Funktion in der Statistik, aber die logitim Zusammenhang mit neuronalen Netzen verwendete ist anders. Statistisch logitmacht hier nicht einmal Sinn.


Ich konnte nirgendwo eine formale Definition finden, logitbedeutet aber im Grunde:

Die rohen Vorhersagen, die aus der letzten Schicht des neuronalen Netzwerks kommen.
1. Dies ist genau der Tensor, auf den Sie die argmaxFunktion anwenden , um die vorhergesagte Klasse zu erhalten.
2. Dies ist genau der Tensor, den Sie in die softmaxFunktion einspeisen, um die Wahrscheinlichkeiten für die vorhergesagten Klassen zu erhalten.


Auch aus einem Tutorial auf der offiziellen Tensorflow-Website:

Logits Layer

Die letzte Schicht in unserem neuronalen Netzwerk ist die Protokollschicht, die die Rohwerte für unsere Vorhersagen zurückgibt. Wir erstellen eine dichte Schicht mit 10 Neuronen (eine für jede Zielklasse 0–9) mit linearer Aktivierung (Standardeinstellung):

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

Wenn Sie immer noch verwirrt sind, ist die Situation wie folgt:

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)

wo predicted_class_index_by_rawund predicted_class_index_by_probwird gleich sein.

Ein anderer Name für raw_predictionsim obigen Code istlogit .


Was das Warum betrifft logit ... Ich habe keine Ahnung. Es tut uns leid.
[Bearbeiten: In dieser Antwort finden Sie die historischen Gründe für den Begriff.]


Wissenswertes

Wenn Sie möchten, können Sie jedoch statistische Daten logitauf probabilitiesdie softmaxFunktion anwenden .

Wenn die Wahrscheinlichkeit einer bestimmten Klasse ist p,
dann ist die logarithmische Wahrscheinlichkeit dieser Klasse L = logit(p).

Außerdem kann die Wahrscheinlichkeit dieser Klasse p = sigmoid(L)mithilfe der sigmoidFunktion wiederhergestellt werden .

Nicht sehr nützlich, um Log-Quoten zu berechnen.

AneesAhmed777
quelle
80

Logit ist eine Funktion , die Wahrscheinlichkeiten Karten [0, 1]zu [-inf, +inf].

Softmax ist eine Funktion , die Karten [-inf, +inf]zu [0, 1]als Sigmoid ähnlich. Softmax normalisiert aber auch die Summe der Werte (Ausgabevektor) auf 1.

Tensorflow "mit Protokoll" : Dies bedeutet, dass Sie eine Softmax-Funktion anwenden, um Zahlen zu protokollieren, um sie zu normalisieren. Der input_vector / logit ist nicht normalisiert und kann von [-inf, inf] skaliert werden.

Diese Normalisierung wird für Klassifizierungsprobleme mit mehreren Klassen verwendet. Und für Multilabel-Klassifizierungsprobleme wird die Sigmoid-Normalisierung verwendet, d. H.tf.nn.sigmoid_cross_entropy_with_logits

Trideep Rath
quelle
10
Logit ist also das gleiche wie die "Punktzahl"
Charlie Parker
1
Ich schlage vor, eine Zeile in Ihre Antwort einzufügen, die LogitFunktion (Statistik) und logitsSchicht (Tensorflow) explizit unterscheidet
AneesAhmed777
62

Zusammenfassung

Im Kontext des tiefen Lernens bedeutet die Logit-Ebene die Ebene, die in Softmax (oder eine andere solche Normalisierung) eingespeist wird. Die Ausgabe des Softmax sind die Wahrscheinlichkeiten für die Klassifizierungsaufgabe und seine Eingabe ist die Protokollschicht. Die Protokollierungsschicht erzeugt normalerweise Werte von -infinity bis + unendlich, und die Softmax-Schicht wandelt sie in Werte von 0 bis 1 um.

Historischer Zusammenhang

Woher kommt dieser Begriff? In den 1930er und 40er Jahren versuchten mehrere Personen, die lineare Regression an das Problem der Vorhersage von Wahrscheinlichkeiten anzupassen. Die lineare Regression erzeugt jedoch eine Ausgabe von -infinity bis + unendlich, während für Wahrscheinlichkeiten unsere gewünschte Ausgabe 0 bis 1 ist. Eine Möglichkeit, dies zu tun, besteht darin, die Wahrscheinlichkeiten 0 bis 1 auf -infinity bis + unendlich abzubilden und dann wie gewohnt die lineare Regression zu verwenden. Eine solche Abbildung ist die kumulative Normalverteilung, die 1934 von Chester Ittner Bliss verwendet wurde, und er nannte dieses "Probit" -Modell, kurz für "Wahrscheinlichkeitseinheit". Diese Funktion ist jedoch rechenintensiv, obwohl einige der wünschenswerten Eigenschaften für die Klassifizierung mehrerer Klassen fehlen. 1944 nutzte Joseph Berkson die Funktionlog(p/(1-p))um dieses Mapping durchzuführen und es logit zu nennen, kurz für "logistic unit". Daraus leitet sich auch der Begriff logistische Regression ab.

Die Verwirrung

Leider wird der Begriff Logs beim Deep Learning missbraucht. Aus rein mathematischer Sicht ist Logit eine Funktion , die über dem Mapping ausgeführt wird. Beim Deep Learning wurde die Ebene "Logits-Ebene" genannt, die in die Logit-Funktion eingespeist wird. Dann begannen die Menschen den Ausgang Aufruf Werte dieser Schicht „Logit“ creating die Verwirrung mit Logit der Funktion .

TensorFlow-Code

Leider führt der TensorFlow-Code zu einer weiteren Verwirrung durch Namen wie tf.nn.softmax_cross_entropy_with_logits. Was bedeutet Logits hier? Es bedeutet nur, dass die Eingabe der Funktion die Ausgabe der letzten Neuronenschicht sein soll, wie oben beschrieben. Das _with_logitsSuffix ist redundant, verwirrend und sinnlos . Funktionen sollten ohne Rücksicht auf solche sehr spezifischen Kontexte benannt werden, da es sich lediglich um mathematische Operationen handelt, die mit Werten ausgeführt werden können, die aus vielen anderen Bereichen abgeleitet wurden. Tatsächlich hat TensorFlow eine andere ähnliche Funktion, sparse_softmax_cross_entropybei der sie glücklicherweise vergessen haben, ein _with_logitsSuffix hinzuzufügen, was zu Inkonsistenzen und Verwirrung führt. PyTorch hingegen benennt seine Funktion einfach ohne diese Art von Suffixen.

Referenz

Die Logit / Probit-Vorlesungsfolien sind eine der besten Quellen, um Logit zu verstehen. Ich habe auch den Wikipedia-Artikel mit einigen der oben genannten Informationen aktualisiert .

Shital Shah
quelle
31

Persönliches Verständnis In der TensorFlow-Domäne sind Protokolle die Werte, die als Eingabe für softmax verwendet werden sollen. Ich bin zu diesem Verständnis gekommen, basierend auf diesem Tensorflow-Tutorial.

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


Obwohl es wahr ist, dass Logit eine Funktion in der Mathematik ist (insbesondere in der Statistik), denke ich nicht, dass dies das gleiche 'Logit' ist, das Sie betrachten. In dem Buch Deep Learning von Ian Goodfellow erwähnte er:

Die Funktion σ −1 (x) wird in der Statistik als logit bezeichnet, dieser Begriff wird jedoch beim maschinellen Lernen seltener verwendet. σ −1 (x) steht für die Umkehrfunktion der logistischen Sigmoidfunktion.

In TensorFlow wird es häufig als Name der letzten Ebene angesehen. In Kapitel 10 des Buches Hands-on Machine Learning mit Scikit-learn und TensorFLow von Aurélien Géron bin ich auf diesen Absatz gestoßen , in dem die logitsEbene klar angegeben wurde.

Beachten Sie, dass dies logitsdie Ausgabe des neuronalen Netzwerks ist, bevor Sie die Softmax-Aktivierungsfunktion durchlaufen: Aus Optimierungsgründen werden wir die Softmax-Berechnung später durchführen.

Das heißt, obwohl wir Softmax als Aktivierungsfunktion in der letzten Ebene unseres Designs verwenden, nehmen wir es zur Vereinfachung der Berechnung logitsseparat heraus. Dies liegt daran, dass es effizienter ist, gemeinsam zu berechnen softmaxund zu cross-entropyverlieren. Denken Sie daran, dass dies cross-entropyeine Kostenfunktion ist, die bei der Vorwärtsausbreitung nicht verwendet wird.

Diansheng
quelle
12

Hier ist eine kurze Antwort für zukünftige Leser. Tensorflow's logitist definiert als die Ausgabe eines Neurons ohne Anwendung der Aktivierungsfunktion:

logit = w*x + b,

x: Eingabe, w: Gewicht, b: Vorspannung. Das ist es.


Das Folgende ist für diese Frage irrelevant.

Lesen Sie für historische Vorträge andere Antworten. Hut ab vor der Tensorflow"kreativ" verwirrenden Namenskonvention. In PyTorchgibt es nur einen CrossEntropyLossund er akzeptiert nicht aktivierte Ausgänge. Faltungen, Matrixmultiplikationen und Aktivierungen sind Operationen auf derselben Ebene. Das Design ist viel modularer und weniger verwirrend. Dies ist einer der Gründe, warum ich von Tensorflowzu gewechselt bin PyTorch.

Jonathan Lee
quelle
8

( FOMO sapiens).

Wenn Sie die mathematische Logit-Funktion aktivieren, wird der reale Raum vom [0,1]Intervall in unendlich konvertiert [-inf, inf].

Sigmoid und Softmax machen genau das Gegenteil. Sie werden den [-inf, inf]realen Raum in [0, 1]realen Raum umwandeln .

Aus diesem Grund können wir beim maschinellen Lernen logit vor der Sigmoid- und Softmax-Funktion verwenden (da sie übereinstimmen).

Und deshalb „wir nennen können“ alles in maschinellem Lernen , die vor geht sigmoid oder softmax die Funktion logit .

Hier ist ein Video von J. Hinton mit diesem Begriff.

PS. Ich empfehle nicht, das Video anzusehen, nur um den Begriff zu überprüfen.

Prosti
quelle
5

Sie sind im Grunde das am besten erlernte Modell, das Sie aus dem Netzwerk erhalten können, bevor es auf die Anzahl der Klassen angewendet wird, an denen wir interessiert sind. Sehen Sie sich an, wie einige Forscher sie verwenden, um ein flaches neuronales Netz basierend auf der Tiefe zu trainieren Netzwerk hat gelernt: https://arxiv.org/pdf/1312.6184.pdf

Es ist so, als würden Sie beim Erlernen eines Fachs im Detail sehr viele kleinere Punkte lernen, aber wenn Sie einen Schüler unterrichten, werden Sie versuchen, es auf den einfachsten Fall zu komprimieren. Wenn der Schüler jetzt versuchen würde zu unterrichten, wäre es ziemlich schwierig, aber er könnte es gerade gut genug beschreiben, um die Sprache zu benutzen.

JakeJ
quelle
1

Die logit-Funktion (/ ˈloʊdʒɪt / LOH-jit) ist die Umkehrung der in der Mathematik, insbesondere in der Statistik, verwendeten sigmoidalen "logistischen" Funktion oder logistischen Transformation. Wenn die Variable der Funktion eine Wahrscheinlichkeit p darstellt, gibt die Logit-Funktion die Log-Quoten oder den Logarithmus der Quoten p / (1 - p) an.

Siehe hier: https://en.wikipedia.org/wiki/Logit

Jagger Yu
quelle
4
Das ist in Statistik / Mathematik. Wir sprechen hier von maschinellem Lernen, wo es logiteine andere Bedeutung hat. Sehen Sie das , das , das .
AneesAhmed777
1

logits

Der Vektor von rohen (nicht normalisierten) Vorhersagen, die ein Klassifizierungsmodell generiert, der normalerweise an eine Normalisierungsfunktion übergeben wird. Wenn das Modell ein Klassifizierungsproblem für mehrere Klassen löst, werden Protokolle normalerweise zu einer Eingabe für die Softmax-Funktion. Die Softmax-Funktion erzeugt dann einen Vektor von (normalisierten) Wahrscheinlichkeiten mit einem Wert für jede mögliche Klasse.

Außerdem beziehen sich Protokolle manchmal auf die elementweise Umkehrung der Sigmoidfunktion. Weitere Informationen finden Sie unter tf.nn.sigmoid_cross_entropy_with_logits.

offizielle Tensorflow-Dokumentation

Vinay Jaju
quelle
-3

Logits sind häufig die Werte der Z-Funktion der Ausgabeschicht in Tensorflow.

Myron Leskiv
quelle
Nicht unbedingt, siehe die anderen Antworten.
Quant