Im Moment spiele ich mit Restricted Boltzmann Machines und da ich schon dabei bin, möchte ich versuchen, handschriftliche Ziffern damit zu klassifizieren.
Das Modell, das ich erstellt habe, ist jetzt ein ziemlich ausgefallenes generatives Modell, aber ich weiß nicht, wie ich damit weitermachen soll.
In diesem Artikel sagt der Autor, dass man nach der Erstellung eines guten generativen Modells " dann einen diskriminativen Klassifikator (dh linearen Klassifikator, Support Vector Machine) über dem RBM unter Verwendung der gekennzeichneten Stichproben trainiert" und weiter angibt ", da Sie das propagieren Datenvektoren zu den verborgenen Einheiten des RBM-Modells, um verborgene Einheitsvektoren oder eine Darstellung der Daten auf höherer Ebene zu erhalten ". Das Problem ist, dass ich nicht sicher bin, ob ich das richtig verstehe.
Bedeutet das, dass ich die Eingabe nur an die ausgeblendeten Einheiten weitergeben muss und dort meine RBM-Funktion zur Klassifizierung habe?
Kann mir jemand diesen Vorgang erklären?
quelle
Antworten:
Überprüfung von eingeschränkten Boltzmann-Maschinen
Eine eingeschränkte Boltzmann-Maschine (RBM) ist ein generatives Modell, das eine Wahrscheinlichkeitsverteilung über die Eingabe lernt. Das heißt, der RBM kann nach dem Training neue Stichproben aus der erlernten Wahrscheinlichkeitsverteilung generieren. Die Wahrscheinlichkeitsverteilung über die sichtbare Einheit ist gegeben durch p ( v | h ) = V Π i = 0 p ( v i | h ) , wobei p ( v i | h ) = σ ( a i + Hv
Verwendung von RBMs zur Klassifizierung
Dieser verborgene Vektor ist nur eine transformierte Version der Eingabedaten - dies kann nichts für sich klassifizieren. Um eine Klassifizierung durchzuführen, trainieren Sie jeden Klassifizierer (linearer Klassifizierer, SVM, ein vorwärtskoppelndes neuronales Netzwerk oder irgendetwas anderes) mit dem verborgenen Vektor anstelle der "rohen" Trainingsdaten als Eingaben.
Wenn Sie ein Deep-Believe-Netzwerk (DBN) aufbauen, mit dem unbeaufsichtigt Deep-Feed-Forward-Neuronale Netzwerke vorab trainiert wurden, verwenden Sie diesen verborgenen Vektor als Eingabe für einen neuen RBM, den Sie stapeln oben drauf. Auf diese Weise können Sie das Netzwerk Schicht für Schicht trainieren, bis die gewünschte Größe erreicht ist, ohne beschriftete Daten zu benötigen. Zuletzt fügen Sie zB eine Softmax-Ebene oben hinzu und trainieren das gesamte Netzwerk mit Backpropagation für Ihre Klassifizierungsaufgabe.
quelle
@hbaderts hat den gesamten Workflow perfekt beschrieben. Es macht jedoch möglicherweise keinen Sinn, wenn Sie mit dieser Idee völlig neu sind. Deshalb werde ich es dem Laien erklären (daher werde ich Details weglassen):
Stellen Sie sich die tiefen Netzwerke als Funktion zur Transformation Ihrer Daten vor. Beispiele für Transformationen sind Normalisierung, Protokollierung von Daten usw. Die tiefen Netzwerke, die Sie trainieren, bestehen aus mehreren Schichten. Jede dieser Schichten wird unter Verwendung eines Lernalgorithmus trainiert. Für die erste Ebene übergeben Sie die Originaldaten als Eingabe und versuchen, eine Funktion zu erhalten, mit der Sie die "gleichen Originaldaten" wie die Ausgabe erhalten. Sie erhalten jedoch nicht die perfekte Ausgabe. Daher erhalten Sie eine transformierte Version Ihrer Eingabe als Ausgabe der ersten Ebene.
Nun, für die zweite Ebene, nehmen Sie diese "transformierten Daten" und übergeben sie als Eingabe und wiederholen den gesamten Lernprozess. Sie machen das für alle Ebenen in Ihrem tiefen Netzwerk.
Auf der letzten Ebene erhalten Sie eine "transformierte Version" Ihrer ursprünglichen Eingabedaten. Dies kann als übergeordnete Abstraktion Ihrer ursprünglichen Eingabedaten angesehen werden. Beachten Sie, dass Sie die Labels / Ausgaben in Ihrem Deep Network noch nicht verwendet haben. Daher ist alles bis zu diesem Punkt unbeaufsichtigtes Lernen. Dies wird als schichtweises Vortraining bezeichnet.
Nun möchten Sie ein Klassifikator- / Regressionsmodell trainieren, und dies ist ein überwachtes Lernproblem. Sie erreichen dieses Ziel, indem Sie die "endgültige transformierte Version" Ihrer ursprünglichen Eingabe von der letzten Ebene in Ihrem tiefen Netzwerk nehmen und als Eingabe für einen beliebigen Klassifizierer verwenden (z. B. Knn-Klassifizierer / Softmax-Klassifizierer / logistische Regression usw.). Dies nennt man Stapeln.
Wenn Sie diesen Klassifikator / Lerner der letzten Stufe ausbilden, verbreiten Sie all Ihr Lernen im gesamten Netzwerk. Dies stellt sicher, dass Sie aus den Beschriftungen / Ausgaben lernen und die erlernten schichtweisen Parameter entsprechend ändern können.
Sobald Sie Ihr generatives Modell trainiert haben, nehmen Sie die Ausgabe Ihres generativen Modells und verwenden Sie diese als Eingabe für einen Klassifizierer / Lernenden. Lassen Sie den Fehler während des Lernvorgangs durch das gesamte Netzwerk fließen, damit Sie den in früheren Schritten erlernten schichtweisen Parameter ändern können.
quelle
Sie können gestapelte RBMs auf Ihren Bildern trainieren und dann den endgültigen RBM anhand einer Verkettung der Ausgabe aus dem RBM-Stapel und den Etiketten trainieren. Dann können Sie das RBM tatsächlich zur Klassifizierung verwenden. Dieser Artikel von Hinton ++ erklärt diesen Ansatz. Ein schneller Lernalgorithmus für Deep Belief-Netze . Sie können sich auch diese Demo ansehen
quelle