• Aucun résultat trouvé

Apprentissage par réseaux de neurones profonds (deep learning)

Chapitre 3. Compression par techniques d’apprentissage profond

3.1 Machine learning, deep learning et réseaux de neurones convolutifs

3.1.2 Apprentissage par réseaux de neurones profonds (deep learning)

Les réseaux de neurones profonds revisitent le principe de la classification supervisée, en s’appuyant sur une méthodologie inspirée des systèmes biologiques. L’élément de base est le concept de neurone (Figure 3.1), qui effectue une opération de classification binaire.

Figure 3.1 : Concept de neurone avec principe associé de classification linéaire par neurone

La fonction de classification binaire est définie dans ce cas comme décrit dans l’équation suivante : >1 5 ? @ ∙0 5 3%3B ) 0 , (3.1) où x désigne le vecteur d’entrée, w le vecteur de paramètres associé aux dendrites du neurone, b un terme de biais et f une fonction d’activation.

En pratique, la sortie du neurone peut être gouvernée par différentes fonctions d’activation, avec propriétés variées. Parmi les plus populaires, citons les fonctions de type sigmoïde, tangente hyperbolique (tanh), ReLU (Rectified Linear Unit), Maxout, Leaky ReLU ou encore ELU (Figure 3.2).

Sigmoid

C 1 1 D

tanh tanh

ReLU

max 0, max @K Maxout B , @$K B$

Leaky ReLU

max 0.1 , M N 0ELU

O P 1 Q 0

Figure 3.2 : Fonctions d’activation

Un réseau de neurones est alors constitué par un ensemble de neurones interconnectés, structuré en couches interconnectées successives. Une architecture typique inclut, entre les couches d’entrée (dont la dimension correspond à a dimension des vecteurs à classifier) et de sortie (dont le nombre est lié à celui des classes considérées dans le processus de classification) un certain nombre de couches intermédiaires, appelées couches cachées (hidden layers). Classiquement, chaque neurone d’une couche est connecté à tous les neurones des couches précédente et suivantes. On parle alors d’un réseau de type fully-connected. La Figure 3.3 illustre l’exemple d’un réseau de neurones à une seule couche intermédiaire.

Figure 3.3 : Architecture d’un réseau à une couche intermédiaire

Notons que, selon le théorème d’universalité [Baker98], un réseau de neurones à une seule couche est théoriquement capable d’approcher toute fonction continue, à condition que le nombre de neurones présents dans la couche intermédiaire soit suffisamment grand.

Cependant, ce résultat théorique est peu exploitable en pratique, car le nombre de neurones intermédiaires nécessaires peut être très important, rendant ainsi impossible l’apprentissage du réseau. La solution consiste à considérer des architectures composées d’un nombre plus important de couches intermédiaires. On parle alors de réseaux profonds. Un exemple d’architecture profonde est illustré Figure 3.4.

Figure 3.4 : Exemple d’un réseau de neurones dit « profond »

L’objectif du processus d’apprentissage est de déterminer l’ensemble des paramètres du réseau (poids et biais) minimisant une fonction de pertes, qui mesure la différence globale entre la sortie du réseau et la vérité terrain. Comme fonctions de perte, on peut utiliser notamment des distances L1 ou L2. Une discussion plus approfondie sur les fonctions des pertes, qui sont déterminantes pour les performances du réseau, est proposée dans la Section 3.1.4.

Pour apprendre ces paramètres, la technique utilisé est dérivée de la méthode de descente de gradient et consiste à retro-propager les gradients à travers les différentes couches du réseau, à partir de la couche de sortie. On pare alors du back-propagation. Notons toutefois que le nombre de paramètres à déterminer peut être très important en pratique (millions ou même milliards), pour des problèmes de classification complexes. Pour éviter les problèmes de blocage dans des minima locaux propres à toute descente de gradient, il est alors nécessaire de considérer des versions plus avancées.

Parmi les différents algorithmes d’optimisation, les plus utilisés à ce jour citons :

- la décroissance du taux d’apprentissage au fur et à mesure des itérations [Smith17] - la descente de gradient avec inertie [Qian99]

- l’algorithme RMSprop [Tieleman12]

- l’algorithme ADAM (mélange de descente de gradient avec inertie et de RMSprop) [Kingma14].

Notons qu’à ce jour, en raison de ses performances, ADAM semble être de loin l’algorithme le plus utilisé dans la plupart des réseaux de neurones modernes existants.

Un autre problème qui peut apparaître lors de l’entrainement du réseau est lié au phénomène de sur- apprentissage (overfitting). Ainsi, du fait du nombre très important de connexions neuronales, et donc de paramètres d’un réseau fully-connected profond, une prédiction extrêmement fidèle aux données d’entrainement peut être obtenue.

L’overfitting se trouve être le cas où le réseau fournit une prédiction extrêmement fidèle aux données d’entrainement, au point de ne plus être en mesure de réaliser quelconque généralisation pour des données extérieures, non prises en compte dans le processus d’apprentissage. A l’autre extrême, se trouve le phénomène complémentaire de sous-apprentissage (underfitting), dans quel cas, le réseau n’est pas capable de fournir de classification correcte même pour les données de l’ensemble d’apprentissage. Ces deux phénomènes sont illustrés Figure 3.5.

Figure 3.5 : Exemples de résultats d’underfitting, d’overfitting et d’entrainement adapté

Deux principales solutions sont employées pour réguler l’overfitting. La première étant la régularisation L2, appliquée sur l’ensemble des paramètres, qui consiste en l’ajout d’un terme à la fonction de pertes visant à pénaliser la complexité du modèle.

La deuxième concerne le dropout (ou abandon), qui consiste en la désactivation d’un sous-ensemble de neurones de manière aléatoire à chaque itération. Cela permet d’à la fois limiter la capacité du réseau et d’encourager chaque neurone à apprendre plus indépendamment par rapport aux autres. Soulignons aussi que la meilleure méthode pour éviter l’overfitting est de disposer d’un corpus d’entrainement à la fois suffisamment grand et varié.

Enfin, une dernière notion utile et fréquemment utilisée dans le processus d’apprentissage est celle de batch.

Afin d’améliorer les résultats des prédictions lors d’un entrainement, il est possible de fournir plusieurs éléments en entrée d’un réseau à la fois pour une même itération. Il est par exemple possible de fournir 8 images à un réseau pour une même itération. On parle alors d’un entrainement avec un batch de taille 8.

L’utilisation de batchs présente un double intérêt : elle permet d’une part de réduire le temps d’entrainement, et d’autre part d’accroître la capacité de généralisation du réseau, en considérant plusieurs éléments hétérogènes simultanément.

Les principales limitations sous-jacentes sont d’ordre matériel, car l’utilisation de mémoire vive d’un réseau par itération est multipliée par la taille du batch considéré.