Articles

Modelli generativi

Questo post descrive quattro progetti che condividono un tema comune di migliorare o utilizzare modelli generativi, una branca delle tecniche di apprendimento non supervisionato nel machine learning. Oltre a descrivere il nostro lavoro, questo post ti dirà un po ‘ di più sui modelli generativi: cosa sono, perché sono importanti e dove potrebbero andare.

Una delle nostre aspirazioni principali di OpenAI è sviluppare algoritmi e tecniche che dotino i computer di una comprensione del nostro mondo.

È facile dimenticare quanto sai del mondo: capisci che è composto da ambienti 3D, oggetti che si muovono, si scontrano, interagiscono; persone che camminano, parlano e pensano; animali che pascolano, volano, corrono o abbaiano; monitor che visualizzano informazioni codificate in linguaggio sul tempo, su chi ha vinto una partita di basket o su cosa è successo nel 1970.

Questa enorme quantità di informazioni è là fuori e in larga misura facilmente accessibile — sia nel mondo fisico degli atomi o nel mondo digitale dei bit. L’unica parte difficile è sviluppare modelli e algoritmi in grado di analizzare e comprendere questo tesoro di dati.

I modelli generativi sono uno degli approcci più promettenti verso questo obiettivo. Per formare un modello generativo raccogliamo prima una grande quantità di dati in qualche dominio (ad esempio, pensiamo a milioni di immagini, frasi o suoni, ecc.) e dopo addestrare un modello per generare dati simili. L’intuizione alla base di questo approccio segue una famosa citazione di Richard Feynman:

“Quello che non posso creare, non capisco.”

—Richard Feynman

Il trucco è che le reti neurali che usiamo come modelli generativi hanno un numero di parametri significativamente inferiore alla quantità di dati su cui li addestriamo, quindi i modelli sono costretti a scoprire e interiorizzare efficientemente l’essenza dei dati per generarli.

I modelli generativi hanno molte applicazioni a breve termine. Ma a lungo termine, hanno il potenziale per imparare automaticamente le caratteristiche naturali di un set di dati, se categorie o dimensioni o qualcos’altro interamente.

Generazione di immagini

Rendiamo questo più concreto con un esempio. Supponiamo di avere una grande collezione di immagini, come le 1,2 milioni di immagini nel set di dati ImageNet (ma tieni presente che questa potrebbe essere una grande collezione di immagini o video da Internet o robot). Se ridimensioniamo ogni immagine per avere larghezza e altezza di 256 (come si fa comunemente), il nostro set di dati è un grande 1,200,000x256x256x3 (circa 200 GB) blocco di pixel. Ecco alcune immagini di esempio da questo set di dati:

Queste immagini sono esempi di come appare il nostro mondo visivo e ci riferiamo a questi come “campioni dalla vera distribuzione dei dati”. Ora costruiamo il nostro modello generativo che vorremmo addestrare per generare immagini come questa da zero. Concretamente, un modello generativo in questo caso potrebbe essere una grande rete neurale che emette immagini e ci riferiamo a queste come “campioni dal modello”.

DCGAN

Uno di questi modelli recenti è la rete DCGAN di Radford et al. (mostrato sotto). Questa rete prende come input 100 numeri casuali tratti da una distribuzione uniforme (ci riferiamo a questi come un codice, o variabili latenti, in rosso) e emette un’immagine (in questo caso 64x64x3 immagini a destra, in verde). Poiché il codice viene modificato in modo incrementale, anche le immagini generate lo fanno-questo dimostra che il modello ha imparato le caratteristiche per descrivere come appare il mondo, piuttosto che memorizzare solo alcuni esempi.

La rete (in giallo) è costituita da componenti di rete neurale convoluzionale standard, come livelli deconvoluzionali (inversi di strati convoluzionali), livelli completamente connessi, ecc.:

DCGAN viene inizializzato con pesi casuali, quindi un codice casuale collegato alla rete genererebbe un’immagine completamente casuale. Tuttavia, come puoi immaginare, la rete ha milioni di parametri che possiamo modificare e l’obiettivo è trovare un’impostazione di questi parametri che renda i campioni generati da codici casuali simili ai dati di allenamento. O per dirla in altro modo, vogliamo che la distribuzione del modello corrisponda alla vera distribuzione dei dati nello spazio delle immagini.

Addestrare un modello generativo

Supponiamo che abbiamo usato una rete appena inizializzata per generare 200 immagini, ogni volta a partire da un codice casuale diverso. La domanda è: come dovremmo regolare i parametri della rete per incoraggiarla a produrre campioni leggermente più credibili in futuro? Si noti che non siamo in una semplice impostazione supervisionata e non abbiamo obiettivi espliciti desiderati per le nostre 200 immagini generate; vogliamo semplicemente che sembrino reali. Un approccio intelligente intorno a questo problema è quello di seguire l’approccio Generative Adversarial Network (GAN). Qui introduciamo una seconda rete di discriminatori (di solito una rete neurale convoluzionale standard) che cerca di classificare se un’immagine di input è reale o generata. Ad esempio, potremmo alimentare le 200 immagini generate e le 200 immagini reali nel discriminatore e addestrarlo come un classificatore standard per distinguere tra le due fonti. Ma oltre a questo — ed ecco il trucco-possiamo anche backpropagare sia attraverso il discriminatore che il generatore per trovare come dovremmo cambiare i parametri del generatore per rendere i suoi 200 campioni leggermente più confusi per il discriminatore. Queste due reti sono quindi bloccati in una battaglia: il discriminatore sta cercando di distinguere le immagini reali da immagini false e il generatore sta cercando di creare immagini che fanno il discriminatore pensano che siano reali. Alla fine, la rete del generatore emette immagini indistinguibili dalle immagini reali per il discriminatore.

Ci sono alcuni altri approcci per abbinare queste distribuzioni che discuteremo brevemente di seguito. Ma prima di arrivare qui sotto ci sono due animazioni che mostrano campioni da un modello generativo per darvi un senso visivo per il processo di formazione.
In entrambi i casi i campioni dal generatore partono rumorosi e caotici, e nel tempo convergono per avere statistiche di immagine più plausibili:

VAE apprendimento per generare le immagini (log)
GAN di apprendimento per generare le immagini (tempo lineare)

Questo è interessante — le reti neurali sono di imparare ciò che il mondo visivo sembra! Questi modelli di solito hanno solo circa 100 milioni di parametri, quindi una rete addestrata su ImageNet deve (con perdita) comprimere 200 GB di dati pixel in 100 MB di pesi. Questo lo incentiva a scoprire le caratteristiche più salienti dei dati: ad esempio, probabilmente apprenderà che i pixel nelle vicinanze hanno probabilmente lo stesso colore, o che il mondo è composto da bordi orizzontali o verticali o blob di colori diversi. Alla fine, il modello può scoprire molte regolarità più complesse: che ci sono determinati tipi di sfondi, oggetti, trame, che si verificano in determinati arrangiamenti probabili, o che si trasformano in certi modi nel tempo in video, ecc.

Formulazione più generale

Matematicamente, pensiamo a un set di dati di esempi \(x_1, \ldots, x_n\) come campioni da una vera distribuzione di dati \(p(x)\). Nell’immagine di esempio qui sotto, la regione blu mostra la parte dello spazio immagine che, con un’alta probabilità (oltre una certa soglia) contiene immagini reali, e punti neri indicano i nostri punti dati (ognuno è un’immagine nel nostro set di dati). Ora, il nostro modello descrive anche una distribuzione \(\hat {p} _ {\theta} (x)\) (verde) che viene definita implicitamente prendendo punti da una distribuzione gaussiana unitaria (rossa) e mappandoli attraverso una rete neurale (deterministica) — il nostro modello generativo (giallo). La nostra rete è una funzione con parametri \(\theta\), e tweaking questi parametri modificherà la distribuzione generata di immagini. Il nostro obiettivo è quindi trovare i parametri \(\theta\) che producono una distribuzione che corrisponda strettamente alla vera distribuzione dei dati (ad esempio, avendo una piccola perdita di divergenza KL). Pertanto, puoi immaginare la distribuzione verde che inizia in modo casuale e quindi il processo di allenamento che modifica iterativamente i parametri \(\theta\) per allungarlo e spremerlo per abbinare meglio la distribuzione blu.

Tre approcci ai modelli generativi

La maggior parte dei modelli generativi ha questa configurazione di base, ma differiscono nei dettagli. Ecco tre esempi popolari di approcci modello generativo per darvi un senso della variazione:

  • Generative Adversarial Networks (GANs), di cui abbiamo già discusso sopra, pongono il processo di allenamento come un gioco tra due reti separate: una rete generatrice (come visto sopra) e una seconda rete discriminativa che cerca di classificare i campioni come provenienti dalla vera distribuzione \(p(x)\) o dalla distribuzione del modello \(\hat{p}(x)\). Ogni volta che il discriminatore nota una differenza tra le due distribuzioni il generatore regola leggermente i suoi parametri per farlo andare via, finché alla fine (in teoria) il generatore riproduce esattamente la vera distribuzione dei dati e il discriminatore indovina a caso, incapace di trovare una differenza.
  • Variational Autoencoders (VAEs) ci permettono di formalizzare questo problema nel quadro di modelli grafici probabilistici in cui stiamo massimizzando un limite inferiore sulla probabilità di log dei dati.
  • I modelli autoregressivi come PixelRNN formano invece una rete che modella la distribuzione condizionale di ogni singolo pixel dato pixel precedenti (a sinistra e in alto). Questo è simile a collegare i pixel dell’immagine in un carattere-rnn, ma gli RNN vengono eseguiti sia orizzontalmente che verticalmente sull’immagine invece di una sequenza 1D di caratteri.

Tutti questi approcci hanno i loro pro e contro. Ad esempio, gli Autoencoders variazionali ci consentono di eseguire sia l’apprendimento che l’inferenza bayesiana efficiente in sofisticati modelli grafici probabilistici con variabili latenti (ad esempio, vedi DRAW o Attend Infer Repeat per suggerimenti di modelli relativamente complessi recenti). Tuttavia, i loro campioni generati tendono ad essere leggermente sfocati. Attualmente i GAN generano le immagini più nitide, ma sono più difficili da ottimizzare a causa delle dinamiche di allenamento instabili. PixelRNNs hanno un processo di allenamento molto semplice e stabile (perdita softmax) e attualmente danno le migliori probabilità di log (cioè la plausibilità dei dati generati). Tuttavia, sono relativamente inefficienti durante il campionamento e non forniscono facilmente semplici codici a bassa dimensione per le immagini. Tutti questi modelli sono aree di ricerca attive e siamo ansiosi di vedere come si svilupperanno in futuro!

I nostri recenti contributi

Siamo molto entusiasti dei modelli generativi di OpenAI e abbiamo appena rilasciato quattro progetti che avanzano lo stato dell’arte. Per ognuno di questi contributi stiamo anche rilasciando una relazione tecnica e il codice sorgente.

Migliorare GANs (codice). Innanzitutto, come accennato in precedenza, i GAN sono una famiglia molto promettente di modelli generativi perché, a differenza di altri metodi, producono immagini molto pulite e nitide e imparano codici che contengono preziose informazioni su queste trame. Tuttavia, GANS sono formulati come un gioco tra due reti ed è importante (e difficile!) per mantenerli in equilibrio: ad esempio, possono oscillare tra le soluzioni, o il generatore ha la tendenza a collassare. In questo lavoro, Tim Salimans, Ian Goodfellow, Wojciech Zaremba e colleghi hanno introdotto alcune nuove tecniche per rendere più stabile l’allenamento GAN. Queste tecniche ci permettono di scalare fino GANs e ottenere nizza 128x128 ImageNet campioni:

Real images (ImageNet)
Generated images

Our CIFAR-10 samples also look very sharp – Amazon Mechanical Turk workers can distinguish our samples from real data with an error rate of 21.3% (50% would be random guessing):

Real images (CIFAR-10)
Generated images

In addition to generating pretty pictures, we introduce an approach for semi-supervised learning with GANs that involves the discriminator producing an additional output indicating the label of the input. Questo approccio ci consente di ottenere risultati all’avanguardia su MNIST, SVHN e CIFAR-10 in impostazioni con pochissimi esempi etichettati. Su MNIST, ad esempio, otteniamo una precisione del 99,14% con solo 10 esempi etichettati per classe con una rete neurale completamente connessa, un risultato molto vicino ai risultati più noti con approcci completamente supervisionati che utilizzano tutti gli esempi etichettati 60,000. Questo è molto promettente perché esempi etichettati possono essere piuttosto costosi da ottenere nella pratica.

Le reti contraddittorie generative sono un modello relativamente nuovo (introdotto solo due anni fa) e ci aspettiamo di vedere progressi più rapidi nel migliorare ulteriormente la stabilità di questi modelli durante l’allenamento.

Migliorare VAEs (codice). In questo lavoro Durk Kingma e Tim Salimans introducono un metodo flessibile e computazionalmente scalabile per migliorare l’accuratezza dell’inferenza variazionale. In particolare, la maggior parte dei VAES è stata finora addestrata usando posteriori approssimativi grezzi, dove ogni variabile latente è indipendente. Le estensioni recenti hanno risolto questo problema condizionando ogni variabile latente sulle altre prima di essa in una catena, ma questo è computazionalmente inefficiente a causa delle dipendenze sequenziali introdotte. Il contributo principale di questo lavoro, chiamato inverse autoregressive flow (IAF), è un nuovo approccio che, a differenza del lavoro precedente, ci consente di parallelizzare il calcolo di posteri approssimativi ricchi e renderli quasi arbitrariamente flessibili.

Mostriamo alcuni esempi32x32 esempi di immagini dal modello nell’immagine qui sotto, a destra. A sinistra ci sono campioni precedenti del modello DRAW per il confronto (i campioni vanilla VAE sembrerebbero ancora peggiori e più sfocati). Il modello DRAW è stato pubblicato solo un anno fa, evidenziando ancora una volta i rapidi progressi compiuti nella formazione di modelli generativi.

Generato da un PAREGGIO modello
Generato da un VAE si è allenato con IAF

InfoGAN (codice). Peter Chen e colleghi introducono InfoGAN-un’estensione di GAN che impara rappresentazioni districate e interpretabili per le immagini. Un GAN regolare raggiunge l’obiettivo di riprodurre la distribuzione dei dati nel modello, ma il layout e l’organizzazione dello spazio del codice sono sottospecificati — ci sono molte soluzioni possibili per mappare l’unità gaussiana alle immagini e quella che finiamo con potrebbe essere intricata e altamente impigliata. L’InfoGAN impone una struttura aggiuntiva a questo spazio aggiungendo nuovi obiettivi che implicano la massimizzazione delle informazioni reciproche tra piccoli sottoinsiemi delle variabili di rappresentazione e l’osservazione. Questo approccio fornisce risultati abbastanza notevoli. Ad esempio, nelle immagini delle facce 3D sottostanti variiamo una dimensione continua del codice, mantenendo tutte le altre fisse. È chiaro dai cinque esempi forniti (lungo ogni riga) che le dimensioni risultanti nel codice acquisiscono dimensioni interpretabili e che il modello ha forse capito che ci sono angoli di ripresa, variazioni facciali, ecc., senza esser stato detto che queste caratteristiche esistono e sono importanti:

(a) Azimuth (pose)
(b) Elevation
(c) Lighting
(d) Wide or Narrow

We also note that nice, disentangled representations have been raggiunto prima (come con DC-IGN da Kulkarni et al.), ma questi approcci si basano su una supervisione aggiuntiva, mentre il nostro approccio è completamente senza supervisione.

I prossimi due progetti recenti sono in un ambiente di apprendimento di rinforzo (RL) (un’altra area di attenzione a OpenAI), ma entrambi coinvolgono una componente di modello generativo.

Esplorazione guidata dalla curiosità nell’apprendimento di rinforzo profondo tramite reti neurali bayesiane (codice). L’esplorazione efficiente in spazi ad alta dimensione e continui è attualmente una sfida irrisolta nell’apprendimento per rinforzo. Senza metodi di esplorazione efficaci i nostri agenti si aggirano fino a quando non inciampano casualmente in situazioni gratificanti. Questo è sufficiente in molti semplici compiti giocattolo ma inadeguato se vogliamo applicare questi algoritmi a impostazioni complesse con spazi di azione ad alta dimensione, come è comune nella robotica. In questo articolo, Rein Houthooft e colleghi propongono VIME, un approccio pratico all’esplorazione utilizzando l’incertezza sui modelli generativi. VIME rende l’agente auto-motivato; cerca attivamente azioni di stato sorprendenti. Dimostriamo che VIME può migliorare una serie di metodi di ricerca delle politiche e fare progressi significativi su attività più realistiche con ricompense sparse (ad esempio scenari in cui l’agente deve imparare le primitive di locomozione senza alcuna guida).

la Politica si è allenato con VIME
la Politica si è allenato con ingenuo esplorazione

Infine, vorremmo includere un bonus quinto progetto: Generativa Contraddittorio Imitazione di Apprendimento (codice), in cui Jonathan Ho e colleghi di presentare un nuovo approccio per l’imitazione di apprendimento. Jonathan Ho si unirà a noi a OpenAI come stagista estivo. Ha fatto la maggior parte di questo lavoro a Stanford, ma lo includiamo qui come applicazione correlata e altamente creativa di GANs a RL. L’impostazione standard di apprendimento di rinforzo di solito richiede uno per progettare una funzione di ricompensa che descrive il comportamento desiderato dell’agente. Tuttavia, in pratica questo a volte può comportare costosi processi di prova ed errore per ottenere i dettagli giusti. Al contrario, nell’apprendimento imitazione l’agente impara da dimostrazioni di esempio (ad esempio fornite dalla teleoperazione in robotica), eliminando la necessità di progettare una funzione di ricompensa.

Popolare imitazione approcci coinvolgere due stadio di pipeline: in primo luogo l’apprendimento di una funzione di ricompensa, quindi l’esecuzione di RL che ricompensa. Tale pipeline può essere lenta e, poiché è indiretta, è difficile garantire che la politica risultante funzioni bene. Questo lavoro mostra come si possono estrarre direttamente i criteri dai dati tramite una connessione a GANS. Di conseguenza, questo approccio può essere utilizzato per imparare le politiche da dimostrazioni di esperti (senza ricompense) su ambienti OpenAI palestra duri, come formica e umanoide.

Andando avanti

I modelli generativi sono un’area di ricerca in rapido progresso. Mentre continuiamo a far avanzare questi modelli e a scalare la formazione e i set di dati, possiamo aspettarci di generare campioni che raffigurano immagini o video del tutto plausibili. Questo può di per sé trovare uso in più applicazioni, come ad esempio on-demand generated art, o Photoshop++ comandi come “make my smile wider”. Altre applicazioni attualmente note includono il denoising delle immagini, l’inpainting, la super-risoluzione, la previsione strutturata, l’esplorazione nell’apprendimento per rinforzo e il pretraining della rete neurale nei casi in cui i dati etichettati sono costosi.

Tuttavia, la promessa più profonda di questo lavoro è che, nel processo di formazione dei modelli generativi, doteremo il computer di una comprensione del mondo e di cosa è composto.