R bibliothèques pour l'apprentissage en profondeur

56

Je me demandais s'il existait de bonnes bibliothèques R pour les réseaux de neurones d'apprentissage en profondeur? Je sais qu'il ya la nnet, neuralnetet RSNNS, mais aucun d' entre eux semblent mettre en œuvre des méthodes d'apprentissage en profondeur.

Je suis particulièrement intéressé par les activités non supervisées suivies par un apprentissage supervisé et l' utilisation du décrochage pour éviter la co-adaptation .

/ edit: Après quelques années, j’ai trouvé le paquet h20 deep learning très bien conçu et facile à installer. J'aime aussi le paquetage mxnet , qui est (un peu) plus difficile à installer, mais prend en charge des fonctionnalités telles que les covnets, fonctionne sur des GPU et est très rapide.

Zach
la source
1
Connexes: stats.stackexchange.com/questions/40598/… Ces méthodes ne sont, à ma connaissance, pas disponibles (publiquement) dans R.
Momo
@Momo: Merci pour le lien. Existe-t-il un code public C, C ++ ou fortran qui puisse être appelé depuis R?
Zach
4
Consultez la bibliothèque CUV ou Eblearn (plus ici deeplearning.net/software_links ) Les bibliothèques Python pourraient être une bonne alternative à R.
Momo
voir implémenter par R ici .
Patric

Réponses:

19

OpenSource h2o.deepLearning () est un paquet pour le développement de ressources en R de h2o.ai, voici une description http://www.r-bloggers.com/things-to-try-after-user-part-1-deep-learning- avec-h2o /

Et le code: https://gist.github.com/woobe/3e728e02f6cc03ab86d8#file-link_data-r

######## *Convert Breast Cancer data into H2O*
dat <- BreastCancer[, -1]  # remove the ID column
dat_h2o <- as.h2o(localH2O, dat, key = 'dat')

######## *Import MNIST CSV as H2O*
dat_h2o <- h2o.importFile(localH2O, path = ".../mnist_train.csv")

######## *Using the DNN model for predictions*
h2o_yhat_test <- h2o.predict(model, test_h2o)

######## *Converting H2O format into data frame*
df_yhat_test <- as.data.frame(h2o_yhat_test)

######## Start a local cluster with 2GB RAM
library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE, 
                    Xmx = '2g') 
########Execute deeplearning

model <- h2o.deeplearning( x = 2:785,  # column numbers for predictors
               y = 1,   # column number for label
               data = train_h2o, # data in H2O format
               activation = "TanhWithDropout", # or 'Tanh'
               input_dropout_ratio = 0.2, # % of inputs dropout
               hidden_dropout_ratios = c(0.5,0.5,0.5), # % for nodes dropout
               balance_classes = TRUE, 
               hidden = c(50,50,50), # three layers of 50 nodes
               epochs = 100) # max. no. of epochs
SriSatish Ambati
la source
19

Il y a un paquet appelé "darch"

http://cran.um.ac.ir/web/packages/darch/index.html

Citation de CRAN:

darch: Package pour les architectures profondes et les machines restreintes-Bolzmann

Le paquet darch est construit sur la base du code de GE Hinton et RR Salakhutdinov (disponible dans le code Matlab pour les réseaux de croyances profondes: dernière visite: 01.08.2013). Ce package permet de générer des réseaux de neurones à plusieurs couches (architectures profondes) et de les former à la méthode introduite par les publications "Un algorithme d'apprentissage rapide pour les réseaux de croyances profondes" (GE Hinton, S. Osindero, YW Teh) et "Réduire la dimensionnalité des données avec des réseaux de neurones "(GE Hinton, RR Salakhutdinov). Cette méthode comprend une formation préalable à la publication de la méthode de divergence par contraste de GE Hinton (2002) et une mise au point avec des algorithmes d’entraînement connus tels que la rétro-propagation ou le gradient conjugué.

Puissance
la source
Il vient d'être archivé! :-(
puissance
3
Darch est de retour sur CRAN!
Zach
Avez-vous trouvé des exemples de formation d'un réseau de conviction profonde avec ce progiciel, puis de l'utiliser pour prédire de nouvelles données? Je trouve l'interface qu'elle utilise très peu intuitive.
Zach
Non je n'ai pas. N'y a-t-il pas des exemples? Sinon, vous pouvez les poster sur ce site et "répondre à votre propre question" et marquer plus de points de réputation.
puissance
1
Je les posterai si j'en trouve. Jusqu'à présent, les docs ont quelques exemples d'adaptation de réseaux, mais aucun exemple de prédiction. Et certains des exemples appropriés ont des bugs.
Zach
13

Il y a un autre nouveau paquet pour les réseaux profonds dans R: deepnet

Je n'ai pas encore essayé de l'utiliser, mais il a déjà été intégré au paquet caret .

Zach
la source
12

Pour répondre à ma propre question, j'ai écrit un petit paquetage dans R pour RBM: https://github.com/zachmayer/rbm

Ce paquet est encore en plein développement, et je connais très peu de RBM, alors je serais ravi de recevoir vos commentaires (et demandes de pull!). Vous pouvez installer le paquet en utilisant devtools :

devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm

Le code est similaire à l'implémentation d'Andrew Landgraf dans R et à l'implémentation d'Edwin Chen en python , mais j'ai écrit que la fonction était similaire à la fonction pca dans la base R et incluait une fonctionnalité d'empilage. Je pense que c'est un peu plus convivial que le paquet darch , que je ne saurais jamais utiliser (même avant sa suppression de CRAN).

Si le paquet gputools est installé, vous pouvez utiliser votre GPU pour les opérations de matrice avec la fonction rbm_gpu. Cela accélère beaucoup les choses! En outre, la majeure partie du travail dans un RBM se fait avec des opérations matricielles. Il ne suffit donc pas d’installer un bon BLAS, tel que openBLAS, pour que les choses s’éclatent .

Voici ce qui se passe lorsque vous exécutez le code sur l'exemple de jeu de données d'Edwin:

set.seed(10)
print('Data from: https://github.com/echen/restricted-boltzmann-machines')
Alice <- c('Harry_Potter' = 1, Avatar = 1, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #Big SF/fantasy fan.
Bob <- c('Harry_Potter' = 1, Avatar = 0, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #SF/fantasy fan, but doesn't like Avatar.
Carol <- c('Harry_Potter' = 1, Avatar = 1, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #Big SF/fantasy fan.
David <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 1, Glitter = 0) #Big Oscar winners fan.
Eric <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 0, Glitter = 0) #Oscar winners fan, except for Titanic.
Fred <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 1, Glitter = 0) #Big Oscar winners fan.
dat <- rbind(Alice, Bob, Carol, David, Eric, Fred)

#Fit a PCA model and an RBM model
PCA <- prcomp(dat, retx=TRUE)
RBM <- rbm_gpu(dat, retx=TRUE, num_hidden=2)

#Examine the 2 models
round(PCA$rotation, 2) #PCA weights
    round(RBM$rotation, 2) #RBM weights
Zach
la source
1
Si vous utilisez PCA, essayez à propack.svd()partir du svdpackage.
puissance
@power: J'utilise PCA uniquement à titre de comparaison, mais merci pour le conseil. irlba est également un excellent package pour faire du DVD.
Zach
Votre nouveau package propose-t-il une formation "d'abandon"?
DavideChicco.it
@ DavideChicco.it Oui, jetez un coup d'œil au fichier d'aide pour ?rbm. Notez que les RBM ne sont pas supervisés.
Zach
Zach cela incorpore-t-il des réseaux de neurones récurrents? C’est un domaine important pour les séries chronologiques pour lequel je souhaitais passer à Python.
Modèle de Markov caché
11

Vous pouvez essayer le module Deep Learning de H2O, il est distribué et propose de nombreuses techniques avancées telles que la régularisation des abandons et le taux d’apprentissage adaptatif.

Diapositives: http://www.slideshare.net/0xdata/h2o-deeplearning-nextml Vidéo: https://www.youtube.com/watch?v=gAKbAQu900w&feature=youtu.be

Tutoriels: http://learn.h2o.ai Données et scripts: http://data.h2o.ai

Documentation: http://docs.h2o.ai GitBooks: http://gitbook.io/@h2o

Arno
la source
Si vous (l'éditeur) êtes la même personne que le répondeur d'origine, veuillez fusionner vos comptes. Ensuite, vous pourrez éditer vos propres messages. Vous pouvez en savoir plus sur la fusion de vos comptes dans notre centre d'aide .
Gay - Rétablir Monica
6

Pour ajouter une autre réponse:

mxnet est incroyable, et j'adore ça. Il est un peu difficile à installer, mais il prend en charge les GPU et plusieurs processeurs. Si vous souhaitez approfondir votre connaissance de R (en particulier sur les images), je vous recommande vivement de commencer par mxnet.

Zach
la source
+1, oui mxnet est totalement implémenté par C ++ / CUDA, donc c'est très efficace!
Patric
5

Bien que je n'ai pas rencontré de bibliothèque d'apprentissage en profondeur dédiée à R, j'ai eu une discussion similaire sur les r-blogueurs. La discussion est centrée sur l'utilisation de RBM (Restricted Boltzman Machines). Jetez un coup d'œil au lien suivant--

http://www.r-bloggers.com/restricted-boltzmann-machines-in-r/ (republié à partir de 'alandgraf.blogspot.com')

L’auteur encapsule bien un algorithme auto-implémenté dans R. Il faut dire que je n’ai pas encore vérifié la validité du code, mais au moins un éclaircissement en profondeur commence à apparaître dans R.

J'espère que ça aide.

Ardenne
la source
J'ai aussi vu ce code - merci d'avoir créé un lien. C'est bien de voir que les RBM commencent à apparaître dans R, mais j'ai l'impression que R a encore plusieurs années de retard sur le python en termes d'apprentissage en profondeur. J'aimerais voir des bibliothèques complètes pour les réseaux de neurones modernes!
Zach
Je vous entends là Zach. Je suis impatient de découvrir le cours Neural Net de Hinton sur Coursera. L'attrait de Theano me pousse à nouveau dans Python.
Ardenne
Exactement. Theano est très séduisant!
Zach
Il semble que le paquetage gputools implémente certaines des opérations de matrice gpu trouvées dans theaono: cran.r-project.org/web/packages/gputools/index.html
Zach
@Zach vous n'avez presque pas besoin gputoolset envisagez d'utiliser l'astuce de précharge sur Linux pour accélérer GEMM, ici .
Patric