Metodi Kernel e Processi Gaussiani
★★★★☆ Presente in 10 prove su 25: verifica di validità dei kernel, kernel trick come domanda da 7 punti, matrice di Gram e vero/falso sui processi gaussiani.
I modelli lineari visti finora condividono un’architettura comune: si sceglie a priori un insieme di funzioni base, si proiettano gli input nel feature space corrispondente e si apprende un modello lineare in quello spazio. Questa architettura ha due limiti strutturali: le basi sono fisse e non si adattano ai dati, e il loro numero esplode con la dimensionalità dell’input (la maledizione della dimensionalità). I metodi kernel aggirano entrambi i limiti con un cambio di prospettiva radicale: invece di descrivere ogni punto con le sue coordinate in un feature space costruito esplicitamente, descrivono il dataset tramite le similarità tra coppie di punti, calcolate da una funzione kernel. Il feature space continua a esistere, ma resta implicito: può essere enorme, persino a dimensione infinita, senza che nessuno debba mai calcolarlo. Il capitolo sviluppa questa idea in quattro tappe: la riscrittura della ridge regression in forma duale (dove compaiono solo i kernel), la teoria dei kernel validi e le regole per costruirne di nuovi, la regressione kernel non parametrica, e infine i processi gaussiani, che estendono la regressione bayesiana dal mondo dei pesi al mondo delle funzioni. Chiudono il capitolo due esercizi d’esame svolti passo per passo.
Riferimenti sul testo: Bishop, Pattern Recognition and Machine Learning [PRML], capitolo 6 (6.1, 6.2, 6.3, 6.4) e sezione 2.5.1.
1. Dalle feature esplicite alle similarità#
1.1 Il limite dei modelli lineari a basi fisse#
Molti problemi reali presentano pattern non lineari: nella regressione la relazione input-output può non essere lineare, nella classificazione le classi possono non essere separabili da un confine lineare. I modelli lineari puri non sono abbastanza ricchi per catturarli. La soluzione già incontrata è il feature mapping: una trasformazione che porta i dati in uno spazio a dimensionalità più alta, dove i pattern diventano lineari e i metodi lineari tornano a funzionare.
Due esempi rendono concreta l’idea:
- Classificazione binaria in 1D: punti di due classi disposti sull’asse reale in modo che nessuna soglia li separi (per esempio una classe al centro e l’altra ai due estremi). Mappando l’input scalare nel feature space bidimensionale , i punti diventano separabili da una retta: la parabola “solleva” i punti lontani dall’origine e li allontana da quelli centrali.
- Classificazione binaria in 2D: una classe dentro un anello e l’altra fuori, nessuna retta separa le due nel piano . Con la mappa i punti diventano separabili da un piano nel nuovo spazio tridimensionale.
Il problema è il costo di questa strategia. Si consideri un mapping quadratico completo per un problema con variabili di input: servono il termine costante, gli termini lineari, gli quadrati e tutti i prodotti incrociati , per un totale che cresce come . Con un mapping di grado il numero di feature cresce come . È la maledizione della dimensionalità già incontrata: il numero di feature cresce così in fretta con il numero di variabili che il calcolo esplicito del mapping diventa rapidamente infattibile.
I metodi kernel affrontano esattamente questo problema: non richiedono di calcolare esplicitamente il feature mapping. Restano metodi computazionalmente costosi, ma fattibili anche quando il feature space è enorme o infinito. Dal punto di vista del compromesso bias-varianza, il loro scopo è ridurre il bias del modello, cioè aumentarne la complessità, dando accesso a feature space molto più ricchi di quelli costruibili a mano.
1.2 Modelli parametrici e metodi memory-based#
I metodi kernel appartengono a una famiglia diversa da quella dei modelli visti finora, e la distinzione merita di essere esplicitata.
- Metodo parametrico: la forma della soluzione è fissata in anticipo e dipende da un numero finito di parametri; l’apprendimento consiste nello stimare i parametri dai dati, dopodiché il training set può essere scartato: la predizione usa solo i parametri.
- Metodo non parametrico (memory-based): non esiste un vettore di parametri di dimensione fissa da stimare; il training set viene memorizzato per intero e usato direttamente al momento della predizione.
La regressione lineare è il prototipo del metodo parametrico: appresi i pesi , i dati non servono più. I metodi memory-based, come il k-nearest neighbour, sono all’estremo opposto: l’addestramento è tipicamente rapidissimo (spesso si limita a memorizzare i dati), ma la predizione è lenta perché richiede di confrontare il nuovo punto con i campioni memorizzati. I metodi kernel e i processi gaussiani vivono in questo secondo mondo: la predizione per un nuovo punto è costruita direttamente a partire dalle similarità con i punti del training set.
In parole semplici: un metodo parametrico studia i dati, ne distilla poche cifre (i parametri) e butta via i dati. Un metodo memory-based tiene tutti i dati in memoria e, davanti a un nuovo caso, risponde guardando i casi vecchi più simili. I metodi kernel funzionano nel secondo modo.
1.3 L’idea: la similarità al posto delle coordinate#
Idea chiave: ogni feature mapping induce una nozione di similarità tra punti, il prodotto scalare . I metodi kernel riscrivono gli algoritmi lineari in modo che compaiano solo queste similarità, mai le coordinate : a quel punto basta saper calcolare la similarità, e il feature space può restare implicito, arbitrariamente grande, perfino infinito.
Il vantaggio è duplice. Primo, computazionale: spesso la similarità si calcola con poche operazioni anche quando il feature space corrispondente ha dimensione enorme. Secondo, concettuale: definire una similarità sensata tra due oggetti è in generale più facile che progettare un buon insieme di coordinate, soprattutto per dati non vettoriali come grafi, insiemi, stringhe o testi.
2. La funzione kernel#
2.1 Definizione e interpretazione#
dato un feature mapping , la funzione kernel è il prodotto scalare tra i vettori di feature di due campioni:
Dalla definizione discendono subito tre proprietà e osservazioni:
- il kernel è simmetrico: , perché il prodotto scalare lo è;
- il kernel si interpreta come una misura di similarità tra e : il prodotto scalare è grande quando i due vettori di feature puntano nella stessa direzione e hanno norma grande, piccolo o nullo quando sono ortogonali;
- vettori di feature molto grandi, persino a dimensione infinita, possono dare luogo a una funzione kernel facile da calcolare: questa è la molla dell’intero approccio.
Ogni insieme finito di funzioni base induce il proprio kernel: date le basi (polinomiali, gaussiane, sigmoidali…), il kernel corrispondente è . Fissato , la funzione vista come funzione di ha la forma tipica di una “campana” di similarità centrata attorno a , con profilo che dipende dalla famiglia di basi scelta.
Due classi speciali di kernel hanno un nome proprio:
- kernel stazionari: dipendono solo dalla differenza tra gli argomenti, ; la similarità è invariante per traslazione;
- kernel omogenei (o radial basis functions, RBF): dipendono solo dalla distanza, .
In parole semplici: un kernel è un termometro di somiglianza: prende due punti e restituisce un numero che dice quanto si assomigliano, dove “assomigliarsi” significa avere feature simili in un certo spazio. Il colpo di genio è che spesso si può calcolare quel numero senza mai costruire le feature.
2.2 Il kernel trick#
A che cosa serve, operativamente, la funzione kernel? È possibile rielaborare la rappresentazione dei modelli lineari in modo da sostituire tutti i termini che coinvolgono con termini che coinvolgono soltanto . In altre parole, l’output di un modello lineare può essere calcolato usando solo le similarità tra campioni.
Idea chiave (kernel trick): se un algoritmo lineare può essere riscritto in modo che gli input compaiano esclusivamente dentro prodotti scalari , allora ogni prodotto scalare può essere sostituito da un kernel : l’algoritmo lavora così, implicitamente, nel feature space associato al kernel, senza mai calcolarlo.
Questo approccio, chiamato appunto kernel trick, si applica a molti algoritmi di apprendimento: la ridge regression, la regressione k-NN, il perceptron, la PCA non lineare, i processi gaussiani, le Support Vector Machines (oggetto del prossimo capitolo) e altri ancora.
In parole semplici: molti algoritmi, guardati bene, usano i dati solo per farne prodotti scalari a coppie. Se è così, si può staccare l’algoritmo dalle coordinate e attaccarlo a una funzione di similarità qualsiasi: l’algoritmo non se ne accorge, ma di fatto sta lavorando in uno spazio nuovo, anche gigantesco, al prezzo di calcolare qualche similarità.
3. Kernel ridge regression: la rappresentazione duale#
Il primo esempio completo di kernel trick è la riscrittura della ridge regression. È il passaggio tecnico centrale del capitolo, perché mostra concretamente come le feature esplicite spariscano dai conti.
3.1 Dal primale al duale#
Si parte dalla funzione di perdita della ridge regression (capitolo 3):
Per risolverla si annulla il gradiente rispetto a :
Invece di risolvere direttamente per , si osserva che dall’equazione si può isolare come combinazione lineare dei vettori di feature dei campioni:
dove si è introdotto il cambio di variabile
e è la solita matrice di design . Il messaggio geometrico è già importante di per sé: il vettore dei pesi ottimo giace nel sottospazio generato dai vettori di feature dei campioni di training, quindi al posto degli pesi si possono usare come incognite gli coefficienti , uno per campione. Questa è la rappresentazione duale: le variabili duali vivono nello spazio dei campioni, non nello spazio dei parametri.
Sostituendo nella perdita si ottiene una funzione delle sole variabili duali:
Le feature compaiono ormai soltanto attraverso il prodotto : è qui che entra in scena la matrice di Gram.
3.2 La matrice di Gram#
la matrice di dimensione , il cui elemento generico è il prodotto scalare tra i vettori di feature di due campioni:
La matrice di Gram rappresenta le similarità tra ogni coppia di campioni del training set: sulla diagonale ci sono le similarità di ogni punto con sé stesso, fuori diagonale quelle tra punti diversi. È simmetrica per la simmetria del kernel. Attenzione a non confonderla con , che è e vive nello spazio delle feature: è e vive nello spazio dei campioni.
Riscritta con la matrice di Gram, la perdita duale diventa
Annullando il gradiente rispetto ad si ottiene la soluzione in forma chiusa:
Nella soluzione duale le feature non compaiono più: bastano le similarità raccolte in e i target.
In parole semplici: invece di chiedersi “quanto pesa ciascuna feature?” (un numero per feature, incognite), la forma duale si chiede “quanto conta ciascun esempio?” (un numero per esempio, incognite). Per rispondere non servono le coordinate degli esempi: basta la tabella delle somiglianze a coppie, cioè la matrice di Gram.
3.3 La funzione di predizione#
Come si calcola la predizione per un nuovo punto usando la rappresentazione duale? Sostituendo nel modello lineare:
dove è il vettore delle similarità tra il nuovo punto e tutti i punti del training set, con componenti per ogni .
La lettura della formula è illuminante: la predizione è una combinazione lineare dei target dei campioni di training, con coefficienti che dipendono dalle similarità tra il nuovo punto e i campioni stessi. Se il nuovo punto assomiglia molto a certi esempi, i target di quegli esempi pesano molto nella predizione. Anche il feature mapping esplicito è sparito dalla predizione: servono solo valutazioni del kernel.
In parole semplici: per predire il valore di un punto nuovo, il modello guarda i punti di training, misura quanto ciascuno somiglia al nuovo arrivato e fa una media pesata dei loro target, con pesi aggiustati dalla matrice . È il funzionamento tipico di un metodo memory-based: la risposta viene dai vicini, non da parametri memorizzati.
3.4 Rappresentazione originale o duale?#
Le due rappresentazioni risolvono lo stesso problema, ma con costi e possibilità diverse.
- Rappresentazione originale (primale): richiede di invertire , una matrice . È computazionalmente conveniente quando è piccolo, cioè quando il feature space è a bassa dimensionalità.
- Rappresentazione duale: richiede di invertire , una matrice . Poiché tipicamente , in apparenza è un pessimo affare; diventa conveniente quando è molto grande o addirittura infinito. Inoltre non richiede mai di calcolare esplicitamente , il che rende l’approccio applicabile anche a tipi di dato complessi (grafi, insiemi, stringhe, testi) dove un vettore di feature non è nemmeno definito in modo naturale. Infine, la similarità tra campioni è in generale sia meno costosa da calcolare sia più facile da progettare rispetto al feature mapping completo.
In parole semplici: il primale paga il conto in base a quante feature ci sono, il duale in base a quanti dati ci sono. Con poche feature vince il primale; con feature infinite (o con dati che non stanno in un vettore, come un grafo o una frase) il primale è proprio impossibile, e il duale è l’unica strada.
4. Quali funzioni sono kernel validi#
4.1 Dalla similarità al feature space: il teorema di Mercer#
Finora il kernel è stato costruito a partire da un feature mapping dato. Ma il vero potenziale del metodo sta nel percorso inverso: progettare direttamente la funzione di similarità, senza passare dal feature space. A quel punto serve una garanzia: che la funzione scelta corrisponda davvero a un prodotto scalare in qualche feature space, altrimenti tutta la matematica della sezione precedente (in particolare l’invertibilità e la coerenza delle formule) crolla. Una funzione con questa garanzia si dice kernel valido.
ogni funzione kernel continua, simmetrica e semidefinita positiva può essere espressa come prodotto scalare in uno spazio a dimensionalità alta (eventualmente infinita). La condizione necessaria e sufficiente affinché sia un kernel valido è che la matrice di Gram sia semidefinita positiva per ogni possibile scelta del dataset , cioè per ogni e per ogni scelta dei punti :
In sintesi, le condizioni da verificare per un kernel valido sono:
- continuità in entrambi gli argomenti;
- simmetria: per ogni coppia;
- semidefinitezza positiva: per ogni numero di punti e per ogni loro scelta, la matrice di Gram costruita con è semidefinita positiva.
Se le condizioni valgono, esiste un feature mapping (che in generale non si conosce, e che può essere a dimensione infinita) tale che .
In parole semplici: non ogni funzione di due punti è una similarità legittima. Il test di legittimità è: comunque si scelgano dei punti, la tabella delle loro similarità reciproche deve essere una matrice semidefinita positiva (come lo è ogni matrice di covarianza). Se il test passa sempre, da qualche parte esiste uno spazio in cui quella funzione è un onesto prodotto scalare, anche se nessuno sa com’è fatto.
4.2 Come si verifica in pratica#
Verificare la condizione di Mercer direttamente, per ogni e ogni scelta di punti, è in generale impraticabile. Le strategie operative, tutte spendibili all’esame, sono quattro:
- Esibire un feature mapping: se si riesce a scrivere per un qualche esplicito, la validità è dimostrata per definizione.
- Usare le regole di combinazione (sezione 5.2): partire da kernel noti e applicare trasformazioni che preservano la validità.
- Controllare la simmetria: se anche per una sola coppia, la funzione non è un kernel; è il test più rapido per scartare un candidato.
- Cercare un controesempio alla semidefinitezza: basta trovare una scelta finita di punti la cui matrice di Gram abbia un autovalore negativo (per esempio un elemento diagonale , oppure una matrice con determinante negativo) per concludere che il kernel non è valido.
Un avvertimento importante, che tornerà negli esercizi: valutare il candidato kernel su qualche coppia di punti e ottenere valori “ragionevoli” non dimostra nulla in positivo; le valutazioni puntuali servono solo a cercare controesempi.
5. Costruire kernel#
Non è necessario (né desiderabile) partire dal feature space per costruire un kernel: l’obiettivo è proprio evitare di calcolare esplicitamente i vettori di feature. Le due alternative principali sono la progettazione diretta da zero (verificando poi la validità) e la costruzione a partire da kernel esistenti tramite regole che preservano la validità.
5.1 Progettazione diretta: il kernel polinomiale#
Si consideri la funzione . È un kernel valido? Si può verificarlo esplicitamente in uno spazio di input bidimensionale, espandendo il quadrato:
con il feature mapping
La funzione corrisponde quindi al prodotto scalare in un feature space contenente solo i termini di secondo grado: è un kernel valido. Si noti anche il vantaggio computazionale: calcolare il kernel costa un prodotto scalare in dimensione 2 più un quadrato, mentre costruire esplicitamente le feature e poi moltiplicarle costerebbe di più, e il divario cresce con la dimensione dell’input e con il grado.
Due estensioni immediate:
- per ottenere anche i termini costanti e lineari si definisce con ;
- per ottenere tutti i termini fino al grado si definisce il kernel polinomiale generale .
In parole semplici: elevare al quadrato un prodotto scalare equivale, senza che si veda, a lavorare nello spazio di tutti i prodotti a coppie delle variabili. Aggiungendo una costante prima di elevare a potenza si arricchisce lo spazio con i termini di grado più basso. Un intero feature space polinomiale al prezzo di un prodotto scalare e una potenza.
5.2 Le regole di combinazione#
La via maestra per costruire kernel è partire da kernel noti e combinarli con operazioni “legali”, cioè che preservano la validità. Dati due kernel validi e , sono kernel validi anche:
- , con costante;
- , con funzione qualsiasi;
- , con polinomio a coefficienti non negativi;
- ;
- (somma di kernel);
- (prodotto di kernel);
- , dove mappa in e è un kernel valido su (trasformazione degli input);
- , con matrice simmetrica semidefinita positiva;
- ;
- ;
dove nelle regole 9 e 10 le variabili sono divise in due sottoinsiemi, non necessariamente disgiunti, , e , sono kernel validi sui rispettivi sottospazi.
Il modo d’uso è sempre lo stesso: si parte da kernel elementari di cui la validità è nota (il kernel lineare su tutti), si applica una catena di regole, e si è garantiti che il risultato sia un kernel. Attenzione a due dettagli ricorrenti negli errori d’esame: nella regola 1 la costante deve essere positiva, e nella regola 3 il polinomio deve avere tutti i coefficienti non negativi (un termine con segno meno rompe la garanzia).
In parole semplici: i kernel si combinano come mattoncini: sommarli, moltiplicarli, esponenziarli, riscalarli con costanti positive produce sempre altri kernel. La tabella delle regole è la “grammatica” delle combinazioni lecite: se una funzione si riesce a smontare in kernel elementari collegati da queste operazioni, è valida senza bisogno di altri conti.
5.3 Il kernel gaussiano#
Il kernel di gran lunga più usato in pratica è il kernel gaussiano (o RBF):
La sua validità si dimostra con le regole della sezione precedente, espandendo il quadrato della norma:
da cui il kernel si fattorizza in
Il fattore centrale è l’esponenziale del kernel lineare riscalato con costante positiva : valido per le regole 1 e 4. I due fattori esterni hanno la forma con : regola 2. Il kernel gaussiano è dunque valido.
Il feature space corrispondente al kernel gaussiano ha dimensione infinita: sviluppando in serie di Taylor l’esponenziale del prodotto scalare compaiono i termini polinomiali di tutti i gradi, cioè il kernel gaussiano equivale a un prodotto scalare su un vettore infinito di feature polinomiali. È l’esempio perfetto della potenza del kernel trick: nessun metodo esplicito potrebbe mai lavorare in quello spazio.
Il kernel gaussiano si può inoltre estendere sostituendo il prodotto scalare con un kernel non lineare valido :
che resta un kernel valido e permette di misurare la distanza in un feature space non lineare a scelta.
Come similarità, il kernel gaussiano è molto leggibile: vale il massimo quando e decresce verso zero al crescere della distanza euclidea; due punti sono “simili” se e solo se sono vicini nello spazio di input, con una scala di vicinanza governata da .
In parole semplici: il kernel gaussiano dice che due punti si somigliano quanto più sono vicini, con un raggio di somiglianza regolabile. Dietro questa formula innocua c’è uno spazio di feature a infinite dimensioni: usarlo con il kernel trick significa far girare un modello lineare in uno spazio che non potrebbe fisicamente esistere in memoria.
5.4 Kernel su input non vettoriali e da modelli generativi#
I metodi kernel si estendono anche a input diversi dai vettori reali: grafi, insiemi, stringhe, testi. Il motivo è strutturale: poiché il kernel rappresenta soltanto una misura di similarità tra due campioni, basta saper definire una similarità valida tra oggetti di quel tipo, senza bisogno che gli oggetti abbiano coordinate.
Un esempio classico per gli insiemi: dati due insiemi e ,
dove denota la cardinalità. È un kernel valido: corrisponde al prodotto scalare nel feature space indicizzato da tutti i possibili sottoinsiemi , con se e altrimenti; il prodotto scalare conta i sottoinsiemi contenuti in entrambi, che sono esattamente .
È possibile anche definire kernel a partire da modelli generativi probabilistici. Dato un modello generativo , si definisce
È un kernel valido, perché corrisponde al prodotto scalare nel feature space unidimensionale definito dalla mappa . L’interpretazione: due input sono simili se entrambi hanno alta probabilità sotto il modello generativo.
In parole semplici: per usare i metodi kernel su frasi, molecole o insiemi non serve inventare coordinate numeriche per quegli oggetti: basta una funzione che dica quanto due oggetti si somigliano e che superi il test di validità. È molto più naturale dire “queste due frasi si somigliano tanto” che rappresentare una frase come un vettore.
6. Regressione kernel: Nadaraya-Watson#
Prima dei processi gaussiani conviene vedere l’uso più diretto possibile dei kernel in regressione: metodi memory-based puri, in cui la predizione è una media dei target dei punti vicini.
6.1 Regressione k-NN#
Il k-nearest neighbour si applica alla regressione predicendo, per un nuovo punto , la media dei target dei campioni più vicini nel training set:
dove è l’insieme dei punti di più vicini a . Il difetto è visibile appena si traccia la funzione appresa: l’output è molto rumoroso e discontinuo, perché spostando il vicinato cambia a scatti (un punto entra, un altro esce) e la media salta di conseguenza.
6.2 Il modello di Nadaraya-Watson#
Il modello di Nadaraya-Watson, detto anche kernel regression, elimina le discontinuità sostituendo il vicinato rigido con una media pesata di tutti i campioni, dove i pesi sono dati da una funzione kernel:
Numeratore: somma dei target pesati con la similarità al punto di query. Denominatore: normalizzazione che rende i pesi una media (sommano a 1).
Ogni campione contribuisce alla predizione in proporzione alla sua similarità con : i punti vicini dominano, i punti lontani contano poco o nulla, e la transizione è graduale, quindi la funzione appresa è liscia se il kernel lo è. Il modello si può anche derivare in modo principiato partendo da una stima kernel della densità congiunta di input e target (Bishop, sezione 2.5.1). Le scelte tipiche del kernel sono:
- kernel di Epanechnikov, a supporto limitato: solo i punti entro una finestra attorno a ricevono peso non nullo;
- kernel gaussiano, a supporto infinito: tutti i punti ricevono un peso, che decade esponenzialmente con la distanza.
In parole semplici: il k-NN fa votare solo i vicini, tutti con lo stesso peso, e il risultato è una funzione a scalini. Nadaraya-Watson fa votare tutti, ma con peso proporzionale alla vicinanza: il risultato è la stessa idea, “chiedi ai vicini”, con una risposta finalmente liscia.
7. Processi gaussiani per la regressione#
I processi gaussiani (Gaussian Processes, GP) sono il punto d’incontro tra due fili del corso: l’approccio bayesiano alla regressione (capitolo 3) e i kernel. Come ogni metodo bayesiano, forniscono non solo una predizione per il target ma anche una valutazione dell’incertezza su quella predizione; come ogni metodo kernel, lavorano con le similarità tra punti e non richiedono un feature space esplicito.
7.1 La regressione bayesiana rivisitata: dal prior sui pesi al prior sulle funzioni#
Si parte dalle stesse assunzioni della regressione lineare bayesiana: modello e prior gaussiano sui pesi
L’osservazione chiave è chiedersi che distribuzione induca questo prior sugli output della funzione di regressione valutata nei punti di training. Si consideri il vettore delle valutazioni : è una trasformazione lineare di un vettore gaussiano, quindi è a sua volta gaussiano, con
dove è la matrice di Gram associata al kernel . Il prior sui pesi si è trasformato in un prior direttamente sui valori della funzione, e la struttura di covarianza di questo prior è interamente descritta dal kernel. Questo suggerisce di saltare del tutto il passaggio per i pesi: si può definire il prior direttamente nello spazio delle funzioni, scegliendo un kernel.
7.2 Definizione di processo gaussiano#
un processo gaussiano è una distribuzione di probabilità su una funzione tale che, per ogni scelta di un insieme finito di punti , i valori hanno congiuntamente una distribuzione gaussiana multivariata.
Una distribuzione su un oggetto infinito-dimensionale come una funzione sembra intrattabile; la definizione la rende maneggevole caratterizzandola tramite tutte le sue “fotografie finite”: comunque si scelgano punti, la distribuzione congiunta dei valori della funzione in quei punti è una gaussiana. Nel caso usato per la regressione, il processo è specificato da due proprietà:
- media nulla: per ogni punto (in assenza di conoscenza a priori non c’è motivo di aspettarsi valori positivi piuttosto che negativi);
- covarianza data dal kernel: .
Dato il kernel, il processo gaussiano è completamente caratterizzato. Questo fornisce anche un’interpretazione probabilistica della funzione kernel: il kernel è la covarianza tra i valori della funzione in due punti.
L’intuizione dietro la scelta è importante. Se si pensa al kernel come a una similarità, un valore alto di per punti simili significa covarianza alta tra e ; poiché la media è zero, covarianza alta significa correlazione alta, cioè: la funzione tende ad assumere valori simili in punti simili. Il prior gaussiano di processo è quindi un modo di imporre una forma di regolarità sulle funzioni: si dà probabilità alta alle funzioni lisce rispetto al kernel scelto. Attenzione a un fraintendimento comune: la covarianza riguarda la distribuzione della funzione, non dei dati; si sta dicendo che è molto probabile che la funzione di regressione assegni target simili a input simili.
In parole semplici: un processo gaussiano è un modo di dire “non so che funzione sia, ma scommetto che sia liscia” in linguaggio probabilistico. Invece di mettere un prior sui pesi di un modello, si mette un prior direttamente sulle funzioni: il kernel decide quali funzioni sono plausibili (quelle che variano poco tra punti simili) e quali no.
7.3 Il modello di osservazione e la distribuzione dei target#
Per usare il GP in regressione si adotta la solita assunzione: i target osservati sono i valori di una funzione ignota più rumore gaussiano additivo,
con rumore indipendente tra campioni diversi. Raccogliendo i valori della funzione nel vettore e i target nel vettore , la distribuzione condizionata dei target dati i valori della funzione è una gaussiana isotropa con covarianza diagonale:
mentre il prior sui valori della funzione, per definizione di GP, è
con la matrice di Gram del kernel scelto. Integrando su (tutto è gaussiano, quindi anche il risultato lo è) si ottiene la distribuzione marginale dei target:
La covarianza somma i due contributi di aleatorietà, che sono indipendenti: la variabilità della funzione (tramite ) e il rumore di osservazione (tramite ); elemento per elemento, . Questa matrice è l’oggetto centrale per la predizione.
7.4 La distribuzione predittiva#
Si supponga di aver osservato punti e di ricevere un nuovo input , per il quale si vuole predire il target . Il vettore esteso ha, per le stesse ragioni di prima, distribuzione gaussiana a media nulla con covarianza , che si costruisce incrementalmente da aggiungendo una riga e una colonna:
dove:
- è il vettore delle valutazioni del kernel tra tutti i punti osservati e il nuovo punto, ;
- è l’elemento diagonale relativo al nuovo punto.
La distribuzione predittiva è la distribuzione del nuovo target condizionata a tutti i dati raccolti, . Il condizionamento di una gaussiana congiunta è ancora una gaussiana, con espressioni in forma chiusa per media e varianza:
Media predittiva: Varianza predittiva:
dove è il vettore dei target osservati.
7.5 Interpretazione della media e della varianza predittive#
La media. La predizione è una combinazione lineare pesata dei target osservati. Il vettore dice quanto il nuovo punto è simile a ciascuno dei punti precedenti: intuitivamente, se il nuovo punto è molto simile a un punto già visto, si vuole dare un peso alto al target di quel punto, ed è esattamente ciò che la formula fa. La matrice aggiusta questi pesi tenendo conto della struttura di similarità interna ai dati di training (quanto i vecchi punti si somigliano tra loro, tramite ) e del rumore irriducibile (tramite ): serve a garantire la scala corretta della predizione e a non contare più volte l’informazione portata da punti di training ridondanti. Se per un momento si immagina , la formula si riduce a “somma dei target pesati con la similarità”, che è l’essenza del meccanismo.
La varianza. La formula si legge come “incertezza a priori meno informazione guadagnata”:
- è la varianza che il punto avrebbe senza osservazioni: rumore irriducibile più variabilità a priori della funzione nel punto;
- è una quantità sicuramente non negativa (perché è definita positiva) che viene sottratta, ed è grande quando il nuovo punto è simile ai punti osservati: in quel caso il vettore ha componenti grandi, mentre non dipende dal nuovo punto.
Il comportamento risultante è esattamente quello che ci si aspetta da un metodo bayesiano sensato: se il nuovo punto cade vicino a punti già osservati, il processo ha molta informazione e la varianza predittiva è piccola; se cade lontano da tutti i dati, il termine sottratto è quasi nullo e la varianza resta vicina a quella a priori, cioè grande.
In parole semplici: il GP predice facendo una media intelligente dei target dei punti che somigliano al punto nuovo, e insieme alla predizione dichiara quanto è sicuro: molto sicuro dove ha visto tanti dati, poco sicuro dove sta estrapolando. La barra d’errore non è un accessorio: esce dalle stesse formule della predizione.
Visivamente, in un problema di regressione 1D risolto con un GP (kernel gaussiano con ampiezza , length scale e rumore ), si traccia la curva della media predittiva al variare di e, attorno a essa, la banda di confidenza al 95% ottenuta come . Nelle regioni ricche di punti di training la banda è stretta; nelle regioni prive di punti la banda si allarga, in accordo con l’analisi della formula della varianza.
7.6 Scelta del kernel e degli iperparametri#
Il kernel del GP si progetta con gli approcci usuali della sezione 5. Due famiglie tipicamente usate con i GP sono:
- il kernel gaussiano, nella forma con ampiezza e length scale espliciti:
- il kernel esponenziale, , che decade con la distanza (non con il suo quadrato) e genera funzioni meno lisce.
Nel kernel gaussiano, è una costante di ampiezza e è la length scale, che gioca il ruolo della deviazione standard della campana: due punti sono considerati simili se la loro distanza è piccola rispetto a . Da non confondere: il kernel gaussiano non ha nulla a che vedere con i processi gaussiani in quanto tali; condividono solo l’uso della funzione gaussiana, e un GP può benissimo usare un kernel non gaussiano.
Come si scelgono i valori degli iperparametri , e ? Due strade:
- conoscenza di dominio: se si sa qualcosa del problema (per esempio l’entità del rumore di misura), si possono fissare direttamente;
- massima verosimiglianza: si usano i dati per stimare gli iperparametri massimizzando la verosimiglianza marginale , cioè la probabilità che i campioni siano generati da una gaussiana con la struttura di covarianza indotta dal kernel. È l’approccio implementato di default in molte librerie (in Python,
GaussianProcessRegressordi scikit-learn).
L’iperparametro più importante per il comportamento del modello è la length scale, che agisce come manopola di regolarizzazione:
- aumentando (per esempio da 0.8 a 8) l’argomento dell’esponenziale si riduce in valore assoluto e i valori del kernel crescono: il modello considera “simili” anche punti lontani. La funzione appresa diventa più liscia, l’incertezza complessiva più piccola e quasi uniforme, con poca differenza tra regioni dense e regioni vuote. È una regolarizzazione forte: bias alto, varianza bassa (nel senso del compromesso bias-varianza);
- diminuendo (per esempio da 0.8 a 0.08) la similarità decade molto in fretta: la media predittiva diventa meno regolare e la differenza di incertezza tra regioni dense e vuote si accentua molto. Regolarizzazione debole: bias basso, varianza alta.
Il rumore ha un effetto diverso: non incide molto sulla levigatezza della funzione, ma incide in modo significativo sull’ampiezza dell’incertezza predittiva. Con grande (per esempio 10) la banda di confidenza si allarga ovunque; con piccolo si restringe. Per il kernel gaussiano, comunque, l’iperparametro che governa la regolarità della soluzione è la length scale.
In parole semplici: decide fino a che distanza due punti “si parlano”. Con grande tutti parlano con tutti e la curva viene piatta e tranquilla; con piccolo ognuno ascolta solo i vicinissimi e la curva insegue ogni punto, con grande incertezza appena fuori dai dati. È la stessa storia del compromesso bias-varianza, raccontata da un solo numero.
7.7 GP e regressione bayesiana a confronto; natura non parametrica#
Il confronto con la regressione lineare bayesiana chiude il cerchio:
- la regressione bayesiana con funzioni base e prior gaussiano sui pesi è un processo gaussiano, quello con kernel ; il GP è la generalizzazione che permette kernel qualunque, inclusi quelli con feature space infinito (come il gaussiano), irraggiungibili per qualsiasi modello a basi esplicite;
- il costo computazionale si ribalta come nel caso della ridge: la regressione bayesiana lavora con matrici , il GP deve invertire , che è ; il GP conviene quando è enorme o infinito, diventa oneroso quando è molto grande;
- il GP è un metodo non parametrico: non c’è alcun vettore di parametri da stimare, i dati vengono usati direttamente per produrre le predizioni. Le uniche quantità da fissare sono gli iperparametri del kernel e il rumore, tipicamente stimati per massima verosimiglianza.
Un’ultima nota di prospettiva: i GP nascono per la regressione, ma si possono estendere alla classificazione binaria applicando una funzione sigmoidale alla media predittiva , ottenendo un valore in interpretabile come probabilità della classe positiva; l’addestramento in quel caso richiede tecniche approssimate che escono dallo scopo del corso.
In parole semplici: la regressione bayesiana e il GP sono la stessa fotografia scattata da due lati: una ragiona sui pesi, l’altro direttamente sulle funzioni. Il GP però può usare similarità che nessun insieme finito di basi può replicare, e paga questo lusso con conti che crescono con il cubo del numero di dati.
8. Esercizi d’esame svolti#
8.1 Verificare la validità di un kernel#
Traccia. Siano e sia il vettore di tutti uno di dimensione opportuna. Dire se le seguenti funzioni sono kernel validi, motivando le risposte:
- , con il coseno applicato elemento per elemento
Svolgimento del punto 1. Un primo istinto è consultare la tabella delle regole di combinazione: il termine è il kernel lineare, ma i termini e presi singolarmente non sono kernel (non sono nemmeno funzioni simmetriche di entrambe le variabili), quindi la tabella da sola non chiude il problema. Un secondo istinto è cercare un controesempio valutando la funzione su coppie specifiche di punti: ma da valutazioni puntuali che non evidenziano violazioni (di simmetria o di semidefinitezza) non si può concludere nulla; servono solo a scartare, non a promuovere.
La strada giusta è tentare di esibire un feature mapping, cioè di fattorizzare la funzione come prodotto scalare. Ricordando che , si riconosce l’espansione di
La funzione è dunque il prodotto scalare nel feature space definito da : è un kernel valido. In alternativa si può invocare la regola 7: è il kernel lineare applicato agli input trasformati .
Svolgimento del punto 2. Si controlla subito la simmetria:
Le due espressioni differiscono non appena : la funzione non è simmetrica, quindi non è un kernel valido. Quando la simmetria manca, questa singola osservazione è una motivazione sufficiente e completa.
Svolgimento del punto 3. Si procede in due passi con le regole di combinazione:
- la trasformazione (coseno elemento per elemento) mappa in ; poiché è un kernel valido su (punto 1), per la regola 7 anche è un kernel valido;
- l’elevamento al cubo si gestisce con la regola 3, prendendo il polinomio che ha coefficienti non negativi; equivalentemente, si può applicare due volte la regola 6 (prodotto di kernel): è un kernel, e pure.
Quindi è un kernel valido.
Svolgimento del punto 4. La tentazione è forte: “somma di kernel (regola 5) dentro un esponenziale (regola 4), quindi valido”. Ma il ragionamento è sbagliato in partenza: le regole si applicano solo partendo da kernel validi, e non lo è (punto 2). Dal fallimento delle regole, però, non si può concludere che non sia valido: le regole danno condizioni sufficienti, non necessarie. Bisogna fare il calcolo esplicito dell’argomento dell’esponenziale:
avendo riconosciuto l’espansione del quadrato della norma della differenza (il prodotto scalare è simmetrico, quindi ). Dunque
che è esattamente il kernel gaussiano (con ), la cui validità è stata dimostrata nella sezione 5.3: è un kernel valido. La morale, preziosa per l’esame: è possibile costruire un kernel valido combinando funzioni che kernel non sono; in questi casi la tabella delle regole non basta e serve la verifica diretta.
8.2 Vero o falso sui processi gaussiani#
Traccia. Dire se le seguenti affermazioni sui processi gaussiani sono vere o false, motivando le risposte.
- Più campioni abbiamo in una zona dello spazio di input attorno a un punto , più è probabile che la varianza del processo diminuisca in .
- Possiamo scegliere qualunque tipo di distribuzione a priori per un GP.
- I processi gaussiani possono essere usati solo per la regressione.
- Lontano dalle regioni in cui abbiamo punti, la varianza del GP diventa sempre più grande.
- Come nei modelli lineari, la varianza considerata dipende dal punto dello spazio di input.
Punto 1: vera. Dove ci sono molti punti osservati, la predizione del GP dispone di molta informazione localizzata e la sua varianza è piccola. La giustificazione intuitiva è sufficiente all’esame, ma si può anche argomentare analiticamente: la varianza predittiva in è
con . Più punti di training sono vicini (cioè simili) a , più le componenti di sono grandi, più grande è la quantità sottratta, più piccola è la varianza.
Punto 2: falsa. In un processo gaussiano la distribuzione a priori sui valori della funzione, , non è libera: è forzata a essere una gaussiana con media nulla e matrice di covarianza pari alla matrice di Gram indotta dal kernel. La libertà di modellazione sta nella scelta del kernel, non nella forma della distribuzione.
Punto 3: vera (ai fini del corso). L’output del GP è la media predittiva , un numero reale, quindi il metodo così com’è risolve problemi di regressione. Come informazione aggiuntiva: i GP si possono adattare alla classificazione binaria applicando una sigmoide a e interpretando il risultato come probabilità della classe positiva, ma l’addestramento in quel contesto richiede tecniche fuori dallo scopo del corso.
Punto 4: vera, per la stessa ragione, ribaltata, del punto 1: lontano dai dati le componenti del vettore sono piccole (il nuovo punto non somiglia a nessun punto osservato), la quantità sottratta tende a zero e la varianza predittiva tende al suo valore a priori , il massimo possibile.
Punto 5: falsa, sotto entrambe le letture possibili dell’affermazione:
- se per “varianza” si intende quella del rumore irriducibile : in entrambi i modelli (lineare e GP) il rumore è assunto omoschedastico, cioè con varianza costante che non dipende dall’input; l’affermazione di dipendenza da è falsa in tutti e due i casi;
- se per “varianza” si intende quella della predizione: nel GP esiste ed effettivamente dipende da , ma nei modelli lineari (non bayesiani) una varianza di predizione non viene proprio fornita: il modello restituisce solo la stima puntuale. Il parallelo “come nei modelli lineari” è quindi comunque falso.
Glossario#
| Termine | Definizione |
|---|---|
| Feature mapping | Trasformazione che porta gli input in uno spazio a dimensionalità più alta dove i pattern diventano lineari. |
| Metodo parametrico | Metodo la cui soluzione dipende da un numero fisso di parametri stimati dai dati; dopo l’addestramento il training set può essere scartato. |
| Metodo memory-based (non parametrico) | Metodo che memorizza il training set e lo usa direttamente al momento della predizione; addestramento veloce, predizione costosa. |
| Funzione kernel | Prodotto scalare tra i vettori di feature di due campioni, ; si interpreta come misura di similarità. |
| Kernel stazionario | Kernel che dipende solo dalla differenza degli argomenti, . |
| Kernel omogeneo (RBF) | Kernel che dipende solo dalla distanza tra gli argomenti, . |
| Kernel trick | Riscrittura di un algoritmo lineare in modo che gli input compaiano solo dentro prodotti scalari, sostituibili con un kernel: l’algoritmo lavora in un feature space implicito. |
| Rappresentazione duale | Riformulazione della ridge regression con incognite (una per campione) al posto dei pesi ; soluzione . |
| Matrice di Gram () | Matrice delle similarità tra coppie di campioni, ; simmetrica e semidefinita positiva per kernel validi. |
| Kernel valido | Funzione che corrisponde a un prodotto scalare in qualche feature space; equivalentemente, che genera matrici di Gram semidefinite positive per ogni dataset. |
| Teorema di Mercer | Una funzione continua, simmetrica e semidefinita positiva è esprimibile come prodotto scalare in uno spazio a dimensionalità alta, eventualmente infinita. |
| Regole di combinazione | Operazioni (somma, prodotto, esponenziale, riscalamento positivo, trasformazione degli input…) che applicate a kernel validi producono kernel validi. |
| Kernel polinomiale | : prodotto scalare nel feature space di tutti i monomi fino al grado . |
| Kernel gaussiano | : kernel valido con feature space a dimensione infinita; la similarità decade con la distanza euclidea. |
| Length scale () | Iperparametro del kernel gaussiano che fissa la scala di distanza entro cui due punti sono considerati simili; agisce da regolarizzatore (grande : bias alto e varianza bassa; piccolo : viceversa). |
| Regressione k-NN | Predizione ottenuta come media dei target dei campioni più vicini; produce funzioni discontinue e rumorose. |
| Modello di Nadaraya-Watson | Kernel regression: media dei target pesata con le similarità kernel, . |
| Kernel di Epanechnikov | Kernel a supporto limitato usato nella kernel regression: solo i punti entro una finestra ricevono peso non nullo. |
| Processo gaussiano (GP) | Distribuzione di probabilità su una funzione tale che i valori in ogni insieme finito di punti sono congiuntamente gaussiani; specificato da media (nulla) e covarianza (il kernel). |
| Interpretazione probabilistica del kernel | Nel GP, : il kernel è la covarianza tra i valori della funzione in due punti. |
| Matrice | Covarianza marginale dei target nel GP: , somma di variabilità della funzione e rumore di osservazione. |
| Media predittiva () | : combinazione lineare dei target osservati pesata dalle similarità con il nuovo punto. |
| Varianza predittiva () | : incertezza a priori meno informazione guadagnata; piccola vicino ai dati, grande lontano da essi. |
| Omoschedasticità | Assunzione che la varianza del rumore sia costante, indipendente dal punto di input; vale sia nei modelli lineari sia nei GP. |
| Verosimiglianza marginale | Probabilità dei target , usata per stimare gli iperparametri del kernel e per massima verosimiglianza. |