Wie wird RBM zur Klassifizierung verwendet?

12

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?

Anzeigename
quelle
Die eingeschränkte Boltzmann-Maschine ist eine der frühesten Komponenten für tiefes Lernen. Tatsächlich hat Hinton die erste wichtige Arbeit in DNN geleistet: Das Deep-Believe-Netzwerk basiert auf RBM. Weitere Informationen finden Sie in diesem Artikel (Deep-Believe-Netzwerk, 2007, für Hinton). Auf seiner Website finden Sie sehr wichtige Ressourcen sowie ein Demo-Experiment cs.toronto.edu/~hinton/digits.html
Bashar Haddad
@hbaderts Ich fing an, mit RBM herumzuspielen. Die akzeptierte Antwort war leicht zu lesen. Ich wollte um Klärung bitten, die RBM-Hidden-Layer sind nach Stichproben aus der Binärverteilung zufällig. Werden für die Klassifizierung die Wahrscheinlichkeiten für versteckte Einheiten verwendet oder die aus einer Binärverteilung (1 und 0) abgetasteten versteckten Einheiten an den Klassifizierer übergeben?
M3tho5

Antworten:

15

Ü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

p(vh)=ich=0Vp(vichh),
undσist die Sigmoidfunktion,aiaufvi. Aus diesen beiden Gleichungen folgt, dassp(vh)nur von den versteckten Zuständenhabhängt. Das bedeutet, dass die Informationen darüber, wie eine sichtbare Probeverzeugt wird, in den versteckten Einheiten, den Gewichten und den Vorspannungen gespeichert werden müssen.
p(vichh)=σ(einich+j=0Hwjichhj)
σeinichist die Vorspannung für den sichtbaren Knoten und w j i ist die Gewichtung von h jichwjichhjvichp(vh)hv

Verwendung von RBMs zur Klassifizierung

h

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.

hbaderts
quelle
Vielen Dank für die Bearbeitung @ Seanny123, dies macht es viel einfacher zu lesen.
hbaderts
5

@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.

Sal
quelle
0

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

Kristin H
quelle