Corsi di laurea › Altre materie › Machine Learning › 7. Reti neurali e deep learning
Esercizio - Discesa del gradiente, momento e Adam a mano Segna come studiato
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 6 1. Discesa del gradiente 2. Momento 3. Adam 4. RMSProp e AdaGrad 5. Iterazioni per epoca Controllo con il codice
Testo. Si minimizza J ( w ) = ( w − 3 ) 2 J(w)=(w-3)^2 J ( w ) = ( w − 3 ) 2 partendo da w 0 = 0 w_0=0 w 0 = 0 .
Discesa del gradiente con η = 0 , 1 \eta=0{,}1 η = 0 , 1 : i primi quattro passi. Per quali η \eta η converge?
SGD con momento (ρ = 0 , 9 \rho=0{,}9 ρ = 0 , 9 , α = 0 , 1 \alpha=0{,}1 α = 0 , 1 ): i primi quattro passi.
Adam (α = 0 , 1 \alpha=0{,}1 α = 0 , 1 , β 1 = 0 , 9 \beta_1=0{,}9 β 1 = 0 , 9 , β 2 = 0 , 999 \beta_2=0{,}999 β 2 = 0 , 999 , ε ≈ 0 \varepsilon\approx0 ε ≈ 0 ): i primi tre passi.
RMSProp (decadimento 0 , 9 0{,}9 0 , 9 , α = 0 , 1 \alpha=0{,}1 α = 0 , 1 ) e AdaGrad (α = 0 , 1 \alpha=0{,}1 α = 0 , 1 ): il primo e il secondo passo.
Quante iterazioni per epoca fa un mini-batch da B = 64 B=64 B = 64 su n = 60 000 n=60\,000 n = 60 000 campioni?
Teoria usata: Addestramento delle reti neurali - backpropagation e ottimizzatoriAddestrare una rete significa minimizzare la loss empirica $J(W)=\frac1n\sum_i\mathcal L(f(x^{(i)};W),y^{(i)})$ con la discesa del gradiente $W\leftarrow W-\eta,\partial J/\partial W$; in pratica a mini-batch (SGD). Il gradiente di tutti i pesi si ottiene con la backpropagation, cioè la regola della catena applicata all'indietro: $\delta^{(L)}=\partial J/\partial a^{(L)}\odot g'(z^{(L)})$, $\delta^{(l)}=(W^{(l+1)\top}\delta^{(l+1)})\odot g'(z^{(l)})$, $\partial J/\partial W^{(l)}=\delta^{(l)}a^{(l-1)\top}$ (con sigmoide e cross-entropy $\delta=\hat y-y$). Per far funzionare reti profonde: attivazioni ReLU, inizializzazione di Xavier o He (varianza $2/(n_{in}+n_{out})$ e $2/n_{in}$), batch normalization, ottimizzatori con momento o adattivi (Momentum, AdaGrad, RMSProp, Adam con $\beta_1=0{,}9$, $\beta_2=0{,}999$, lr $10^{-3}$) e un learning rate che varia nel tempo (a gradini, coseno). Si addestra tenendo d'occhio la loss di training e di validazione.Addestramento delle reti neurali - backpropagation e ottimizzatori → , Gradiente e direzione di massima crescitaIl gradiente è il vettore delle derivate parziali ∇f(p) = (∂₁f(p), …, ∂ₙf(p)). Se f è C¹ (derivate parziali continue) vale la formula del gradiente D_u f(p) = ∇f(p)·u: tutte le derivate direzionali si ottengono dalle parziali e u ↦ D_u f(p) è lineare. Tra i versori, la crescita è massima lungo ∇f/|∇f| (pendenza |∇f|), minima lungo −∇f/|∇f| (pendenza −|∇f|), nulla lungo le direzioni ortogonali al gradiente. Utili: ∇|x| = x/|x|, ∇φ(|x|) = φ'(|x|) x/|x|.Gradiente e direzione di massima crescita → , Derivata - definizione e significatoLa derivata è il limite del rapporto incrementale; geometricamente è la pendenza della retta tangente. f è derivabile in x0 se e solo se f(x) = f(x0) + f'(x0)(x − x0) + o(x − x0); derivabile implica continua, non viceversa. Derivata destra e sinistra, punti angolosi, flessi a tangente verticale, cuspidi.Derivata - definizione e significato → .
Il gradiente è g ( w ) = J ′ ( w ) = 2 ( w − 3 ) g(w)=J'(w)=2(w-3) g ( w ) = J ′ ( w ) = 2 ( w − 3 ) .
1. Discesa del gradiente
Regola: w ← w − η g ( w ) = w − 0 , 1 ⋅ 2 ( w − 3 ) = 0 , 8 w + 0 , 6 w\leftarrow w-\eta\,g(w)=w-0{,}1\cdot2(w-3)=0{,}8\,w+0{,}6 w ← w − η g ( w ) = w − 0 , 1 ⋅ 2 ( w − 3 ) = 0 , 8 w + 0 , 6 .
passo
w w w
J J J
0 0 0
0 0 0
9 9 9
1 1 1
0 , 6 0{,}6 0 , 6
5 , 76 5{,}76 5 , 76
2 2 2
1 , 08 1{,}08 1 , 08
3 , 69 3{,}69 3 , 69
3 3 3
1 , 464 1{,}464 1 , 464
2 , 36 2{,}36 2 , 36
4 4 4
1 , 771 1{,}771 1 , 771
1 , 51 1{,}51 1 , 51
La distanza dal minimo si moltiplica per 1 − 2 η 1-2\eta 1 − 2 η a ogni passo: w − 3 ← ( 1 − 2 η ) ( w − 3 ) w-3\leftarrow(1-2\eta)(w-3) w − 3 ← ( 1 − 2 η ) ( w − 3 ) . Converge se ∣ 1 − 2 η ∣ < 1 |1-2\eta|<1 ∣1 − 2 η ∣ < 1 , cioè 0 < η < 1 0<\eta<1 0 < η < 1 ; per η = 0 , 5 \eta=0{,}5 η = 0 , 5 arriva al minimo in un passo; per η > 1 \eta>1 η > 1 la distanza cresce in modulo e il segno alterna (divergenza).
2. Momento
Regole: v ← ρ v + g ( w ) v\leftarrow\rho v+g(w) v ← ρ v + g ( w ) , w ← w − α v w\leftarrow w-\alpha v w ← w − αv , con v 0 = 0 v_0=0 v 0 = 0 .
passo
gradiente g g g
velocità v v v
w w w
1 1 1
− 6 -6 − 6
0 , 9 ⋅ 0 − 6 = − 6 0{,}9\cdot0-6=-6 0 , 9 ⋅ 0 − 6 = − 6
0 + 0 , 6 = 0 , 6 0+0{,}6=0{,}6 0 + 0 , 6 = 0 , 6
2 2 2
2 ( 0 , 6 − 3 ) = − 4 , 8 2(0{,}6-3)=-4{,}8 2 ( 0 , 6 − 3 ) = − 4 , 8
0 , 9 ⋅ ( − 6 ) − 4 , 8 = − 10 , 2 0{,}9\cdot(-6)-4{,}8=-10{,}2 0 , 9 ⋅ ( − 6 ) − 4 , 8 = − 10 , 2
0 , 6 + 1 , 02 = 1 , 62 0{,}6+1{,}02=1{,}62 0 , 6 + 1 , 02 = 1 , 62
3 3 3
2 ( 1 , 62 − 3 ) = − 2 , 76 2(1{,}62-3)=-2{,}76 2 ( 1 , 62 − 3 ) = − 2 , 76
0 , 9 ⋅ ( − 10 , 2 ) − 2 , 76 = − 11 , 94 0{,}9\cdot(-10{,}2)-2{,}76=-11{,}94 0 , 9 ⋅ ( − 10 , 2 ) − 2 , 76 = − 11 , 94
1 , 62 + 1 , 194 = 2 , 814 1{,}62+1{,}194=2{,}814 1 , 62 + 1 , 194 = 2 , 814
4 4 4
2 ( 2 , 814 − 3 ) = − 0 , 372 2(2{,}814-3)=-0{,}372 2 ( 2 , 814 − 3 ) = − 0 , 372
0 , 9 ⋅ ( − 11 , 94 ) − 0 , 372 = − 11 , 118 0{,}9\cdot(-11{,}94)-0{,}372=-11{,}118 0 , 9 ⋅ ( − 11 , 94 ) − 0 , 372 = − 11 , 118
2 , 814 + 1 , 112 = 3 , 926 2{,}814+1{,}112=3{,}926 2 , 814 + 1 , 112 = 3 , 926
Il primo passo coincide con la discesa semplice (0 , 6 0{,}6 0 , 6 ). Poi la velocità accumulata fa superare il minimo (w 4 = 3 , 926 > 3 w_4=3{,}926>3 w 4 = 3 , 926 > 3 ): il momento accelera ma può oltrepassare; successivamente il gradiente cambia segno e la velocità si smorza. Nella discesa semplice w 4 = 1 , 771 w_4=1{,}771 w 4 = 1 , 771 : il momento è molto più avanti.
3. Adam
Regole: m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t=\beta_1m_{t-1}+(1-\beta_1)g_t m t = β 1 m t − 1 + ( 1 − β 1 ) g t , v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2 v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 , m ^ t = m t / ( 1 − β 1 t ) \hat m_t=m_t/(1-\beta_1^t) m ^ t = m t / ( 1 − β 1 t ) , v ^ t = v t / ( 1 − β 2 t ) \hat v_t=v_t/(1-\beta_2^t) v ^ t = v t / ( 1 − β 2 t ) , w ← w − α m ^ t / v ^ t w\leftarrow w-\alpha\,\hat m_t/\sqrt{\hat v_t} w ← w − α m ^ t / v ^ t .
Passo 1. g 1 = − 6 g_1=-6 g 1 = − 6 : m 1 = − 0 , 6 m_1=-0{,}6 m 1 = − 0 , 6 , v 1 = 0 , 001 ⋅ 36 = 0 , 036 v_1=0{,}001\cdot36=0{,}036 v 1 = 0 , 001 ⋅ 36 = 0 , 036 ; m ^ 1 = − 0 , 6 / 0 , 1 = − 6 \hat m_1=-0{,}6/0{,}1=-6 m ^ 1 = − 0 , 6/0 , 1 = − 6 , v ^ 1 = 0 , 036 / 0 , 001 = 36 \hat v_1=0{,}036/0{,}001=36 v ^ 1 = 0 , 036/0 , 001 = 36 ; m ^ 1 / v ^ 1 = − 6 / 6 = − 1 \hat m_1/\sqrt{\hat v_1}=-6/6=-1 m ^ 1 / v ^ 1 = − 6/6 = − 1 , quindi w 1 = 0 + 0 , 1 = 0 , 1 w_1=0+0{,}1=0{,}1 w 1 = 0 + 0 , 1 = 0 , 1 . Il primo passo ha ampiezza α \alpha α , qualunque sia la scala del gradiente.
Passo 2. g 2 = 2 ( 0 , 1 − 3 ) = − 5 , 8 g_2=2(0{,}1-3)=-5{,}8 g 2 = 2 ( 0 , 1 − 3 ) = − 5 , 8 : m 2 = 0 , 9 ( − 0 , 6 ) + 0 , 1 ( − 5 , 8 ) = − 1 , 12 m_2=0{,}9(-0{,}6)+0{,}1(-5{,}8)=-1{,}12 m 2 = 0 , 9 ( − 0 , 6 ) + 0 , 1 ( − 5 , 8 ) = − 1 , 12 , v 2 = 0 , 999 ⋅ 0 , 036 + 0 , 001 ⋅ 33 , 64 = 0 , 06960 v_2=0{,}999\cdot0{,}036+0{,}001\cdot33{,}64=0{,}06960 v 2 = 0 , 999 ⋅ 0 , 036 + 0 , 001 ⋅ 33 , 64 = 0 , 06960 ; m ^ 2 = − 1 , 12 / ( 1 − 0 , 81 ) = − 5 , 895 \hat m_2=-1{,}12/(1-0{,}81)=-5{,}895 m ^ 2 = − 1 , 12/ ( 1 − 0 , 81 ) = − 5 , 895 , v ^ 2 = 0 , 0696 / ( 1 − 0 , 998001 ) = 34 , 82 \hat v_2=0{,}0696/(1-0{,}998001)=34{,}82 v ^ 2 = 0 , 0696/ ( 1 − 0 , 998001 ) = 34 , 82 , v ^ 2 = 5 , 901 \sqrt{\hat v_2}=5{,}901 v ^ 2 = 5 , 901 ; rapporto − 0 , 999 -0{,}999 − 0 , 999 , w 2 = 0 , 1 + 0 , 0999 = 0 , 1999 w_2=0{,}1+0{,}0999=0{,}1999 w 2 = 0 , 1 + 0 , 0999 = 0 , 1999 .
Passo 3. g 3 = 2 ( 0 , 1999 − 3 ) = − 5 , 600 g_3=2(0{,}1999-3)=-5{,}600 g 3 = 2 ( 0 , 1999 − 3 ) = − 5 , 600 : dopo le correzioni m ^ 3 = − 5 , 786 \hat m_3=-5{,}786 m ^ 3 = − 5 , 786 , v ^ 3 = 33 , 67 \hat v_3=33{,}67 v ^ 3 = 33 , 67 , rapporto − 0 , 997 -0{,}997 − 0 , 997 , w 3 = 0 , 2996 w_3=0{,}2996 w 3 = 0 , 2996 .
Adam avanza circa α = 0 , 1 \alpha=0{,}1 α = 0 , 1 per passo (il rapporto m ^ / v ^ ≈ ± 1 \hat m/\sqrt{\hat v}\approx\pm1 m ^ / v ^ ≈ ± 1 quando il gradiente ha segno costante), a prescindere dalla grandezza del gradiente. Con α = 0 , 1 \alpha=0{,}1 α = 0 , 1 servono circa 30 30 30 passi per arrivare a w ≈ 3 w\approx3 w ≈ 3 , più lento qui della discesa semplice (che lo fa in meno passi su questo problema comodo), ma robusto su problemi con scale di gradiente molto diverse tra i parametri.
4. RMSProp e AdaGrad
RMSProp. s ← 0 , 9 s + 0 , 1 g 2 s\leftarrow0{,}9\,s+0{,}1\,g^2 s ← 0 , 9 s + 0 , 1 g 2 , w ← w − α g / s w\leftarrow w-\alpha\,g/\sqrt s w ← w − α g / s .
Passo 1: g = − 6 g=-6 g = − 6 , s = 0 , 1 ⋅ 36 = 3 , 6 s=0{,}1\cdot36=3{,}6 s = 0 , 1 ⋅ 36 = 3 , 6 , s = 1 , 897 \sqrt s=1{,}897 s = 1 , 897 ; w 1 = 0 + 0 , 1 ⋅ 6 / 1 , 897 = 0 , 316 w_1=0+0{,}1\cdot6/1{,}897=0{,}316 w 1 = 0 + 0 , 1 ⋅ 6/1 , 897 = 0 , 316 .
Passo 2: g = 2 ( 0 , 316 − 3 ) = − 5 , 367 g=2(0{,}316-3)=-5{,}367 g = 2 ( 0 , 316 − 3 ) = − 5 , 367 ; s = 0 , 9 ⋅ 3 , 6 + 0 , 1 ⋅ 28 , 81 = 6 , 121 s=0{,}9\cdot3{,}6+0{,}1\cdot28{,}81=6{,}121 s = 0 , 9 ⋅ 3 , 6 + 0 , 1 ⋅ 28 , 81 = 6 , 121 , s = 2 , 474 \sqrt s=2{,}474 s = 2 , 474 ; w 2 = 0 , 316 + 0 , 1 ⋅ 5 , 367 / 2 , 474 = 0 , 533 w_2=0{,}316+0{,}1\cdot5{,}367/2{,}474=0{,}533 w 2 = 0 , 316 + 0 , 1 ⋅ 5 , 367/2 , 474 = 0 , 533 .
AdaGrad. s ← s + g 2 s\leftarrow s+g^2 s ← s + g 2 , w ← w − α g / s w\leftarrow w-\alpha\,g/\sqrt s w ← w − α g / s .
Passo 1: s = 36 s=36 s = 36 , w 1 = 0 + 0 , 1 ⋅ 6 / 6 = 0 , 1 w_1=0+0{,}1\cdot6/6=0{,}1 w 1 = 0 + 0 , 1 ⋅ 6/6 = 0 , 1 .
Passo 2: g = − 5 , 8 g=-5{,}8 g = − 5 , 8 , s = 36 + 33 , 64 = 69 , 64 s=36+33{,}64=69{,}64 s = 36 + 33 , 64 = 69 , 64 , s = 8 , 345 \sqrt s=8{,}345 s = 8 , 345 ; w 2 = 0 , 1 + 0 , 1 ⋅ 5 , 8 / 8 , 345 = 0 , 1695 w_2=0{,}1+0{,}1\cdot5{,}8/8{,}345=0{,}1695 w 2 = 0 , 1 + 0 , 1 ⋅ 5 , 8/8 , 345 = 0 , 1695 .
AdaGrad accumula s s s senza dimenticare: il passo si rimpicciolisce a ogni iterazione (0 , 1 ; 0 , 0695 ; 0 , 056 0{,}1;\,0{,}0695;\,0{,}056 0 , 1 ; 0 , 0695 ; 0 , 056 ), che a lungo andare lo ferma. RMSProp, con la media mobile, tiene s s s limitato e passi più grandi.
5. Iterazioni per epoca
⌈ 60 000 / 64 ⌉ = ⌈ 937 , 5 ⌉ = 938 \lceil60\,000/64\rceil=\lceil937{,}5\rceil=938 ⌈ 60 000/64 ⌉ = ⌈ 937 , 5 ⌉ = 938 iterazioni (l'ultimo batch ha 32 32 32 campioni). Con B = 32 B=32 B = 32 sarebbero 1 875 1\,875 1 875 .
Controllo con il codice
python Copia
import numpy as np
g = lambda w: 2 * (w - 3 )
w, m, v = 0. , 0. , 0.
for t in range (1 , 4 ):
gr = g(w); m = .9 *m + .1 *gr; v = .999 *v + .001 *gr**2
w -= .1 * (m/(1 -.9 **t)) / (np.sqrt(v/(1 -.999 **t)) + 1e-8 )
print (t, round (w, 4 ))
Precedente Esercizio - Dimensioni e parametri di una CNN Successiva Esercizio - Forward pass e conteggio dei parametri di una rete