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.
quelle
Antworten:
TLDR
Für -Schritt Kontras Divergence Aktualisieren sichtbar Bias , basierend auf Datenvektor unter Verwendung von :b j dn bj d
Aktualisieren Sie den versteckten Bias mit:hi
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 .b(t)j c(t)i η dj j h^(n)j v^(n)j i j n k k
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:n k k
(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 , ji j Wi,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 ) ih(n)i v(n)j h^(n)i v^(n)i
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
quelle