Aller au contenu
English

Neurones et couches

  • Leçon 2
  • 50 min
  • Module 1 : Ce qu'est un réseau de neurones

Ce que vous saurez faire

Ouvrez un réseau de neurones pour voir ce qu’il contient : des neurones, regroupés en couches. Chacun calcule une somme pondérée que vous connaissez déjà. Vous pourrez ensuite lire un schéma de réseau et compter les nombres que l’entraînement doit apprendre.

Carnet JupyterUn neurone à la main, dans un carnet Jupyter (facultatif)Colab · Kaggle · GitHub · en anglais

Le carnet (notebook) Jupyter calcule un neurone en Python simple et compare le résultat à la régression logistique de scikit-learn. Il calcule ensuite une couche et compte les poids du réseau de billets de soutien. Vous pouvez suivre la leçon sans code. Environ 20 minutes.

Le carnet est en anglais. Colab et Kaggle ouvrent votre propre copie. Il faut un compte Google ou Kaggle gratuit. Vous êtes bloqué ? Consultez le carnet de solution.

Avant de commencerCe qu’il faut savoir et avoir sous la mainEnviron 50 minutes

Ce que vous devez savoir

Ce qu’il vous faut sur votre ordinateur

  • Un navigateur et une calculatrice. Le carnet facultatif s’ouvre dans Colab ou Kaggle et ne demande aucune installation.

Le carnet a été testé avec Python 3.12, NumPy 2.5, scikit-learn 1.9.1 et PyTorch 2.14.1.

Prendre un parapluie : une décision fondée sur des indices pondérés

Section intitulée « Prendre un parapluie : une décision fondée sur des indices pondérés »

Avant de sortir, vous décidez si vous prenez un parapluie. Vous ne suivez pas une règle écrite. Vous pesez quelques indices. Les nuages sombres comptent beaucoup. Les prévisions météo comptent beaucoup aussi. Un vent fort compte un peu, et un ciel bleu compte contre. Vous additionnez tout dans votre tête. Si le total est assez élevé, vous prenez le parapluie.

Deux éléments rendent cette décision personnelle. Les poids : l’importance que vous accordez à chaque indice. Et votre point de départ : une personne prudente prend un parapluie dès le premier nuage. Une personne détendue le prend seulement en cas de tempête. Changez l’un ou l’autre, et le même ciel donne une décision différente.

C’est tout ce que fait un neurone artificiel. Il reçoit des nombres, donne un poids à chacun et les additionne avec un point de départ. Il transforme ensuite le total en réponse.

Un neurone : une somme pondérée, un biais et une activation

Section intitulée « Un neurone : une somme pondérée, un biais et une activation »

Un neurone calcule sa sortie en deux étapes :

  1. Une somme pondérée plus un biais. Il multiplie chaque entrée par son propre poids et additionne les résultats. Il ajoute ensuite un autre nombre, le biais : le point de départ qui augmente ou diminue le total pour toute entrée. Le résultat s’appelle z.
  2. Une activation. Une fonction fixe transforme z en sortie du neurone. La fonction logistique est un choix courant. Cette courbe en S transforme tout z en un nombre entre 0 et 1.

Vous connaissez déjà ces deux étapes. Dans le cours d’apprentissage automatique, la régression logistique calculait son score exactement ainsi : z = intercept + weight × feature + …, puis la courbe en S. L’ordonnée à l’origine de ce modèle est le biais ici. Un neurone avec une activation logistique est une régression logistique. Les deux domaines se sont développés séparément. Les mêmes nombres portent donc deux noms.

Le nom vient du cerveau. Une cellule du cerveau, un neurone, reçoit des signaux de nombreuses autres cellules. Certains signaux favorisent son activation, d’autres la freinent. Le neurone s’active quand le total est assez fort. Dans les années 1940 et 1950, des chercheurs ont conçu un modèle simple de ce mécanisme : entrées, poids, somme et seuil.

Ne poussez pas cette comparaison trop loin. Un vrai neurone est une cellule vivante avec des réactions chimiques, des rythmes et des milliers de connexions toujours changeantes. Un neurone artificiel tient en trois lignes de calcul. L’apprentissage profond a emprunté le nom et l’image, pas la biologie. Dire qu’un réseau « pense comme un cerveau » est très approximatif.

Exemple détaillé : le score de transfert est un neurone

Section intitulée « Exemple détaillé : le score de transfert est un neurone »

Dans le cours d’apprentissage automatique, Priya a entraîné une régression logistique. Elle estime la probabilité qu’un billet soit transféré à un niveau supérieur. Elle utilisait quatre variables. Voici les nombres réellement appris, arrondis à quatre décimales comme dans le cours :

  • biais (l’ordonnée à l’origine) : −0,7279
  • poids : priority −0,8938, word_count +0,0052, prior_tickets_90d +0,0233, created_hour −0,0096

Prenez un billet : priorité 1, 250 mots, 3 billets précédents dans les 90 derniers jours, rédigé à 10 h. Dessinez le modèle comme un neurone : chaque nombre a sa place.

Un neurone. Quatre entrées, priority 1, word_count 250, prior_tickets_90d 3 et created_hour 10, sont chacune multipliées par un poids : moins 0,8938, plus 0,0052, plus 0,0233 et moins 0,0096. Des flèches mènent à un cercle : somme plus biais, moins 0,7279. Il donne z égal à moins 0,348. La courbe logistique en S le transforme en score de 0,414. Sous l'image : le même modèle écrit sous forme de régression logistique du cours d'apprentissage automatique.
Le modèle de transfert du cours d'apprentissage automatique, dessiné comme un neurone. L'étape 1 est la somme pondérée plus le biais; l'étape 2 est l'activation. La formule en dessous représente le même modèle, écrit sous forme de régression logistique.
Description textuelle du diagramme

Quatre cases d’entrée à gauche représentent un billet : priority = 1, word_count = 250, prior_tickets_90d = 3 et created_hour = 10. Chaque entrée passe par un poids : × −0,8938, × +0,0052, × +0,0233 et × −0,0096. Quatre flèches mènent à un cercle portant l’étiquette « somme + biais (−0,7279) ». C’est l’étape 1, la somme pondérée plus le biais. Sa sortie est z = −0,348. La case suivante est la courbe logistique en S : l’étape 2, l’activation. La sortie est le score 0,414.

Une case sous l’image présente le même modèle sous forme de régression logistique. Elle indique : z = −0,7279 − 0,8938 × priority + 0,0052 × word_count + 0,0233 × prior_tickets_90d − 0,0096 × created_hour, et score = 1 ÷ (1 + e^(−z)).

Calculez maintenant le résultat. Multipliez d’abord chaque entrée par son poids :

Entrée Valeur × Poids =
priority 1 −0,8938 −0,894
word_count 250 +0,0052 +1,300
prior_tickets_90d 3 +0,0233 +0,070
created_hour 10 −0,0096 −0,096

Additionnez ensuite les quatre produits et le biais : −0,894 + 1,300 + 0,070 − 0,096 − 0,728 = −0,348. C’est z. Enfin, la courbe en S : z = −0,348 donne un score de 0,414. Vérifiez avec une calculatrice : 1 ÷ (1 + e^0,348) = 1 ÷ 2,416 = 0,414.

C’est ce que predict_proba calcule pour un tel billet dans le cours d’apprentissage automatique, à l’arrondissement des poids près. Rien de nouveau ne s’est produit; vous l’avez seulement dessiné autrement. La nouvelle idée vient ensuite : plusieurs neurones à la fois.

Un neurone calcule une seule somme pondérée. Il peut donc apprendre une caractéristique : une combinaison des entrées. Pour le transfert, c’était suffisant, car un seul score donnait toute la réponse.

Le routage d’un billet demande plus. Ce billet parle-t-il d’argent? De quelque chose de brisé? D’un article arrivé brisé, ou d’un article qui s’est brisé après un mois? De connexion à un compte? Chacun correspond à une combinaison différente de mots. Une seule somme pondérée ne peut pas toutes les suivre à la fois : elle n’a qu’un poids par mot. « Remboursement » ne peut pas orienter vers les paiements et servir en même temps d’indice pour les retours.

Une couche : plusieurs neurones qui lisent les mêmes entrées

Section intitulée « Une couche : plusieurs neurones qui lisent les mêmes entrées »

La réponse est simple : utilisez plusieurs neurones côte à côte. Chacun lit toutes les mêmes entrées, mais possède ses propres poids et son propre biais. Chacun peut donc apprendre une combinaison différente. Un groupe de neurones qui lisent les mêmes entrées est une couche.

Voici une toute petite couche : deux entrées et trois neurones, avec des poids inventés. Les entrées sont 2 et 1.

Neurone Poids Biais Somme pondérée + biais
1 1 et 1 −1 1 × 2 + 1 × 1 − 1 = 2
2 1 et −1 0 1 × 2 − 1 × 1 + 0 = 1
3 −0,5 et 2 0,5 −0,5 × 2 + 2 × 1 + 0,5 = 1,5

Deux nombres entrent; trois nombres sortent : 2, 1 et 1,5. Chaque sortie représente le point de vue d’un neurone sur la même entrée. Le neurone 1 additionne les deux entrées; le neurone 2 regarde leur différence. Le neurone 3 s’intéresse surtout à la deuxième entrée. Dans un réseau entraîné, personne ne choisit ces poids. L’entraînement trouve des poids qui rendent le point de vue de chaque neurone utile.

Cette leçon laisse de côté l’activation dans la couche pour l’instant. La prochaine leçon montre pourquoi elle est essentielle.

Un réseau enchaîne des couches : les sorties d’une couche deviennent les entrées de la suivante. Le schéma montre un petit réseau avec deux nombres d’entrée, une couche de quatre neurones et un neurone de sortie.

Un petit réseau. Deux cases d'entrée, caractéristique 1 et caractéristique 2. Chacune est reliée aux quatre neurones cachés, h1 à h4 : 8 lignes. Chaque neurone caché est relié à un neurone de sortie : 4 lignes. Étiquettes : 2 fois 4 égale 8 poids plus 4 biais; 4 fois 1 égale 4 poids plus 1 biais. Chaque ligne est un poids. Chaque neurone a aussi un biais. 12 plus 5 égale 17 nombres à apprendre.
Un réseau avec 2 entrées, une couche cachée de 4 neurones et 1 neurone de sortie. Chaque ligne est un poids, et chaque neurone a un biais : 17 nombres à apprendre.
Description textuelle du diagramme

À gauche, la couche d’entrée : deux nombres, caractéristique 1 et caractéristique 2. Au milieu, la couche cachée : quatre neurones, h1 à h4. À droite, la couche de sortie : un neurone, « out » (sortie).

Chaque entrée est reliée à chaque neurone caché : 2 × 4 = 8 lignes, donc 8 poids. Ajoutez 4 biais, un par neurone caché : 12 nombres. Chaque neurone caché est relié au neurone de sortie : 4 poids, plus 1 biais : 5 nombres. Chaque ligne est un poids. Au total, 12 + 5 = 17 nombres à apprendre.

Les couches ont des noms. La couche d’entrée n’est pas vraiment une couche de neurones : ce sont les nombres d’entrée eux-mêmes. La couche de sortie donne la réponse : un nombre ici, un score par équipe pour Larkfield. Chaque couche entre les deux est une couche cachée. Elle est « cachée » parce que ses valeurs ne figurent nulle part dans les données. Personne ne les étiquette ni ne dit au réseau ce qu’elles devraient être. L’entraînement décide ce que calcule chaque neurone caché.

Chaque ligne entre deux neurones est un poids. Chaque neurone d’une couche cachée ou de sortie a un biais. Une couche avec n entrées et m neurones a donc n × m poids et m biais. Pour le réseau du schéma :

  • entrée → cachée : 2 × 4 = 8 poids, plus 4 biais = 12;
  • cachée → sortie : 4 × 1 = 4 poids, plus 1 biais = 5;
  • total : 12 + 5 = 17 nombres.

En apprentissage profond, tous ces poids et biais sont les paramètres du réseau : les nombres que l’entraînement apprend. Vous avez rencontré ce mot dans Paramètres et hyperparamètres, pour l’ordonnée à l’origine et les coefficients.

Dans le module 2, vous construisez le premier réseau de billets du cours. Il lit un billet sous forme de fréquences de mots, comme le modèle linéaire de la leçon précédente. Il a une entrée par élément d’une liste fixe de mots, construite à partir des billets d’entraînement. Cela donne 2 864 entrées. Une couche cachée de 64 neurones suit. La couche de sortie a 5 neurones : un score pour chaque équipe.

Comptez ses paramètres avec la même règle :

  • entrée → cachée : 2 864 × 64 = 183 296 poids, plus 64 biais = 183 360;
  • cachée → sortie : 64 × 5 = 320 poids, plus 5 biais = 325;
  • total : 183 360 + 325 = 183 685 paramètres.

Tomás siffle. « 183 685 nombres. Qui les règle tous? » Personne, à la main. Avant l’entraînement, ce sont de petits nombres aléatoires. Avec des poids aléatoires, le réseau ne route correctement que 18,2 % des billets de validation. Ce n’est pas mieux qu’un choix au hasard parmi cinq équipes. Le module 3 montre comment l’entraînement modifie les 183 685 nombres, petit à petit, jusqu’à router correctement 98,3 % des billets.

Amira, la développeuse qui fera fonctionner le routage dans l’application de soutien, note l’autre conséquence de ce nombre. Chaque paramètre doit être stocké et utilisé pour chaque billet. À 4 octets chacun, 183 685 nombres occupent environ 0,7 Mo : c’est minuscule aujourd’hui. Les modèles de langage du module 7 en ont des centaines de millions.

Quand ajouter des neurones et des couches, et à quel coût

Section intitulée « Quand ajouter des neurones et des couches, et à quel coût »

Plus de neurones dans une couche permettent au réseau d’apprendre plus de caractéristiques à la fois. Plus de couches lui permettent de construire des caractéristiques à partir d’autres caractéristiques. C’est de là que vient la puissance d’un réseau.

Mais chaque paramètre doit être appris à partir d’exemples. Avec beaucoup de paramètres et peu d’exemples, un réseau peut mémoriser les données d’entraînement, erreurs comprises. C’est le surapprentissage, que vous connaissez grâce à Données d’entraînement, de validation et de test. Plus de paramètres demandent aussi plus de temps d’entraînement et de mémoire. Commencez donc petit. Agrandissez le réseau seulement si les résultats de validation montrent qu’il en a besoin. L’explorateur de la prochaine leçon le montre en image, et le module 4 y revient.

Exercice guidé : un neurone et un décompte, à la main

Section intitulée « Exercice guidé : un neurone et un décompte, à la main »
  1. Un neurone a deux poids, 0,5 et −1, et un biais de 0,2. Ses entrées sont 3 et 1. Calculez la somme pondérée plus le biais. Vous devriez obtenir z = 0,7.
  2. Appliquez la fonction logistique : 1 ÷ (1 + e^(−0,7)). Vous devriez obtenir environ 0,668.
  3. Un réseau a 4 entrées, une couche cachée de 3 neurones et une couche de sortie de 2 neurones. Comptez les paramètres de chaque couche, puis le total.
  4. Comparez vos réponses avec l’exemple de réponse.
Afficher l’exemple de réponse
  1. z = 0,5 × 3 + (−1) × 1 + 0,2 = 1,5 − 1 + 0,2 = 0,7.
  2. e^(−0,7) = 0,497, donc la sortie est 1 ÷ 1,497 = 0,668.
  3. Entrée → cachée : 4 × 3 = 12 poids + 3 biais = 15. Cachée → sortie : 3 × 2 = 6 poids + 2 biais = 8. Total : 23 paramètres.

Dans le carnet, la section 2 vérifie les étapes 1 et 2, et la section 4 vérifie le décompte.

Changez une condition du réseau de billets : Tomás veut 128 neurones cachés plutôt que 64. Avant de compter, faites une prédiction : le nombre de paramètres double-t-il, augmente-t-il de plus du double ou de moins du double? Faites ensuite le décompte.

Afficher la réponse

Entrée → cachée : 2 864 × 128 = 366 592 poids + 128 biais = 366 720. Cachée → sortie : 128 × 5 = 640 poids + 5 biais = 645. Total : 367 365 paramètres.

C’est presque exactement le double (183 685 × 2 = 367 370). Presque tous les paramètres se trouvent entre les entrées et la couche cachée. Cette partie grandit proportionnellement au nombre de neurones cachés. Les 2 864 entrées rendent la première couche coûteuse. La doubler vaut la peine seulement si les résultats de validation s’améliorent.

Erreur courante

Un petit poids interprété comme un petit effet

Symptôme : Tomás regarde le neurone de transfert et dit : « word_count a le plus petit poids, 0,0052. Ça compte à peine. » Mais dans l’exemple détaillé, word_count ajoute +1,300 à z. C’est le plus grand des quatre termes, plus grand que le −0,894 de priority.

Cause : un poids est défini « par unité de l’entrée ». Un billet contient des centaines de mots, donc un petit poids par mot finit par s’accumuler. La priorité va seulement de 1 à 3; elle a donc besoin d’un grand poids pour compter. La taille d’un poids ne dit rien à elle seule; son effet est poids × entrée.

Correction : pour voir ce qui influence une sortie, regardez les produits, poids × entrée, comme dans le tableau de l’exemple détaillé. Pour comparer les poids entre eux, mettez d’abord les entrées sur une même échelle, comme dans Prétraiter avec un pipeline. Les réseaux ont aussi besoin de cette mise à l’échelle. Des entrées sur des échelles très différentes ralentissent aussi l’entraînement.

Vérifiez votre compréhension

Dans vos mots : que calcule un neurone, et quel est son lien avec la régression logistique?

Afficher la réponse

Un neurone multiplie chaque entrée par son poids, additionne les résultats et un biais, et obtient z. Ensuite, une fonction d’activation transforme z en sortie. Avec la fonction logistique comme activation, c’est exactement une régression logistique. Le biais est l’ordonnée à l’origine, les poids sont les coefficients, et la sortie est le score.

Vérifiez votre compréhension

Un réseau a 3 entrées, une couche cachée de 5 neurones et une couche de sortie de 2 neurones. Combien de paramètres a-t-il? Montrez le calcul pour chaque couche.

Afficher la réponse

Entrée → couche cachée : 3 × 5 = 15 poids + 5 biais = 20. Couche cachée → sortie : 5 × 2 = 10 poids + 2 biais = 12. Total : 20 + 12 = 32 paramètres.

Vérifiez votre compréhension

Pourquoi dit-on qu'une couche est cachée, et qui décide ce que ses neurones calculent?

Afficher la réponse

Ses valeurs n’apparaissent nulle part dans les données. Les données contiennent les entrées et les bonnes réponses, mais aucune valeur pour les neurones entre les deux. Personne ne leur attribue d’étiquettes ni ne dit au réseau quelles valeurs ils devraient avoir. L’entraînement en décide : il fixe les poids pour que les neurones cachés calculent les caractéristiques utiles à la couche de sortie. Ces caractéristiques aident la couche de sortie à donner les bonnes réponses.

Récapitulatif

  • Un neurone calcule une somme pondérée de ses entrées, ajoute un biais, puis applique une activation. Avec l’activation logistique, c’est une régression logistique. Pour le billet de soutien donné en exemple, le modèle d’escalade du cours d’apprentissage automatique donne z = −0,348 et un score de 0,414.
  • Le nom vient des cellules du cerveau, mais la ressemblance reste vague : un neurone artificiel se résume à quelques lignes d’arithmétique.
  • Une couche regroupe plusieurs neurones qui lisent les mêmes entrées, chacun avec ses propres poids. Un réseau est une suite de couches : une couche d’entrée, des couches cachées et une couche de sortie.
  • Une couche avec n entrées et m neurones a n × m poids et m biais. Le réseau pour les billets, 2 864 → 64 → 5, a 183 685 paramètres. Avec des poids aléatoires, il achemine correctement 18,2 % des billets, comme le ferait le hasard.

À suivre : jusqu’ici, la couche ne contenait aucune activation. La prochaine leçon montre que, sans activation, toutes ces couches se réduisent à une seule somme pondérée.

Leçon suivante : Pourquoi les couches ont besoin d'activations