Qu’est-ce qu’un réseau de neurones ?
Les couches comme transformations paramétrées, la passe avant, et pourquoi profondeur et non-linéarité ne sont pas optionnelles : une preuve qu’aucune couche linéaire seule ne peut calculer le XOR, et un réseau à deux couches qui y parvient, entièrement déroulé à la main.
Prérequis : La régression linéaire à partir des premiers principes
Un réseau de neurones n’est pas un modèle du cerveau. C’est une chaîne de transformations simples et réglables, empilées de sorte que chacune opère sur la sortie de la précédente. Chollet est net sur la terminologie : le nom renvoie à la neurobiologie, et il indique deux noms qui auraient tout aussi bien pu être choisis, apprentissage de représentations en couches et apprentissage de représentations hiérarchiques. Le « profond » de l’apprentissage profond n’est pas une prétention à la profondeur de compréhension - il désigne le nombre de couches empilées les unes sur les autres.
Cet article construit l’objet depuis la base : ce qu’est une couche, pourquoi une non-linéarité entre couches est mathématiquement nécessaire plutôt que décorative, et ce que la profondeur achète réellement. L’argument central est réglé par une preuve et un exemple assez petit pour être vérifié sur papier.
A. Une couche est une transformation paramétrée
Une couche dense prend un vecteur, le multiplie par une matrice, ajoute un biais et applique une fonction élément par élément :
Trois pièces :
- et sont les poids de la couche - les nombres ajustés pendant l’entraînement. Tout ce que le réseau sait vit là.
- est la fonction d’activation, appliquée à chaque composante indépendamment.
- est ce que la couche précédente a produit.
Un réseau est une pile de ces couches. Selon le cadrage de Chollet, chaque couche apprend une représentation des données, et la profondeur désigne des couches successives de représentations de plus en plus utiles, toutes apprises automatiquement par exposition aux données d’entraînement plutôt que conçues à la main. C’est le contraste avec ce qu’il appelle l’apprentissage superficiel, qui extrait une ou deux couches de représentation - disons un histogramme de pixels suivi d’une règle de classification - et exige qu’un humain décide de ces caractéristiques.
B. Pourquoi la fonction d’activation n’est pas optionnelle
Supposons que nous supprimions et empilions deux couches purement linéaires :
La multiplication matricielle est associative : les deux matrices s’effondrent en une seule. Concrètement, avec
la composition vaut
une seule couche. Ajoutez-en cent autres, linéaires : c’est toujours une seule couche. La profondeur sans non-linéarité n’achète rien du tout - non pas un modèle légèrement plus faible, mais exactement le même ensemble de fonctions représentables.
L’activation la plus courante est la ReLU, , qui laisse passer les valeurs positives inchangées et rabat les négatives à zéro. Ce n’est guère plus qu’un pli, et ce pli suffit.
La figure utilise un autre réseau à deux couches, sans biais. À son entrée de départ, les deux unités sont actives et le réseau coïncide avec sa réduction linéaire ; faites glisser la première entrée ou la seconde entrée jusqu’à éteindre une unité, et la ReLU se sépare de la réduction.
Interactif : l’effondrement, et ce qui l’empêche
Retirez la nonlinéarité et la coupe devient une droite.
- Pré-activations
- 0.700, 1.000
- Sortie
- -0.150
- La couche réduite dit
- -0.150
- Unités éteintes
- 0
- Écart à l’affinité
- 0.150
Les deux couches se multiplient en la seule ligne [-0.050, -0.050], de sorte que sans nonlinéarité trois couches ou trente expriment exactement ce qu’une seule exprime : l’écart à l’affinité vaut 2e-16, soit zéro à la précision machine. Remettez ReLU et il vaut 0.150. Mais regardez où vous êtes. Les deux unités sont allumées, le redresseur ne fait donc rien ici, et le réseau renvoie -0.150 tandis que sa forme réduite renvoie -0.150 : le même nombre. C’est vrai aussi à l’entrée (1, 2) de la leçon. La profondeur n’achète pas une courbe. Elle achète des RÉGIONS, dont chacune reste une application affine, et les brisures de la coupe sont là où une pré-activation traverse zéro. Franchissez-en une et les deux réponses se séparent. Une note de comptage tant que la couche est sous les yeux : une couche dense de quatre entrées vers trois sorties contient 15 paramètres, et non 12. C’est le vecteur de biais que l’on oublie.
C. Une fonction qu’aucune couche seule ne peut calculer
Pour montrer que le pli compte, il nous faut une tâche qu’un modèle linéaire ne peut prouvablement pas accomplir. Le XOR est la tâche standard : deux entrées binaires, sortie quand elles diffèrent.
| XOR | ||
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Affirmation. Aucune fonction de la forme ne reproduit cette table.
Preuve. Supposons qu’il en existe une. Prenons les lignes tour à tour :
- impose .
- impose , donc .
- impose , donc .
- impose .
En substituant les trois premières dans la quatrième on obtient , alors qu’il fallait . La contradiction est inévitable : de tels n’existent pas.
Géométriquement, un modèle linéaire ne peut découper l’espace d’entrée que par une unique frontière droite, et les deux classes du XOR siègent sur des diagonales opposées - aucune droite ne les sépare.
D. Deux couches, déroulées à la main
Ajoutons maintenant une couche cachée de deux unités ReLU. Les poids ci-dessous sont choisis, non entraînés, de sorte que chaque nombre soit vérifiable :
Les deux unités cachées calculent ; elles ne diffèrent que par leur biais, si bien que la première s’active dès que la somme est positive et la seconde seulement quand la somme atteint . La couche de sortie soustrait deux fois la seconde de la première.
Prenons pas à pas :
Les quatre entrées :
| XOR | ||||
|---|---|---|---|---|
| 0 | ||||
| 1 | ||||
| 1 | ||||
| 0 |
Exact sur les quatre lignes.
Observez la première ligne. La pré-activation de la seconde unité vaut , et la ReLU la rabat à . Ce rabattement est l’unique source de la puissance supplémentaire du réseau : c’est le seul endroit où la composition cesse d’être linéaire. Retirez-le - posez - et l’effondrement de la section B s’applique à nouveau, si bien que le réseau redeviendrait incapable de calculer le XOR.
S'exécute dans votre navigateur. La première exécution télécharge l'environnement Python (~10 Mo), puis il est mis en cache.
E. Ce que la profondeur achète réellement
Chollet en donne l’image la plus claire. Imaginez une feuille de papier rouge et une bleue, empilées puis froissées ensemble en boule. La boule, ce sont vos données d’entrée ; chaque feuille est une classe. La tâche du modèle est de trouver une transformation qui défroisse la boule pour que les deux feuilles redeviennent proprement séparables.
Un réseau profond le fait par incréments : plutôt que de chercher une unique transformation extrêmement compliquée, il décompose le travail en une longue chaîne de transformations élémentaires, chacune étant un mouvement que vos doigts pourraient faire sur la boule de papier. Notre réseau XOR en est la plus petite instance possible - la couche cachée plie l’espace d’entrée de sorte que les deux classes, auparavant inséparables par toute droite, le deviennent par une seule.
C’est pourquoi la profondeur est une ressource réellement différente de la largeur. Toutes deux ajoutent des paramètres, mais la profondeur ajoute de la composition, et c’est la composition qui transforme une chaîne de transformations simples en une transformation compliquée.
La capacité n’est pas la compréhension. Chollet prend soin d’ajouter qu’un tel modèle est essentiellement une courbe de très haute dimension ajustée par descente de gradient, avec assez de paramètres pour pouvoir ajuster presque n’importe quoi - entraînez-le assez longtemps et il finira par mémoriser. La capacité de représenter une fonction n’est pas la capacité de généraliser à partir des données, qui est l’affaire du compromis biais-variance.
F. De la représentation à l’apprentissage
Nous avons choisi les poids du XOR à la main. Les vrais réseaux les découvrent, et le mécanisme est une fonction de perte - que Chollet appelle aussi fonction objectif - qui prend la prédiction du réseau et la cible véritable et calcule un score de distance résumant l’ampleur de l’échec. L’entraînement ajuste les poids pour réduire ce score.
Passer de « voici un score » à « voici comment chacun d’un million de poids doit changer » est le sujet de l’article suivant.
À retenir
- Une couche est une transformation paramétrée ; les poids sont tout ce que le réseau sait.
- Les couches linéaires empilées s’effondrent en une seule couche linéaire - n’est qu’une autre matrice - donc une non-linéarité entre elles est mathématiquement nécessaire, non un choix de réglage.
- Aucune couche linéaire seule ne peut calculer le XOR ; les quatre contraintes imposent , une contradiction.
- Une couche cachée de deux unités ReLU calcule le XOR exactement, et la seule étape non linéaire y est un unique rabattement de à .
- La profondeur fournit de la composition : une transformation compliquée décomposée en une chaîne de transformations élémentaires - le défroissement d’une variété de données replié, chez Chollet.
- Avoir assez de capacité pour représenter une fonction n’est pas généraliser à partir des données.
La suite
Nous avons fixé les poids du XOR à la main. Les trouver automatiquement suppose de calculer comment la perte réagit à chaque poids du réseau d’un seul coup, ce que fait exactement La rétropropagation et la descente de gradient.
Références et lectures complémentaires
- François Chollet, Deep Learning with Python, Manning (2nd edition, MEAP), 2020· Bibliothèque de référence Kudos AI
Les œuvres protégées par le droit d’auteur sont citées à titre de référence uniquement et ne sont pas hébergées ici ; veuillez consulter l’éditeur pour y accéder.