Generativa modeller
det här inlägget beskriver fyra projekt som delar ett gemensamt tema för att förbättra eller använda generativa modeller, en gren av oövervakade inlärningstekniker i maskininlärning. Förutom att beskriva vårt arbete kommer det här inlägget att berätta lite mer om generativa modeller: vad de är, varför de är viktiga och vart de kan gå.
en av våra grundläggande ambitioner på OpenAI är att utveckla algoritmer och tekniker som ger datorer en förståelse för vår värld.
det är lätt att glömma hur mycket du vet om världen: du förstår att den består av 3D-miljöer, föremål som rör sig, kolliderar, interagerar; människor som går, pratar och tänker; djur som betar, flyger, springer eller skäller; bildskärmar som visar information kodad på språk om vädret, som vann en basketmatch eller vad som hände 1970.
denna enorma mängd information finns där ute och i stor utsträckning lättillgänglig — antingen i atomernas fysiska värld eller bits digitala värld. Den enda knepiga delen är att utveckla modeller och algoritmer som kan analysera och förstå denna skattkista av data.
generativa modeller är en av de mest lovande metoderna mot detta mål. För att träna en generativ modell samlar vi först in en stor mängd data i någon domän (t.ex. tror miljontals bilder, meningar eller ljud etc.) och sedan träna en modell för att generera data som den. Intuitionen bakom detta tillvägagångssätt följer ett berömt citat från Richard Feynman:
” vad jag inte kan skapa förstår jag inte.”
—Richard Feynman
tricket är att de neurala nätverk vi använder som generativa modeller har ett antal parametrar som är betydligt mindre än mängden data vi tränar dem på, så modellerna tvingas upptäcka och effektivt internalisera kärnan i data för att generera den.
generativa modeller har många kortsiktiga applikationer. Men i det långa loppet har de potential att automatiskt lära sig de naturliga egenskaperna hos en dataset, oavsett om kategorier eller dimensioner eller något annat helt.
generera bilder
Låt oss göra detta mer konkret med ett exempel. Antag att vi har en stor samling bilder, till exempel de 1, 2 miljoner bilderna i ImageNet-datasetet (men kom ihåg att det så småningom kan vara en stor samling bilder eller videor från internet eller robotar). Om vi ändrar storlek på varje bild för att ha bredd och höjd på 256 (som vanligt görs) är vår dataset ett stort 1,200,000x256x256x3
(cirka 200 GB) block av pixlar. Här är några exempel på bilder från denna dataset:
dessa bilder är exempel på hur vår visuella värld ser ut och vi hänvisar till dessa som”prover från den sanna datadistributionen”. Vi konstruerar nu vår generativa modell som vi vill träna för att generera bilder som detta från grunden. Konkret kan en generativ modell i detta fall vara ett stort neuralt nätverk som matar ut bilder och vi hänvisar till dessa som ”prover från modellen”.
DCGAN
en sådan ny modell är DCGAN-nätverket från Radford et al. (visas nedan). Detta nätverk tar som inmatning 100 slumptal dragna från en enhetlig fördelning (vi hänvisar till dessa som en kod eller latenta variabler i rött) och matar ut en bild (i detta fall 64x64x3
bilder till höger, i grönt). När koden ändras stegvis gör de genererade bilderna också — detta visar att modellen har lärt sig funktioner för att beskriva hur världen ser ut, snarare än att bara memorera några exempel.
nätverket (i gult) består av standardkonvolutionella neurala nätverkskomponenter, såsom dekonvolutionella lager (omvänd av konvolutionella lager), helt anslutna lager etc.:
DCGAN initialiseras med slumpmässiga vikter, så en slumpmässig kod ansluten till nätverket skulle generera en helt slumpmässig bild. Men som du kan föreställa dig har nätverket miljontals parametrar som vi kan justera, och målet är att hitta en inställning av dessa parametrar som gör att prover som genereras från slumpmässiga koder ser ut som träningsdata. Eller för att uttrycka det på ett annat sätt vill vi att modelldistributionen ska matcha den sanna datadistributionen inom bildutrymmet.
utbildning en generativ modell
anta att vi använde ett nyinitierat nätverk för att generera 200 bilder, varje gång vi började med en annan slumpmässig kod. Frågan är: hur ska vi justera nätverkets parametrar för att uppmuntra det att producera något mer trovärdiga prover i framtiden? Lägg märke till att vi inte är i en enkel övervakad inställning och inte har några uttryckliga önskade mål för våra 200 genererade bilder; vi vill bara att de ska se riktiga ut. Ett smart tillvägagångssätt kring detta problem är att följa Generative Adversarial Network (GAN) – metoden. Här introducerar vi ett andra diskrimineringsnätverk (vanligtvis ett standardkonvolutionellt neuralt nätverk) som försöker klassificera om en inmatningsbild är verklig eller genererad. Till exempel kan vi mata in de 200 genererade bilderna och 200 riktiga bilderna i diskriminatorn och träna den som en standardklassificerare för att skilja mellan de två källorna. Men utöver det — och här är tricket-kan vi också backpropagate genom både diskriminatorn och generatorn för att hitta hur vi ska ändra generatorens parametrar för att göra sina 200 prover lite mer förvirrande för diskriminatorn. Dessa två nätverk är därför låsta i en strid: diskriminatorn försöker skilja riktiga bilder från falska bilder och generatorn försöker skapa bilder som får diskriminatorn att tro att de är verkliga. I slutändan matar generatornätverket ut bilder som inte kan skiljas från riktiga bilder för diskriminatorn.
det finns några andra metoder för att matcha dessa distributioner som vi kommer att diskutera kortfattat nedan. Men innan vi kommer dit nedan finns två animationer som visar prover från en generativ modell för att ge dig en visuell känsla för träningsprocessen.
i båda fallen börjar proverna från generatorn bullriga och kaotiska, och över tiden konvergerar för att ha mer trovärdig bildstatistik:
detta är spännande — dessa neurala nätverk lär sig hur den visuella världen ser ut! Dessa modeller har vanligtvis bara cirka 100 miljoner parametrar, så ett nätverk utbildat på ImageNet måste (förlustfritt) komprimera 200 GB pixeldata till 100 MB vikter. Detta stimulerar det att upptäcka de mest framträdande funktionerna i data: till exempel kommer det sannolikt att lära sig att pixlar i närheten sannolikt kommer att ha samma färg eller att världen består av horisontella eller vertikala kanter eller blobbar i olika färger. Så småningom kan modellen upptäcka många mer komplexa regelbundenheter: att det finns vissa typer av bakgrunder, objekt, texturer, att de förekommer i vissa troliga arrangemang eller att de förvandlas på vissa sätt över tiden i videor etc.
mer allmän formulering
matematiskt tänker vi på en dataset med exempel \(x_1, \ldots, x_n\) som prover från en sann datafördelning \(p(x)\). I exempelbilden nedan visar den blå regionen den del av bildutrymmet som med stor sannolikhet (över en viss tröskel) innehåller riktiga bilder och svarta prickar indikerar våra datapunkter (var och en är en bild i vår dataset). Nu beskriver vår modell också en distribution \(\hat{p}_{\theta} (x)\) (grön) som definieras implicit genom att ta poäng från en enhet Gaussisk distribution (röd) och kartlägga dem genom ett (deterministiskt) neuralt nätverk — vår generativa modell (gul). Vårt nätverk är en funktion med parametrar \(\theta\), och tweaking dessa parametrar kommer att justera den genererade distributionen av bilder. Vårt mål är då att hitta parametrar \(\theta\) som producerar en distribution som nära matchar den sanna datafördelningen (till exempel genom att ha en liten KL-divergensförlust). Därför kan du föreställa dig att den gröna fördelningen börjar slumpmässigt och sedan träningsprocessen iterativt ändrar parametrarna \(\theta\) för att sträcka och pressa den för att bättre matcha den blå distributionen.
tre tillvägagångssätt för generativa modeller
de flesta generativa modellerna har denna grundläggande inställning, men skiljer sig åt i detaljerna. Här är tre populära exempel på generativa modellmetoder för att ge dig en känsla av variationen:
- Generative Adversarial Networks (GANs), som vi redan diskuterat ovan, utgör träningsprocessen som ett spel mellan två separata nätverk: ett generatornätverk (som sett ovan) och ett andra diskriminerande nätverk som försöker klassificera prover som antingen kommer från den sanna distributionen \(p(x)\) eller modelldistributionen \(\hat{p}(x)\). Varje gång diskriminatorn märker en skillnad mellan de två fördelningarna justerar generatorn sina parametrar något för att få den att försvinna, tills i slutet (i teorin) reproducerar generatorn exakt den sanna datafördelningen och diskriminatorn gissar slumpmässigt, kan inte hitta en skillnad.
- variations Autoencoders (VAEs) tillåter oss att formalisera detta problem inom ramen för probabilistiska grafiska modeller där vi maximerar en nedre gräns på loggens Sannolikhet för data.
- Autoregressiva modeller som PixelRNN tränar istället ett nätverk som modellerar den villkorliga fördelningen av varje enskild pixel som ges tidigare pixlar (till vänster och till toppen). Detta liknar att ansluta bildens pixlar till en char-rnn, men RNNs kör både horisontellt och vertikalt över bilden istället för bara en 1D-sekvens av tecken.
alla dessa tillvägagångssätt har sina fördelar och nackdelar. Till exempel tillåter variations Autoencoders oss att utföra både lärande och effektiv Bayesiansk inferens i sofistikerade probabilistiska grafiska modeller med latenta variabler (t.ex. se DRAW, eller delta i Infer Repeat för tips om de senaste relativt komplexa modellerna). Men deras genererade prover tenderar att vara något suddiga. GANs genererar för närvarande de skarpaste bilderna men de är svårare att optimera på grund av instabil träningsdynamik. PixelRNNs har en mycket enkel och stabil träningsprocess (softmax-förlust) och ger för närvarande de bästa log-sannolikheten (det vill säga rimligheten hos de genererade data). De är dock relativt ineffektiva under provtagning och ger inte enkelt enkla lågdimensionella koder för bilder. Alla dessa modeller är aktiva forskningsområden och vi är angelägna om att se hur de utvecklas i framtiden!
våra senaste bidrag
Vi är ganska glada över generativa modeller på OpenAI, och har just släppt fyra projekt som främjar toppmodern. För vart och ett av dessa bidrag släpper vi också en teknisk rapport och källkod.
förbättra GANs (kod). För det första, som nämnts ovan, är GANs en mycket lovande familj av generativa modeller eftersom de, till skillnad från andra metoder, producerar mycket rena och skarpa bilder och lär sig koder som innehåller värdefull information om dessa texturer. GANs formuleras dock som ett spel mellan två nätverk och det är viktigt (och knepigt!) för att hålla dem i balans: till exempel kan de svänga mellan lösningar, eller generatorn har en tendens att kollapsa. I detta arbete har Tim Salimans, Ian Goodfellow, Wojciech Zaremba och kollegor infört några nya tekniker för att göra gan-träningen stabilare. Dessa tekniker tillåter oss att skala upp GANs och få fina 128x128
ImageNet prover:
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):
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. Detta tillvägagångssätt gör det möjligt för oss att få toppmoderna resultat på MNIST, SVHN och CIFAR-10 i Inställningar med mycket få märkta exempel. På MNIST uppnår vi till exempel 99,14% noggrannhet med endast 10 märkta exempel per klass med ett helt anslutet neuralt nätverk — ett resultat som ligger mycket nära de mest kända resultaten med helt övervakade tillvägagångssätt med alla 60 000 märkta exempel. Detta är mycket lovande eftersom märkta exempel kan vara ganska dyra att få i praktiken.
generativa kontradiktoriska nätverk är en relativt ny modell (introducerades för bara två år sedan) och vi förväntar oss att se snabbare framsteg när det gäller att ytterligare förbättra stabiliteten hos dessa modeller under träning.
förbättra VAEs (kod). I detta arbete introducerar Durk Kingma och Tim Salimans en flexibel och beräkningsskalbar metod för att förbättra noggrannheten i variationsavslutningen. I synnerhet har de flesta VAEs hittills utbildats med råa ungefärliga posteriorer, där varje latent variabel är oberoende. Nya tillägg har tagit upp detta problem genom att konditionera varje latent variabel på de andra före den i en kedja, men detta är beräkningsmässigt ineffektivt på grund av de införda sekventiella beroenden. Kärnbidraget i detta arbete, kallat inverse autoregressive flow (IAF), är ett nytt tillvägagångssätt som, till skillnad från tidigare arbete, tillåter oss att parallellisera beräkningen av rika ungefärliga posteriorer och göra dem nästan godtyckligt flexibla.
Vi visar några exempel 32x32
bildprover från modellen i bilden nedan, till höger. Till vänster finns tidigare prover från DRAGNINGSMODELLEN för jämförelse (vanilla VAE-prover skulle se ännu värre ut och mer suddiga). DRAGNINGSMODELLEN publicerades för bara ett år sedan och belyser återigen de snabba framsteg som gjorts i utbildning av generativa modeller.
infogan (kod). Peter Chen och kollegor introducerar InfoGAN-en förlängning av GAN som lär sig disentangled och tolkbara representationer för bilder. En vanlig GAN uppnår målet att reproducera datadistributionen i modellen, men layouten och organisationen av kodutrymmet är underspecificerad — det finns många möjliga lösningar för att kartlägga enheten Gaussian till bilder och den vi slutar med kan vara invecklad och mycket intrasslad. InfoGAN inför ytterligare struktur på detta utrymme genom att lägga till nya mål som innebär att maximera den ömsesidiga informationen mellan små delmängder av representationsvariablerna och observationen. Detta tillvägagångssätt ger ganska anmärkningsvärda resultat. Till exempel, i bilderna av 3D-ansikten nedan varierar vi en kontinuerlig dimension av koden och håller alla andra fasta. Det framgår av de fem exemplen (längs varje rad) att de resulterande dimensionerna i koden fångar tolkbara dimensioner, och att modellen kanske har förstått att det finns kameravinklar, ansiktsvariationer etc., utan att ha fått höra att dessa funktioner finns och är viktiga:
We also note that nice, disentangled representations have been uppnådd tidigare (t.ex. med DC-IGN av Kulkarni et al.), men dessa tillvägagångssätt är beroende av ytterligare övervakning, medan vårt tillvägagångssätt är helt oövervakat.
de kommande två senaste projekten är i en förstärkning lärande (rl) inställning (ett annat fokusområde på OpenAI), men de båda involverar en generativ modell komponent.
nyfikenhetsdriven utforskning i djup Förstärkningsinlärning via Bayesianska neurala nätverk (kod). Effektiv utforskning i högdimensionella och kontinuerliga utrymmen är för närvarande en olöst utmaning i förstärkningsinlärning. Utan effektiva prospekteringsmetoder slår våra agenter runt tills de slumpmässigt snubblar i givande situationer. Detta är tillräckligt i många enkla leksaksuppgifter men otillräckligt om vi vill tillämpa dessa algoritmer på komplexa inställningar med högdimensionella handlingsutrymmen, vilket är vanligt inom robotik. I detta dokument föreslår Rein Houthooft och kollegor Vime, ett praktiskt tillvägagångssätt för utforskning med osäkerhet om generativa modeller. Vime gör agenten självmotiverad; det söker aktivt överraskande statliga åtgärder. Vi visar att VIME kan förbättra en rad politiska sökmetoder och gör betydande framsteg på mer realistiska uppgifter med glesa belöningar (t.ex. scenarier där agenten måste lära sig rörliga primitiva utan vägledning).
slutligen vill vi inkludera ett bonus femte projekt: generative adversarial imitation learning (code), där Jonathan ho och kollegor presenterar ett nytt tillvägagångssätt för imitation learning. Jonathan Ho går med oss på OpenAI som sommarpraktikant. Han gjorde det mesta av detta arbete på Stanford men vi inkluderar det här som en relaterad och mycket kreativ tillämpning av GANs till RL. Standardförstärkningsinställningen kräver vanligtvis att man utformar en belöningsfunktion som beskriver agentens önskade beteende. Men i praktiken kan detta ibland innebära dyra trial-and-error process för att få detaljerna rätt. Däremot lär agenten i imitationsinlärning från exempel demonstrationer (till exempel tillhandahålls av teleoperation i robotik), vilket eliminerar behovet av att utforma en belöningsfunktion.
populära imitationsmetoder involverar en tvåstegs pipeline: först lär du dig en belöningsfunktion och kör sedan rl på den belöningen. En sådan rörledning kan vara långsam, och eftersom den är indirekt är det svårt att garantera att den resulterande politiken fungerar bra. Detta arbete visar hur man direkt kan extrahera policyer från data via en anslutning till GANs. Som ett resultat kan detta tillvägagångssätt användas för att lära sig politik från expertdemonstrationer (utan belöningar) på hårda OpenAI Gym miljöer, såsom Ant och Humanoid.
att gå framåt
generativa modeller är ett snabbt framväxande forskningsområde. När vi fortsätter att utveckla dessa modeller och skala upp träningen och datamängderna kan vi förvänta oss att så småningom generera prover som visar helt troliga bilder eller videor. Detta kan i sig hitta användning i flera applikationer, till exempel On-demand generated art, eller Photoshop++ kommandon som ”gör Mitt leende bredare”. Ytterligare för närvarande kända applikationer inkluderar bild denoising, inpainting, superupplösning, strukturerad förutsägelse, utforskning i förstärkningsinlärning och neuralt nätverksförutbildning i fall där märkt data är dyrt.
men det djupare löftet om detta arbete är att vi under utbildningen av generativa modeller kommer att ge datorn en förståelse för världen och vad den består av.
Leave a Reply