Explication
Un neurone artificiel est une fonction mathématique simple :
sortie = sigmoide(x1 * poids1 + x2 * poids2 + biais)
x1, x2: les entrées (longueur et largeur du pétale)poids1, poids2: des nombres qu'on fait varierbiais: un nombre qu'on ajoute (comme l'ordonnée à l'origine d'une droite)sigmoide: une fonction qui écrase n'importe quel nombre entre 0 et 1
📖 Vocabulaire - français / anglais
- poids ↔ *weight*
- biais ↔ *bias*
- sigmoïde ↔ *sigmoid* (la courbe en S qui rend une sortie entre 0 et 1)
- entrée / sortie ↔ *input / output*
Code de départ
import math
def sigmoide(x):
return 1 / (1 + math.exp(-x))
def neurone(x1, x2, poids1, poids2, biais):
somme = x1 * poids1 + x2 * poids2 + biais
return sigmoide(somme)
# Test
print(neurone(5.1, 1.8, 0.1, 0.1, 0.0)) # -> environ 0.62
Exercice 2.1 - Premier contact
✍️ À toi de jouer
On veut que le neurone réponde proche de 1 pour une Virginica (pétale long de 5.1, large de 1.8). Avec poids1=0.1, poids2=0.1, biais=0.0, la réponse est ≈ 0.62.
Trouve, en les changeant un par un, des valeurs qui donnent une réponse > 0.90. Observe :
- augmente
poids1seul - que se passe-t-il ? - diminue
biais- que se passe-t-il ? - rends
poids2négatif - que se passe-t-il ?
Besoin d'un indice ?
Comme x1 (5.1) est grand et x2 (1.8) moyen, c'est poids1 qui a le plus d'impact. Essaie poids1=1.0, poids2=0.5, biais=-2.0.
Voir la réponse
print(neurone(5.1, 1.8, 1.2, 0.3, -3.0)) # environ 0.95
Observation : le biais négatif force le neurone à être « difficile ». Il faut de grandes entrées pour le convaincre. C'est comme dire : « par défaut je réponds non ; prouve-moi que c'est une Virginica ».
Exercice 2.2 - Le jeu du professeur
✍️ À toi de jouer
Voici 4 fleurs. Trouve UN SEUL jeu de 3 nombres (poids1, poids2, biais) qui répond > 0.9 pour les Virginica et < 0.1 pour les Setosa.
| Fleur | x1 (longueur) | x2 (largeur) | Espèce | Attendu |
|---|---|---|---|---|
| A | 1.4 | 0.2 | Setosa | 0 |
| B | 1.3 | 0.2 | Setosa | 0 |
| C | 5.1 | 1.8 | Virginica | 1 |
| D | 5.9 | 2.1 | Virginica | 1 |
Commence avec poids1=0.5, poids2=0.0, biais=-1.0. Teste sur les 4 fleurs, ajuste UN SEUL nombre à la fois, re-teste.
- Combien d'essais t'a-t-il fallu ?
- Quel nombre a eu le plus d'impact ?
poids2(largeur) est-il utile ici, ou la longueur suffit-elle ?
Voir la réponse
p1, p2, b = 2.0, 0.0, -3.0
for nom, x1, x2, attendu in [("A",1.4,0.2,0), ("B",1.3,0.2,0),
("C",5.1,1.8,1), ("D",5.9,2.1,1)]:
print(f"{nom}: prediction={neurone(x1, x2, p1, p2, b):.3f}, attendu={attendu}")
Sortie attendue : A et B ≈ 0.05, C et D ≈ 0.95. Ici la longueur suffit presque seule (poids2=0 marche).
La leçon : tu viens de faire à la main ce que la rétropropagation fait automatiquement - ajuster un poids pour réduire l'erreur. C'est EXACTEMENT le principe de l'apprentissage.