Une couche cachée

Le chapitre « Un neurone » s’est terminé sur une limite : un neurone seul ne trace qu’une frontière droite, et il ne peut donc pas apprendre le XOR. Ce chapitre montre comment quelques neurones reliés entre eux dépassent cette limite.

Relier des neurones

La sortie d’un neurone est un nombre. Rien n’empêche de donner ce nombre en entrée à un autre neurone. On obtient alors un réseau de neurones, organisé en couches (layers) :

  • la couche d’entrée (input layer) contient les données, par exemple les deux entrées du XOR ou les 784 pixels d’une image ;
  • la couche de sortie (output layer) donne la réponse du réseau ;
  • entre les deux, une ou plusieurs couches cachées (hidden layers) font des calculs intermédiaires. On les appelle « cachées » parce que, de l’extérieur, on ne voit que les entrées et la réponse.

Chaque neurone d’une couche reçoit les sorties de tous les neurones de la couche précédente, chacune avec son propre poids.

Un réseau construit de cette façon s’appelle un perceptron multicouche (multilayer perceptron, MLP). Le nom est un héritage historique, un peu trompeur : ses neurones ne sont pas exactement des perceptrons de Rosenblatt, puisque leur sortie varie de façon continue au lieu de passer brusquement de 0 à 1. Mais l’idée est bien celle-là : des perceptrons empilés en plusieurs couches. C’est le type de réseau le plus simple, et celui de ce chapitre et du suivant.

La forme d’un réseau s’appelle son architecture (architecture) : le nombre de couches, le nombre de neurones dans chacune, et surtout la façon dont ils sont reliés. Le dessin de ces connexions, où chaque neurone est un point et chaque poids un trait, s’appelle sa topologie (topology). L’architecture est choisie par un humain avant l’entraînement, alors que les poids sont appris. Le perceptron multicouche relie chaque neurone à tous ceux de la couche précédente. C’est la topologie la plus simple, mais pas la seule. Les chapitres suivants présentent d’autres architectures, adaptées aux images, aux séquences ou au langage. Elles sont toutes faites des mêmes briques, des neurones reliés par des poids et entraînés par la même méthode. Seule change la façon de les relier.

Le XOR résolu avec trois neurones

Reprenons le XOR, avec ses deux entrées A et B. Le réseau ci-dessus le résout si chaque neurone répond à une question simple, qu’un neurone seul sait traiter :

  • le premier neurone caché répond à la question « au moins une des deux entrées est-elle vraie ? » ;
  • le second neurone caché répond à la question « les deux entrées sont-elles vraies ? » ;
  • le neurone de sortie combine ces deux réponses. Il répond « vrai » quand le premier neurone dit oui et que le second dit non, c’est-à-dire quand au moins une entrée est vraie, mais pas les deux.

La table suivante reprend les quatre cas :

ABNeurone 1 : au moins une ?Neurone 2 : les deux ?Sortie : A XOR B
00000
01101
10101
11110

La dernière colonne est bien celle de la table de vérité du XOR. Aucun des trois neurones ne fait quelque chose de difficile. C’est leur combinaison qui résout un problème qu’aucun d’eux ne peut résoudre seul.

Pour aller plus loin : les poids de ce réseau

Voici des poids et des biais qui donnent exactement ce comportement. Chaque neurone calcule une somme pondérée, puis la passe dans la sigmoïde, comme dans le chapitre « Un neurone ».

NeuronePoidsBiaisSomme calculée
Neurone 1 (au moins une ?)10 et 10−510·A + 10·B − 5
Neurone 2 (les deux ?)10 et 10−1510·A + 10·B − 15
Sortie10 et −20−510·(neurone 1) − 20·(neurone 2) − 5

Prenons le cas A = 0 et B = 1 :

  • le neurone 1 calcule 10·0 + 10·1 − 5 = 5, et la sigmoïde donne environ 0,99 ;
  • le neurone 2 calcule 10·0 + 10·1 − 15 = −5, et la sigmoïde donne environ 0,01 ;
  • la sortie calcule 10·0,99 − 20·0,01 − 5 = 4,7, et la sigmoïde donne environ 0,99.

Le réseau répond donc « vrai », comme prévu. Les trois autres cas se vérifient de la même façon. Les poids sont grands (10, 20) pour que la sigmoïde donne des réponses nettes, très proches de 0 ou de 1.

Ce que fait la couche cachée : changer de point de vue

On peut comprendre ce résultat de deux façons.

Première lecture : deux droites au lieu d’une. Chaque neurone caché trace sa propre droite dans le plan des entrées. Avec deux droites, on délimite une bande. Les deux cas « vrai » du XOR sont dans la bande, et les deux cas « faux » sont à l’extérieur, un de chaque côté. Une seule droite ne pouvait pas faire ce découpage.

Seconde lecture : un nouvel espace. La couche cachée remplace les deux entrées, A et B, par deux nouvelles valeurs, les réponses des neurones 1 et 2. Dans ce nouvel espace, les quatre cas ne sont plus aux coins d’un carré. Les deux cas « vrai » arrivent au même endroit, et une seule droite suffit maintenant à les séparer des deux autres. Le neurone de sortie trace cette droite.

Cette seconde lecture rejoint une idée du Module 2. Dans « Généraliser », on rendait le XOR séparable en ajoutant à la main une caractéristique, le produit des deux entrées. Ce produit vaut 1 seulement quand les deux entrées valent 1. C’est exactement la question à laquelle répond le neurone 2. La différence est que personne n’a besoin de trouver cette caractéristique : avec les bons poids, le réseau la construit lui-même. Une couche cachée est donc une fabrique de caractéristiques.

Deux droites à déplacer

Dans l’applet ci-dessous, chaque droite représente un neurone caché. Vous pouvez la déplacer et la faire pivoter, comme dans l’applet de la régression logistique. La zone délimitée par les deux droites est colorée : c’est là que le réseau répond « vrai ». Un point mal classé est entouré d’un cercle orange.

  1. Placez les deux droites pour que la zone colorée contienne les deux points rouges, et aucun point bleu.
  2. Cherchez une autre solution, avec des droites orientées autrement. Il en existe plusieurs.
  3. Choisissez ensuite le second jeu de points, « un groupe entouré », où un groupe rouge est entouré de points bleus. Constatez que deux droites ne suffisent plus.
  4. Ajoutez une troisième droite, avec le bouton « 3 », et entourez le groupe rouge.

Plus de neurones, plus de formes

Deux neurones cachés donnent deux droites. Trois neurones en donnent trois, ce qui permet de délimiter un triangle, comme dans la dernière manipulation. Avec un grand nombre de neurones, on peut entourer une zone de forme quelconque, à la précision voulue.

Ce résultat a été démontré en 1989, sous le nom de théorème d’approximation universelle (universal approximation theorem) : un réseau à une seule couche cachée, avec assez de neurones, peut approcher presque n’importe quelle fonction. Le répertoire de formes d’un réseau de neurones n’a donc pas la limite de celui d’un modèle linéaire.

Un réseau peut aussi avoir plusieurs sorties. Pour reconnaître les chiffres manuscrits, on utilise un réseau à dix sorties, une par chiffre. Chaque sortie donne un nombre entre 0 et 1, et le réseau répond par le chiffre dont la sortie est la plus élevée. En pratique, on fait en sorte que les dix sorties totalisent 1. Elles forment alors une distribution de probabilités sur les dix chiffres, comme les probabilités « pourriel » et « courriel » du classifieur bayésien. Le réseau ne répond pas seulement « c’est un 0 », mais « c’est un 0, avec une probabilité de 96 % ».

Qui règle tous ces poids ?

Pour le XOR, nous avons choisi les poids à la main, parce que le réseau n’en compte que neuf. Le réseau des chiffres en compte des milliers. Avec une couche cachée de 30 neurones, il y a 784 × 30 poids entre l’entrée et la couche cachée, puis 30 × 10 entre la couche cachée et la sortie, soit près de 24 000 paramètres en comptant les biais. Personne ne peut les régler à la main.

Le théorème d’approximation universelle dit qu’il existe de bons poids. Il ne dit pas comment les trouver. Ce problème a bloqué les réseaux de neurones pendant près de vingt ans. On savait depuis les années 1960 qu’une couche cachée dépasserait la limite du perceptron, mais on ne savait pas comment entraîner un tel réseau. La solution, la rétropropagation du gradient (backpropagation), s’est imposée en 1986. C’est le sujet du chapitre suivant, « Entraîner un réseau ».