• Aucun résultat trouvé

Notation simplifiee

3.2 Apprentissage profond

3.2.4 Entraîner des réseaux profonds

Nous présentons dans cette partie deux des algorithmes les plus utilisés pour le pré-entraînement des réseaux profonds : les autoencodeurs et les machines de Boltzmann restreintes. D’autres techniques existent et de nouvelles variations sont régulièrement pro-posées. Nous renvoyons le lecteur vers (Bengio et al. 2013) pour une revue plus complète.

Autoencodeurs

Les autoencodeurs constituent une famille assez ancienne de réseaux de neurones, aussi connus sous le nom “d’auto-associateurs” (Rumelhart et al. 1986). Comme leur nom le suggère, ces réseaux consistent à encoder les données en entrée dans une couche cachée, puis à les décoder de manière à reconstruire ces entrées (figure 3.13). La fonction de coût est alors naturellement définie par la différence entre les données fournies en entrée et leur reconstruction. Selon le type de données, les deux coûts les plus populaires sont la norme euclidienne de la différence et l’entropie croisée. En notant x la donnée initiale et ^x sa

reconstruction, ces coûts sont donnés respectivement par ||x − ^x||2 et i(xilog(ˆxi) + (1− xi) log(1− ˆxi)).

Ces algorithmes doivent cependant être utilisés avec précaution, car leur optimisation peut donner lieu à une solution triviale : la fonction identité. En effet, dès lors que le

Encodage Decodage

W

1

W

2 Comparaison (fonction de cout)

Donnee Reconstruction

Figure 3.13 – Principe général des autoencodeurs. Les données en entrée sont encodées dans

une couche cachée, puis décodées pour en obtenir une reconstruction. Une fonction de coût peut alors être définie entre la donnée originale et sa reconstruction.

nombre de neurones de la couche cachée est au moins égal au nombre de neurones de la couche visible, le réseau peut apprendre à recopier les données brutes, et donc obtenir une erreur de reconstruction nulle. Différentes méthodes de régularisation existent pour éviter ce phénomène (figure 3.14). Nous en présentons quelques unes dans les paragraphes suivants.

Utiliser un nombre de neurones cachés plus petit que le nombre de neurones visibles. Il s’agit de la technique la plus évidente pour empêcher le réseau d’apprendre la fonction identité. Cependant, les résultats de l’état de l’art sont généralement obtenus en utilisant un nombre de neurones cachés plus grands que le nombre de neurones visibles au niveau des premières couches. D’autres techniques de régularisation sont donc nécessaires.

Bruiter les entrées avant de les encoder (Vincent et al. 2008). Il s’agit d’une

approche très populaire. Elle consiste à bruiter les données fournies en entrée avant de les encoder puis décoder, généralement avec un bruit de masquage. Le plus souvent, de l’ordre de 30% des neurones de la couche visible choisis aléatoirement sont mis à 0. L’erreur de reconstruction est alors calculée par rapport à la donnée initiale non bruitée. Une telle approche force donc le réseau à apprendre des caractéristiques globales sous la forme de relations entre l’activité de plusieurs neurones de la couche visible afin de pouvoir contrer le bruit lors de la reconstruction.

Bruiter la couche cachée avant le décodage (Hinton et al. 2012). Il s’agit d’une

technique connue sous le nom de dropout qui consiste, comme pour l’approche précédente, à mettre à 0 une proportion importante de neurones de la couche cachée (généralement de l’ordre de 50%). Ceci a deux conséquences. Premièrement, chaque donnée est enco-dée par moitié moins de neurones. Deuxièmement, le réseau est obligé d’apprendre des caractéristiques indépendantes les unes des autres. En effet, celui-ci ne peut plus utiliser une activation conjointe de plusieurs neurones cachés pour représenter une caractéristique pertinente, puisque un ou plusieurs de ces neurones risquent d’être mis à 0 pour chaque

nouvelle donnée. Cette méthode revient à entraîner un sous-réseau tiré aléatoirement pour chaque donnée, et peut être mise en perspective avec la technique du bagging (voir par exemple (Baldi et Sadowski 2014)), où un ensemble de modèles est entraîné sur des sous-ensembles différents de données. Dans le cas du dropout cependant, les différents modèles partagent des sous-ensembles de paramètres. Après entraînement, il est possible d’approcher la réponse moyenne de tous les sous-réseaux en arrêtant le masquage des neurones cachés et en redimensionnant les poids de la matrice de reconstruction : si 50% des neurones cachés sont mis à 0 pendant l’entraînement, il faut diviser les poids de la matrice de reconstruction par deux lorsqu’il n’y a plus de masquage (Hinton et al. 2012).

Pénaliser les variations de la couche cachée (Rifai et al. 2011a,b). Connue sous le nom de Contractive Autoencoders, cette technique pénalise les variations de la couche cachée h pour une petite variation de la couche visible v, sous la forme de la norme de la jacobienne J = ∂h

∂v qui est ajoutée à la fonction de coût à optimiser. Dès lors, le réseau se focalise sur les degrés de variation pertinents pour représenter les données (di-rections ∂v pour lesquelles la norme de la jacobienne sera élevée, mais nécessaire afin de pouvoir reconstruire correctement les données concernées) et non sur des variations non présentes dans l’ensemble d’apprentissage, comme par exemple des variations corres-pondant à l’ajout d’un bruit gaussien indépendant à chaque pixel d’une image (selon ces directions, la jacobienne pourra alors être nulle).

Imposer des contraintes de parcimonie sur l’activité de la couche cachée (Lee et al. 2006 ; Rebecchi et al. 2014). Une première méthode consiste à fixer une fréquence d’activité désirée pour chaque neurone et à pénaliser la déviation entre l’activité moyenne observée et l’activité désirée. On peut pénaliser cette déviation en ajoutant un terme à la fonction de coût à minimiser (par exemple en considérant les fréquences désirée et observée comme les moyennes de lois de Bernoulli et en pénalisant la divergence de Kullback-Leibler entre les deux lois obtenues). Cette approche permet donc d’obtenir une parcimonie au niveau de l’activité de chaque neurone. Une autre approche de la parcimonie consiste à coder chaque donnée par l’activité d’une faible proportion des neurones. Une technique consiste alors à alterner deux phases lors de l’apprentissage (Rebecchi et al. 2014). La première phase consiste à entraîner l’autoencodeur à reconstruire ses entrées de façon standard. La deuxième phase consiste à calculer l’activité de la couche cachée pour une entrée donnée, à la rendre parcimonieuse (par exemple en ne conservant que les n neurones les plus activés), puis à entraîner le réseau à produire cette représentation rendue parcimonieuse à partir de l’entrée (par rétropropagation classique).

Utiliser la même matrice de connexion pour l’encodage et le décodage (poids partagés). Cette technique n’empêche pas un réseau trop grand d’apprendre la fonction

identité. Cependant, c’est une technique très utilisée de régularisation, notamment car elle divise par deux le nombre de paramètres appris dans le réseau.

W1 W2 Donnee Reconstruction