SGD : la bille qu'on pousse en aval du potentiel

Idée

Une bille qu'on pousse à chaque pas dans la direction de la pente, d'une longueur eta proportionnelle à la pente locale.

Pourquoi

optim.SGD(parametres.values(), lr=1) créé un objet qui, à chaque appel step(), fait $W \leftarrow W - \eta \cdot \nabla W$ pour chaque parametre. C'est la descente de gradient déjà vue dans la vidéo 7 ; pytorch n'apporte pas une nouvelle methode, juste une comptabilite : il sait quels sont les parametres a mettre a jour et quel gradient prendre dans .grad. Le learning rate eta=1.1 est tres grand pour XOR (4 exemples seulement), volontairement.

Outil

Methode d'Euler explicite vue en spé : $y_{n+1} = y_n - h \cdot f(y_n)$ pour resoudre $\dot y = -f(y)$. Ici f est le gradient et h est le learning rate.

Formule

En pratique on lit souvent lr=0.01 ou lr=0.001 ; la cellule 18 utilise lr=1.1. Que justifie ce choix dans le contexte XOR a 4 exemples ? Quels seraient les symptomes si l'on augmentait encore (lr=10) ? Si on baissait (lr=0.001) ?

Piège

lr trop grand : la loss explose (NaN ou oscillations sauvages). lr trop petit : la loss descend très lentement. Méthode pratique : tracer la loss vs itérations. Si elle monte → lr trop grand. Si elle est plate → lr trop petit ou architecture trop pauvre. Le notebook trace systématiquement la loss pour cette raison.