Auto-encodeur

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Structure schématique d'un auto-encodeur avec 3 couches cachées entièrement connectées.

Un auto-encodeur, ou auto-associateur [1],[2]:19 est un réseau de neurones artificiels utilisé pour l'apprentissage non supervisé de caractéristiques discriminantes [3],[4]. L'objectif d'un auto-encodeur est d'apprendre une représentation (encodage) d'un ensemble de données, généralement dans le but de réduire la dimension de cet ensemble. Récemment, le concept d'auto-encodeur est devenu plus largement utilisé pour l'apprentissage de modèles génératifs [5],[6].

Architecture[modifier | modifier le code]

La forme la plus simple d'un auto-encodeur est un réseau de neurones non récurrents qui se propage vers l'avant, très semblable au perceptron multicouches - ayant une couche d'entrée, une couche de sortie ainsi qu'une ou plusieurs couches cachées les reliant -, mais avec toutefois une couche de sortie possédant le même nombre de nœuds que la couche d'entrée, son objectif étant de reconstruire ses entrées (plutôt que de prédire une valeur cible étant donné les entrées ). Par conséquent, un auto-encodeur est un modèle d'apprentissage non supervisé.

Un auto-encodeur se compose toujours de deux parties, l'encodeur et le décodeur, qui peuvent être définies comme des transitions et , telles que :

Dans le cas où il n'y a qu'une seule couche cachée, l'étape d'encodage prend l'entrée et l'associe à  :

est généralement appelé code, variables latentes ou représentation latente. est une fonction d'activation, e.g., sigmoïde, ReLU, une matrice de poids et un vecteur de biais.

Ensuite, l'étape de décodage associe à la reconstruction de forme identique à  :

où les du décodeur peuvent différer ou non des de l'encodeur, selon la conception de l'auto-encodeur.

Un auto-encodeur est aussi entrainé pour minimiser l'erreur de reconstruction, e.g., erreur quadratique :

est généralement la moyenne d'un ensemble de données d'apprentissage.

Si l'espace caractéristique possède une dimension inférieure à celui de l'espace d'entrée , alors le vecteur caractéristique peut être considéré comme une représentation compressée de . Si les couches cachées possèdent une taille plus grandes que celle de la couche d'entrée, l'auto-encodeur peut potentiellement apprendre la fonction identité et devenir sans intérêt. Toutefois, des résultats expérimentaux ont montré que dans ce genre de cas, l'auto-encodeur pouvait malgré tout apprendre des caractéristiques utiles [2]:19.

Variations[modifier | modifier le code]

Différentes techniques existent pour empêcher un auto-encodeur d'apprendre la fonction identité et améliorer sa capacité à apprendre des représentations plus riches :

Auto-encodeur débruiteur[modifier | modifier le code]

Un auto-encodeur débruiteur prend une entrée partiellement corrompue et apprend à récupérer l'entrée originale débruitée. Cette technique a été introduite avec une approche spécifique d'une bonne représentation [7]. Une bonne représentation est celle qui peut être obtenue de manière robuste à partir d'une entrée corrompue et qui sera utile pour récupérer l'entrée débruitée correspondante. Cette définition contient les hypothèses implicites suivantes :

  • Les représentations de haut-niveau sont relativement stables et robustes à la corruption de l'entrée;
  • Il est nécessaire d'extraire des caractéristiques qui soient utiles pour la représentation de la distribution d'entrée.

Pour entrainer un auto-encodeur à débruiter des données, il est nécessaire d'effectuer un mappage stochastique préliminaire afin de corrompre les données et d'utiliser comme entrée d'un auto-encodeur classique, avec comme seule exception de calculer la perte pour l'entrée initiale au lieu de .

Auto-encodeur épars[modifier | modifier le code]

En imposant la parcimonie sur les unités cachées durant l'apprentissage (tout en ayant un plus grand nombre d'unités cachées que d'entrées), un auto-encodeur peut apprendre des structures utiles dans les données d'entrées. Cela permet de représenter de façon éparse les entrées, ces représentations pouvant être utilisées pour le pré-entrainement de tâches de classification.

La parcimonie peut être obtenue en ajoutant des termes additionnels à la fonction objectif durant l'apprentissage (en comparant la distribution de probabilité des couches cachées avec une valeur faible désirée) [8], ou en réduisant manuellement à 0 toutes sauf les quelques activations d'unités cachées les plus fortes (appelé auto-encodeur k-épars) [9].

Auto-encodeur variationnel[modifier | modifier le code]

Le modèle d'auto-encodeur variationnel hérite de l'architecture de l'auto-encodeur, mais fait des hypothèses fortes concernant la distribution des variables latentes. Il utilise l'approche variationnelle pour l'apprentissage de la représentation latente, ce qui se traduit par une composante de perte additionnelle et un algorithme d'apprentissage spécifique appelé Bayes Variationnel de Gradient Stochastique [5]. Il suppose que les données sont générées par un modèle graphique orienté et que l'encodeur apprend une approximation à la distribution a posteriori et désignent respectivement les paramètres de l'encodeur (modèle de reconnaissance) et du décodeur (modèle génératif). L'objectif de l'auto-encodeur, dans ce cas ci, à la forme suivante :

correspond à la divergence de Kullback-Leibler. L'a priori des variables latentes est généralement définie comme étant la Gausienne multivariée isotropique centrée ; cependant, des configurations alternatives ont récemment été également considérées [10].

Auto-encodeur contractif[modifier | modifier le code]

L'auto-encodeur contractif ajoute une régulation explicite dans sa fonction objectif qui force le modèle à apprendre une fonction robuste aux légères variations des valeurs d'entrées. Cette régulation correspond à la norme de Frobenius de la matrice Jacobienne des activations de l'encodeur par rapport à l'entrée. La fonction objectif finale à la forme suivante :

Relation avec la décomposition en valeurs singulières tronquée[modifier | modifier le code]

Si des activations linéaires sont utilisées, ou uniquement une seule couche cachée sigmoïde, la solution optimale d'un auto-encodeur est apparentée à une analyse en composantes principales [11].

Apprentissage[modifier | modifier le code]

L'algorithme d'apprentissage d'un auto-encodeur peut être résumé comme suit :

Pour chaque entrée x,
Effectuer un passage vers l'avant afin de calculer les activations sur toutes les couches cachées, puis sur la couche de sortie pour obtenir une sortie ,
Mesurer l'écart entre et l'entrée , généralement en utilisant l'erreur quadratique,
Rétropropager l'erreur vers l'arrière et effectuer une mise à jour des poids.

Un auto-encodeur est bien souvent entrainé en utilisant l'une des nombreuses variantes de la rétropropagation, e.g., méthode du gradient conjugué, algorithme du gradient. Bien que cela fonctionne de manière raisonnablement efficace, il existe des problèmes fondamentaux concernant l'utilisation de la rétropopagation avec des réseaux possédant de nombreuses couches cachées. Une fois les erreurs rétropropagées aux premières couches, elles deviennent minuscules et insignifiantes. Cela signifie que le réseau apprendra presque toujours à reconstituer la moyenne des données d'entrainement. Bien que les variantes de la rétropropagation soient capables, dans une certaine mesure, de résoudre ce problème, elles résultent toujours en un apprentissage lent et peu efficace. Ce problème peut toutefois être résolu en utilisant des poids initiaux proches de la solution finale. Le processus de recherche de ces poids initiaux est souvent appelé pré-entrainement.

Geoffrey Hinton a développé une technique de pré-entrainement pour l'auto-encodeur profond. Cette méthode consiste à traiter chaque ensemble voisin de deux couches comme une machine de Boltzmann restreinte de sorte que le pré-entrainement s'approche d'une bonne solution, puis utiliser la technique de rétropropagation pour affiner les résultats [12]. Ce modèle porte le nom de réseau de croyance profonde.

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

  1. Tian, X., « Pré-apprentissage supervisé pour les réseaux profonds », In Proceedings of Rfia,‎ , p. Vol. 2010, p. 36
  2. a et b (en) Y. Bengio, « Learning Deep Architectures for AI », Foundations and Trends in Machine Learning, vol. 2,‎ (DOI 10.1561/2200000006, lire en ligne)
  3. Modeling word perception using the Elman network, Liou, C.-Y., Huang, J.-C. and Yang, W.-C., Neurocomputing, Volume 71, 3150–3157 (2008), DOI:10.1016/j.neucom.2008.04.030
  4. Autoencoder for Words, Liou, C.-Y., Cheng, C.-W., Liou, J.-W., and Liou, D.-R., Neurocomputing, Volume 139, 84–96 (2014), DOI:10.1016/j.neucom.2013.09.055
  5. a et b Auto-Encoding Variational Bayes, Kingma, D.P. and Welling, M., ArXiv e-prints, 2013 arxiv.org/abs/1312.6114
  6. Generating Faces with Torch, Boesen A., Larsen L. and Sonderby S.K., 2015 torch.ch/blog/2015/11/13/gan.html
  7. (en) Pascal Vincent, Hugo Larochelle, Isabelle Lajoie, Yoshua Bengio et Pierre-Antoine Manzagol, « Stacked Denoising Autoencoders: Learning Useful Representations in a Deep Network with a Local Denoising Criterion », The Journal of Machine Learning Research, vol. 11,‎ , p. 3371–3408 (lire en ligne)
  8. (en) « Sparse autoencoder »
  9. Alireza Makhzani et Brendan Frey, « k-Sparse Autoencoders », arXiv:1312.5663 [cs],‎ (lire en ligne, consulté le 23 mai 2017)
  10. Harris Partaourides and Sotirios P. Chatzis, “Asymmetric Deep Generative Models,” Neurocomputing, vol. 241, pp. 90-96, June 2017. [1]
  11. (en) H. Bourlard et Y. Kamp, « Auto-association by multilayer perceptrons and singular value decomposition », Biological Cybernetics, vol. 59, nos 4–5,‎ , p. 291–294 (PMID 3196773, DOI 10.1007/BF00332918)
  12. Reducing the Dimensionality of Data with Neural Networks (Science, 28 July 2006, Hinton & Salakhutdinov)