1

Ich bin derzeit auf einem Klassifikationsproblem mit tensorflow zu arbeiten, und ich bin neu in der Welt des maschinellen Lernens, aber ich weiß nicht etwas bekommen.Maschinelles Lernen Multi-Klassifizierung: Warum Gebrauch "one-hot-Codierung statt eine Nummer

y = [0,0,1,0] 

Aber ich kann nicht die Haupt dahinter verstehen ...

Warum nicht nur trainieren, das gleiche Modell: der y Tensor, die Ausgabe wie folgt

Ich habe versucht, erfolgreich Modelle zu trainieren um Klassen wie y = 3 oder y = 4

auszugeben

Dies scheint viel flexibler, weil ich mir vorstellen kann, ein Multi-Klassifizierung Problem mit 2 Millionen möglichen Klassen, und es wäre viel mo Es ist effizient, eine Zahl zwischen 0-2.000.000 auszugeben, als einen Tensor von 2.000.000 Elementen für jedes Ergebnis auszugeben.

Was fehlt mir?

+0

Sie müssen nur nur ein Bit zum Klassifizieren setzen, und wenn Sie an Ihre Ausgabeschicht denken, sollte nur eine Funktion aktiviert werden und alle anderen werden 0. onehot wird oft in der Statuscodierung auf fpga in schneller und sicherer Weise verwendet Dinge beschriften – Engine

Antwort

2

Idealerweise könnte man trainieren Sie Eingabeinstanzen zu klassifizieren modellieren und einen einzigen Ausgang zu erzeugen. Etwas wie

y=1 bedeutet input=dog, y=2 bedeutet input=airplane. Ein solcher Ansatz bringt jedoch viele Probleme mit sich:

  1. Wie interpretiere ich den Ausgang y=1.5?
  2. Warum versuche ich die Regreß eine Zahl wie ich mit kontinuierlichen Daten bin zu arbeiten, während ich bin in Wirklichkeit mit diskreten Daten zu arbeiten?

In der Tat, was tun Sie ist ein Multi-Klasse Klassifikationsproblem wie ein Regressionsproblem zu behandeln. Dies ist lokal falsch (es sei denn, Sie tun binäre Klassifizierung, in diesem Fall, eine positive und eine negative Ausgabe sind alles, was Sie brauchen).

diese (und andere) Probleme zu vermeiden, verwenden wir eine abschließende Schicht von Neuronen und wir assoziieren, um eine High-Aktivierung an der richtigen Klasse.

Die Ein-Hot-Kodierung stellt die Tatsache dar, dass Sie Ihr Netzwerk zwingen möchten, eine einzelne Hochaktivierungsausgabe zu haben, wenn eine bestimmte Eingabe vorhanden ist.

Dies, alle input=dog wird 1, 0, 0 als Ausgabe und so weiter haben.

Auf diese Weise behandeln Sie ein diskretes Klassifizierungsproblem richtig, produzieren eine diskrete Ausgabe und gut interpretierbar (in der Tat werden Sie immer das Ausgabe-Neuron mit der höchsten Aktivierung unter Verwendung tf.argmax extrahieren, obwohl Ihr Netzwerk nicht hat gelernt, die perfekte One-Hot-Codierung zu produzieren Sie in der Lage, ohne Zweifel die wahrscheinlich richtige Ausgabe zu extrahieren)

1

Die Antwort liegt darin, wie das endgültige Tensor oder Einzelwert, berechnet. In einer NN würde Ihre y=3 durch eine gewichtete Summe über die Werte der vorherigen Schicht aufgebaut werden.

Der Versuch, zu trainieren, zu einzelnen Werte dann eine lineare Beziehung zwischen der Kategorie IDs bedeuten würde, wo keine vorhanden ist: Für den wahren Wert y=4, der Ausgang y=3 wäre besser als y=1 auch in Betracht gezogen werden, obwohl die Kategorien zufällig sind, und 1: dogs, 3: cars, 4: cats sein kann

1

Neuronale Netzwerke verwenden Gradientenabstieg, um eine Verlustfunktion zu optimieren. Diese Verlustfunktion muss wiederum differenzierbar sein.

Ein diskreter Ausgang wäre (tatsächlich) ein vollkommen gültiger und wertvoller Ausgang für ein Klassifizierungsnetzwerk. Das Problem ist, wir wissen nicht, wie wir dieses Netz effizient optimieren können.

Stattdessen verlassen wir uns auf eine kontinuierliche Verlustfunktion. Diese Verlustfunktion basiert normalerweise auf etwas, das mehr oder weniger mit der Wahrscheinlichkeit jedes Etiketts zusammenhängt - und dafür benötigen Sie eine Netzwerkausgabe, die pro Etikett einen Wert hat.

In der Regel wird die Ausgabe, die Sie beschreiben, aus dieser weichen, kontinuierlichen Ausgabe abgeleitet, indem die Argmax dieser Pseudowahrscheinlichkeiten genommen wird.

Verwandte Themen