Salta al contenuto
Note per Studenti Esercizio - Autoencoder, anomaly detection e KL del VAE

Esercizio - Autoencoder, anomaly detection e KL del VAE

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

In questa pagina 5

Testo.

  1. Un autoencoder denso per vettori di 100100 attributi ha struttura 100→20→100100\to20\to100 (ReLU nel codice, lineare in uscita). Quanti parametri ha e quale è il rapporto di compressione? Quale loss si usa?
  2. Un autoencoder per anomaly detection viene addestrato su dati normali; gli errori quadratici medi di ricostruzione su 88 campioni normali di validazione sono 0,010; 0,012; 0,009; 0,015; 0,011; 0,013; 0,010; 0,0140{,}010;\,0{,}012;\,0{,}009;\,0{,}015;\,0{,}011;\,0{,}013;\,0{,}010;\,0{,}014. Si fissi la soglia a media +3+3 deviazioni standard e si classifichino tre nuovi campioni con errori 0,016; 0,019; 0,1200{,}016;\,0{,}019;\,0{,}120.
  3. Un VAE con spazio latente a 22 dimensioni produce per un ingresso μ=(0,5; −1)\mu=(0{,}5;\,-1) e σ=(2; 0,8)\sigma=(2;\,0{,}8). Si calcoli il termine KL verso N(0,I)\mathcal N(0,I) e il campione zz con rumore ζ=(0,4; −1,2)\zeta=(0{,}4;\,-1{,}2).
  4. Perché serve il trucco di riparametrizzazione e perché un autoencoder ordinario non è adatto a generare?

Teoria usata: Autoencoderapprofondimento: non nel programma di Telecomunicazioni. Un autoencoder è una rete non supervisionata che impara a ricostruire il proprio ingresso passando per un collo di bottiglia: encoder $z=e(x)$ (dimensione bassa), decoder $\hat x=d(z)$, loss $|x-d(e(x))|^2$. Con attivazioni lineari equivale alla PCA; con non linearità impara rappresentazioni latenti più ricche (ipotesi del manifold). Varianti: sparse (penalità $\ell_1$ sulle attivazioni), denoising (ingresso corrotto, bersaglio pulito), convolutivi (inpainting). Anomaly detection: si addestra su dati normali e si segnala come anomalo ciò che ha errore di ricostruzione sopra una soglia. VAE: l'encoder produce media e deviazione standard di una gaussiana, il campione si ottiene con il trucco di riparametrizzazione $z=\mu+\sigma\odot\zeta$, $\zeta\sim\mathcal N(0,I)$, e la loss è errore di ricostruzione più KL verso $\mathcal N(0,I)$, con $KL=\frac12\sum(\mu^2+\sigma^2-1-\ln\sigma^2)$; il $\beta$-VAE pesa il KL con $\beta>1$ per rappresentazioni disaccoppiate. Cenno ai GAN.Autoencoder →, Anomaly detectionUn'anomalia (outlier) è un'osservazione che si discosta tanto dalle altre da far pensare che sia generata da un meccanismo diverso. Rilevarle serve come pulizia dei dati (solo se sono errori o rumore, non per migliorare artificialmente le metriche), come obiettivo finale (frodi, guasti, cybersicurezza) e per il monitoraggio di un modello in produzione. Metodi semplici: box plot (oltre $1{,}5,\mathrm{IQR}$), carte di controllo univariate ($\mu\pm3\sigma$) e la statistica multivariata di Hotelling $T^2=(x-\bar x)^TS^{-1}(x-\bar x)$ con soglia $\chi^2_{p,1-\alpha}$, valida per dati gaussiani e unimodali. Metodi non supervisionati multivariati danno un anomaly score: l'isolation forest isola ogni punto con split casuali (le anomalie hanno cammini corti) e calcola $s(x,n)=2^{-E(h(x))/c(n)}$, con soglia scelta dalla contaminazione. Senza etichette si valuta con esperti, eventi noti o anomalie sintetiche. Approfondimento: non nel programma di Telecomunicazioni.Anomaly detection →, Distribuzione gaussiana (normale)N(μ, σ²) ha densità e^(−(x−μ)²/(2σ²)) / √(2πσ²), a campana centrata in μ con larghezza σ; media μ, varianza σ²; si standardizza con Z = (X − μ)/σ ~ N(0, 1) e si calcola P(X ≤ x) = Φ((x − μ)/σ), con Φ(−z) = 1 − Φ(z); aX + b è ancora gaussiana, N(aμ + b, a²σ²).Distribuzione gaussiana (normale) →, Valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso →.

1. Parametri e compressione

Strato 100→20100\to20: 100⋅20+20=2 020100\cdot20+20=2\,020. Strato 20→10020\to100: 20⋅100+100=2 10020\cdot100+100=2\,100. Totale 4 1204\,120 parametri. Il codice ha 2020 numeri per 100100 attributi: compressione 100/20=5100/20=5. Loss: errore quadratico di ricostruzione ∥x−d(e(x))∥2\|x-d(e(x))\|^2, mediato sul training; il bersaglio è l'ingresso stesso (ae.fit(X, X)). Un codice più piccolo comprime di più ma ricostruisce peggio; un codice grande quanto l'ingresso potrebbe imparare l'identità.

2. Soglia di anomalia

Media degli errori: 0,010+0,012+0,009+0,015+0,011+0,013+0,010+0,0148=0,0948=0,01175\frac{0{,}010+0{,}012+0{,}009+0{,}015+0{,}011+0{,}013+0{,}010+0{,}014}{8}=\frac{0{,}094}{8}=0{,}01175.

Deviazione standard (popolazione): gli scarti dalla media sono −0,00175; 0,00025; −0,00275; 0,00325; −0,00075; 0,00125; −0,00175; 0,00225-0{,}00175;\,0{,}00025;\,-0{,}00275;\,0{,}00325;\,-0{,}00075;\,0{,}00125;\,-0{,}00175;\,0{,}00225; i quadrati sommano 3,15⋅10−53{,}15\cdot10^{-5}, diviso 88 dà la varianza 3,94⋅10−63{,}94\cdot10^{-6} e σ=0,00198\sigma=0{,}00198 (con n−1n-1 al denominatore: 0,002120{,}00212, una scelta che cambia poco).

Soglia θ=0,01175+3⋅0,00198=0,0177\theta=0{,}01175+3\cdot0{,}00198=0{,}0177.

Nuovi campioni: 0,016≤0,01770{,}016\le0{,}0177 normale; 0,019>0,01770{,}019>0{,}0177 anomalo; 0,1200{,}120 anomalo (molto sopra). Il campione a 0,0190{,}019 è un caso di bordo: dipende dalla scelta della soglia (3σ3\sigma o un percentile). Con soli 88 campioni la stima è poco affidabile: nella pratica si usano molti dati normali e si sceglie la soglia per percentile (per esempio il 99%99\%).

3. KL e riparametrizzazione

Formula: KL=12∑k(μk2+σk2−1−ln⁡σk2)KL=\frac12\sum_k(\mu_k^2+\sigma_k^2-1-\ln\sigma_k^2).

  • Componente 11 (μ=0,5\mu=0{,}5, σ=2\sigma=2): 12(0,25+4−1−ln⁡4)=12(3,25−1,3863)=0,9318\frac12(0{,}25+4-1-\ln4)=\frac12(3{,}25-1{,}3863)=0{,}9318.
  • Componente 22 (μ=−1\mu=-1, σ=0,8\sigma=0{,}8): 12(1+0,64−1−ln⁡0,64)=12(0,64+0,4463)=0,5431\frac12(1+0{,}64-1-\ln0{,}64)=\frac12(0{,}64+0{,}4463)=0{,}5431.

KL=0,9318+0,5431=1,4750KL=0{,}9318+0{,}5431=1{,}4750. La prima componente costa perché σ=2\sigma=2 è lontana da 11; la seconda perché μ=−1\mu=-1 è lontana da 00.

Campione: z=μ+σ⊙ζ=(0,5+2⋅0,4; −1+0,8⋅(−1,2))=(1,3; −1,96)z=\mu+\sigma\odot\zeta=(0{,}5+2\cdot0{,}4;\ -1+0{,}8\cdot(-1{,}2))=(1{,}3;\ -1{,}96).

La loss totale del campione è l'errore di ricostruzione ∥x−d(z)∥2\|x-d(z)\|^2 più questo KL=1,475KL=1{,}475 (eventualmente con β>1\beta>1 per il β\beta-VAE, che peserebbe di più il KL e darebbe rappresentazioni più disaccoppiate a scapito della ricostruzione).

4. Concetti

Riparametrizzazione. Campionare z∼N(μ,σ2)z\sim\mathcal N(\mu,\sigma^2) direttamente è un'operazione casuale e il gradiente non può passarci attraverso verso μ\mu e σ\sigma. Scrivendo z=μ+σζz=\mu+\sigma\zeta con ζ∼N(0,1)\zeta\sim\mathcal N(0,1) estratto indipendentemente, zz è una funzione derivabile di μ\mu e σ\sigma (∂z/∂μ=1\partial z/\partial\mu=1, ∂z/∂σ=ζ\partial z/\partial\sigma=\zeta) e la backpropagation arriva all'encoder.

Perché l'autoencoder ordinario non genera. Il suo spazio latente è irregolare: codici vicini possono dare ricostruzioni molto diverse e punti scelti a caso (lontani da quelli visti) producono immagini prive di senso. Il VAE, con il termine KL, obbliga le distribuzioni latenti ad avvicinarsi a N(0,I)\mathcal N(0,I), quindi si può estrarre z∼N(0,I)z\sim\mathcal N(0,I) e passarlo al decoder per generare dati nuovi, con transizioni continue tra campioni.

Controllo

python
import numpy as np
err = np.array([.010,.012,.009,.015,.011,.013,.010,.014])
theta = err.mean() + 3 * err.std()                       # 0.0177
mu, s = np.array([.5, -1.]), np.array([2., .8])
kl = .5 * np.sum(mu**2 + s**2 - 1 - np.log(s**2))        # 1.4750
z = mu + s * np.array([.4, -1.2])                        # [ 1.3  -1.96]

Lezioni in cui compare

Teoria collegata