← Tous les exercices
Le pas η : trop petit, trop grand
Partie 3 · ★★★
La fonction descente(eta, nb_pas) est fournie (c'est celle de l'exercice précédent). Teste trois pas comme le notebook (ex.3, partie 3) : η = 0,3 (petit), 3 (bon), 12 (grand), sur 20 pas.
Complète : w_petit = le w final pour η = 0,3 ; grand_monte = « la perte au premier pas de η = 12 est-elle plus grande qu'au départ ? » (comparer pertes_grand[0] et pertes_grand[1]) ; w_lent = w après 100 pas avec η = 0,3. Réponds enfin à la question 3.2 par une lettre : a) la perte baisse mais moins vite ; b) elle monte, le pas est allé trop loin ; c) elle ne change pas.
def sigmoide(u): return 1 / (1 + math.exp(-u)) t = [1.5, 1.0, -0.5, -1.5, -1.0, 0.5] # température - 38 °C y = [1, 1, 1, 0, 0, 0] # pneumonie : 1 = oui, 0 = non def perte(w, b): a = [sigmoide(w * ti + b) for ti in t] p = [ai if yi == 1 else 1 - ai for ai, yi in zip(a, y)] return -sum(math.log(pi) for pi in p) / len(p) def gradient(w, b, e=1e-4): pw = (perte(w + e, b) - perte(w - e, b)) / (2 * e) pb = (perte(w, b + e) - perte(w, b - e)) / (2 * e) return pw, pb def descente(eta, nb_pas): w, b = 0.0, 0.0 pertes = [] for pas in range(nb_pas): pertes.append(perte(w, b)) pw, pb = gradient(w, b) w = w - eta * pw b = b - eta * pb return pertes, w, b pertes_petit, w_petit, _ = descente(0.3, 20) pertes_grand, w_grand, _ = descente(12, 20) grand_monte = pertes_grand[___] > pertes_grand[___] w_lent = descente(0.3, ___)[1] reponse = "___"
Ctrl/⌘+Entrée