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 source
Réponses:
Examen des machines Boltzmann restreintes
Utilisation des RBM pour la classification
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.
la source
@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.
la source
Vous pouvez former des RBM empilés sur vos images, puis entraîner la RBM finale sur une concaténation de la sortie de la pile RBM et des étiquettes. Ensuite, vous pouvez réellement utiliser le RBM pour la classification. Cet article de Hinton ++ explique cette approche Un algorithme d'apprentissage rapide pour les réseaux de croyances profondes , vous pouvez également consulter cette démo
la source