Le Generative Adversarial Network (GAN) sono una tecnologia di machine learning che utilizza una serie di reti neurali per generare contenuti sintetici. Come immagini, video, audio e testo. Le GAN sono state sviluppate per la prima volta nel 2014 e da allora hanno attirato l'attenzione di molti ricercatori e sviluppatori di intelligenza artificiale, poiché offrono una serie di vantaggi rispetto ai metodi di apprendimento automatico tradizionali.
Com'è fatta una GAN?
In sintesi, le GAN sono costituite da due reti neurali: un generatore e un discriminatore.
Il generatore cerca di creare contenuti sintetici che siano il più possibile simili ai dati reali. Il discriminatore cerca invece di distinguere i dati reali da quelli sintetici generati dal generatore. Queste due reti neurali lavorano in modo collaborativo e competitivo, il che significa che il generatore cerca di migliorare la qualità dei suoi dati sintetici per ingannare il discriminatore. Il discriminatore cerca di migliorare la sua capacità di distinguere i dati reali da quelli sintetici.
Vantaggi e svantaggi delle GAN
Uno dei principali vantaggi delle GAN è che sono in grado di generare dati sintetici di alta qualità. Poiché il generatore e il discriminatore lavorano in modo collaborativo, il generatore può imparare dai feedback del discriminatore e quindi generare dati sintetici che sono molto simili a quelli reali. Inoltre, le GAN sono generalmente abbastanza veloci ed efficienti rispetto ai metodi più tradizionali. Grazie alle possibilità di parallelizzazione offerte utilizzano reti neurali parallele per il calcolo.
Un altro vantaggio delle GAN è che sono in grado di generare una vasta gamma di tipi di dati, come immagini, video, audio o testi. Ciò è possibile proprio grazie alla natura delle GAN che, essendo basate sulle reti neurali, possono essere facilmente adattate per lavorare con dati di varia natura, a differenza dei metodi tradizionali che spesso richiedono tecniche specifiche per ogni tipo di dato.
Come nella maggior parte delle tecnologie, anche per le GAN esistono alcuni svantaggi degni d nota. Tra questi, è bene specificare che le GAN possono essere difficili da addestrare. Poiché il generatore e il discriminatore lavorano in modo collaborativo e competitivo, il processo di addestramento tende a diventare instabile, portando a risultati non ottimali. Inoltre, poiché le GAN sono modelli di apprendimento automatico basati su reti neurali profonde (deep neural network), possono richiedere una quantità significativa di dati di addestramento per ottenere prestazioni ottimali.
Un altro svantaggio delle GAN è che esse non sono perfettamente affidabili. È infatti possibile che anche una GAN particolarmente efficiente produca dati sporchi o imprecisi. Inoltre, per la particolare struttura che le compone, esse soffrono di un problema relativo alla capacità di produrre dati che siano rappresentativi dell'intero dataset. A tale problema, ci si riferisce spesso come “mode collapse”.
Il fenomeno del “mode collapse” si ha quando il generatore tende a generare solo alcune tipologie di esempi, trascurando quindi una più vasta gamma di possibili output. Questo può accadere perché il generatore cerca di "ingannare" il discriminatore producendo output simili ai dati di training, piuttosto che cercando di produrne diversi. L'effetto di questo fenomeno è che la GAN ha una ridotta capacità di generalizzazione, producendo risultati che, sebbene realistici, non sono sufficiente variegati.
Come implementare una GAN?
Per implementare una GAN in Python, è possibile seguire una serie di passaggi, che possono essere riassunti di seguito:
- innanzitutto, è necessario importare ed usare gli opportuni moduli e librerie di intelligenza artificiale. I più usati sono TensorFlow o PyTorch, che offrono una serie di funzionalità per definire, addestrare ed utilizzare reti neurali. Inoltre, sarà altresì necessario importare alcune altri librerie di supporto alle fasi di data preparation e preprocessing, quali NumPy, Pandas o Matplotlib, per citarne alcune.
- La fase successiva alla configurazione del progetto è quella di preparazione e caricamento dei dati da usare per addestrare e testare la GAN. I dati possono essere immagini, video, audio o testo, a seconda del tipo di GAN che si vuole implementare. Sarà inoltre necessario assicurarsi di avere una quantità sufficiente di dati, oltre che garantirne un sufficiente livello di bontà qualitativa.
- A questo punto potremo definire il modello di GAN utilizzando le librerie summenzionate. Ciò implica la necessità di stabilire una serie di iperparametri del modello, che saranno cruciali per il buon funzionamento delle GAN. Tra questi iperparametri vi sono il numero di strati e il numero di neuroni di ogni strato, e vanno stabiliti sia per la rete generatore e che per quella che fungerà da discriminatore. È poi importante stabilire il metodo di ottimizzazione da utilizzare per la fase di addestramento, che è il cuore del processo di definizione dei pesi delle due reti neurali.
- Una volta definito il modello, potremo avviare il processo di addestramento vero e proprio, utilizzando i dati preparati in precedenza. Durante questo processo, i pesi delle reti neurali verranno iterativamente aggiornati, migliorando di volta in volta le prestazioni globali della GAN.
- Dopo la fase di addestramento, utilizzeremo i dati di test per verificare l'accuratezza del modello. Ciò significa passare i dati di test alla GAN e confrontare i risultati con i dati reali attesi.
L'intero processo, qui descritto per sommi capi, è stato approfondito in una guida dedicata alla GAN e disponibile su HTML.it a questo link. Inoltre, esistono diverse fonti con script Python o notebook pronti all’uso, che possono essere riusati senza troppe modifiche. Tra questi segnaliamo un'apposita pagina sul sito ufficiale di TensorFlow, e questo repository su GitHub.
Conclusioni
Le GAN rappresentano una soluzione tecnologica estremamente interessante per la generazione automatica di dati tramite machine learning. Per creare una GAN, esistono diverse risorse, anche se i limiti di queste soluzioni sono piuttosto concreti.
Negli ultimi anni, proprio allo scopo di superare tali limiti (ad esempio il summenzionato fenomeno del “mode collapse”) sono stati sviluppati modelli di machine learning alternativi, che hanno rapidamente soppiantato le GAN in quasi tutte le applicazioni di intelligenza artificiale generativa. Nelle prossime lezioni approfondiremo questi nuovi modelli.