Ce travail se fait en salle informatique, dans un notebook Python :
Le notebook programme la propagation avant, la perte, la rétropropagation et la descente de gradient, puis compare des méthodes d’apprentissage.
Complétez toutes les cellules marquées « À COMPLÉTER » : tant qu’un test échoue, l’implémentation est fausse. Les graines aléatoires sont fixées : les valeurs demandées ci-dessous sont celles que doit afficher votre notebook, avec les arrondis indiqués. Certaines se lisent dans la cellule « Fiche de résultats », qui demande une quinzaine de secondes ; d’autres demandent de refaire une expérience en modifiant le notebook. Rédigez vos réponses sur une feuille.
Quel écart relatif maximal renvoie verifier_gradient pour le réseau \([3,4,2]\) à activations sigmoïdes de la fiche de résultats ? Quel ordre de grandeur doit-on attendre, et qu’indiquerait un écart de l’ordre de \(10^{-2}\) ?
On entraîne le réseau \([2,3,1]\) (activations sigmoïdes) sur le XOR avec \(\eta=2\) pendant \(3000\) époques, avec la graine \(0\). Quelle est la perte finale, et quelles sont les quatre sorties arrondies à \(10^{-2}\) ?
Entraînez le réseau \([2,2,1]\) dans les mêmes conditions pour les graines \(0,1,\dots,5\). Pour quelles graines la perte finale dépasse-t-elle \(0{,}05\) ? Même question avec \([2,3,1]\). Que peut-on en conclure sur le rôle de l’initialisation et du nombre de neurones cachés ?
On considère un neurone caché ReLU suivi d’une sortie linéaire sans biais, \(h=\mathrm{ReLU}(wx+b)\) et \(F=v\,h\), une seule donnée \((x,t)=(1,2)\) et la perte \(\tfrac12(F-t)^2\) (section « ReLU morte » du notebook). On part de \(A=(w,b,v)=(-1,0,1)\) puis de \(B=(1,0,1)\), avec le pas \(\eta=0{,}1\). Quelle est la perte après \(200\) itérations depuis \(A\), puis depuis \(B\) ? Quelle est alors la valeur de \(w\) depuis \(B\), à \(10^{-2}\) près ?
Sur les deux lunes, avec un réseau \([2,16,1]\) entraîné pendant \(300\) époques, donnez la perte d’entraînement finale (à \(10^{-4}\) près) et la précision de test (à \(10^{-3}\) près) pour : le lot complet (\(\eta=0{,}5\)), les mini-lots de \(32\) (\(\eta=0{,}5\)), et un exemple à la fois (\(\eta=0{,}05\)).
Entraînez le même réseau en mini-lots de \(8\) (\(\eta=0{,}5\), \(300\) époques, graine \(0\)). Combien de mises à jour par époque cela représente-t-il ? Quelle est la perte d’entraînement finale et la précision de test ? Situez le résultat par rapport aux mini-lots de \(32\).
Pour le réseau \([2,64,64,1]\) entraîné sur \(30\) points bruités (voir le notebook), à quelle époque la perte de validation est-elle minimale ? Quelle est sa valeur, et que vaut-elle après \(2000\) époques ? Comparez les précisions de validation avec l’arrêt précoce et à la fin de l’entraînement.
Pour \(\lambda\in\{0;\,10^{-3};\,3\cdot10^{-3};\,10^{-2};\,3\cdot10^{-2}\}\), donnez la perte de validation et la précision de validation après \(2000\) époques. Quelle valeur de \(\lambda\) est la meilleure ? Que se passe-t-il pour \(\lambda=3\cdot 10^{-2}\) ?