Connect with us

Qu’est-ce qu’un Autoencodeur ?

IA 101

Qu’est-ce qu’un Autoencodeur ?

mm

Si vous avez lu des articles sur les techniques d’apprentissage non supervisé auparavant, vous avez peut-être rencontré le terme « autoencodeur ». Les autoencodeurs sont l’un des principaux moyens par lesquels les modèles d’apprentissage non supervisé sont développés. Mais qu’est-ce qu’un autoencodeur exactement ?

En bref, les autoencodeurs fonctionnent en prenant des données, en les compressant et en les codant, puis en reconstruisant les données à partir de la représentation codée. Le modèle est entraîné jusqu’à ce que la perte soit minimisée et que les données soient reproduites aussi fidèlement que possible. À travers ce processus, un autoencodeur peut apprendre les caractéristiques importantes des données. Même si c’est une définition rapide d’un autoencodeur, il serait bénéfique de jeter un coup d’œil plus approfondi sur les autoencodeurs et de mieux comprendre leur fonctionnement. Cet article tentera de démystifier les autoencodeurs, en expliquant l’architecture des autoencodeurs et leurs applications.

Qu’est-ce qu’un Autoencodeur ?

Les autoencodeurs sont des réseaux de neurones. Les réseaux de neurones sont composés de plusieurs couches, et l’aspect définissant d’un autoencodeur est que les couches d’entrée contiennent exactement autant d’informations que la couche de sortie. La raison pour laquelle la couche d’entrée et la couche de sortie ont le même nombre d’unités est qu’un autoencodeur vise à reproduire les données d’entrée. Il produit une copie des données après les avoir analysées et reconstruites de manière non supervisée.

Les données qui traversent un autoencodeur ne sont pas simplement mappées directement de l’entrée à la sortie, ce qui signifie que le réseau ne copie pas simplement les données d’entrée. Il y a trois composants dans un autoencodeur : une partie de codage (entrée) qui comprime les données, un composant qui gère les données compressées (ou goulet d’étranglement), et une partie de décodage (sortie). Lorsque des données sont introduites dans un autoencodeur, elles sont codées, puis compressées à une taille plus petite. Le réseau est ensuite entraîné sur les données codées/compressées et il produit une recréation de ces données.

Alors, pourquoi voudriez-vous entraîner un réseau à simplement reconstruire les données qui lui sont fournies ? La raison est que le réseau apprend l’« essence » ou les caractéristiques les plus importantes des données d’entrée. Une fois que vous avez entraîné le réseau, un modèle peut être créé qui peut synthétiser des données similaires, avec l’ajout ou la soustraction de certaines caractéristiques ciblées. Par exemple, vous pourriez entraîner un autoencodeur sur des images granuleuses, puis utiliser le modèle entraîné pour supprimer le grain/bruit de l’image.

Architecture de l’Autoencodeur

Examinons l’architecture de l’autoencodeur. Nous allons discuter de l’architecture principale de l’autoencodeur ici. Il existe des variations sur cette architecture générale que nous allons discuter dans la section ci-dessous.

Photo : Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Comme mentionné précédemment, un autoencodeur peut être divisé en trois composants différents : l’encodeur, un goulet d’étranglement et le décodeur.

La partie encodeur de l’autoencodeur est généralement un réseau feedforward, densément connecté. Le but des couches d’encodage est de prendre les données d’entrée et de les compresser dans une représentation de l’espace latent, générant une nouvelle représentation des données qui a une dimensionnalité réduite.

Les couches de code, ou le goulet d’étranglement, traitent la représentation compressée des données. Le code du goulet d’étranglement est soigneusement conçu pour déterminer les parties les plus pertinentes des données observées, ou pour le dire autrement, les caractéristiques des données qui sont les plus importantes pour la reconstruction des données. L’objectif ici est de déterminer quels aspects des données doivent être préservés et lesquels peuvent être supprimés. Le code du goulet d’étranglement doit équilibrer deux considérations différentes : la taille de la représentation (à quel point la représentation est compacte) et la pertinence des variables/caractéristiques. Le goulet d’étranglement effectue une activation élément par élément sur les poids et les biais du réseau. La couche du goulet d’étranglement est également parfois appelée représentation latente ou variables latentes.

La couche de décodage est responsable de la prise des données compressées et de leur conversion en une représentation ayant les mêmes dimensions que les données d’origine non modifiées. La conversion est effectuée avec la représentation de l’espace latent créée par l’encodeur.

L’architecture la plus basique d’un autoencodeur est une architecture feed-forward, avec une structure similaire à celle d’un perceptron à une couche utilisé dans les perceptrons multi-couches. Tout comme les réseaux de neurones feed-forward réguliers, l’auto-encodeur est entraîné à l’aide de la rétropropagation.

Attributs de l’Autoencodeur

Il existe différents types d’autoencodeurs, mais ils ont tous certaines propriétés qui les unissent.

Les autoencodeurs apprennent automatiquement. Ils n’ont pas besoin d’étiquettes, et s’ils reçoivent suffisamment de données, il est facile d’obtenir qu’un autoencodeur atteigne de hautes performances sur un type spécifique de données d’entrée.

Les autoencodeurs sont spécifiques aux données. Cela signifie qu’ils ne peuvent compresser que des données qui sont très similaires aux données sur lesquelles l’autoencodeur a déjà été entraîné. Les autoencodeurs sont également perdus, ce qui signifie que les sorties du modèle seront dégradées par rapport aux données d’entrée.

Lors de la conception d’un autoencodeur, les ingénieurs en apprentissage automatique doivent prêter attention à quatre hyperparamètres de modèle différents : la taille du code, le nombre de couches, les nœuds par couche et la fonction de perte.

La taille du code détermine le nombre de nœuds qui commencent la partie médiane du réseau, et moins de nœuds compressent les données davantage. Dans un autoencodeur profond, alors que le nombre de couches peut être n’importe quel nombre que l’ingénieur juge approprié, le nombre de nœuds dans une couche doit diminuer à mesure que l’encodeur progresse. En revanche, l’opposé est vrai dans le décodeur, ce qui signifie que le nombre de nœuds par couche doit augmenter à mesure que les couches de décodage approchent la dernière couche. Enfin, la fonction de perte d’un autoencodeur est généralement soit l’entropie croisée binaire, soit l’erreur quadratique moyenne. L’entropie croisée binaire est appropriée pour les instances où les valeurs d’entrée des données sont dans une plage de 0 à 1.

Types d’Autoencodeurs

Comme mentionné ci-dessus, des variations sur l’architecture classique de l’autoencodeur existent. Examinons les différentes architectures d’autoencodeurs.

Peu dense

Photo : Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Alors que les autoencodeurs ont généralement un goulet d’étranglement qui comprime les données par une réduction du nombre de nœuds, les autoencodeurs peu denses sont une alternative à ce format d’exploitation typique. Dans un réseau peu dense, les couches cachées maintiennent la même taille que les couches d’encodeur et de décodeur. Au lieu de cela, les activations au sein d’une couche donnée sont pénalisées, de sorte que la fonction de perte capture mieux les caractéristiques statistiques des données d’entrée. Pour le dire autrement, même si les couches cachées d’un autoencodeur peu dense ont plus d’unités qu’un autoencodeur traditionnel, seuls un certain pourcentage d’entre eux sont actifs à un moment donné. Les fonctions d’activation les plus impactantes sont préservées et les autres sont ignorées, et cette contrainte aide le réseau à déterminer uniquement les caractéristiques les plus saillantes des données d’entrée.

Contractif

Les autoencodeurs contractifs sont conçus pour être résistants aux petites variations dans les données, en maintenant une représentation cohérente des données. Cela est réalisé en appliquant une pénalité à la fonction de perte. Cette technique de régularisation est basée sur la norme de Frobenius de la matrice jacobienne pour les activations de l’encodeur d’entrée. L’effet de cette technique de régularisation est que le modèle est forcé de construire un codage où les entrées similaires auront des codages similaires.

Convolutionnel

Les autoencodeurs convolutionnels codent les données d’entrée en les divisant en sous-sections, puis en les convertissant en signaux simples qui sont additionnés pour créer une nouvelle représentation des données. Semblable aux réseaux de neurones convolutionnels, un autoencodeur convolutionnel se spécialise dans l’apprentissage de données d’images, et il utilise un filtre qui est déplacé sur toute la section d’image section par section. Les codages générés par la couche d’encodage peuvent être utilisés pour reconstruire l’image, la refléter ou modifier sa géométrie. Une fois que les filtres ont été appris par le réseau, ils peuvent être utilisés sur n’importe quelle entrée suffisamment similaire pour extraire les caractéristiques de l’image.

Débruitage

Photo : MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Les autoencodeurs de débruitage introduisent du bruit dans le codage, aboutissant à un codage qui est une version corrompue des données d’entrée d’origine. Cette version corrompue des données est utilisée pour entraîner le modèle, mais la fonction de perte compare les valeurs de sortie avec les données d’entrée d’origine et non avec les données d’entrée corrompues. L’objectif est que le réseau sera capable de reproduire la version d’origine non corrompue de l’image. En comparant les données corrompues avec les données d’origine, le réseau apprend quelles caractéristiques des données sont les plus importantes et lesquelles sont non importantes/corruptions. En d’autres termes, pour que le modèle puisse débruir les images corrompues, il doit avoir extrait les caractéristiques importantes des données d’image.

Variationnel

Les autoencodeurs variationnels fonctionnent en faisant des hypothèses sur la manière dont les variables latentes des données sont distribuées. Un autoencodeur variationnel produit une distribution de probabilité pour les différentes caractéristiques des images d’entraînement/les attributs latents. Lors de l’entraînement, l’encodeur crée des distributions latentes pour les différentes caractéristiques des images d’entrée.

 

Parce que le modèle apprend les caractéristiques ou les images comme des distributions gaussiennes au lieu de valeurs discrètes, il est capable d’être utilisé pour générer de nouvelles images. La distribution gaussienne est échantillonnée pour créer un vecteur, qui est introduit dans le réseau de décodage, qui rend une image basée sur cet échantillon de vecteur. Essentiellement, le modèle apprend les caractéristiques communes des images d’entraînement et leur attribue une certaine probabilité qu’elles se produisent. La distribution de probabilité peut ensuite être utilisée pour rétro-ingénier une image, en générant de nouvelles images qui ressemblent aux images d’entraînement d’origine.

Lors de l’entraînement du réseau, les données codées sont analysées et le modèle de reconnaissance produit deux vecteurs, en tirant la moyenne et l’écart-type des images. Une distribution est créée sur la base de ces valeurs. Cela est fait pour les différents états latents. Le décodeur prend ensuite des échantillons aléatoires de la distribution correspondante et les utilise pour reconstruire les entrées initiales du réseau.

Applications de l’Autoencodeur

Les autoencodeurs peuvent être utilisés pour une grande variété d’applications, mais ils sont généralement utilisés pour des tâches comme la réduction de dimensionnalité, le débruitage de données, l’extraction de caractéristiques, la génération d’images, la prédiction de séquence à séquence et les systèmes de recommandation.

Le débruitage de données est l’utilisation d’autoencodeurs pour supprimer le grain/bruit des images. De même, les autoencodeurs peuvent être utilisés pour réparer d’autres types de dommages d’images, comme des images floues ou des images manquantes. La réduction de dimensionnalité peut aider les réseaux de neurones à haute capacité à apprendre des caractéristiques utiles des images, ce qui signifie que les autoencodeurs peuvent être utilisés pour augmenter l’entraînement d’autres types de réseaux de neurones. Cela est également vrai pour l’utilisation d’autoencodeurs pour l’extraction de caractéristiques, car les autoencodeurs peuvent être utilisés pour identifier les caractéristiques d’autres ensembles de données d’entraînement pour entraîner d’autres modèles.

En termes de génération d’images, les autoencodeurs peuvent être utilisés pour générer de fausses images humaines ou des personnages animés, ce qui a des applications dans la conception de systèmes de reconnaissance faciale ou l’automatisation de certains aspects de l’animation.

Les modèles de prédiction de séquence à séquence peuvent être utilisés pour déterminer la structure temporelle des données, ce qui signifie qu’un autoencodeur peut être utilisé pour générer le prochain événement dans une séquence. Pour cette raison, un autoencodeur pourrait être utilisé pour générer des vidéos. Enfin, les autoencodeurs profonds peuvent être utilisés pour créer des systèmes de recommandation en détectant des modèles liés à l’intérêt de l’utilisateur, avec l’encodeur analysant les données d’engagement de l’utilisateur et le décodeur créant des recommandations qui correspondent aux modèles établis.

Blogueur et programmeur avec des spécialités en Machine Learning et Deep Learning sujets. Daniel espère aider les autres à utiliser le pouvoir de l'IA pour le bien social.