Articles

Generatieve modellen

Dit artikel beschrijft vier projecten die een gemeenschappelijk thema delen van het verbeteren of gebruiken van generatieve modellen, een tak van unsupervised leertechnieken in machine learning. Naast het beschrijven van ons werk, zal dit bericht u een beetje meer vertellen over generatieve modellen: wat ze zijn, waarom ze belangrijk zijn, en waar ze naartoe zouden kunnen gaan.

een van onze belangrijkste ambities bij OpenAI is het ontwikkelen van algoritmen en technieken die computers een inzicht geven in onze wereld.

Het is gemakkelijk om te vergeten hoeveel je weet over de wereld: je begrijpt dat het bestaat uit 3D-omgevingen, objecten die bewegen, botsen, interageren; mensen die lopen, praten en denken; dieren die grazen, vliegen, rennen of blaffen; monitoren die in taal gecodeerde informatie weergeven over het weer, wie een basketbalwedstrijd won, of wat er gebeurde in 1970.

deze enorme hoeveelheid informatie is beschikbaar en voor een groot deel gemakkelijk toegankelijk – hetzij in de fysieke wereld van atomen of de digitale wereld van bits. Het enige lastige is om modellen en algoritmen te ontwikkelen die deze schat aan data kunnen analyseren en begrijpen.

generatieve modellen zijn een van de meest veelbelovende benaderingen om dit doel te bereiken. Om een generatief model te trainen verzamelen we eerst een grote hoeveelheid gegevens in een bepaald domein (denk bijvoorbeeld aan miljoenen beelden, zinnen of geluiden, enz.) en dan een model te trainen om gegevens te genereren zoals deze. De intuïtie achter deze benadering volgt een beroemd citaat van Richard Feynman:

“wat ik niet kan creëren, begrijp ik niet.”

—Richard Feynman

De truc is dat de neurale netwerken die we gebruiken als generatieve modellen een aantal parameters hebben die aanzienlijk kleiner zijn dan de hoeveelheid data waarop we ze trainen, dus de modellen worden gedwongen om de essentie van de data te ontdekken en efficiënt te internaliseren om het te genereren.

generatieve modellen hebben vele toepassingen op korte termijn. Maar op de lange termijn hebben ze het potentieel om automatisch de natuurlijke kenmerken van een dataset te leren, of het nu gaat om Categorieën of dimensies of iets anders.

images genereren

laten we dit concreter maken met een voorbeeld. Stel dat we een grote verzameling afbeeldingen hebben, zoals de 1,2 miljoen afbeeldingen in de ImageNet dataset (maar houd in gedachten dat dit uiteindelijk een grote verzameling afbeeldingen of video ‘ s van het internet of robots kan zijn). Als we elke afbeelding verkleinen tot een breedte en hoogte van 256 (zoals gewoonlijk wordt gedaan), is onze dataset één groot 1,200,000x256x256x3 (ongeveer 200GB) pixelblok. Hier zijn een paar voorbeeldafbeeldingen van deze dataset:

deze beelden zijn voorbeelden van hoe onze visuele wereld eruit ziet en we verwijzen naar deze als”samples from the true data distribution”. We construeren nu ons generatieve model dat we zouden willen trainen om dit soort beelden vanaf nul te genereren. Concreet kan een generatief model in dit geval één groot neuraal netwerk zijn dat beelden uitzendt en we verwijzen naar deze als “monsters van het model”.

DCGAN

een dergelijk recent model is het dcgan-netwerk van Radford et al. (zie hieronder). Dit netwerk neemt als input 100 willekeurige getallen getrokken uit een uniforme distributie (we verwijzen naar deze als een code, of latente variabelen, in het rood) en geeft een afbeelding (in dit geval 64x64x3 afbeeldingen aan de rechterkant, in het groen). Aangezien de code stapsgewijs wordt gewijzigd, doen de gegenereerde beelden dat ook – dit toont het model heeft geleerd functies om te beschrijven hoe de wereld eruit ziet, in plaats van alleen het onthouden van enkele voorbeelden.

het netwerk (in geel) bestaat uit standaard convolutionele neurale netwerkcomponenten, zoals deconvolutionele lagen (omgekeerde convolutionele lagen), volledig verbonden lagen, enz.:

DCGAN wordt geïnitialiseerd met willekeurige gewichten, zodat een willekeurige code die op het netwerk is aangesloten een volledig willekeurige afbeelding zou genereren. Echter, zoals je je misschien kunt voorstellen, het netwerk heeft miljoenen parameters die we kunnen aanpassen, en het doel is om een instelling van deze parameters te vinden die monsters gegenereerd uit willekeurige codes laat lijken op de trainingsgegevens. Of anders gezegd, we willen dat de modeldistributie overeenkomt met de werkelijke datadistributie in de ruimte van beelden.

een generatief model trainen

stel dat we een nieuw geïnitialiseerd netwerk gebruiken om 200 images te genereren, telkens beginnend met een andere willekeurige code. De vraag is: hoe moeten we de parameters van het netwerk aanpassen om het aan te moedigen om in de toekomst iets geloofwaardiger monsters te produceren? Merk op dat we ons niet in een eenvoudige bewaakte omgeving bevinden en geen expliciet gewenste doelen hebben voor onze 200 gegenereerde afbeeldingen; we willen alleen dat ze er echt uitzien. Een slimme aanpak rond dit probleem is het volgen van de generative Agressarial Network (GAN) aanpak. Hier introduceren we een tweede discriminator netwerk (meestal een standaard convolutioneel neuraal netwerk) dat probeert te classificeren of een input beeld echt is of gegenereerd. Bijvoorbeeld, we zouden de 200 gegenereerde beelden en 200 echte beelden in de discriminator en trainen als een standaard classifier om onderscheid te maken tussen de twee bronnen. Maar naast dat — en hier is de truc — we kunnen ook backpropagate door zowel de discriminator en de generator om te vinden hoe we de parameters van de generator moeten veranderen om de 200 monsters iets meer verwarrend voor de discriminator. Deze twee netwerken zijn daarom verwikkeld in een strijd: de discriminator probeert echte beelden van valse beelden te onderscheiden en de generator probeert beelden te creëren die de discriminator doen denken dat ze echt zijn. Uiteindelijk voert het generatornetwerk beelden uit die niet te onderscheiden zijn van echte beelden voor de discriminator.

er zijn een paar andere benaderingen voor het matchen van deze distributies die we hieronder kort zullen bespreken. Maar voordat we er hieronder zijn twee animaties die monsters van een generatief model tonen om u een visueel gevoel voor het trainingsproces te geven.
in beide gevallen beginnen de samples van de generator luidruchtig en chaotisch, en na verloop van tijd convergeren om meer plausibele beeldstatistieken te hebben:

VAE leren voor het genereren van beelden (log tijd)
GAN leren voor het genereren van beelden (lineaire tijd)

Dit is spannend — deze neurale netwerken leren wat de visuele wereld eruit ziet! Deze modellen hebben meestal slechts ongeveer 100 miljoen parameters, dus een netwerk dat is getraind op ImageNet moet (lossily) 200 GB pixelgegevens comprimeren in 100 MB gewichten. Dit stimuleert het om de meest opvallende kenmerken van de gegevens te ontdekken: bijvoorbeeld, het zal waarschijnlijk leren dat pixels in de buurt waarschijnlijk dezelfde kleur hebben, of dat de wereld bestaat uit horizontale of verticale randen, of blobs van verschillende kleuren. Uiteindelijk kan het model veel complexere regelmatigheden ontdekken: dat er bepaalde soorten achtergronden, objecten, texturen zijn, dat ze voorkomen in bepaalde waarschijnlijke arrangementen, of dat ze in de loop van de tijd op bepaalde manieren transformeren in video ‘ s, enz.

meer algemene formulering

wiskundig denken we aan een dataset van voorbeelden \(x_1, \ldots, x_n\) als voorbeelden van een ware gegevensdistributie \(p(x)\). In de voorbeeldafbeelding hieronder toont het blauwe gebied het deel van de afbeeldingsruimte dat, met een grote kans (boven een bepaalde drempel) echte afbeeldingen bevat, en zwarte stippen geven onze gegevenspunten aan (elk is één afbeelding in onze dataset). Nu beschrijft ons model ook een distributie \(\hat{p}_{\theta}(x)\) (Groen) die impliciet wordt gedefinieerd door punten te nemen van een eenheid Gaussiaanse distributie (rood) en ze in kaart te brengen via een (deterministisch) neuraal netwerk — ons generatief model (geel). Ons netwerk is een functie met parameters \(\theta\), en het aanpassen van deze parameters zal de gegenereerde distributie van afbeeldingen tweaken. Ons doel is dan om parameters \(\theta\) te vinden die een distributie produceren die nauw overeenkomt met de ware datadistributie (bijvoorbeeld door een klein KL divergentieverlies te hebben). Daarom kun je je voorstellen dat de groene verdeling willekeurig begint en vervolgens het trainingsproces iteratief de parameters \(\theta\) wijzigt om het uit te rekken en te knijpen om beter overeen te komen met de blauwe verdeling.

drie benaderingen van generatieve modellen

De meeste generatieve modellen hebben deze basisopstelling, maar verschillen in de details. Hier zijn drie populaire voorbeelden van generatieve model benaderingen om u een gevoel van de variatie te geven:

  • Generative Agressarial Networks (GANs), die we hierboven al hebben besproken, stellen het trainingsproces voor als een spel tussen twee afzonderlijke netwerken: een generatornetwerk(zoals hierboven te zien is) en een tweede discriminatief netwerk dat samples probeert te classificeren als afkomstig van de ware distributie \(p (x)\) of de modeldistributie \(\hat{p} (x)\). Elke keer dat de discriminator een verschil opmerkt tussen de twee distributies past de generator zijn parameters licht aan om het weg te laten gaan, totdat aan het einde (in theorie) de generator de ware datadistributie exact reproduceert en de discriminator willekeurig gist, niet in staat om een verschil te vinden.
  • Variational Autoencoders (VAEs) stellen ons in staat om dit probleem te formaliseren in het kader van probabilistische grafische modellen waar we een ondergrens maximaliseren op de log waarschijnlijkheid van de gegevens.
  • Autoregressieve modellen zoals PixelRNN trainen in plaats daarvan een netwerk dat de voorwaardelijke verdeling van elke afzonderlijke pixel modelleert gegeven vorige pixels (naar links en naar boven). Dit is vergelijkbaar met het aansluiten van de pixels van de afbeelding in een char-rnn, maar de RNN ‘ s lopen zowel horizontaal als verticaal over de afbeelding in plaats van slechts een 1D reeks tekens.

al deze benaderingen hebben hun voor-en nadelen. Bijvoorbeeld, variationele Auto-encoders laten ons toe om zowel leren als efficiënte Bayesiaanse gevolgtrekking uit te voeren in geavanceerde probabilistische grafische modellen met latente variabelen (bijvoorbeeld zie DRAW, of bijwonen Infer Repeat voor hints van recente relatief complexe modellen). Nochtans, neigen hun gegenereerde steekproeven lichtjes wazig te zijn. GANs genereren momenteel de scherpste beelden, maar ze zijn moeilijker te optimaliseren als gevolg van instabiele trainingsdynamiek. PixelRNNs hebben een zeer eenvoudig en stabiel trainingsproces (softmax verlies) en geven momenteel de beste log likelihoods (dat wil zeggen, plausibiliteit van de gegenereerde gegevens). Ze zijn echter relatief inefficiënt tijdens de bemonstering en bieden niet gemakkelijk eenvoudige laagdimensionale codes voor afbeeldingen. Al deze modellen zijn actieve onderzoeksgebieden en we zijn benieuwd hoe ze zich in de toekomst ontwikkelen!

onze recente bijdragen

We zijn erg enthousiast over generatieve modellen bij OpenAI, en hebben zojuist vier projecten uitgebracht die de stand van de techniek verbeteren. Voor elk van deze bijdragen geven we ook een technisch rapport en broncode vrij.

verbetering van GANs (code). Ten eerste, zoals hierboven vermeld GANs zijn een zeer veelbelovende familie van generatieve modellen, omdat, in tegenstelling tot andere methoden, ze produceren zeer schone en scherpe beelden en leren codes die waardevolle informatie over deze texturen bevatten. Echter, GANs zijn geformuleerd als een spel tussen twee netwerken en het is belangrijk (en lastig!) om ze in balans te houden: bijvoorbeeld, ze kunnen oscilleren tussen oplossingen, of de generator heeft de neiging om in te storten. In dit werk hebben Tim Salimans, Ian Goodfellow, Wojciech Zaremba en collega ‘ s een aantal nieuwe technieken geïntroduceerd om Gan training stabieler te maken. Met deze technieken kunnen we GANs opschalen en nice 128x128 ImageNet samples verkrijgen:

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. Deze aanpak stelt ons in staat om state of the art resultaten te verkrijgen op MNIST, SVHN en CIFAR-10 in instellingen met zeer weinig gelabelde voorbeelden. Op MNIST bereiken we bijvoorbeeld 99,14% nauwkeurigheid met slechts 10 gelabelde voorbeelden per klasse met een volledig verbonden neuraal netwerk — een resultaat dat heel dicht bij de bekendste resultaten ligt met volledig gecontroleerde benaderingen met alle 60.000 gelabelde voorbeelden. Dit is veelbelovend omdat geëtiketteerde voorbeelden in de praktijk vrij duur kunnen zijn.

generatieve contradictoire netwerken zijn een relatief nieuw model (pas twee jaar geleden geïntroduceerd) en we verwachten snellere vooruitgang te zien bij het verder verbeteren van de stabiliteit van deze modellen tijdens de opleiding.

verbetering van VAEs (code). In dit werk introduceren Durk Kingma en Tim Salimans een flexibele en rekenkundig schaalbare methode om de nauwkeurigheid van variationele gevolgtrekking te verbeteren. In het bijzonder, de meeste VAEs zijn tot nu toe getraind met behulp van ruwe benadering posteriors, waar elke latente variabele is onafhankelijk. Recente uitbreidingen hebben dit probleem aangepakt door elke latente variabele op de anderen ervoor in een keten te conditioneren, maar dit is rekenkundig inefficiënt vanwege de geïntroduceerde sequentiële afhankelijkheden. De kernbijdrage van dit werk, genaamd inverse autoregressive flow (IAF), is een nieuwe aanpak die, in tegenstelling tot vorig werk, ons in staat stelt om de berekening van rijke benaderende posteriors te parallelliseren, en ze bijna willekeurig flexibel te maken.

We tonen een voorbeeld 32x32 voorbeelden van het model in de afbeelding hieronder, aan de rechterkant. Aan de linkerkant zijn eerdere monsters van het DRAW model ter vergelijking (vanille VAE monsters zouden er nog slechter en meer wazig uitzien). Het DRAW-model werd slechts een jaar geleden gepubliceerd, waarin opnieuw de snelle vooruitgang wordt benadrukt die wordt geboekt op het gebied van opleidings-generatieve modellen.

Gegenereerd op basis van een LOTING model
Gegenereerd op basis van een VAE opgeleid met het IAF

InfoGAN (code). Peter Chen en collega ‘ s introduceren InfoGAN — een uitbreiding van GAN die ontwarde en interpreteerbare representaties voor beelden leert. Een regelmatige GAN bereikt het doel van het reproduceren van de gegevensdistributie in het model, maar de lay — out en organisatie van de coderuimte is onderspecificeerd-er zijn veel mogelijke oplossingen voor het in kaart brengen van de eenheid Gaussian naar beelden en degene die we eindigen met zou ingewikkeld en zeer verstrengeld zijn. De InfoGAN legt extra structuur op aan deze ruimte door nieuwe doelstellingen toe te voegen die het maximaliseren van de wederzijdse informatie tussen kleine deelverzamelingen van de representatievariabelen en de waarneming inhouden. Deze aanpak levert opmerkelijke resultaten op. Bijvoorbeeld, in de beelden van 3D gezichten hieronder variëren we een continue dimensie van de code, waarbij alle andere vast. Het is duidelijk uit de vijf verstrekte voorbeelden (langs elke rij) dat de resulterende afmetingen in de code capture interpreteerbare afmetingen, en dat het model heeft misschien begrepen dat er camerahoeken, gezichtsvariaties, enz., zonder te zijn verteld dat deze kenmerken bestaan en belangrijk zijn:

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

We also note that nice, disentangled representations have been eerder bereikt (zoals met DC-IGN door Kulkarni et al.), maar deze benaderingen zijn afhankelijk van extra toezicht, terwijl onze aanpak volledig zonder toezicht is.

de volgende twee recente projecten bevinden zich in een reinforcement learning (RL) setting (een ander aandachtsgebied bij OpenAI), maar beide omvatten een generatieve modelcomponent.

Curiosity-driven Exploration in Deep Reinforcement Learning via Bayesian Neural Networks (code). Efficiënte exploratie in hoogdimensionale en continue ruimtes is momenteel een onopgeloste uitdaging in het leren van versterkingen. Zonder effectieve exploratiemethoden thrashen onze agenten rond totdat ze willekeurig in belonende situaties struikelen. Dit is voldoende in veel eenvoudige speelgoedtaken, maar ontoereikend als we deze algoritmen willen toepassen op complexe instellingen met hoogdimensionale actieruimtes, zoals gebruikelijk is in robotica. In dit artikel stellen Rein Houthooft en collega ‘ s VIME voor, een praktische benadering van exploratie met behulp van onzekerheid over generatieve modellen. VIME maakt de agent zelf gemotiveerd; het zoekt actief verrassende staatshandelingen uit. We laten zien dat VIME een reeks zoekmethoden kan verbeteren en aanzienlijke vooruitgang boekt bij realistischer taken met weinig beloningen (bijvoorbeeld scenario ‘ s waarin de agent zonder enige begeleiding voortbeweging primitieven moet leren).

Beleid getraind met VIME
Beleid getraind met naïeve verkenning

tot slot willen we graag een bonus vijfde project: Generatieve Tegenspraak Imitatie Leren (code), waarin Jonathan Ho en collega ‘ s presenteren een nieuwe aanpak voor imitatie leren. Jonathan Ho komt naar OpenAI als zomer stagiair. Hij deed het grootste deel van dit werk op Stanford, maar we omvatten het hier als een verwante en zeer creatieve toepassing van GANs om RL. De standaard reinforcement learning setting vereist meestal dat men een beloningsfunctie ontwerpt die het gewenste gedrag van de agent beschrijft. In de praktijk kan dit echter soms gepaard gaan met dure trial-and-error proces om de details goed te krijgen. Bij imitatieleren leert de agent daarentegen van voorbeelddemonstraties (bijvoorbeeld door teleoperatie in robotica), waardoor het niet nodig is een beloningsfunctie te ontwerpen.

populaire imitatiebenaderingen omvatten een pijplijn in twee fasen: eerst een beloningsfunctie leren, dan RL op die beloning draaien. Een dergelijke pijpleiding kan traag zijn, en omdat het indirect is, is het moeilijk om te garanderen dat het resulterende beleid goed werkt. Dit werk laat zien hoe men direct beleid uit gegevens kan extraheren via een verbinding met GANs. Als gevolg hiervan kan deze aanpak worden gebruikt om beleid te leren van deskundige demonstraties (zonder beloningen) op harde OpenAI Gym omgevingen, zoals mier en humanoïde.

Going forward

generatieve modellen zijn een snel vooruitstrevend onderzoeksgebied. Naarmate we deze modellen verder ontwikkelen en de training en datasets opschalen, kunnen we verwachten dat we uiteindelijk samples zullen genereren die volledig plausibele afbeeldingen of video ‘ s weergeven. Dit kan op zichzelf te vinden gebruik in meerdere toepassingen, zoals on-demand gegenereerde kunst, of Photoshop++ commando ‘ s zoals “make my smile wider”. Extra momenteel bekende toepassingen zijn onder meer beeld denoising, inpainting, super-resolutie, gestructureerde voorspelling, exploratie in versterking leren, en neurale netwerk pretraining in gevallen waar gelabelde gegevens is duur.de diepere belofte van dit werk is echter dat we de computer in het proces van het opleiden van generatieve modellen een inzicht zullen geven in de wereld en waaruit hij bestaat.