Qu'est-ce qu'un auto-encodeur?
Je suis étudiant et j'étudie l'apprentissage automatique. Je me concentre sur les modèles génératifs profonds , et en particulier sur les auto - encodeurs et les auto - encodeurs variationnels (VAE) .
J'essaie de comprendre le concept, mais j'ai des problèmes.
Jusqu'à présent, j'ai compris qu'un auto-encodeur prend une entrée, par exemple une image, et veut réduire cette image dans un espace latent , qui devrait contenir les caractéristiques sous - jacentes du jeu de données, avec une opération d' encodage , puis, avec une opération de décodage , il reconstruit l'image qui a perdu certaines informations à cause de la partie encodage.
Après cela, avec une fonction de perte, il reconstruit l'espace latent et récupère ainsi les caractéristiques latentes.
à propos de la VAE, il utilise une approche probabiliste, nous devons donc apprendre la moyenne et la covariance d'un gaussien.
Jusqu'à présent, c'est ce que j'ai compris.
Ce que je ne sais vraiment pas, c'est ce que nous essayons d'apprendre avec les auto-encodeurs et VAE?
J'ai vu des exemples où une image passe d'un non souriant à un visage souriant, ou d'une image en noir et blanc à une image colorée.
Mais je ne comprends pas le concept principal, à savoir: que fait un auto-encodeur?
J'ajoute ici quelques sources d'où j'ai étudié pour que ceux qui en ont besoin puissent les voir:
- https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
- https://www.youtube.com/watch?v=yFBFl1cLYx8
- https://www.youtube.com/watch?v=9zKuYvjFFS8
Réponses
que fait un auto-encodeur?
Le codeur automatique le plus simple prend une image de grande dimension (par exemple, 100K pixels) à une représentation de faible dimension (par exemple, un vecteur de longueur 10) et n'utilise ensuite que ces 10 caractéristiques pour essayer de reconstruire l'image d'origine. Vous pouvez imaginer une analogie avec les humains: je regarde quelqu'un, je le décris ("grand, brun, ...") puis après avoir oublié à quoi il ressemble, j'essaye de le dessiner en utilisant uniquement mes notes.
qu'essayons-nous d'apprendre?
En d'autres termes, pourquoi s'embêter? Quelques raisons:
- réduction de la dimensionnalité: 10 fonctionnalités sont beaucoup plus pratiques que 100K pixels. Par exemple, je peux effectuer une classification en regroupant dans l'espace à 10 dimensions (alors que le clustering dans l'espace à 100K dimensions serait insoluble).
- signification sémantique: si tout se passe bien, chacune des 10 fonctionnalités aura une "explication" évidente - par exemple, modifier une valeur rendra le sujet plus ancien (bien que ce ne soit normalement pas si simple). Contrairement aux valeurs de pixels, qui sont affectées par la translation, la rotation, etc.
- Reconnaissance d'exception: si j'entraîne mon auto-encodeur sur des chiens, il devrait normalement faire un bon travail d'encodage et de décodage des images de chiens. Mais si je mets un chat dedans, il fera probablement un travail terrible - ce que je peux dire parce que la sortie ne ressemble en rien à l'entrée. Ainsi, rechercher des endroits où un encodeur automatique fait un mauvais travail est un moyen courant de rechercher des anomalies.
J'ai vu des exemples où une image passe d'un visage non souriant à un visage souriant, ou d'une image en noir et blanc à une image colorée.
Il existe de nombreux types de codeurs automatiques. Ce que j'ai décrit ci-dessus est le plus simple. Un autre type courant est un auto-encodeur «débruitant» - au lieu de reconstruire l'image d'origine, le but est de construire une image qui est liée à l'image d'origine, mais différente.
L'exemple classique de ceci est le débruitage (d'où le nom): vous pouvez prendre une image propre, ajouter un tas de bruit, l'exécuter via un auto-encodeur, puis récompenser l'auto-encodeur pour avoir produit l' image propre . Ainsi, l'entrée (image bruyante) est en fait différente de la sortie souhaitée (image nette). Les exemples que vous donnez sont similaires.
Le défi dans la conception de ces types d'auto-encodeurs est normalement la perte - vous avez besoin d'un mécanisme pour dire à l'auto-encodeur s'il a fait la bonne chose ou non.
à propos de la VAE, il utilise une approche probabiliste, nous devons donc apprendre la moyenne et la covariance d'un gaussien.
Un VAE est un troisième type de codeur automatique. C'est un peu spécial parce que c'est bien fondé mathématiquement; aucune métrique ad hoc nécessaire. Le calcul est trop compliqué à parcourir ici, mais les idées clés sont les suivantes:
- Nous voulons que l'espace latent soit continu. Plutôt que d'attribuer chaque classe à son propre coin de l'espace latent, nous voulons que l'espace latent ait une forme continue bien définie (c'est-à-dire une gaussienne). C'est bien car cela force l'espace latent à avoir un sens sémantique.
- La cartographie entre les images et les espaces latents doit être probabiliste plutôt que déterministe. En effet, le même sujet peut produire plusieurs images.
Donc, le flux de travail est le suivant:
- Vous commencez avec votre image comme avant
- Comme précédemment, votre encodeur détermine un vecteur (disons, longueur 200).
- Mais ce vecteur n'est pas un espace latent. Au lieu de cela, vous utilisez ce vecteur comme paramètres pour définir un espace latent. Par exemple, peut-être que vous choisissez votre espace latent comme un gaussien à 100 dimensions. Une gaussienne à 100 dimensions nécessitera une moyenne et un écart type dans chaque dimension - c'est pour cela que vous utilisez votre vecteur de longueur 200.
- Vous avez maintenant une distribution de probabilité. Vous échantillonnez un point de cette distribution. C'est la représentation de votre image dans l'espace latent.
- Comme précédemment, votre décodeur transformera ce vecteur en une nouvelle "sortie" (disons, un vecteur de longueur 200K).
- Mais cette "sortie" n'est pas votre image de sortie. Au lieu de cela, vous utilisez ces paramètres 200K pour définir une gaussienne de 100K dimensions. Ensuite, vous échantillonnez un point de cette distribution - c'est votre image de sortie.
Bien sûr, il n'y a rien de spécial à propos d'un gaussien, vous pouvez tout aussi bien utiliser une autre distribution paramétrique. Dans la pratique, les gens utilisent généralement des gaussiens.
Cela donne parfois de meilleurs résultats que les autres encodeurs automatiques. De plus, vous obtenez parfois des résultats intéressants lorsque vous regardez entre les classes dans votre espace latent. La distance d'une image dans l'espace latent du centre du cluster est parfois liée à l'incertitude.
De plus, il y a la belle propriété que ces gaussiens de grande dimension sont des distributions de probabilité au sens mathématique rigoureux. Ils approchent la probabilité qu'une image donnée appartienne à une classe donnée. On pense donc que les VAE seront capables de surmonter le «hand waving» de l'apprentissage profond et de tout remettre sur une base probabiliste bayésienne solide. Mais bien sûr, ce n'est qu'une approximation, et l'approximation implique beaucoup de réseaux de neurones profonds, il y a donc encore beaucoup de main agitant pour le moment.
D'ailleurs, j'aime utiliser cette question lors des entretiens - un nombre étonnant de personnes prétendent avoir de l'expérience avec les VAE mais ne réalisent pas en fait que les VAE sont différentes des EI «classiques».
Une manière simple de penser aux auto-encodeurs est la suivante: dans quelle mesure une pièce précise d'infrmaton peut-elle être reconstituée à partir de sa représentation réduite ou autre. Si vous êtes arrivé jusqu'ici, cela signifie que vous avez reconstruit avec succès la phrase précédente en utilisant seulement 92 de ses 103 caractères d'origine.
Plus spécifiquement, les auto-encodeurs sont des réseaux neuronaux qui sont formés pour apprendre des codages de données efficaces de manière non supervisée. Le but est d'apprendre une représentation d'un ensemble de données donné, en apprenant au réseau à ignorer les signaux «non importants» comme le bruit. Les AE sont généralement pris en compte pour la réduction de la dimensionnalité.
Pratiquement, un AE
- compresse initialement les données d'entrée dans une représentation d'espace latent
- reconstruit la sortie de cette représentation de l'espace latent
- calcule la différence entre l'entrée et la sortie qui est définie comme une perte de reconstruction.
Dans cette boucle d'apprentissage, l'AE minimise cette perte de reconstruction de sorte que la sortie soit aussi similaire que possible à l'entrée.
Une approche que j'ai trouvée utile lors de l'examen des auto-encodeurs est le résultat suivant: alors que des méthodes telles que PCA identifient des axes de variation maximale dans l'espace d'entrée, l'introduction de fonctions d'activation non linéaires dans l'auto-encodeur permet d'identifier les axes de maximum variation intégrée dans une transformée (potentiellement) non linéaire de l'espace.
À titre d'exemple, considérons les données
Observez qu'en l'absence des fonctions d'activation non linéaires, un auto-encodeur devient essentiellement équivalent à PCA - jusqu'à un changement de base. Un exercice utile pourrait consister à examiner pourquoi.