Partie 2 · Apprendre
La perte et ses pentes
Un neurone aux poids tirés au hasard se trompe. Pour l'améliorer, il faut d'abord mesurer à quel point il se trompe : c'est la perte. Pour une réponse oui/non, la probabilité de la bonne réponse est a pour un patient malade (y = 1) et 1 − a pour un patient sain (y = 0). La perte vaut −log de cette probabilité, moyennée sur les patients.
Pourquoi le logarithme ? Une bonne réponse sûre (p proche de 1) coûte presque 0 ; une mauvaise réponse sûre (p proche de 0) coûte énormément.
Six patients, un seul nombre : t = température − 38 °C = [1,5 ; 1,0 ; −0,5 ; −1,5 ; −1,0 ; 0,5], avec y = [1, 1, 1, 0, 0, 0] (1 = pneumonie). Le neurone calcule z = w × t + b puis a = sigmoïde(z). Au départ w = 0 et b = 0 : les six probabilités valent 0,5, et la perte vaut 0,6931 (= −log 0,5).
À toi de coder
Maintenant la question centrale : dans quel sens changer w pour que la perte baisse ? La réponse est la pente de la courbe « perte selon w ». En w = 0 la pente vaut −0,3333 : négative, donc augmenter w fait baisser la perte. La pente de b vaut 0 : avec autant de malades que de bien portants, répondre 0,5 à tout le monde est déjà le meilleur choix pour b.
PyTorch trouve ces pentes tout seul : perte.backward() les range dans w.grad et b.grad (c'est la rétropropagation). En w = 1, on trouve perte = 0,4963 et pente = −0,0771 : plus petite, car on se rapproche du creux (w ≈ 1,46) et la courbe s'aplatit.
À toi de coder
Pour plusieurs réponses (les 11 organes, partie 5), le réseau rend un score par organe et la softmax les transforme en probabilités qui somment à 1. Pour la coupe de la partie 4 avec les scores foie, rate, rein = [2,0 ; 1,0 ; 0,1] : probabilités [0,6590 ; 0,2424 ; 0,0986]. La bonne réponse est le foie : perte = −log(0,6590) = 0,4170.
Un réseau qui n'a encore rien appris donne le même score aux 11 organes : p = 1/11 et perte = −log(1/11) = 2,3979 (≈ 2,40). Retiens ce nombre : au démarrage d'un entraînement, la perte doit être proche de lui. nn.CrossEntropyLoss calcule tout cela, mais elle reçoit les scores bruts (elle applique la softmax elle-même), pas les probabilités.
À toi de coder