Comment utiliser RBM pour la classification?


12

En ce moment, je joue avec des machines Boltzmann restreintes et comme j'y suis, j'aimerais essayer de classer les chiffres manuscrits avec.

Le modèle que j'ai créé est maintenant un modèle génératif assez sophistiqué mais je ne sais pas comment aller plus loin.

Dans cet article, l'auteur dit qu'après avoir créé un bon modèle génératif, on " forme ensuite un classificateur discriminant (c'est-à-dire un classificateur linéaire, une machine à vecteur de support) au-dessus de la RBM en utilisant les échantillons étiquetés " et déclare en outre " puisque vous propagez le des vecteurs de données vers les unités cachées du modèle RBM pour obtenir des vecteurs d'unité cachés ou une représentation de niveau supérieur des données ". Le problème est que je ne suis pas sûr d'avoir bien compris.

Est-ce à dire que tout ce que j'ai à faire est de propager l'entrée aux unités cachées et là j'ai ma fonction RBM pour la classification?

Quelqu'un peut-il m'expliquer ce processus?


La machine Boltzmann restreinte est l'un des premiers composants utilisés pour l'apprentissage en profondeur. En fait, le premier travail important dans DNN a été fait par Hinton est le réseau de croyances profondes était basé sur RBM Veuillez rechercher ce document (réseau de croyances profondes, 2007, pour Hinton) pour plus d'informations. Sur son site Web, vous pouvez trouver des ressources très importantes ainsi qu'une expérience de démonstration cs.toronto.edu/~hinton/digits.html
Bashar Haddad

@hbaderts J'ai commencé à jouer avec RBM. La réponse acceptée était facile à lire. Je voulais demander des éclaircissements, les couches cachées RBM sont aléatoires après échantillonnage à partir de la distribution binaire. Pour la classification, les probabilités d'unité cachée sont-elles utilisées ou les unités cachées échantillonnées à partir d'une distribution binaire (1 et 0) sont-elles transmises au classificateur?
M3tho5

Réponses:


15

Examen des machines Boltzmann restreintes

v

p(vh)=i=0Vp(vih),
p(vih)=σ(ai+j=0Hwjihj)
σaiiwjihjvip(vh)hv

Utilisation des RBM pour la classification

h

Ce vecteur caché n'est qu'une version transformée des données d'entrée - cela ne peut rien classer par lui-même. Pour effectuer une classification, vous devez former n'importe quel classificateur (classificateur linéaire, SVM, réseau neuronal à action directe ou autre) avec le vecteur caché au lieu des données d'apprentissage "brutes" en entrée.

Si vous construisez un réseau de croyances profondes (DBN) - qui a été utilisé pour pré-former des réseaux de neurones à rétroaction profonde d'une manière non supervisée - vous prendriez ce vecteur caché et l'utiliseriez comme entrée dans un nouveau RBM, que vous empilez en plus. De cette façon, vous pouvez former le réseau couche par couche jusqu'à atteindre la taille souhaitée, sans avoir besoin de données étiquetées. Enfin, vous ajouteriez par exemple une couche softmax en haut, et entraîneriez l'ensemble du réseau avec une rétropropagation sur votre tâche de classification.


Merci pour l'édition @ Seanny123, cela rend la lecture beaucoup plus facile.
hbaderts

5

@hbaderts a parfaitement décrit l'ensemble du flux de travail. Cependant, cela peut ne pas avoir de sens si vous êtes complètement nouveau à cette idée. Par conséquent, je vais l'expliquer à la manière du profane (par conséquent, je vais omettre les détails):

Considérez les réseaux profonds comme une fonction pour transformer vos données. Exemple de transformations: normalisation, enregistrement de données, etc. Les réseaux profonds que vous formez comportent plusieurs couches. Chacune de ces couches est entraînée à l'aide d'une sorte d'algorithme d'apprentissage. Pour la première couche, vous passez les données d'origine comme entrée et essayez d'obtenir une fonction qui vous rendra ces "mêmes données d'origine" comme sortie. Cependant, vous n'obtenez pas la sortie parfaite. Par conséquent, vous obtenez une version transformée de votre entrée en tant que sortie de la première couche.

Maintenant, pour la deuxième couche, vous prenez ces "données transformées" et les passez en entrée et répétez tout le processus d'apprentissage. Vous continuez à le faire pour toutes les couches de votre réseau profond.

À la dernière couche, vous obtenez une "version transformée" de vos données d'entrée d'origine. Cela peut être considéré comme une abstraction de niveau supérieur de vos données d'entrée d'origine. Notez que vous n'avez pas encore utilisé les étiquettes / sorties dans votre réseau profond. Par conséquent, tout jusqu'à ce point est un apprentissage non supervisé. C'est ce qu'on appelle une pré-formation par couche.

Maintenant, vous voulez former un modèle de classifieur / régression et c'est un problème d'apprentissage supervisé. La façon dont vous atteignez cet objectif est de prendre la "version finale transformée" de votre entrée d'origine de la dernière couche de votre réseau profond et de les utiliser comme entrée pour n'importe quel classificateur (par exemple, classificateur knn / classificateur softmax / régression logistique, etc.). C'est ce qu'on appelle l'empilement.

Lorsque vous formez ce classificateur / apprenant de dernière étape, vous propagez tout votre apprentissage dans le réseau complet. Cela garantit que vous êtes en mesure d'apprendre des étiquettes / sorties et de modifier les paramètres par couche appris en conséquence.

Donc, une fois que vous avez formé votre modèle génératif, prenez la sortie de votre modèle génératif et utilisez-la comme entrée pour un classificateur / apprenant. Laissez l'erreur circuler à travers le réseau tout au long de l'apprentissage afin de pouvoir modifier le paramètre par couche appris lors des étapes précédentes.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.