Machines Boltzmann restreintes vs réseaux de neurones multicouches

22

Je voulais expérimenter avec un réseau de neurones pour un problème de classification auquel je suis confronté. Je suis tombé sur des articles qui parlent de RBM. Mais d'après ce que je peux comprendre, ils ne sont pas différents d'avoir un réseau neuronal multicouche. Est-ce exact?

De plus, je travaille avec R et je ne vois aucun paquet en conserve pour les RBM. J'ai rencontré de la littérature qui parle de réseaux d'apprentissage profond qui sont essentiellement des RBM empilés mais je ne sais pas si cela vaut la peine de les mettre en œuvre dans R. Est-ce que quelqu'un aurait des pointeurs? Merci

brocoli
la source
3
Ils sont différents des réseaux multicouches formés avec backprop. Voici quelques ressources pour toutes sortes de réseaux neuronaux: stats.stackexchange.com/a/36257/13669
Stumpy Joe Pete

Réponses:

21

Tout d'abord, les RBM sont certainement différents des réseaux neuronaux normaux et, lorsqu'ils sont utilisés correctement, ils obtiennent de bien meilleures performances. En outre, la formation de quelques couches d'un RBM, puis l'utilisation des poids trouvés comme point de départ pour un NN multicouche donne souvent de meilleurs résultats que d'utiliser simplement un NN multicouche.

Le meilleur pointeur auquel je peux penser est ce cours sur Coursera, dispensé par Geoffrey Hinton, qui est l'un des responsables des RBM:

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

les vidéos sur les RBM et les encodeurs automatiques de débruitage sont une ressource d'apprentissage précieuse pour quiconque s'intéresse au sujet.

Quant à l'implémentation dans R, je n'en connais pas non plus, mais si vous voulez l'implémenter, mieux vaut ne pas utiliser du R pur (à moins que vos données ne soient pas trop grandes). La formation d'un RBM prend assez de temps, et si vous utilisez du R pur au lieu de R avec C, il peut se développer de manière significative.

sjm.majewski
la source
1
Je peux parler des problèmes de performances de R, car j'y ai écrit des RBM. La grande majorité du temps de calcul est consacrée aux multiplications matricielles, qui ont tendance à être plus lentes dans R que dans d'autres langues (peut-être par un facteur de 3 ou 5). Recompiler R pour votre propre système avec une BLAS personnalisée (bibliothèque d'algèbre linéaire) peut aider beaucoup, tout comme la traduction des parties lentes en C ++ avec Rcpp. L'écriture d'un RBM à couche cachée est en fait assez rapide pour qu'il soit probablement logique de le coder dans la langue dans laquelle vous êtes le plus à l'aise avant d'essayer d'optimiser la vitesse.
David J. Harris
@David J. Harris Avez-vous partagé l'une de vos implémentations dans R? J'adorerais les regarder.
Zach
1
@Zach Je suis assez occupé en ce moment, mais je verrai ce que je peux faire pour l'open source à l'avenir. Vous pouvez également m'envoyer un e-mail à l'adresse de mon profil pour obtenir une copie de ce que j'ai si cela ne vous dérange pas de trier un projet non documenté / à moitié terminé.
David J. Harris
8

Dans R, vous pouvez utiliser neuralnet et RSNNS (qui fournit une interface au simulateur de réseau neuronal de Stuttgart ) pour s'adapter aux réseaux neuronaux multicouches standard, mais il existe des différences avec RBM.

En ce qui concerne la mise en œuvre de réseaux neuronaux profonds dans R, je pense que la seule stratégie valable serait d'interfacer les implémentations FOSS existantes, ce qui est généralement une bien meilleure solution que de simplement réimplémenter les choses par vous-même (je n'ai jamais bien compris pourquoi tout le monde devait réinventer la roue). R offre de nombreuses fonctionnalités pour ce faire et vous pouvez tirer parti de la gestion des données de R avec la rapidité et les aspects prêts à l'emploi des solutions existantes. Par exemple, on pourrait interfacer MDP avec les capacités d'interfaçage Python / R, voir par exemple ce document .

Edit: Andrew Landgraf de Statistically Significant fournit un code R pour RBM .

Momo
la source