Salta al contenuto
Note per Studenti Esercizio - Forward pass e conteggio dei parametri di una rete

Esercizio - Forward pass e conteggio dei parametri di una rete

Esame

Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.

In questa pagina 4

Testo.

  1. Rete 3→2→23\to2\to2: strato nascosto con ReLU, uscita con softmax. Pesi W(1)=[101−120]W^{(1)}=\begin{bmatrix}1&0&1\\-1&2&0\end{bmatrix}, b(1)=(0,1)b^{(1)}=(0,1), W(2)=[0,51−0,50]W^{(2)}=\begin{bmatrix}0{,}5&1\\-0{,}5&0\end{bmatrix}, b(2)=(0;0,2)b^{(2)}=(0;0{,}2). Ingresso x=(1,−1,2)x=(1,-1,2), classe vera 00. Si calcolino le probabilità di uscita e la cross-entropy.
  2. La rete del secondo appello (guasti di un macchinario) ha 7 attributi in ingresso e la struttura: Dense(6464, ReLU), BatchNormalization, Dropout(0,20{,}2), Dense(3232, ReLU), BatchNormalization, Dense(11, sigmoide). Si contino i parametri totali, addestrabili e non addestrabili.
  3. Quanti parametri ha la rete MNIST 784→512→10784\to512\to10 del laboratorio? E se si aggiunge un secondo strato nascosto da 256256 neuroni?

Teoria usata: Reti neurali - neuroni e funzioni di attivazioneUn neurone calcola $\hat y=g(w_0+w^\top x)$: somma pesata degli ingressi più bias, poi una funzione di attivazione $g$ non lineare (Perceptron a soglia, sigmoide, tanh, ReLU e varianti). Senza non linearità ogni rete è equivalente a un solo modello lineare. Una rete feed-forward impila strati di neuroni: $a^{(k)}=g(W^{(k)}a^{(k-1)}+b^{(k)})$; con uno strato nascosto è già un approssimatore universale, ma più strati rappresentano funzioni complesse con molti meno neuroni e imparano feature gerarchiche (bordi, parti, oggetti). Lo strato di uscita e la loss si scelgono dal compito: lineare+MSE (regressione), sigmoide+cross-entropy binaria, softmax+cross-entropy (multiclasse). Il numero di parametri di uno strato denso è $n_{in}n_{out}+n_{out}$. Nel lab (Keras, MNIST) una rete 784-512-10 ha 407 050 parametri e supera il 98% di accuratezza.Reti neurali - neuroni e funzioni di attivazione →, Operazioni tra matriciLe matrici m×n formano uno spazio vettoriale (somma e prodotto per scalare elemento per elemento); il prodotto righe per colonne corrisponde alla composizione di funzioni lineari, è associativo ma non commutativo; la trasposta scambia righe e colonne e (AB)^T = B^T A^T.Operazioni tra matrici →.

1. Forward pass

Strato nascosto. z(1)=W(1)x+b(1)z^{(1)}=W^{(1)}x+b^{(1)}:

  • primo neurone: 1⋅1+0⋅(−1)+1⋅2+0=31\cdot1+0\cdot(-1)+1\cdot2+0=3;
  • secondo neurone: −1⋅1+2⋅(−1)+0⋅2+1=−2-1\cdot1+2\cdot(-1)+0\cdot2+1=-2.

Quindi z(1)=(3,−2)z^{(1)}=(3,-2) e, con ReLU, a(1)=(3,0)a^{(1)}=(3,0) (il secondo neurone è spento).

Strato di uscita. z(2)=W(2)a(1)+b(2)z^{(2)}=W^{(2)}a^{(1)}+b^{(2)}:

  • primo: 0,5⋅3+1⋅0+0=1,50{,}5\cdot3+1\cdot0+0=1{,}5;
  • secondo: −0,5⋅3+0⋅0+0,2=−1,3-0{,}5\cdot3+0\cdot0+0{,}2=-1{,}3.

Softmax. e1,5=4,4817e^{1{,}5}=4{,}4817 e e−1,3=0,2725e^{-1{,}3}=0{,}2725, somma 4,75424{,}7542: p=(0,9427; 0,0573)p=(0{,}9427;\ 0{,}0573). La somma è 11.

Cross-entropy con classe vera 00 (one-hot (1,0)(1,0)): −log⁡p0=−ln⁡0,9427=0,0590-\log p_0=-\ln0{,}9427=0{,}0590. Se la classe vera fosse la 11 la perdita sarebbe −ln⁡0,0573=2,86-\ln0{,}0573=2{,}86: una previsione sicura e sbagliata costa molto.

2. Parametri della rete per i guasti

Si usa la regola: Dense con ninn_{in} ingressi e noutn_{out} uscite ha ninnout+noutn_{in}n_{out}+n_{out} parametri; la batch normalization su nn unità ha 4n4n parametri: γ\gamma e β\beta (addestrabili, 2n2n) più media e varianza mobili (non addestrabili, 2n2n). Dropout non ha parametri.

strato uscita parametri di cui addestrabili
Dense 6464 6464 7⋅64+64=5127\cdot64+64=512 512512
BatchNorm 6464 4⋅64=2564\cdot64=256 128128
Dropout 0,20{,}2 6464 00 00
Dense 3232 3232 64⋅32+32=2 08064\cdot32+32=2\,080 2 0802\,080
BatchNorm 3232 4⋅32=1284\cdot32=128 6464
Dense 11 11 32⋅1+1=3332\cdot1+1=33 3333

Totale 512+256+2 080+128+33=3 009512+256+2\,080+128+33=3\,009; addestrabili 512+128+2 080+64+33=2 817512+128+2\,080+64+33=2\,817; non addestrabili 3 009−2 817=1923\,009-2\,817=192 (le medie e varianze mobili: 2⋅64+2⋅322\cdot64+2\cdot32).

3. La rete MNIST

784⋅512+512=401 920784\cdot512+512=401\,920 e 512⋅10+10=5 130512\cdot10+10=5\,130: 407 050407\,050 parametri, come stampa model.summary() (Flatten e Dropout valgono 00).

Con un secondo nascosto da 256256: 784⋅512+512=401 920784\cdot512+512=401\,920; 512⋅256+256=131 328512\cdot256+256=131\,328; 256⋅10+10=2 570256\cdot10+10=2\,570. Totale 401 920+131 328+2 570=535 818401\,920+131\,328+2\,570=535\,818. Il secondo strato aggiunge 131 328131\,328 parametri: più capacità, quindi più rischio di overfitting (Regolarizzazione delle reti neuraliUna rete con tanti parametri tende a memorizzare il training set (overfitting): la loss di training scende ma quella di validazione risale. Le tecniche di regolarizzazione limitano la capacità effettiva: penalità sui pesi ($\ell_2$: $J+\lambda|W|_2^2$, il passo diventa $W\leftarrow(1-2\eta\lambda)W-\eta\nabla J$; $\ell_1$: $J+\lambda|W|_1$, porta pesi esattamente a zero), early stopping (si ferma l'addestramento quando la validation loss smette di scendere, con pazienza e ripristino dei pesi migliori), dropout (in training si azzera a caso una frazione $p$ delle attivazioni e si riscala per $1/(1-p)$; in inferenza è spento), batch normalization (effetto collaterale) e data augmentation. Nel lab MNIST con $\lambda=0{,}01$ la penalità $\ell_1$ è troppo forte (accuratezza di test 0,844 contro 0,9815 senza regolarizzazione), mentre dropout e early stopping non peggiorano e tengono la validation loss più bassa.Regolarizzazione delle reti neurali →).

Controllo con il codice

python
import numpy as np
x = np.array([1., -1., 2.])
W1 = np.array([[1, 0, 1], [-1, 2, 0]]); b1 = np.array([0., 1.])
a1 = np.maximum(W1 @ x + b1, 0)
W2 = np.array([[.5, 1], [-.5, 0]]); b2 = np.array([0., .2])
z2 = W2 @ a1 + b2
p = np.exp(z2) / np.exp(z2).sum()
print(a1, z2, p, -np.log(p[0]))     # [3. 0.] [ 1.5 -1.3] [0.9427 0.0573] 0.0590

Lezioni in cui compare

Teoria collegata