Motivation de l'apprentissage profond, son histoire et son inspiration

$$\gdef \sam #1 {\mathrm{softargmax}(#1)}$$ $$\gdef \vect #1 {\boldsymbol{#1}} $$ $$\gdef \matr #1 {\boldsymbol{#1}} $$ $$\gdef \E {\mathbb{E}} $$ $$\gdef \V {\mathbb{V}} $$ $$\gdef \R {\mathbb{R}} $$ $$\gdef \N {\mathbb{N}} $$ $$\gdef \relu #1 {\texttt{ReLU}(#1)} $$ $$\gdef \D {\,\mathrm{d}} $$ $$\gdef \deriv #1 #2 {\frac{\D #1}{\D #2}}$$ $$\gdef \pd #1 #2 {\frac{\partial #1}{\partial #2}}$$ $$\gdef \set #1 {\left\lbrace #1 \right\rbrace} $$ % My colours $$\gdef \aqua #1 {\textcolor{8dd3c7}{#1}} $$ $$\gdef \yellow #1 {\textcolor{ffffb3}{#1}} $$ $$\gdef \lavender #1 {\textcolor{bebada}{#1}} $$ $$\gdef \red #1 {\textcolor{fb8072}{#1}} $$ $$\gdef \blue #1 {\textcolor{80b1d3}{#1}} $$ $$\gdef \orange #1 {\textcolor{fdb462}{#1}} $$ $$\gdef \green #1 {\textcolor{b3de69}{#1}} $$ $$\gdef \pink #1 {\textcolor{fccde5}{#1}} $$ $$\gdef \vgrey #1 {\textcolor{d9d9d9}{#1}} $$ $$\gdef \violet #1 {\textcolor{bc80bd}{#1}} $$ $$\gdef \unka #1 {\textcolor{ccebc5}{#1}} $$ $$\gdef \unkb #1 {\textcolor{ffed6f}{#1}} $$ % Vectors $$\gdef \vx {\pink{\vect{x }}} $$ $$\gdef \vy {\blue{\vect{y }}} $$ $$\gdef \vb {\vect{b}} $$ $$\gdef \vz {\orange{\vect{z }}} $$ $$\gdef \vtheta {\vect{\theta }} $$ $$\gdef \vh {\green{\vect{h }}} $$ $$\gdef \vq {\aqua{\vect{q }}} $$ $$\gdef \vk {\yellow{\vect{k }}} $$ $$\gdef \vv {\green{\vect{v }}} $$ $$\gdef \vytilde {\violet{\tilde{\vect{y}}}} $$ $$\gdef \vyhat {\red{\hat{\vect{y}}}} $$ $$\gdef \vycheck {\blue{\check{\vect{y}}}} $$ $$\gdef \vzcheck {\blue{\check{\vect{z}}}} $$ $$\gdef \vztilde {\green{\tilde{\vect{z}}}} $$ $$\gdef \vmu {\green{\vect{\mu}}} $$ $$\gdef \vu {\orange{\vect{u}}} $$ % Matrices $$\gdef \mW {\matr{W}} $$ $$\gdef \mA {\matr{A}} $$ $$\gdef \mX {\pink{\matr{X}}} $$ $$\gdef \mY {\blue{\matr{Y}}} $$ $$\gdef \mQ {\aqua{\matr{Q }}} $$ $$\gdef \mK {\yellow{\matr{K }}} $$ $$\gdef \mV {\lavender{\matr{V }}} $$ $$\gdef \mH {\green{\matr{H }}} $$ % Coloured math $$\gdef \cx {\pink{x}} $$ $$\gdef \ctheta {\orange{\theta}} $$ $$\gdef \cz {\orange{z}} $$ $$\gdef \Enc {\lavender{\text{Enc}}} $$ $$\gdef \Dec {\aqua{\text{Dec}}}$$
🎙️ Yann Le Cun

Plan du cours

  • Les bases de l’apprentissage supervisé, des réseaux de neurones et de l’apprentissage profond
  • Rétropropagation et composantes architecturales
  • Les réseaux de neurones convolutifs et leurs applications
  • Plus d’architectures d’apprentissage profond
  • Astuces pour la régularisation / astuces pour l’optimisation / comprendre le fonctionnement de l’apprentissage profond
  • Modèles à base d’énergie
  • L’apprentissage autosupervisé et au-delà

L’inspiration de l’apprentissage profond et son histoire

Sur le plan conceptuel, l’apprentissage profond est inspiré par le cerveau. Cependant tous les détails du cerveau ne sont pas pertinents. À titre de comparaison, les avions ont été inspirés par les oiseaux. Le principe du vol est le même, mais les détails sont extrêmement différents (les avions ne battant pas des ailes).

L’histoire de l’apprentissage profond remonte à un domaine qui a changé de nom pour devenir aujourd’hui la cybernétique. Elle a commencé dans les années 1940 avec McCulloch et Pitts. Ils ont eu comme idée que les neurones sont des unités de seuil avec des états de marche et d’arrêt. De ce fait, il est possible de construire un circuit booléen en connectant les neurones entre eux et d’effectuer des inférences logiques avec les neurones. Le cerveau est essentiellement une machine d’inférence logique car les neurones sont binaires. Les neurones calculent une somme pondérée d’entrées et comparent cette somme à son seuil. Un neurone s’allume s’il est supérieur au seuil et s’éteint s’il est inférieur. Ceci est une vue simplifiée du fonctionnement des réseaux neuronaux.

En 1947, Donald Hebb a eu l’idée que les neurones du cerveau apprennent en modifiant la force des connexions entre eux. C’est ce qu’on appelle l’hyperapprentissage, où si deux neurones sont activés ensemble alors la connexion entre eux augmente et s’ils ne sont pas activés ensemble alors la connexion diminue.

Plus tard, en 1948, la cybernétique a été proposée par Norbert Wiener. Il se base sur l’idée qu’en ayant des systèmes avec des capteurs et des actionneurs, alors il y a une boucle de rétroaction et un système d’autorégulation. Les règles du mécanisme de rétroaction d’une voiture sont toutes issues de son travail.

En 1957, Frank Rosenblatt a proposé le Perceptron, un algorithme d’apprentissage qui modifie les poids de réseaux neuronaux très simples.

Dans l’ensemble, cette idée d’essayer de construire des machines intellectuelles en simulant de nombreux neurones est née dans les années 1940. Elle a pris son essor dans les années 1950 et s’est complètement éteinte à la fin des années 1960. Les principales raisons de la disparition du domaine en 1960 sont les suivantes :

  • Les chercheurs ont utilisé des neurones binaires. Cependant, la façon de faire fonctionner la rétropropagation est d’utiliser des fonctions d’activation qui sont continues. À cette époque, les chercheurs n’avaient pas l’idée d’utiliser des neurones continus et ils ne pensaient pas pouvoir réaliser l’entraînement avec des gradients car les neurones binaires ne sont pas différentiels.
  • Avec les neurones continus, il faudrait multiplier l’activation d’un neurone par un poids pour obtenir une contribution à la somme pondérée. Cependant, avant 1980, la multiplication de deux nombres, en particulier des nombres à virgule flottante, était extrêmement lente. Cela n’encourageait donc pas à utiliser des neurones continus.

L’apprentissage profond a pris un nouvel essor en 1985 avec l’apparition de la rétropropagation. En 1995, le domaine a périclité à nouveau et la communauté de l’apprentissage machine a abandonné l’idée des réseaux neuronaux. Début 2010, les gens ont commencé à utiliser les réseaux de neurones dans la reconnaissance vocale avec une amélioration considérable des performances et, plus tard, ils ont été largement déployés dans le domaine commercial. En 2013, la vision par ordinateur a commencé à passer aux réseaux de neurones. En 2016, la même transition a eu lieu dans le traitement du langage naturel. Bientôt, des révolutions similaires se produiront dans la robotique, le contrôle et bien d’autres domaines.

L’apprentissage supervisé

$90\%$ des applications d’apprentissage profond utilisent l’apprentissage supervisé. L’apprentissage supervisé est un processus par lequel, on collecte un tas de paires d’entrées et de sorties. Les entrées sont introduites dans une machine pour apprendre la sortie correcte. Lorsque la sortie est correcte, on ne fait rien. Si la sortie est incorrecte, on ajuste le paramètre de la machine afin d’obtenir une nouvelle sortie ressemblant davantage à celle désirée. L’astuce consiste à déterminer la direction et l’ampleur de l’ajustement du paramètre, ce qui revient à calculer le gradient et la rétropropagation.

L’apprentissage supervisé est issu du Perceptron et de l’Adaline. L’Adaline est basé sur la même architecture avec des entrées pondérées. Au-dessus du seuil, cela s’allume et en dessous du seuil, cela s’éteint. Le Perceptron est un réseau de neurones à deux couches dont la première couche est fixe et la deuxième couche est entraînable. La plupart du temps, la première couche est déterminée de manière aléatoire et c’est ce qu’on appelle les couches associatives.

Histoire de la reconnaissance des motifs et de l’introduction de la descente en gradient

La base conceptuelle de la reconnaissance des motifs précède le développement de l’apprentissage profond. Le modèle standard de reconnaissance des motifs comprend un extracteur de caractéristiques et un classifieur pouvant être entraîné. L’entrée va dans l’extracteur de caractéristiques où sont extraites les caractéristiques pertinentes comme la détection d’un œil lorsque le but est de reconnaître le visage. Ensuite, le vecteur de caractéristiques est envoyé au classifieur (pouvant être entraîné) pour calculer la somme pondérée et la comparer avec le seuil. Dans ce cas, un classifieur pouvant être entraîné peut être un perceptron ou un réseau neuronal unique. Le problème est que l’extracteur de caractéristiques doit être conçu à la main. Ce qui signifie que la reconnaissance des motifs et la vision par ordinateur se concentrent sur l’extracteur en considérant la façon de le concevoir pour un problème particulier, ce qui n’est pas vraiment le cas d’un classifieur pouvant être entraîné.

Après l’émergence et le développement de l’apprentissage profond, le processus en deux étapes est passé à des séquences de modules. Chaque module a des paramètres réglables et une non-linéarité. Ensuite, il faut les empiler pour former plusieurs couches. C’est pourquoi on l’appelle « apprentissage profond ». La raison pour laquelle on utilise une non-linéarité plutôt qu’une linéarité est que deux couches linéaires reviennent à une seule couche linéaire puisque la composition de deux linéaires est linéaire.

L’architecture multicouche la plus simple avec des paramètres réglables et la non-linéarité pourrait être la suivante. L’entrée est représentée par un vecteur tel qu’une image ou un son. Cette entrée est multipliée par la matrice de poids dont le coefficient est un paramètre réglable. Ensuite, chaque composante du vecteur de résultat est passée par une fonction non linéaire telle que la ReLU (Rectified Linear Unit). En répétant ce processus, cela devient un réseau neuronal de base. La raison pour laquelle on parle de neurones est que cette architecture calcule la somme pondérée des composantes d’entrée par les lignes correspondantes d’une matrice.

Pour en revenir à l’apprentissage supervisé, nous comparons le résultat obtenu avec le résultat cible puis nous optimisons la fonction objectif qui est la perte du calcul de la distance/pénalité/divergence entre le résultat et la cible. Ensuite, nous faisons la moyenne de cette fonction de coût sur le jeu d’entraînement. C’est l’objectif que nous voulons minimiser. En d’autres termes, nous voulons trouver la valeur des paramètres qui minimisent cette moyenne.

La méthode pour trouver cette valeur est le calcul du gradient. Par exemple, si nous sommes perdus dans une montagne par une nuit brumeuse et nous voulons aller au village dans la vallée, un moyen pourrait être de faire demi-tour et de voir quel est le chemin le plus raide pour descendre puis de faire un petit pas vers le bas. La direction est le gradient (négatif). En supposant que la vallée est convexe, nous pouvons atteindre la vallée.

Le chemin le plus efficace est appelé la « descente de gradient stochastique » (SGD en anglais pour Stochastic Gradient Descent). Comme nous voulons minimiser la perte moyenne sur le jeu d’entraînement, nous prenons un échantillon ou un petit groupe d’échantillons et nous calculons l’erreur. Puis nous utilisons la descente de gradient. Ensuite, nous prenons un nouvel échantillon et obtenons une nouvelle valeur pour l’erreur. Nous avons alors le gradient qui est normalement une direction différente. Deux des principales raisons d’utiliser la SGD sont qu’elle permet à un modèle de converger rapidement si le jeu d’entraînement est très grand et qu’elle permet une meilleure généralisation, c’est-à-dire qu’elle donne des performances similaires sur différents jeux de données.

Calculer les gradients par rétropropagation

Le calcul des gradients par rétropropagation est une application pratique de la règle de la chaîne. L’équation de rétropropagation pour les gradients d’entrée est la suivante :

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{x}_{i - 1}} \\ \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{x}_{i - 1}} \end{aligned}\]

Dans la même logique, l’équation de rétropropagation pour les gradients des poids est la suivante :

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{w}_{i}} \\ \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{w}_{i}} \end{aligned}\]

Notez qu’au lieu d’entrées scalaires, il s’agit d’entrées vectorielles. Plus généralement, il s’agit d’entrées multidimensionnelles. La rétropropagation permet de calculer la dérivée de la différence entre la sortie souhaitée et la sortie obtenue (qui est la valeur de la fonction objectif) par rapport à toute valeur à l’intérieur du réseau. Enfin, la rétropropagation est essentielle car elle s’applique à plusieurs couches.

Il est important de réfléchir à la manière d’interpréter les entrées. Par exemple, une image de $256\times256$ nécessite une matrice d’une valeur de $200 000$. On aurait alors d’énormes matrices que les couches du réseau neuronal auraient à manipuler. Il n’est donc pas pratique d’utiliser de telles matrices. Par conséquent, il est important de faire des hypothèses sur la structure de la matrice.

Représentation hiérarchique du cortex visuel

Les expériences de Fukushima nous ont permis de comprendre comment notre cerveau interprète les données transmises à nos yeux. En résumé, les neurones situés devant notre rétine compriment l’entrée (connue sous le nom de normalisation du contraste) et le signal voyage de nos yeux à notre cerveau. Ensuite, l’image est traitée par étapes et certains neurones sont activés pour certaines catégories. Ainsi, le cortex visuel effectue une reconnaissance des motifs de manière hiérarchique.

Des expériences dans lesquelles des chercheurs ont enfoncé des électrodes dans des zones spécifiques du cortex visuel, en particulier la zone V1, ont permis de réaliser que certains neurones réagissent à des motifs qui apparaissent dans une très petite zone du champ visuel et de la même façon avec les neurones voisins et les zones voisines du champ visuel. En outre, les neurones qui réagissent au même champ visuel réagissent à différents types de bords de manière organisée (par exemple, les bords verticaux ou horizontaux). Il est également important de noter qu’il y a aussi l’idée que le processus visuel est essentiellement un processus feed forward. Par conséquent, une reconnaissance rapide peut être effectuée d’une manière ou d’une autre, sans que certaines connexions récurrentes soient nécessaires.


📝 Yunya Wang, SunJoo Park, Mark Estudillo, Justin Mae
Loïck Bourdois
27 Jan 2020