Eingeschränkte Boltzmann-Maschinen gegen mehrschichtige neuronale Netze

22

Ich wollte mit einem neuronalen Netzwerk experimentieren, um ein Klassifizierungsproblem zu lösen, mit dem ich konfrontiert bin. Ich stieß auf Papiere, die von RBMs sprachen. Aber soweit ich das verstehen kann, unterscheiden sie sich nicht von einem mehrschichtigen neuronalen Netzwerk. Ist das genau?

Außerdem arbeite ich mit R und sehe keine eingemachten Pakete für RBMs. Ich bin auf Literatur gestoßen, die von Deep-Learning-Netzwerken handelt, bei denen es sich im Grunde um gestapelte RBMs handelt, aber nicht sicher ist, ob es sich lohnt, sie in R umzusetzen. Hätte jemand einen Hinweis? Vielen Dank

Brokkoli
quelle
3
Sie sind anders als mehrschichtige Netzwerke mit Backprop ausgebildet. Hier sind einige Ressourcen für alle Arten von neuronalen Netzen: stats.stackexchange.com/a/36257/13669
Stumpy Joe Pete

Antworten:

21

Erstens unterscheiden sich RBMs zweifellos von normalen neuronalen Netzen, und wenn sie richtig verwendet werden, erzielen sie eine viel bessere Leistung. Wenn Sie ein paar Schichten eines RBM trainieren und dann die gefundenen Gewichte als Ausgangspunkt für ein Mehrschicht-NN verwenden, erhalten Sie häufig bessere Ergebnisse als mit einem Mehrschicht-NN.

Der beste Hinweis, den ich mir vorstellen kann, ist dieser Kurs über Coursera, der von Geoffrey Hinton gehalten wird, einem der Verantwortlichen für RBMs:

https://class.coursera.org/neuralnets-2012-001/class/index

Die Videos zu RBMs und Denoising Autoencoders sind eine wertvolle Lernressource für alle, die sich für das Thema interessieren.

Was die Implementierung in R angeht, kenne ich auch keine, aber wenn Sie es implementieren möchten, sollten Sie lieber kein reines R verwenden (es sei denn, Ihre Daten sind nicht zu groß). Das Training eines RBM dauert ziemlich lange, und wenn Sie reines R anstelle von R mit C verwenden, kann es erheblich wachsen.

sjm.majewski
quelle
1
Ich kann mit Rs Leistungsproblemen sprechen, da ich einige RBMs darin geschrieben habe. Der weitaus größte Teil der Rechenzeit wird für Matrixmultiplikationen aufgewendet, die in R tendenziell langsamer sind als in anderen Sprachen (möglicherweise um den Faktor 3 oder 5). Das erneute Kompilieren von R für Ihr eigenes System mit einer angepassten BLAS-Bibliothek (lineare Algebra) kann sehr hilfreich sein, ebenso wie das Übersetzen der langsamen Teile in C ++ mit Rcpp. Das Schreiben eines Ein-Hidden-Layer-RBM ist eigentlich schnell genug, sodass es wahrscheinlich Sinn macht, ihn in der Sprache zu codieren, in der Sie sich am wohlsten fühlen, bevor Sie versuchen, die Geschwindigkeit zu optimieren.
David J. Harris
@ David J. Harris Haben Sie eine Ihrer Implementierungen in R geteilt? Ich würde sie mir gerne ansehen.
Zach
1
@Zach Ich bin im Moment ziemlich beschäftigt, aber ich werde sehen, was ich in Zukunft gegen Open-Sourcing tun kann. Sie können mir auch eine E-Mail an die Adresse in meinem Profil senden, um eine Kopie meiner Daten zu erhalten, wenn es Ihnen nichts ausmacht, ein undokumentiertes / halbfertiges Projekt zu durchsuchen.
David J. Harris
8

In R können Sie Neuralnet und RSNNS (das eine Schnittstelle zum Stuttgarter Neural Network Simulator bereitstellt ) verwenden, um Standard-Multilayer- Neuralnetze anzupassen. Es gibt jedoch Unterschiede zu RBM.

Bezüglich der Implementierung von tiefen neuronalen Netzen in R denke ich, dass die einzige sinnvolle Strategie darin besteht, vorhandene FOSS-Implementierungen miteinander zu verbinden. Dies ist normalerweise eine viel bessere Lösung als nur die Neuimplementierung von Dingen auf eigene Faust (ich habe nie ganz verstanden, warum jeder das Rad neu erfinden muss). R bietet hierfür viele Funktionen, und Sie können das Datenhandling von R mit der Geschwindigkeit und den einsatzbereiten Aspekten vorhandener Lösungen nutzen. Beispielsweise könnte man MDP mit den Python / R-Schnittstellenfunktionen verbinden, siehe z . B. dieses Dokument .

Bearbeiten: Andrew Landgraf von Statistically Significant bietet einige R-Code für RBM .

Momo
quelle