Salta al contenuto
Note per Studenti Esercizio - Gradient descent, batch GD, SGD e minibatch SGD (esempio d'esame 2)

Esercizio - Gradient descent, batch GD, SGD e minibatch SGD (esempio d'esame 2)

Teoria: Apprendimento automatico nell'IA - supervisionato, SVM e valutazioneQuadro del machine learning nel corso di IA. Tre forme di apprendimento: supervisionato (coppie ingresso-uscita, classificazione se l'uscita è discreta e regressione se è un numero), non supervisionato (pattern senza feedback, per esempio clustering) e per rinforzo (ricompense). Un'ipotesi h approssima la funzione vera f e si valuta sul test set, non sul training set: un modello troppo semplice ha bias alto (underfitting), uno troppo complesso varianza alta (overfitting). Servono training, validation e test set; con pochi dati si usa la k-fold cross-validation. Alberi di decisione: si sceglie l'attributo con massimo guadagno d'informazione Gain = B(p/(p+n)) - somma (Nk/N) B(pk/Nk), si pota con il test del chi quadro (Delta > Delta*), si riduce la varianza con bagging e random forest. Perdita L1 e L2, regressione lineare e discesa del gradiente w <- w - alpha dL/dw. SVM: separatore a margine massimo, vettori di supporto, kernel trick con K(xj,xk). Pipeline scikit-learn del laboratorio 10: load_digits, train_test_split, SVC(C, kernel, gamma), fit, predict, classification_report, confusion_matrix, cross_val_score.Apprendimento automatico nell'IA - supervisionato, SVM e valutazione → (sezione 5), LASSO e discesa del gradienteIl LASSO è la regressione regolarizzata con penalità $L_1$: minimizza $\sum_i(y_i-x_i^T\beta)^2+\lambda\sum_{j\ge1}|\beta_j|$. A differenza della ridge, porta alcuni coefficienti esattamente a zero (soluzione sparsa, selezione delle feature): geometricamente le curve di livello dell'errore toccano il vincolo $\sum|\beta_j|\le s$ (un rombo) in uno spigolo. Non ha formula chiusa, quindi si minimizza con la discesa del gradiente $W\leftarrow W-\eta,\nabla J(W)$, usando il subgradiente $\operatorname{sign}(\beta_j)$ per il valore assoluto (nel punto 0 qualunque valore in $[-1,1]$). Il passo $\eta$ è critico: per l'errore quadratico converge se $\eta<1/\mu_{\max}(X^TX)$; si può usare $\eta_t=\eta_0/(1+\gamma t)$. L'Elastic Net combina le penalità $L_1$ e $L_2$ con $\lambda_1=\alpha\lambda$, $\lambda_2=(1-\alpha)\lambda$.LASSO e discesa del gradiente → e 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 →. Domanda 2 del quiz da 9 CFU e domanda 1 di quello da 6 CFU: testo identico.

Testo (risposta aperta). Con riferimento ad algoritmi per machine learning, si spieghi brevemente cosa sono e quali sono le principali differenze tra Gradient Descent (GD), batch GD, Stochastic Gradient Descent (SGD) e minibatch SGD.

Risposta modello

Addestrare un modello vuol dire minimizzare una perdita L(w)=∑j=1NLj(w)L(w)=\sum_{j=1}^{N}L_j(w), somma degli errori sugli NN esempi del training set, rispetto ai pesi ww. Il gradient descent è il metodo iterativo che, partendo da pesi iniziali, li aggiorna a ogni passo nella direzione opposta al gradiente (la direzione di massima discesa): w←w−α ∇wL,w\leftarrow w-\alpha\,\nabla_w L, con α\alpha passo di apprendimento (learning rate). Con perdita convessa converge al minimo globale se α\alpha non è troppo grande; se lo è, il passo supera il minimo e la perdita cresce. Le varianti differiscono per quanti esempi si usano per stimare il gradiente a ogni aggiornamento.

  • Batch GD (il GD "classico"): il gradiente è calcolato su tutti gli NN esempi, ∇L=∑j∇Lj\nabla L=\sum_j\nabla L_j, e si fa un aggiornamento per epoca (un'epoca è un passaggio completo sui dati). Gradiente esatto, traiettoria regolare e deterministica; ma ogni passo costa O(N)O(N) ed è lento o non entra in memoria con dataset grandi.
  • SGD (stochastic): a ogni aggiornamento si usa un solo esempio scelto a caso. Si fanno NN aggiornamenti per epoca, ciascuno economico; il gradiente è una stima rumorosa ma non distorta di quello vero, quindi la perdita oscilla (il rumore aiuta a uscire da minimi locali e zone piatte) e, con α\alpha costante, si assesta intorno al minimo senza raggiungerlo; per convergere si fa decrescere α\alpha.
  • Minibatch SGD: si usano mm esempi (tipicamente 32, 64, 128 o 256) scelti a caso. Compromesso: rumore ridotto di un fattore circa m\sqrt m rispetto all'SGD puro, calcolo vettorizzato efficiente su GPU, memoria limitata. È la variante usata in pratica, e quando nelle librerie (Keras) si parla di SGD si intende di solito questa.

Il caso limite m=Nm=N è il batch GD e m=1m=1 è l'SGD puro: si distinguono solo per mm.

Esempio numerico

Dati (1,2)(1,2), (2,3)(2,3), (3,5)(3,5), ipotesi h(x)=w1x+w0h(x)=w_1x+w_0, perdita Lj=(yj−hj)2L_j=(y_j-h_j)^2, partenza w0=w1=0w_0=w_1=0, α=0,02\alpha=0{,}02. Con w=0w=0 l'errore yj−hjy_j-h_j è yjy_j. Per ogni esempio ∂Lj/∂w0=−2ej\partial L_j/\partial w_0=-2e_j e ∂Lj/∂w1=−2xjej\partial L_j/\partial w_1=-2x_je_j.

variante esempi usati w0w_0 dopo il primo passo w1w_1 dopo il primo passo
batch tutti e 3 0,02⋅2 (2+3+5)=0,40{,}02\cdot2\,(2+3+5)=0{,}4 0,02⋅2 (2+6+15)=0,920{,}02\cdot2\,(2+6+15)=0{,}92
SGD solo (1,2)(1,2) 0,02⋅2⋅2=0,080{,}02\cdot2\cdot2=0{,}08 0,02⋅2⋅1⋅2=0,080{,}02\cdot2\cdot1\cdot2=0{,}08
minibatch (m=2m=2) (1,2)(1,2) e (2,3)(2,3) 0,02⋅2 (2+3)=0,20{,}02\cdot2\,(2+3)=0{,}2 0,02⋅2 (2+6)=0,320{,}02\cdot2\,(2+6)=0{,}32

Il minimo esatto è w1=1,5w_1=1{,}5, w0=13w_0=\tfrac13: il passo batch è il più grande e preciso, l'SGD fa passi piccoli e rumorosi ma ne fa tre per epoca. Con N=1000N=1000 esempi e m=32m=32 si fanno ⌈1000/32⌉=32\lceil1000/32\rceil=32 aggiornamenti per epoca (31 minibatch completi e uno da 8), contro 11 del batch e 10001000 dell'SGD.

Errori tipici nella risposta: dire che SGD usa "un sottoinsieme" (è un solo esempio) o che il batch GD è stocastico; non spiegare che cosa cambia (quanti esempi per aggiornamento, rumore, costo); dimenticare il learning rate.

Versione ripasso

Teoria: Apprendimento automatico nell'IA - supervisionato, SVM e valutazioneQuadro del machine learning nel corso di IA. Tre forme di apprendimento: supervisionato (coppie ingresso-uscita, classificazione se l'uscita è discreta e regressione se è un numero), non supervisionato (pattern senza feedback, per esempio clustering) e per rinforzo (ricompense). Un'ipotesi h approssima la funzione vera f e si valuta sul test set, non sul training set: un modello troppo semplice ha bias alto (underfitting), uno troppo complesso varianza alta (overfitting). Servono training, validation e test set; con pochi dati si usa la k-fold cross-validation. Alberi di decisione: si sceglie l'attributo con massimo guadagno d'informazione Gain = B(p/(p+n)) - somma (Nk/N) B(pk/Nk), si pota con il test del chi quadro (Delta > Delta*), si riduce la varianza con bagging e random forest. Perdita L1 e L2, regressione lineare e discesa del gradiente w <- w - alpha dL/dw. SVM: separatore a margine massimo, vettori di supporto, kernel trick con K(xj,xk). Pipeline scikit-learn del laboratorio 10: load_digits, train_test_split, SVC(C, kernel, gamma), fit, predict, classification_report, confusion_matrix, cross_val_score.Apprendimento automatico nell'IA - supervisionato, SVM e valutazione →, LASSO e discesa del gradienteIl LASSO è la regressione regolarizzata con penalità $L_1$: minimizza $\sum_i(y_i-x_i^T\beta)^2+\lambda\sum_{j\ge1}|\beta_j|$. A differenza della ridge, porta alcuni coefficienti esattamente a zero (soluzione sparsa, selezione delle feature): geometricamente le curve di livello dell'errore toccano il vincolo $\sum|\beta_j|\le s$ (un rombo) in uno spigolo. Non ha formula chiusa, quindi si minimizza con la discesa del gradiente $W\leftarrow W-\eta,\nabla J(W)$, usando il subgradiente $\operatorname{sign}(\beta_j)$ per il valore assoluto (nel punto 0 qualunque valore in $[-1,1]$). Il passo $\eta$ è critico: per l'errore quadratico converge se $\eta<1/\mu_{\max}(X^TX)$; si può usare $\eta_t=\eta_0/(1+\gamma t)$. L'Elastic Net combina le penalità $L_1$ e $L_2$ con $\lambda_1=\alpha\lambda$, $\lambda_2=(1-\alpha)\lambda$.LASSO e discesa del gradiente →.

  • GD: minimizza L(w)=∑jLj(w)L(w)=\sum_jL_j(w) con w←w−α∇Lw\leftarrow w-\alpha\nabla L (passo α\alpha; troppo grande: diverge). Le varianti cambiano quanti esempi stimano il gradiente.
  • Batch GD: tutti gli NN esempi, 1 aggiornamento per epoca; gradiente esatto, passo costoso.
  • SGD: 1 esempio a caso, NN aggiornamenti per epoca; rumoroso (aiuta a uscire dai minimi locali), serve α\alpha decrescente.
  • Minibatch SGD: mm esempi (32-256): compromesso, vettorizzato su GPU; m=Nm=N è il batch, m=1m=1 l'SGD.
  • Esempio: N=1000N=1000, m=32m=32: 32 aggiornamenti per epoca. Primo passo con (1,2),(2,3),(3,5)(1,2),(2,3),(3,5), α=0,02\alpha=0{,}02: batch (0,4; 0,92)(0{,}4;\ 0{,}92), SGD (0,08; 0,08)(0{,}08;\ 0{,}08).

Errori tipici: SGD con un sottoinsieme; batch detto stocastico; dimenticare α\alpha.

Teoria collegata