Aktualisierung der Verzerrung mit RBMs (Restricted Boltzmann Machines)


8

Ich bin sehr neu in RBMs und versuche jetzt, ein RBM-Programm zu schreiben. Entschuldigung, wenn dies eine dumme Frage ist und / oder hier bereits beantwortet wurde.

Ich habe einige Artikel online gelesen und hier Fragen gestellt, aber ich kann nichts darüber finden , wie die Verzerrungen (oder Verzerrungsgewichte) aktualisiert werden können. Ich habe gelesen, wie man sie anfänglich einstellt. Flüchtige Verweise darauf sollen aktualisiert werden. Geoff Hinton erwähnt natürlich die Voreingenommenheit, die in seinen Gleichungen enthalten ist (ich habe einige seiner Artikel gelesen, einige Videopräsentationen gesehen), aber ich kann in seinen Papieren keine Erwähnung finden, dass die Voreingenommenheit nach dem Setzen geändert wird oder wie / wann / warum. Mir muss etwas fehlen!

Edwin Chens Artikel wird hier empfohlen: http://blog.echen.me/2011/07/18/introduction-to-restricted-boltzmann-machines/ Er erwähnt nicht, wie man die Vorurteile aktualisiert / "lernt"; Sie sind in seinem Programm geändert, aber ich verstehe seinen Code nicht. (Er hat eine Tabelle mit den aktualisierten Gewichten, was nicht richtig erscheint - seltsamerweise gibt es ein Bias-Bias-Gewicht, was auch immer das bedeuten könnte.)

Ähm, ich bin mir nicht sicher, warum das so schwer zu finden ist !! Vielen Dank für jede Hilfe.


Schauen Sie hier: image.diku.dk/igel/paper/AItRBM-proof.pdf in Abschnitt 4.1 (für die Ableitung der Wahrscheinlichkeit für die Bias-Terme) und 5 (für ungefähre Anpassungsalgorithmen).
Shadowtalker

Ich danke dir sehr! Nun, meistens ist die Mathematik weit über meinem Kopf, aber ich verstehe die Zeile darüber, wie man die Voreingenommenheit auf Seite 28 aktualisiert :-) und es wird großartig sein, wenn ich tiefer in die Theorie eintauchen möchte. ps Ich habe es heute gut funktionieren lassen, ohne Vorspannungseinheit oder Gewichte. (Smolenksy, der sie erfunden hat, nannte sie Harmoniums, ein viel schönerer Name, ich glaube, ich werde sie so nennen.)
Adam P

gut zu hören! Ich schlage vor, hier aufzuschreiben, was Sie gefunden haben, und Ihre eigene Frage zu beantworten. Auf diese Weise können andere hier suchen und es leicht finden (Kommentare werden nicht gesucht, nur Fragen und Antworten)
shadowtalker

Ich wette auch, wenn Sie die Mathematik wirklich sorgfältig durchlesen, werden Sie feststellen, dass sie nicht so kompliziert ist. Es ist wirklich nur ein Haufen Derivate. Viel Zeit werfen sie einfach viel auf einmal auf die Seite und überspringen Schritte, aber diese Papiere sind normalerweise nicht so esoterisch, außer wenn sie
Dinge

Antworten:


5

TLDR

Für -Schritt Kontras Divergence Aktualisieren sichtbar Bias , basierend auf Datenvektor unter Verwendung von :b j dnbjd

bj(t)bj(t1)+η(djv^j(n))

Aktualisieren Sie den versteckten Bias mit:hi

ci(t)ci(t1)+η(h^i(0)h^i(n))

Wobei und die Verzerrungen nach der Aktualisierungsnummer t sind, die Lernrate ist, die te Komponente des ist und wo und sind die Wahrscheinlichkeiten, dass die verborgene Einheit und die sichtbare Einheit aktiv sind, sobald das RBM den Daten ausgesetzt und für Schritte ausgeführt wurde. Dies setzt eine Minibatch-Größe von 1 voraus; Für die praktische Minibatch-Größe werden die über die Datenvektoren erhaltenen Aktualisierungen gemittelt .bj(t)ci(t)ηdjjh^j(n)v^j(n)ijnkk


Vollständige Erklärung

Ich hatte die gleichen Probleme. Eine gute Möglichkeit, sich das vorzustellen, ist, dass die Vorurteile selbst nur Gewichte sind. In neuronalen Netzwerkmodellen wird die Vorspannung einer Einheit häufig als das Gewicht einer Verbindung modelliert, die die betreffende Einheit mit einer "immer an" -Einheit verbindet, dh einer imaginären Einheit, deren Aktivierung immer 1 ist.

Im RBM-Fall würde dies bedeuten, dass Sie sich eine zusätzliche sichtbare Einheit vorstellen, deren Ausgabe immer 1 ist. Diese sichtbare Einheit wird an jede der verborgenen Einheiten angehängt (genau wie jede andere sichtbare Einheit), und das Gewicht dieser Verbindungen sind die Vorurteile der jeweiligen versteckten Einheiten. In ähnlicher Weise können die Verzerrungen der sichtbaren Einheiten modelliert werden, indem man sich eine zusätzliche verborgene Einheit vorstellt, deren Wert immer eins ist und die mit jeder der sichtbaren Einheiten verbunden ist, wobei die Gewichte dieser Verbindungen die sichtbaren Verzerrungen sind.

Sie könnten Ihr RBM sogar auf diese Weise implementieren, aber ich glaube nicht, dass die Leute das normalerweise tun. Der Punkt ist, dass Sie, wenn Sie auf diese Weise darüber nachdenken, (im Wesentlichen) dieselbe Aktualisierungsregel für die Verzerrungen verwenden können wie für die Gewichte, da Verzerrungen nur Gewichte sind, die mit "immer an" -Einheiten verbunden sind.

Seien wir konkret. Ich werde die übliche stufige Aktualisierungsregel für kontrastive Divergenz aufschreiben und die Regularisierung der Einfachheit halber ignorieren. Der Einfachheit halber gilt diese Aktualisierungsregel auch für einen "Minibatch" von 1 Datenvektor. Die Aktualisierung für ein Minibatch mit Vektoren ist die durchschnittliche Aktualisierung über alle Vektoren. Die Aktualisierungsregel lautet:nkk

Wi,j(t)Wi,j(t1)+η(h^i(0)djh^i(n)vj(n))
wobei:
  • Wi,j(t) ist das Gewicht, das die sichtbare Einheit mit der verborgenen Einheit nach der Aktualisierungsnummervjhit
  • η ist die Lernrate
  • h^i(n) ist die Wahrscheinlichkeit, dass eine versteckte Einheit aktiv ist, sobald die Maschine dem Datenvektor ausgesetzt und für Schritte entwickelt wurde. idn
    • was bedeutet, dass nur die Aktivierung der verborgenen Einheit als unmittelbare Antwort auf den Datenvektor ist ih^i(0)i
  • j ddj ist die te Komponente desjd
  • j nvj(n) ist der Zustand der sichtbaren Einheit sobald die Maschine dem Datenvektor ausgesetzt und für Schritte entwickelt wurde.jn

(Einige Leute verwenden um die sichtbaren Einheiten zu indizieren, und um die versteckten zu indizieren, schreiben aber trotzdem --- es spielt keine Rolle, solange Sie die richtigen Werte miteinander multiplizieren.)j W i , jijWi,j

Achten Sie darauf, den "Zustand" einer Einheit, der mit oder , und die "Aktivierung" einer Einheit, die mit oder . Der Status einer Einheit ist entweder 0 oder 1, während die Aktivierung eine beliebige reelle Zahl zwischen 0 und 1 ist. Wenn die Aktivierung 0,8 beträgt, ist der Status wahrscheinlich 1, in 20% der Fälle jedoch 0. v ( n ) , j h ( n ) , i v ( n ) ihi(n)vj(n)h^i(n)v^i(n)

Wenn Sie Verzerrungen als Gewichte für "immer an" -Einheiten behandeln, werden Sie feststellen, dass sich die obige Gleichung zu den für Bias-Aktualisierungen unter " TLDR " angegebenen vereinfacht . Es gibt jedoch einen kleinen Unterschied bei der Aktualisierung auf sichtbare Verzerrungen: Hier wird die sichtbare Aktivierung anstelle des Status verwendet . Die Aktivierung hat den gleichen erwarteten Wert, weist jedoch eine geringere Varianz als der Zustand auf, wodurch das Rauschen im Lernsignal verringert wird. In diesem Handbuch eine kurze Beschreibung der Verwendung von Aktivierungen anstelle von Zuständen.§3


Edward Newell Vielen Dank für die klare Erklärung! Vielleicht haben Sie einen MATLAB-Code für dieses Beispiel (wie in Edwin Chans Blog beschrieben) und könnten ihn teilen?
Bill Ancalagon der Schwarze

Ich bin froh, dass es geholfen hat. Leider habe ich nur eine Python-Implementierung. Und im Moment unterscheidet sich meine Implementierung von der oben genannten (ich habe mit verschiedenen Update-Regeln experimentiert ...). Viel Glück!
Edward Newell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.