Objectifs du chapitre
À la fin de ce chapitre, vous serez capable de:
- appliquer la règle d'apprentissage du perceptron, énoncer et démontrer sa convergence sur des données linéairement séparables, et démontrer qu'aucun classifieur linéaire ne réalise le ou exclusif (XOR);
- décrire un perceptron multicouche par ses matrices de poids , ses biais et ses fonctions d'activation, compter ses paramètres et calculer à la main sa propagation avant;
- comparer la sigmoïde, la tangente hyperbolique et ReLU, et démontrer qu'un réseau sans non-linéarité n'est qu'un modèle affine;
- dériver la rétropropagation du gradient par la règle de dérivation en chaîne, la programmer, et la vérifier par différences finies;
- entraîner un petit réseau sur XOR par descente de gradient, lire ce qu'ont appris ses unités cachées, et reconnaître un entraînement bloqué sur un plateau;
- justifier les règles d'initialisation de Xavier et de He, expliquer la disparition du gradient, dire ce que garantit — et ce que ne garantit pas — le théorème d'approximation universelle, et régulariser un réseau par pénalité sur les poids et arrêt précoce.
Du modèle linéaire au neurone
Au chapitre 4, la régression logistique calculait un score , puis le transformait en probabilité par la sigmoïde: . Dessinez ce calcul comme un graphe: des flèches partent de chaque caractéristique , portent chacune un poids , et arrivent sur un nœud qui additionne ce qu'il reçoit, ajoute un biais et applique une fonction. Ce nœud est un , qu'on appelle aussi neurone artificiel (), et un réseau de neurones n'est rien d'autre qu'un assemblage de tels nœuds, la sortie des uns servant d'entrée aux autres.
Le vocabulaire vient de la biologie, et l'analogie est lâche. Un neurone biologique reçoit des signaux de milliers d'autres par ses synapses, et émet à son tour un signal quand l'excitation qu'il reçoit dépasse un seuil; c'est cette image, très simplifiée, qui a inspiré les premiers modèles dans les années 1940 et 1950. Les réseaux de ce chapitre n'ont plus grand-chose de biologique: ce sont des fonctions paramétrées, composées de produits matriciels et de fonctions d'une variable, que l'on entraîne par descente de gradient. Gardez le mot «neurone» comme un nom commode, pas comme une thèse sur le cerveau.
Ce chapitre suit le chemin historique, parce qu'il est aussi le chemin logique. On commence par un neurone seul, le perceptron, et sa règle d'apprentissage; on bute sur un problème qu'aucun neurone seul ne résout; on empile des neurones en couches pour le résoudre; et il faut alors apprendre des paramètres cachés au milieu du réseau, ce que fait la rétropropagation du gradient. Les réseaux convolutifs, l'abandon (dropout) et les transformeurs, qui ont fait le succès de l'apprentissage profond, sont l'objet du chapitre 11; ils reposent tous sur ce qui suit.
Le perceptron
La régression logistique est donc un neurone d'activation , et le perceptron un neurone d'activation : tous deux sont des classifieurs linéaires au sens de la définition 4.1, puisque leur frontière de décision est l'hyperplan . Une précision de convention: la définition 4.1 attribue la classe 1 quand le score est strictement positif, alors que le perceptron, avec , attribue aussi la classe 1 aux points sur la frontière. Dans ce chapitre, un score nul donne donc la classe 1; la démonstration du théorème 10.1, l'exemple 10.1 et la question 10.1 en dépendent. La différence est dans la sortie, une probabilité d'un côté et une classe de l'autre, et surtout dans la façon d'apprendre. La fonction de Heaviside est constante par morceaux: sa dérivée est nulle partout sauf en , où elle n'existe pas, et la descente de gradient n'a rien à suivre — c'est le défaut de la perte 0–1 relevé au chapitre 1. Rosenblatt a proposé une règle de correction directe.
La règle ne fait rien quand l'exemple est bien classé, puisque . Si un exemple positif est manqué (, ), on à , ce qui augmente son score de ; si un exemple négatif est pris pour positif, on retranche. Comparez avec un pas de descente de gradient stochastique sur l'entropie croisée, un exemple à la fois (théorème 4.2): . C'est la même formule, à ceci près que la probabilité y est remplacée par la classe : le perceptron ne corrige que ses erreurs, et il les corrige toutes avec la même force, qu'elles soient de justesse ou flagrantes.
Sur ces données, la règle a convergé. Ce n'est pas un hasard: dès qu'un hyperplan sépare les deux classes, elle s'arrête après un nombre fini de corrections. Pour l'énoncer, notons le «signe» de l'exemple . Un hyperplan de vecteur classe correctement l'exemple avec une marge si .
Démonstration. Notons le vecteur après la -ième correction, . Avec la convention , une erreur sur l'exemple signifie : si , le score était strictement négatif; si , il était positif ou nul. Dans les deux cas , et la correction s'écrit .
Le produit scalaire avec grandit au moins linéairement. En effet,
donc, par récurrence, .
La norme grandit au plus comme une racine. En développant le carré,
puisque le terme du milieu est négatif ou nul (c'était une erreur). Par récurrence, .
Conclusion. Par l'inégalité de Cauchy–Schwarz et ,
d'où , c'est-à-dire . Toute époque qui ne termine pas l'algorithme contient au moins une correction; il y en a donc au plus , suivies d'une époque sans erreur.
Sur l'exemple 10.1, les vecteurs augmentés sont , , et , donc . Le vecteur sépare les quatre exemples avec la marge (une recherche sur une grille ne trouve pas mieux). Attention: cette marge porte sur les vecteurs augmentés et normalise par , biais compris; ce n'est pas la marge géométrique de la définition 9.2, qui divise par la norme des seuls poids, . Avec ce , la borne (10.3) vaut corrections. La règle en a fait onze. La borne est pessimiste, mais elle est , et elle ne dépend ni du nombre d'exemples ni de la dimension: seulement du rapport entre la taille des données et la largeur du couloir qui sépare les classes.
L'hypothèse de séparabilité n'est pas décorative. Sur le jeu B complet (données fictives, construites pour le cours), qui n'est pas linéairement séparable à cause de E8 et E15, la règle ne s'arrête jamais: après 2 000 époques, elle a commis 6 817 corrections et en commet encore à chaque époque. Le vecteur ne converge pas, il erre. Retirez E8 et E15, et les quatorze courriels restants sont séparés après six époques; c'est l'objet de la question 10.1.
Complétez predire(theta, x), qui renvoie 1 si et 0 sinon, et entrainer_perceptron(donnees, epoques_max), qui applique la règle (10.2) avec depuis [0, 0, 0], en parcourant les exemples dans l'ordre, et renvoie le couple (theta, epoques): le vecteur final et le numéro de la première époque sans erreur, ou None si epoques_max époques n'ont pas suffi. Le programme entraîne le perceptron sur le jeu B privé de E8 et E15, puis sur XOR.
Ce qu'un neurone seul ne peut pas faire: XOR
Le ou exclusif (exclusive or, XOR) de deux bits vaut 1 si exactement l'un des deux vaut 1:
| 0 | 0 | 1 | 1 | |
|---|---|---|---|---|
| 0 | 1 | 0 | 1 | |
Dans le plan, les deux exemples de classe 1 occupent deux coins opposés du carré unité, et les deux exemples de classe 0 les deux autres. Aucune droite ne peut mettre et d'un côté et et de l'autre; on le voit, et cela se démontre en trois lignes.
Démonstration. Supposons qu'un tel vecteur existe. Les deux points de classe 1 donnent et ; en additionnant, . Les deux points de classe 0 donnent et ; en additionnant, . Les deux conclusions se contredisent. Pour la régression logistique, équivaut à (théorème 4.1), et le même argument s'applique avec des inégalités strictes et larges échangées.
L'argument a une lecture géométrique: la somme des deux points de classe 1 est égale à la somme des deux points de classe 0, , donc les milieux des deux diagonales coïncident en . Une fonction affine prend en ce milieu la moyenne de ses valeurs aux deux bouts de chaque diagonale; elle ne peut pas être positive sur une diagonale et strictement négative sur l'autre. Le meilleur classifieur linéaire se trompe donc au moins une fois sur quatre.
Que fait le perceptron sur XOR? Le théorème 10.1 ne dit rien, faute de séparabilité, et le calcul montre un cycle. Depuis , il commet 3 erreurs pendant chacune des deux premières époques, puis 4 erreurs à chaque époque à partir de la troisième, en revenant au même vecteur à la fin de chacune: après 1 000 époques, il a fait 3 998 corrections et n'a rien appris.
Il y a deux façons de sortir de l'impasse.
Changer les caractéristiques à la main. Ajoutons la caractéristique . Le score vaut en et en , et en et en : dans l'espace , XOR est séparable. C'est l'idée des caractéristiques polynomiales du chapitre 2 et des noyaux du chapitre 9, où l'exemple 9.3 rend XOR séparable de cette façon. Elle exige de savoir caractéristique ajouter, ou d'en ajouter tant que le calcul devient lourd.
Apprendre les caractéristiques. Composons des neurones. Avec trois perceptrons,
on obtient:
Le neurone réalise le OU (OR), le NON-ET (NAND), et le neurone de sortie fait le ET de leurs deux réponses: «au moins un des deux, mais pas les deux», c'est la définition de XOR. Géométriquement, chacun des deux premiers neurones trace une droite, et , et la classe 1 est la bande comprise entre elles. Le point essentiel est ailleurs: , les quatre exemples deviennent , , et , et cette fois une droite les sépare. La couche cachée a fabriqué une représentation dans laquelle le problème est linéaire.
Reste un obstacle. Ces poids ont été trouvés à la main; pour les apprendre, il faut un gradient, et la fonction de Heaviside n'en fournit pas. On la remplace donc par une fonction dérivable — la sigmoïde, par exemple — et l'on obtient le perceptron multicouche.
Parmi ces fonctions booléennes de deux bits, lesquelles un perceptron seul peut-il réaliser exactement? (Plusieurs réponses possibles.)
Plusieurs réponses possibles
Le perceptron multicouche
Une remarque de notation s'impose: l'indice de couche , toujours écrit entre crochets en exposant, n'a rien à voir avec la perte ; le contexte les distingue sans ambiguïté. Le coefficient est le poids de la connexion qui va de l'unité de la couche à l'unité de la couche ; la -ième de contient donc les poids qui sur l'unité . Chaque couche est dite , ou (): chaque unité reçoit toutes les activations de la couche précédente.
Le nombre de paramètres se compte couche par couche: la couche a poids et biais, soit
Le réseau 2–2–1 qui va nous occuper en a .
La couche de sortie se choisit d'après la tâche, exactement comme aux chapitres précédents. En régression, , est l'identité et l'on minimise l'erreur quadratique moyenne. En classification binaire, , , la sortie est une probabilité et l'on minimise l'entropie croisée (définition 4.4). Avec , , est la softmax et la perte est l'entropie croisée catégorielle (définition 4.6). Regardez alors la dernière couche seule: elle reçoit le vecteur et calcule . — ou une régression linéaire, ou une régression multinomiale — dont les caractéristiques sont les activations de la dernière couche cachée. Un réseau de neurones est un modèle linéaire du chapitre 2 ou 4 posé sur des caractéristiques qui, au lieu d'être choisies à la main, sont elles-mêmes apprises.
Une image en niveaux de gris de pixels est mise à plat en un vecteur de nombres. On la classe parmi 10 chiffres par un perceptron multicouche 784–100–10 (une couche cachée de 100 unités, une sortie softmax de 10 unités). Combien de paramètres (poids et biais) ce réseau a-t-il?
Fonctions d'activation
Le perceptron utilisait la fonction de Heaviside, la régression logistique la sigmoïde. Pour un réseau entraîné par gradient, trois choix dominent.
La sigmoïde prend ses valeurs dans et sa dérivée ne dépasse jamais (théorème 4.1). La tangente hyperbolique en est une version recentrée et dilatée: en multipliant numérateur et dénominateur par , on obtient . Elle prend ses valeurs dans , vaut en et y a une pente . est la plus simple: elle laisse passer les valeurs positives et annule les négatives. La figure 10.2 les compare.
Pourquoi ne pas se passer d'activation, ou prendre l'identité? Parce que la profondeur ne servirait alors à rien.
Démonstration. Montrons par récurrence sur que . Pour , , avec et . Si c'est vrai au rang , alors est affine en ; une activation affine, avec diagonale, conserve cette forme, et .
Un réseau de cent couches sans non-linéarité n'est donc qu'un modèle linéaire écrit de façon compliquée: s'il se termine par une sigmoïde, c'est une régression logistique, et il échoue sur XOR comme elle (théorème 10.2). C'est la non-linéarité qui permet à la composition de couches de produire des frontières courbes et des représentations nouvelles. Notez qu'une non-linéarité très modeste suffit: ReLU est affine par morceaux, avec deux morceaux seulement, et un réseau ReLU calcule une fonction affine par morceaux qui peut en avoir un très grand nombre.
Chaque fonction a ses défauts. La sigmoïde et la tangente hyperbolique saturent: pour grand, leur dérivée est presque nulle, et une unité saturée ne transmet presque plus de gradient (exemple 10.3 et dernière partie de ce chapitre). La sigmoïde n'est en outre pas centrée: ses sorties sont toutes positives, ce qui biaise le signe des gradients de la couche suivante; la tangente hyperbolique corrige ce point. ReLU ne sature pas du côté positif et se calcule sans exponentielle, mais une unité dont la pré-activation est négative pour tous les exemples a une dérivée nulle partout et n'apprend plus jamais: on parle d'unité morte (dead unit). Des variantes comme leaky ReLU, qui donne une petite pente aux négatifs, existent pour cette raison. En pratique, ReLU et ses variantes dominent dans les couches cachées des réseaux profonds, la sigmoïde et la softmax restent en sortie, là où il faut une probabilité. Pour notre réseau à deux unités cachées, nous gardons la sigmoïde partout: la dérivée du chapitre 4 rend les calculs à la main plus légers.
Un réseau 2–50–50–1 a des couches cachées d'activation identité et une sortie sigmoïde. On l'entraîne sur XOR par descente de gradient, aussi longtemps qu'on veut. Que peut-il atteindre au mieux?
Entraîner un réseau: un coût qui n'est pas convexe
Entraîner un perceptron multicouche, c'est minimiser, comme aux chapitres précédents, son risque empirique
avec la perte qui convient à la couche de sortie, éventuellement augmenté d'une pénalité (dernière section). Il n'y a aucune forme close; on utilise la descente de gradient du chapitre 3, le plus souvent sous sa forme stochastique par mini-lots (définition 3.5).
Une différence fondamentale avec les chapitres 2 à 4 apparaît immédiatement: n'est pas convexe. Le chapitre 3 l'annonçait, et un argument de symétrie le montre. Échangez les deux unités cachées d'un réseau 2–2–1 — c'est-à-dire les deux lignes de , les deux composantes de et les deux coefficients de . Le réseau obtenu, , calcule exactement la même fonction que , puisqu'une somme ne dépend pas de l'ordre de ses termes, et a donc le même coût. Si était convexe, il vérifierait . Or le réseau entraîné sur XOR plus loin dans ce chapitre a un coût , tandis que le milieu de ses deux versions, dont les deux unités cachées sont identiques, a un coût de : il répond plus de sur les quatre exemples. L'inégalité de convexité est violée d'un facteur de près de 700.
Cette symétrie n'est pas une curiosité: un réseau à unités cachées a versions équivalentes de chacun de ses minima, et entre elles le coût remonte. La descente de gradient ne garantit donc plus d'atteindre le minimum global; elle peut s'arrêter près d'un minimum local ou ralentir sur un plateau, autour d'un point selle (définition 3.6). Nous verrons ce phénomène se produire sur XOR. Il faut néanmoins, pour descendre, le gradient de par rapport à tous les paramètres.
Le calculer coordonnée par coordonnée, par différences finies, coûterait deux évaluations de par paramètre. Chaque évaluation de demande une propagation avant sur les exemples, soit de l'ordre de multiplications par exemple. Pour le réseau 784–100–10 de la question 10.3, cela ferait propagations avant par pas de gradient. La rétropropagation obtient les dérivées partielles exactes pour le coût d'une propagation avant et d'une propagation arrière de coût comparable. C'est cette économie, d'un facteur proportionnel au nombre de paramètres, qui rend l'entraînement des réseaux possible.
La rétropropagation du gradient
Plaçons-nous dans le cas d'un réseau à une couche cachée, avec unités cachées d'activation , une sortie sigmoïde et l'entropie croisée, et fixons un exemple ; le gradient de sera la moyenne sur les exemples des gradients obtenus. Les équations de la propagation avant sont
où est une ligne, et la perte est . On appelle de la couche le gradient de la perte par rapport à sa pré-activation:
Démonstration. On applique la règle de dérivation en chaîne (annexe A) en suivant le graphe du calcul à rebours, de la perte vers l'entrée.
Erreur de sortie. La perte ne dépend des paramètres qu'à travers , et, comme fonction de , c'est exactement la perte de la régression logistique en fonction de son score. La démonstration du théorème 4.2 a établi que sa dérivée vaut . Donc .
Paramètres de sortie. , donc et . Comme et n'influencent la perte qu'à travers ,
ce qui est la première ligne de (10.7) écrite coefficient par coefficient.
Erreur de la couche cachée. La pré-activation n'influence la perte qu'à travers , qui n'intervient que dans , avec le coefficient . La règle de la chaîne donne
c'est-à-dire, pour le vecteur, .
Paramètres cachés. , et le poids n'intervient que dans . Donc
et la matrice des est le produit extérieur .
Trois choses sont à retenir de ces formules. D'abord leur forme: le gradient par rapport aux poids d'une couche est toujours le produit de l'erreur de cette couche par l'entrée de cette couche, — la même structure «écart fois entrée» qu'au théorème 4.2. Ensuite le sens du calcul: l'erreur de la couche cachée s'obtient à partir de celle de la sortie, en la renvoyant à travers les poids , transposés, puis en la multipliant par la pente locale . L'erreur remonte le réseau, d'où le nom de rétropropagation (). Enfin l': toutes les quantités nécessaires, , et , ont été calculées par la propagation avant; il suffit de les garder en mémoire. Avec , on a même , sans nouvelle exponentielle.
Rien dans la démonstration ne dépend du nombre de couches: chaque couche reçoit l'erreur de la suivante, la transforme de la même manière et la transmet à la précédente.
La démonstration reprend mot pour mot celle du théorème 10.4, par récurrence descendante sur ; elle fait l'objet de l'exercice 10.5. L'algorithme complet d'un pas de descente de gradient sur un mini-lot s'écrit alors: pour chaque exemple, une propagation avant qui garde les et ; le calcul de ; une propagation arrière par (10.8), qui produit les gradients (10.9) couche par couche; puis la moyenne des gradients sur le mini-lot et la mise à jour .
Pour le réseau 2–2–1 à activations sigmoïdes, ces formules tiennent en quelques lignes de Python. Un réseau est un dictionnaire de listes, et son gradient a la même forme:
import math
def sigmoide(z):
if z >= 0:
return 1 / (1 + math.exp(-z))
e = math.exp(z)
return e / (1 + e)
def propager(p, x):
"""Propagation avant du réseau 2–2–1: activations cachées et probabilité."""
a1 = [sigmoide(p["W1"][j][0] * x[
Remettez dans l'ordre les opérations d'un pas de descente de gradient sur un mini-lot pour un perceptron multicouche.
Glissez les éléments pour les mettre dans le bon ordre
- Renvoyer l'erreur vers les couches précédentes à travers les poids transposés, en la multipliant par la dérivée de l'activation
- Retrancher fois le gradient moyen à chaque poids et à chaque biais
- Calculer l'erreur de la couche de sortie, pour une sortie sigmoïde avec l'entropie croisée
- Former le gradient de chaque couche comme le produit de son erreur par son entrée, puis faire la moyenne sur le mini-lot
- Pour chaque exemple du mini-lot, propager l'entrée couche par couche en gardant les pré-activations et les activations
Vérifier un gradient par différences finies
Un gradient écrit à la main est faux plus souvent qu'on ne le croit: un indice inversé, une dérivée d'activation oubliée, un facteur en trop. Et un gradient faux ne fait pas planter le programme: la descente avance quand même, plus lentement, ou vers un mauvais point, sans aucun message. La parade, déjà utilisée à la question 4.4, est de comparer le gradient calculé à une approximation numérique. Pour chaque paramètre , on évalue
où est le -ième vecteur de la base canonique. Par la formule de Taylor (Analyse I), ; dans la différence, les termes pairs s'annulent, et l'erreur de (10.10) est en , d'ordre . On ne peut pas pour autant prendre minuscule: n'est connu qu'à la précision machine près, et la soustraction de deux nombres presque égaux, divisée par , amplifie cette erreur d'arrondi d'un facteur de l'ordre de . Les deux erreurs s'équilibrent pour de l'ordre de .
Complétez retropropagation(p, x, y), qui renvoie le gradient de la perte d'entropie croisée d'un exemple pour le réseau 2–2–1 à activations sigmoïdes, sous la forme d'un dictionnaire de même structure que le réseau: W1 (deux lignes de deux nombres), b1, W2 (deux nombres) et b2 (un nombre). Appliquez le théorème 10.4. Le programme affiche le gradient de l'exemple 10.3 et le compare aux différences finies (10.10), déjà programmées.
Entraîner le réseau sur XOR
Nous avons tout ce qu'il faut pour apprendre XOR au lieu de le construire. On initialise le réseau 2–2–1 au hasard, avec une graine fixée, puis on applique la descente de gradient sur les quatre exemples à la fois (descente «par lot complet»), avec le pas :
import random
XOR = [((0, 0), 0), ((0, 1), 1), ((1, 0), 1), ((1, 1), 0)]
def initialiser(graine):
"""Initialisation de Xavier uniforme (définition 10.5), biais nuls."""
random.seed(graine)
a1 = math.sqrt(6 / (2 + 2))
Le coût sur les quatre exemples évolue ainsi:
| Époque | 0 | 100 | 200 | 500 | 1 000 | 2 000 | 5 000 |
|---|---|---|---|---|---|---|---|
Le profil est typique d'un réseau. Pendant les deux cents premières époques, il ne se passe presque rien: le réseau initial répond environ partout, et le gradient y est petit (exemple 10.4). Puis le coût s'effondre entre 200 et 1 000 époques, quand les unités cachées se spécialisent, avant de décroître lentement. Après 5 000 époques, les paramètres valent
et les probabilités prédites sont pour , pour et , et pour .
Lisons ce que le réseau a appris. L'unité 1 s'active quand , c'est-à-dire : c'est un . L'unité 2 s'active quand , c'est-à-dire : c'est un . La sortie dépasse quand , ce qui exige que les deux unités soient actives: c'est un . Partie de poids au hasard, la descente de gradient a retrouvé, à l'échelle près, la construction OU, NON-ET, ET des trois perceptrons. Dans la couche cachée, les quatre points deviennent , deux fois, et : la figure 10.3 montre que cette représentation est linéairement séparable.
Le coût continue de baisser après 5 000 époques — à 10 000, à 20 000 — sans jamais atteindre zéro, et la norme des poids grandit pendant ce temps. Le réseau sépare parfaitement les données, et, comme la régression logistique sur des données séparables (théorème 4.4), il peut toujours réduire son coût en rendant ses réponses plus tranchées, c'est-à-dire ses poids plus grands. La dernière section de ce chapitre y revient.
Cet entraînement a réussi. Il aurait pu échouer. Avec la graine 9, l'initialisation est différente et l'histoire aussi:
| Époque | 0 | 100 | 200 | 500 | 1 000 | 2 000 | 5 000 |
|---|---|---|---|---|---|---|---|
| (graine 9) |
Après 5 000 époques, le réseau prédit pour et pour — deux réponses justes et sûres —, mais pour et pour : il ne sait rien de ces deux-là. Son coût s'approche de (il vaut après 20 000 époques), et la norme du gradient n'est plus que de : la descente rampe sur un plateau dont elle ne sortira pas en un temps raisonnable. Sur les douze graines 0 à 11, avec le même pas et le même nombre d'époques, onze atteignent un coût inférieur à , et seule la graine 9 reste bloquée. C'est la non-convexité annoncée, sous sa forme la plus concrète.
L'explorateur suivant vous met à la place de la couche cachée. Vous choisissez les deux droites des unités cachées; la couche de sortie, elle, est recalculée à chaque mouvement comme la meilleure régression logistique sur les activations cachées. C'est un dispositif didactique — un vrai réseau apprend toutes ses couches en même temps —, mais il isole la question essentielle: quelle représentation rend le problème linéaire?
Chaque unité cachée trace une droite en tirets: réglez son angle et sa position. La couche de sortie n'est pas à vous: pour vos deux unités, elle est recalculée comme la meilleure régression logistique sur les activations cachées, avec une petite pénalité sur ses poids pour qu'elle reste finie. À droite, les quatre points vus par la couche cachée: XOR est résolu exactement quand une droite les sépare. Rendez les deux droites sécantes, ou confondez-les, et regardez l'entropie croisée.
Placez les deux droites parallèles de part et d'autre de la diagonale , comme le réseau entraîné: dans le panneau de droite, les quatre points s'alignent de façon séparable et l'entropie croisée tombe autour de . Confondez les deux droites: les deux unités disent la même chose, la couche cachée n'a plus qu'une dimension utile, et l'on ne fait pas mieux que trois exemples sur quatre. Mettez une droite verticale et l'autre horizontale, toutes deux en : chaque unité recopie une entrée, la couche cachée reproduit XOR tel quel, et l'entropie croisée reste bloquée à . Une couche cachée ne sert que si elle les données.
Complétez pas_de_gradient(p, g, eta), qui renvoie un nouveau réseau dont chaque paramètre vaut l'ancien moins eta fois le gradient correspondant, et entrainer(p, donnees, eta, epoques), qui applique epoques pas de descente de gradient par lot complet et renvoie le couple (reseau final, historique), où historique[t] est le coût après t pas (historique[0] est donc le coût initial). Le gradient et l'initialisation sont fournis. Le programme reproduit l'entraînement sur XOR avec la graine 0.
Initialisation et disparition du gradient
L'entraînement de la graine 9 montre que le point de départ compte. Deux questions se posent: pourquoi initialiser au hasard, et à quelle échelle?
Pourquoi au hasard. Initialisez tous les paramètres du réseau 2–2–1 à zéro. Les deux unités cachées calculent alors la même chose, , et, comme leurs poids de sortie sont égaux, elles reçoivent la même erreur et le même gradient: elles restent identiques à chaque pas, pour toujours (exercice 10.3). Le réseau se comporte comme s'il n'avait qu'une seule unité cachée, et un tel réseau ne peut pas réaliser XOR. Sur XOR, c'est encore pire: au point zéro, le gradient est exactement nul, et la descente ne bouge pas du tout. Il faut briser la symétrie, et le hasard est la façon la plus simple de le faire.
À quelle échelle. Considérons une unité de la couche , , dont les poids sont tirés indépendamment, centrés, de variance , et indépendants des activations entrantes. Alors (Probabilités et statistique, chapitre 7). Si est nettement plus grand que 1, la variance des pré-activations est multipliée d'une couche à l'autre: elles deviennent grandes, et les sigmoïdes et tangentes hyperboliques saturent. S'il est nettement plus petit, les signaux s'éteignent en traversant le réseau. Le même raisonnement sur la propagation arrière (10.8), où l'erreur traverse , fait apparaître au lieu de .
Les bornes uniformes viennent de ce que la loi uniforme sur a pour variance . Le facteur 2 de He compense le fait que ReLU annule environ la moitié des pré-activations: si est symétrique, . Ces deux règles portent le nom de leurs auteurs, Glorot et Bengio (2010) et He et ses coauteurs (2015). Notre réseau 2–2–1 utilise Xavier: les poids de la couche cachée sont tirés dans , ceux de la sortie dans .
Le même calcul explique la disparition du gradient (vanishing gradient). La récurrence (10.8) multiplie l'erreur, à chaque couche traversée, par une matrice de poids et par les dérivées des activations. Avec la sigmoïde, chacune de ces dérivées vaut au plus : à moins que les poids ne soient grands — et alors les unités saturent —, l'erreur rétrécit couche après couche, et les premières couches d'un réseau profond n'apprennent presque rien. Le phénomène inverse, l'explosion du gradient (exploding gradient), se produit quand les facteurs dépassent 1; on le contient en bornant la norme du gradient (gradient clipping).
Mesurons-le. On construit un réseau de dix couches de vingt unités, sans biais, avec une entrée tirée uniformément dans et des poids initialisés par Xavier uniforme pour et , par He uniforme pour ReLU (graine 0). On rétropropage depuis la dernière couche un gradient fixé , de norme 1, et l'on relève la norme de l'erreur à quelques profondeurs:
| Activation |
|---|
Avec la sigmoïde, l'erreur qui atteint la première couche est un million de fois plus petite que celle de la dernière (le rapport vaut ; il vaut et avec les graines 1 et 2): un pas de gradient qui fait bouger la dernière couche laisse la première immobile. Avec et Xavier, l'erreur perd un facteur de l'ordre de 3 sur dix couches; avec ReLU et He, elle garde son ordre de grandeur. Ce sont ces choix — ReLU, une initialisation à la bonne échelle, puis la normalisation des activations et les connexions résiduelles, que nous ne faisons que nommer — qui ont rendu entraînables les réseaux de dizaines de couches. Le chapitre 11 reprend ces techniques là où elles servent.
L'approximation universelle: ce qu'elle promet et ce qu'elle ne promet pas
Un réseau à une couche cachée réalise XOR. Que peut-il réaliser d'autre? La réponse classique est: à peu près tout, dans un sens précis.
Le résultat a été démontré pour les activations sigmoïdales par Cybenko (1989) et par Hornik, Stinchcombe et White (1989), puis, sous la forme énoncée ici, pour toute activation continue non polynomiale par Leshno, Lin, Pinkus et Schocken (1993). Nous l'admettons: les démonstrations reposent sur l'analyse fonctionnelle — le théorème de Hahn–Banach ou celui de Stone–Weierstrass, dans des espaces de fonctions continues —, qui dépasse les prérequis de ce cours. La condition «non polynomiale» est nécessaire: avec une activation polynomiale de degré , est un polynôme de degré au plus , et l'on ne peut pas approcher toutes les fonctions continues.
L'idée, en dimension 1 et avec la sigmoïde, se voit pourtant sans analyse fonctionnelle. La différence , pour et grand, vaut presque 1 sur et presque 0 en dehors: c'est une «bosse», calculée par deux unités cachées (exercice 10.4). Une fonction continue sur un intervalle fermé est uniformément continue; on peut donc l'approcher à près par une fonction en escalier sur une grille assez fine, et chaque marche est une bosse. Une somme de bosses, c'est un réseau à une couche cachée.
Ce théorème est souvent cité comme la justification des réseaux de neurones. Il faut lire ce qu'il dit, et surtout ce qu'il ne dit pas.
- Il ne dit pas combien d'unités il faut. La construction en escalier en demande un nombre qui croît comme pour une grille de pas en dimension : astronomique dès que dépasse quelques unités. Le théorème garantit l'existence de , pas qu'il soit raisonnable.
- Il ne dit pas qu'on trouvera les paramètres. C'est un résultat d'existence. La descente de gradient minimise un coût non convexe et peut rester bloquée, comme avec la graine 9: le bon réseau existait — il en existe même une infinité —, et l'entraînement ne l'a pas trouvé.
- Il ne dit rien de la généralisation. Il porte sur une fonction connue partout sur , pas sur exemples bruités. Un réseau assez grand peut passer par tous les exemples d'entraînement, bruit compris, et c'est exactement le surapprentissage du chapitre 6. Pouvoir tout représenter, c'est aussi pouvoir représenter le bruit.
Un collègue affirme: «Par le théorème d'approximation universelle, un réseau à une couche cachée assez large, entraîné assez longtemps sur nos 500 exemples, prédira correctement le loyer de n'importe quel appartement.» Quelles objections sont fondées? (Plusieurs réponses possibles.)
Plusieurs réponses possibles
Régulariser un réseau
Un réseau de neurones est un modèle très flexible, et il surapprend comme les polynômes de haut degré du chapitre 6. Les deux régularisations de ce chapitre-là s'y transposent directement.
Le gradient de la pénalité par rapport à est , et un pas de descente s'écrit
À chaque pas, les poids sont multipliés par un facteur légèrement inférieur à 1 avant la correction habituelle: ils «décroissent» d'eux-mêmes, sauf si les données les retiennent. D'où le nom.
Sur XOR, l'effet se mesure. Reprenons l'entraînement de la graine 0, avec , et suivons l'entropie croisée et la norme des poids:
| Époques | Norme des poids | pour et | ||
|---|---|---|---|---|
| 5 000 |
Sans pénalité, les poids grandissent indéfiniment et le réseau devient de plus en plus catégorique, comme la régression logistique du théorème 4.4: il n'y a pas de minimum, seulement une fuite vers l'infini. Avec , l'entraînement se stabilise: les poids s'arrêtent à une norme de , les prédictions restent justes mais modérées ( et ), et rien ne change plus entre 5 000 et 50 000 époques. Avec , la pénalité l'emporte sur les données: tous les poids sont ramenés vers zéro et le réseau répond partout, sans rien avoir appris. Comme pour la ridge, est un hyperparamètre, et il se choisit par validation (chapitres 5 et 6).
L'arrêt précoce (définition 6.7) est l'autre régularisation de base: on surveille l'erreur sur un ensemble de validation pendant l'entraînement et l'on garde les paramètres de l'époque où elle était la plus basse. Le chapitre 6 a montré, sur la descente de gradient d'un modèle quadratique, qu'arrêter tôt empêche les poids de devenir grands, ce qui le rapproche de la pénalité sur les poids. Pour un réseau, l'argument n'est plus exact — le coût n'est pas quadratique —, mais le constat empirique est le même, et c'est l'une des régularisations les plus employées. Elle a un avantage pratique: elle ne coûte rien, puisqu'elle raccourcit l'entraînement. Sur XOR, elle n'a pas de sens, faute d'exemples à mettre de côté: les quatre exemples sont tout l'univers du problème.
La taille du réseau, enfin, est elle-même un hyperparamètre de capacité: le nombre de couches et d'unités joue le rôle du degré d'un polynôme. Les régularisations propres aux réseaux profonds — l'abandon (dropout) et l'augmentation de données — sont présentées au chapitre 11.
Synthèse
- Le perceptron est un neurone d'activation de Heaviside; sa règle converge en au plus corrections sur des données séparables avec la marge (onze corrections sur le ET, pour une borne de 51), et ne converge pas sinon. : aucun neurone seul ne le réalise.
Combien de paramètres (poids et biais) a un perceptron multicouche 3–5–5–1?
Exercices
Vous pouvez afficher le corrigé directement sous chaque énoncé après avoir cherché la solution.
Un réseau a trois entrées, une couche cachée de quatre unités ReLU et une sortie softmax à deux classes. Ses paramètres sont
On applique la règle (10.2), avec et au départ, au OU logique: les exemples, dans cet ordre, sont , , et .
On considère un réseau à une couche cachée de unités d'activation , une sortie sigmoïde et l'entropie croisée, entraîné par descente de gradient par lot complet.
- On suppose que deux unités cachées et ont, à un instant donné, les mêmes poids entrants (), le même biais et le même poids sortant (). Montrez qu'elles reçoivent exactement les mêmes gradients, et qu'elles sont donc encore identiques après le pas. Concluez qu'elles le restent pendant tout l'entraînement.
Pour , on pose .
On considère un perceptron multicouche (10.4) à couches et un exemple , et l'on pose .
- Démontrez la récurrence (10.8) et les formules (10.9) du théorème 10.5.
Références
- Goodfellow, I., Bengio, Y. et Courville, A., Deep Learning, MIT Press, 2016, chap. 6 (réseaux à propagation avant, fonctions d'activation, rétropropagation, approximation universelle) et chap. 8 (initialisation, difficultés de l'optimisation).
- Bishop, C. M., Pattern Recognition and Machine Learning, Springer, 2006, chap. 5 (réseaux de neurones, rétropropagation, vérification par différences finies, régularisation).
- Shalev-Shwartz, S. et Ben-David, S., Understanding Machine Learning: From Theory to Algorithms, Cambridge University Press, 2014, chap. 9 (le perceptron et sa convergence) et chap. 20 (réseaux de neurones).
- Hastie, T., Tibshirani, R. et Friedman, J., The Elements of Statistical Learning, Springer, 2ᵉ éd., 2009, chap. 11 (réseaux de neurones, pénalité sur les poids, valeurs initiales).
- Rosenblatt, F., «The perceptron: a probabilistic model for information storage and organization in the brain», Psychological Review, 1958.
- Rumelhart, D. E., Hinton, G. E. et Williams, R. J., «Learning representations by back-propagating errors», Nature, 1986.