Codage parcimonieux
Le codage parcimonieux (ou sparse coding en anglais) est un type de réseau de neurones à apprentissage non supervisé. Il est basé sur le principe qu'une entrée est approximativement la somme de nombreux petits motifs élémentaires.
Définition
Plus rigoureusement, considérons une entrée vectorielle . Alors, considérant qu'on a à notre disposition un dictionnaire de motifs élémentaires , matrice contenant dans chaque colonne un motif de la même taille que ( et ), il existe tel que .
Plus généralement, pour un jeu de données de taille , le problème revient à décomposer la matrice en produit de deux autres matrices plus simples : la propriété de parcimonie impose qu'il y ait le plus de possible dans le vecteur de poids alpha ainsi que dans le dictionnaire. Cette condition se traduit par le fait que l'on veut reproduire l'entrée avec le moins de motif possible[1].
On peut de plus rajouter une condition sur le dictionnaire afin que les valeurs des motifs n'explosent pas lorsque l'on diminue les poids. Pour cela, il est classique après chaque apprentissage de projeter les colonnes du dictionnaire sur la boule unité, à savoir:
tq
La pratique courante est de découper l'entrée en petites fenêtres de taille fixe afin d'avoir à traiter des entrées de taille constante, quitte à faire du zéro-padding pour compléter une fenêtre qui dépasse de l'entrée.
Apprentissage
Pour le codage parcimonieux, on considère souvent la fonction de coût suivante pour une entrée :
Le premier terme correspond à la distance de l'entrée reconstruite par rapport à l'entrée originale tandis que le second terme correspond à la condition de parcimonie.
Toute la difficulté de l'apprentissage pour le codage parcimonieux est d'apprendre à la fois un dictionnaire ainsi que les poids. Pour ce faire, on fixe alternativement un des paramètres pour entrainer l'autre à l'aide d'une descente de gradient stochastique[2].
Les algorithmes les plus utilisés pour faire cela sont LARS et Frank-Wolfe [2]
Amélioration
Des améliorations peuvent être apportées à la construction précédente en rajoutant des conditions sur le dictionnaire ou sur les poids. On peut notamment montrer que l'ajout de l'invariance par translation via une convolution apporte des résultats meilleurs et permettent d'obtenir un dictionnaire plus complexe car il y a moins d'éléments redondants dans celui-ci[3].
Notes et références
- Wiki de Stanford sur le sparse coding : http://ufldl.stanford.edu/wiki/index.php/Sparse_Coding
- Julien Mairal, Francis Bach, Jean Ponce et Guillermo Sapiro, « Online Learning for Matrix Factorization and Sparse Coding », dans Journal of Machine Research 11, (lire en ligne).
- Site pour obtenir l'article: http://www.mitpressjournals.org/doi/abs/10.1162/NECO_a_00670?journalCode=neco#.V34_QbO_1UQ