Modelli generativi e discriminativi a confronto

Modelli generativi e discriminativi a confronto

Condividi con i tuoi amici...

La distinzione tra modelli discriminativi e modelli generativi è fondamentale nel campo dell’apprendimento automatico e dell’intelligenza artificiale.

Entrambi i tipi di modelli vengono utilizzati per compiti di classificazione, ma differiscono nel modo in cui approcciano il problema e nel tipo di soluzioni che producono.

Immagina di avere due insiemi di immagini: un insieme contiene solo immagini di cani e l’altro solo immagini di gatti. Vuoi costruire una macchina che, data una nuova immagine, ti dice se è un cane o un gatto.

Un modello generativo cerca di imparare come è fatto un cane e come è fatto un gatto, studiando moltissime immagini di gatti e di cani. Poi, quando gli dai una nuova immagine, la macchina pensa: “Conosco bene come sono fatti i cani e i gatti. Questa immagine assomiglia di più a quello che so su un cane o su un gatto?” In pratica, cerca di “generare” l’idea dell’animale basandosi su ciò che ha imparato e poi decide.

La regressione logistica, che è un tipo di modello discriminativo, funziona diversamente. Invece di cercare di imparare tutto su cani e gatti separatamente, si concentra sulle differenze tra i due. Guarda tutte le immagini di cani e di gatti che ha e cerca di trovare una “linea” o una regola che le separi il più possibile. Quando poi arriva una nuova immagine, la macchina semplicemente controlla da che parte della “linea” cade quell’immagine e decide se è più simile a un cane o a un gatto basandosi su quella regola.

La grande differenza, quindi, è che i modelli generativi cercano di capire tutto sui singoli gruppi per poi generare un’idea su cosa li rende unici. I modelli discriminativi, come la regressione logistica, non cercano di imparare tutto su ogni gruppo separatamente, ma piuttosto cercano il modo migliore per distinguere tra i gruppi basandosi sulle differenze.

Un modo per immaginarlo è pensare ai modelli generativi come a degli artisti che cercano di dipingere due quadri separati per cani e gatti, studiando ogni dettaglio di ciascun animale. I modelli discriminativi sono più come giudici in un concorso che decidono se un animale è più vicino all’idea generale di un cane o di un gatto, basandosi su alcune caratteristiche chiave.

Un modello generativo cerca di apprendere la distribuzione congiunta dei dati di input e delle etichette di output, P(X,Y). In altre parole, cerca di modellare come i dati vengono generati, tenendo conto sia delle caratteristiche degli input che delle classi di appartenenza.

Esempi: Modelli di Markov nascosti, reti Bayesiane, Gaussian Mixture Models, e Generative Adversarial Networks (GANs).

Poiché modellano la distribuzione congiunta, i modelli generativi possono essere utilizzati non solo per la classificazione, ma anche per generare nuovi dati che assomigliano ai dati di addestramento. Sono particolarmente utili quando abbiamo bisogno di comprendere la struttura sottostante dei dati o quando vogliamo generare nuovi dati.

Applicazioni: Generazione di immagini, testo, musica; modellazione del linguaggio; e sistemi di raccomandazione.

Un modello discriminativo cerca di apprendere la frontiera di decisione tra le classi, cioè la distribuzione condizionata P(Y∣X), dove Y è la variabile dell’etichetta e X sono i dati di input. L’obiettivo è trovare una mappatura diretta dagli input alle etichette di output.

Gli input sono di solito determinate caratteristiche dell’oggetto da classificare, mentre l’output è la classe assegnata all’oggetto in questione.

I modelli discriminativi tendono ad essere più efficienti per i compiti di classificazione e previsione rispetto ai modelli generativi, dato che si concentrano direttamente sulla distinzione tra le classi. Possono anche essere più semplici da addestrare su grandi set di dati.

Applicazioni: Riconoscimento di immagini e voce, diagnosi medica, filtro antispam, e molte altre applicazioni di classificazione.

I modelli generativi apprendono la distribuzione completa dei dati, mentre i modelli discriminativi apprendono il confine di decisione tra le classi.

Solo i modelli generativi possono generare nuovi dati.

Un modello discriminativo non ha bisogno di conoscere tutto sulla classe a cui potrebbe appartenere il dato di input ma gli è sufficiente conoscere quelle caratteristiche che permettono di distinguerlo dagli altri. Per esempio se nei dati di addestramento ci sono immagini di cani e immagini di gatti e tutti i cani hanno il collare mentre nessun gatto ce l’ha, potrebbe essere sufficiente la caratteristica di avere il collare per distinguere le immagini dei gatti da quelle dei cani.

D’altra parte, un modello generativo apprenderebbe la distribuzione completa delle immagini di cani e gatti, inclusi dettagli come forme, dimensioni, colori e persino la presenza di collari. Questo perché un modello generativo cerca di capire come sono fatti i dati in ogni loro aspetto, per poter poi generare nuovi esempi che sembrino realistici e coerenti con quelli visti durante l’addestramento. Quindi, mentre un modello discriminativo si focalizza su quelle caratteristiche che sono cruciali per distinguere tra le classi, un modello generativo cerca di costruire un’immagine completa di ogni classe.

In questo senso, i modelli generativi sono spesso più flessibili dei modelli discriminativi perché possono essere utilizzati per una varietà di compiti oltre la classificazione, come la generazione di dati, l’imputazione di valori mancanti, e la simulazione di scenari basati sui dati appresi. Tuttavia, questa maggiore flessibilità viene con un costo in termini di complessità computazionale e di necessità di avere set di dati più grandi e più rappresentativi per evitare il rischio di overfitting, dato che il modello cerca di apprendere ogni minimo dettaglio dei dati.

Ora mostreremo quanto anticipato nel caso del classificatore di Bayes.

Prima introduciamo la funzione di verosimiglianza

La funzione di verosimiglianza

Immagina di essere un detective che sta cercando di risolvere un mistero, ma al posto di cercare indizi su un crimine, stai cercando di capire come funziona qualcosa nel mondo dei numeri e delle probabilità. La funzione di verosimiglianza è uno strumento che ti aiuta in questa missione, come una lente d’ingrandimento che ti permette di vedere quali indizi (o in questo caso, parametri) rendono più probabile una certa spiegazione degli eventi osservati.

Per capire la funzione di verosimiglianza, dobbiamo parlare di probabilità. Quando i modelli generativi cercano di imparare dai dati, cercano di capire quali regole (o parametri) potrebbero aver generato quei dati.

La funzione di verosimiglianza è un modo per misurare quanto bene un particolare set di parametri spiega i dati che abbiamo osservato. Se usiamo l’analogia delle immagini di cani e gatti, è come cercare di capire quali loro caratteristiche hanno più probabilità di avere dato origine all’immagine che stai vedendo davanti a te, basandosi su quanto sai sulle immagini che ci sono negli insiemi già visti.

La massimizzazione della funzione di verosimiglianza è il processo attraverso cui cerchi di trovare il miglior set di parametri che rende massima la probabilità dei dati osservati. Tornando all’esempio del detective, è come se cercassi la teoria che meglio spiega tutti gli indizi che hai raccolto. In pratica, cambi i parametri del tuo modello finché non trovi la configurazione che rende i dati osservati il più “probabili” o “verosimili” possibile.

Nei modelli generativi, usi la massimizzazione della verosimiglianza per calibrare il tuo modello in modo che possa generare dati il più simili possibile a quelli reali. È come se stessi affinando la tua lente d’ingrandimento (il modello) per vedere sempre più chiaramente come sono fatti i dati reali, modificando leggermente la tua teoria (i parametri del modello) finché la spiegazione che ottieni non è la più chiara e precisa possibile.

In termini matematici…

La funzione di verosimiglianza gioca un ruolo cruciale nei modelli generativi, essendo fondamentale per la stima dei parametri del modello durante il processo di apprendimento. La verosimiglianza misura quanto bene un modello specifico genera i dati osservati. Nei modelli generativi, l’obiettivo è massimizzare questa funzione di verosimiglianza, ovvero trovare i parametri del modello che rendono i dati osservati il più probabili possibile.

La verosimiglianza in un contesto statistico è definita come la probabilità dei dati osservati dati alcuni parametri. Per un modello generativo che cerca di apprendere la distribuzione congiunta P(X,Y) dei dati di input X e delle etichette di output Y, la funzione di verosimiglianza L(θ∣X,Y) è la probabilità dei dati dati i parametri θ del modello.

Esempio: il lancio di una moneta

Il modello di una moneta che viene lanciata segue una distribuzione di Bernoulli, dove il successo (ad esempio, ottenere testa) ha probabilità p e il fallimento (ottenere croce) ha probabilità 1−p. Se consideriamo n lanci indipendenti, la funzione di verosimiglianza L per un dato set di risultati si basa sul prodotto delle probabilità di osservare ciascun risultato dato p.

Supponiamo di avere x successi (teste) in n lanci. Ogni lancio è indipendente dagli altri, e la probabilità di ottenere un successo in un singolo lancio è p, mentre la probabilità di fallimento è 1−p. La funzione di verosimiglianza per questo set di lanci, data la probabilità p, è il prodotto delle probabilità di ottenere esattamente x successi e n−x fallimenti in n prove. Essendo gli eventi indipendenti, possiamo scrivere:

Questa funzione di verosimiglianza L deve essere massimizzata per trovare la stima di p che rende più probabile il nostro campione osservato di n lanci. Per massimizzare L, è comune lavorare con il logaritmo della funzione di verosimiglianza, log⁡(L), perché la derivata del logaritmo è più semplice da calcolare e massimizzare rispetto alla funzione originale, e il massimo di log⁡(L) coincide con il massimo di L

La funzione di log-verosimiglianza è quindi:

Per trovare il valore di p che massimizza log⁡(L), deriviamo questa espressione rispetto a p e poniamo la derivata uguale a zero:

Quindi, la stima di massima verosimiglianza della probabilità di ottenere testa in un singolo lancio di moneta è semplicemente la frazione dei lanci che risultano testa sul numero totale di lanci.

In un modello generativo, la funzione di verosimiglianza viene utilizzata per guidare la stima dei parametri. Questo processo, noto come stima di massima verosimiglianza, consiste nel trovare i valori dei parametri che massimizzano la verosimiglianza dei dati osservati sotto il modello.

Durante l’addestramento, si utilizza la funzione di verosimiglianza per valutare quanto bene il modello attuale è in grado di produrre i dati osservati. L’obiettivo è aggiustare i parametri del modello (per esempio, tramite algoritmi di ottimizzazione come la discesa del gradiente) per massimizzare questa funzione.

Nei modelli generativi che utilizzano approcci bayesiani, la verosimiglianza dei dati è combinata con una distribuzione a priori sui parametri per formare una distribuzione a posteriori. Questo approccio non solo fornisce stime dei parametri, ma anche una misura dell’incertezza associata a queste stime.

Il classificatore Naive Bayes

Un classificatore Naive Bayes è un esempio di modello generativo, ciò significa che modella il modo in cui i dati sono generati per una determinata classe. Supponiamo di avere un insieme di documenti (d) che vogliamo classificare in classi (c), come “positivo” o “negativo”.

Un modello generativo cerca di capire come i dati sono stati prodotti. Assume che ci sia un processo sottostante che genera i dati, e usa questo processo per stimare la probabilità che un dato esempio appartenga a una certa classe.

Determinazione di P(c) e P(d∣c)

La probabilità a priori P(c) è determinata contando la frequenza delle classi nei dati di addestramento. La verosimiglianza P(d∣c) è tipicamente calcolata come il prodotto delle probabilità di ciascuna parola del documento dato la classe, assumendo che le parole siano indipendenti (questa è la “naivety” del Naive Bayes):

Dove wi rappresenta ciascuna parola nel documento.

Per classificare un nuovo documento, selezioniamo la classe che massimizza la probabilità a posteriori P(c∣d). Dato che P(d) è costante per tutte le classi, possiamo usare la regola di decisione che massimizza P(d∣c)P(c) o equivalentemente che massimizza la funzione di verosimiglianza:

si deve trovare la classe particolare:

Esempio

Immaginiamo di avere due classi: “sport” e “non-sport” e due documenti di addestramento per ciascuna classe:

sport: “calcio goal vittoria”, “basket canestro partita”
non-sport: “cinema film regista”, “libro lettura autore”

Dopo aver contato le parole, per classificare un nuovo documento “partita goal cinema”, calcoleremmo

Scegliamo la classe con il valore maggiore

Nel caso in cui i documenti fossero da classificare in molte classi diverse otterremmo la rappresentazione grafica seguente

Stima di P(ci)

La probabilità a priori P(ci) di una classe ci è la probabilità che un documento scelto a caso dal set di addestramento appartenga a quella classe. Questa probabilità può essere stimata contando il numero di documenti di ogni classe nel set di addestramento e dividendo per il numero totale di documenti:

Stima di P(d∣ci)

La probabilità P(d∣ci) è la probabilità di osservare un documento d dato che esso appartiene alla classe ci​. Nel contesto del Naive Bayes, questa probabilità è calcolata come il prodotto delle probabilità di ciascuna parola nel documento, assumendo l’indipendenza tra le parole:

dove wj è la j-esima parola nel documento d, e n è il numero totale di parole uniche nel vocabolario. Ogni P(wj∣ci) è la probabilità di osservare la parola wj in documenti della classe ci​, stimata dai dati di addestramento.

Per stimare P(wj∣ci), seguiamo questi passi:

Contiamo quante volte la parola wj appare nei documenti di classe ci​, che chiameremo count(wj,ci).
Calcoliamo il numero totale di parole in tutti i documenti di classe ci​, che chiameremo count(ci). Questo include ripetizioni, quindi una parola che appare più volte viene contata ogni volta.
Utilizziamo queste informazioni per calcolare la probabilità condizionata come:

Questo è chiamato smoothing di Laplace, dove aggiungiamo 1 al numeratore (che è l’add-one smoothing) per evitare di avere probabilità zero e ∣V∣ è la dimensione del vocabolario (il numero di parole uniche nel set di addestramento), aggiunta al denominatore per mantenere la somma delle probabilità uguale a 1.

Dopo aver stimato queste probabilità, possiamo utilizzare il classificatore Naive Bayes per classificare nuovi documenti. Per ogni nuovo documento, calcoliamo la probabilità per ciascuna classe come il prodotto delle probabilità di ogni parola nel documento (che abbiamo appena calcolato), moltiplicato per la probabilità a priori della classe. La classe con la probabilità più alta viene scelta come la classificazione prevista per il documento.

Il classificatore Naive Bayes è particolarmente efficace in domini come il filtraggio dello spam e la classificazione di documenti dove la distribuzione delle parole è indicativa della classe a cui il documento appartiene. Tuttavia, l’assunzione di indipendenza è una semplificazione e in pratica le parole in un documento sono spesso dipendenti l’una dall’altra. Nonostante questa semplificazione, Naive Bayes funziona spesso sorprendentemente bene in molte applicazioni reali.

ESEMPIO