Jeg har lest Googles DeepMind Atari papir og jeg prøver å forstå begrepet «erfaringsavspilling». Opplevelsesopptak kommer opp i mange andre forsterkende læringsoppgaver (spesielt AlphaGo-papiret), så jeg vil forstå hvordan det fungerer. Nedenfor er noen utdrag.
id = «f99978b02f»>
Først brukte vi en biologisk inspirert mekanisme kalt erfaringsavspilling som randomiserer dataene, og fjerner dermed korrelasjoner i observasjonssekvensen og glatter over endringer i datadistribusjonen.
Papiret utdyper deretter som følger:
Mens det finnes andre stabile metoder for å trene nevrale nettverk i innstillingen for forsterkningslæring, slik som nevral tilpasset Q-iterasjon, involverer disse metodene gjentatt trening av nettverk de novo hundrevis av iterasjoner. Følgelig er disse metodene, i motsetning til vår algoritme, for ineffektivt til å bli brukt vellykket med store nevrale nettverk. Vi parameteriserer en omtrentlig verdifunksjon $ Q (s, a; \ theta_i) $ ved hjelp av det dype konvolusjonelle nevrale nettverket vist i figur 1, der $ \ theta_i $ er parametrene (det vil si vekter) til Q-nettverket ved iterasjon $ i $ . For å utføre omspill av erfaring, lagrer vi agentens opplevelser $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ ved hvert trinn $ t $ i et datasett $ D_t = \ {e_1, \ dots, e_t \} $ . læring, bruker vi Q-læringsoppdateringer på eksempler (eller mini-batches) av erfaring $ (s, a, r, s «) \ sim U (D) $ , tegnet jevnt tilfeldig fra utvalget av lagrede prøver. Q-læringsoppdateringen ved iterasjon $ i $ bruker følgende tapsfunksjon:
$$ L_i (\ theta_i) = \ mathbb {E} _ {(s, a, r, s «) \ sim U (D)} \ left [\ left (r + \ gamma \ max_ {a»} Q (s), a «; \ theta_i ^ -) – Q (s, a; \ theta_i) \ right) ^ 2 \ right] $$
Hva er erfaringsavspilling, og hva er fordelene med lekmannsbetegnelser?
Svar
Nøkkeldelen av sitert tekst er:
For å utføre repetisjon av erfaring lagrer vi agentens opplevelser $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $
Dette betyr at i stedet for å kjøre Q-learning på tilstands- / handlingspar når de oppstår under simulering eller faktisk opplevelse, lagrer systemet dataene som ble oppdaget for [tilstand, handling, belønning, neste stat] – vanligvis i et stort bord. Merk at dette ikke lagrer tilknyttede verdier – dette er rådataene som skal mates inn i handlingsverdiberegninger senere.
Læringsfasen er da logisk skilt fra å få erfaring, og basert på å ta tilfeldige prøver fra denne tabellen. Du vil fremdeles blande inn de to prosessene – handling og læring – fordi forbedring av politikken vil føre til ulik oppførsel som bør utforske handlinger nærmere de optimale, og du vil lære av dem. Du kan imidlertid dele dette slik du vil – f.eks. ta ett trinn, lær av tre tilfeldige trinn osv. Q-Learning-målene når du bruker erfaringsspill, bruker de samme målene som den elektroniske versjonen, så det er ingen ny formel for det. Tapsformelen som er oppgitt er også den du vil bruke for DQN uten omspill. Forskjellen er bare hvilke s, a, r, s «, a» du mater inn i den.
I DQN opprettholdt DeepMind-teamet også to nettverk og byttet hvilket som var læring og hvilken som mates inn i nåværende handlingsverdiestimater som «bootstraps». Dette hjalp til med stabiliteten i algoritmen når du bruker en ikke-lineær funksjons-tilnærmer. Det er det linjen står for i $ {\ theta} ^ {\ overline {\ space}} _ i $ – det betegner den alternative frosne versjonen av vektene.
Fordeler med reprise av erfaring:
-
Mer effektiv bruk av tidligere erfaringer ved å lære med det flere ganger. Dette er nøkkelen når du får erfaring i den virkelige verden er kostbar, du kan få full bruk av Q-læringsoppdateringene er inkrementelle og konvergerer ikke raskt, så flere passeringer med de samme dataene er fordelaktige, spesielt når det er lav varians i umiddelbare utfall (belønning, neste tilstand) gitt samme tilstand, handlingspar.
-
Bedre konvergensatferd når du trener en funksjons-tilnærmer. Dette skyldes delvis at dataene er mer som iid data antatt i mest overvåket læring konvergens bevis.
Ulempen med repetisjon av erfaring:
- Det er vanskeligere å bruke flertrinns læringsalgoritmer, for eksempel Q ($ \ lambda $) , som kan innstilles for å gi bedre læringskurver ved å balansere mellom skjevhet (på grunn av bootstrapping) og avvik (på grunn av forsinkelser og tilfeldighet i langsiktige resultater). Flertrinns DQN med erfaring-replay DQN er en av utvidelsene som er utforsket i papiret Rainbow: Kombinere forbedringer i dyp forsterkningslæring .
Tilnærmingen som brukes i DQN er kort skissert av David Silver i deler av denne videoforelesningen (rundt 01:17: 00, men verdt å se seksjoner før den). Jeg anbefaler å se hele serien, som er et høyere gradskurs om forsterkningslæring, hvis du har tid.
Kommentarer
- La ‘ sier under opplæringen at vi er i en stat, og vi tar en handling i henhold til epsilon-grådig politikk, og du havner i en annen stat. Så du får belønninger, og den neste staten. Her kan belønningen være poengsummen i spillet, og statene kan være pikselmønstrene på skjermen. Og så tar vi feilen mellom funksjonen aproximator og verdien vi fikk fra den grådige policyen igjen ved å bruke allerede frossen funksjonsapproximator. Men med opplevelsen avspilling når vi optimaliserer tilnærmingen, tar vi noen tilfeldige statlige handlingsdatasett. Har jeg rett?
- @ShamaneSiriwardhana: Ja, jeg tror du har rett. Det er nøyaktig de samme dataene fra den virkelige banen, men i stedet for å lære bare fra det siste trinnet, lagrer du det i et stort bord og prøver fra den tabellen (vanligvis flere prøver, med en butikk på 1000-tallet av tidligere trinn å velge mellom ). Hvis du trenger mer avklaring, kan du stille et spørsmål på nettstedet.
- Ja, jeg gikk gjennom papiret igjen. Det står også at denne metoden også kan forbedre læringen utenfor politikken. Fordi i Q læring med handle i henhold til epsilon-grådig policy, men oppdatering verdier fungerer i henhold til grådige policy. Så når hvert gangstrinn våre nevrale nettoparametere blir oppdatert med mini batch-statistikk, som er viktigere, ikke relatert til nøyaktig tidstrinnsstatistikk, men hva som skjedde før dette, hjelper også til å korrelere dataene.
- @Neil Slater, I ‘ har gått gjennom Rainbow-papiret, og jeg så ikke ‘ noen spesielle kommentarer om å bruke et spesielt triks for å kombinere omspill og multi- trinn metode. Jeg har også ‘ hørt at flertrinnsmetoden opprinnelig er umulig å kombinere med reprise av erfaring, men hvorfor ikke bare tilfeldig velge n-påfølgende opplevelser i stedet for 1 fra erfaringsspill, men fra reprisen så at det ikke fant noen sammenhenger mellom hver n-opplevelse? Er ikke ‘ t denne flertrinns-omspillingen?
- @NeilSlater Hvorfor er det » vanskeligere å bruke multi- trinnlæringsalgoritmer «? Hva mente du?
Svar
Algoritmen (eller i det minste en versjon av den, som implementert i Coursera RL capstone-prosjektet ) er som følger:
-
Opprett en «Avspilling» -buffer som lagrer den siste
#buffer_size
SARS (State, Action, Reward, New State) opplevelser. -
Kjør agenten din, og la den samle erfaringer i repriseringsbufferen til den (bufferen) har minst
#batch_size
.- Du kan velge handlinger i henhold til en bestemt policy (f.eks. soft-max for diskret handlingsrom, Gaussian for kontinuerlig osv.) over $ \ hat {Q} (s, a; \ theta) $ funksjonsestimator.
-
Når den når
#batch_size
, eller mer:-
lag en kopi av funksjonsestimatoren ( $ \ hat {Q} (s, a; \ theta) $ ) på det nåværende tidspunktet, dvs. en kopi av vektene $ \ theta $ – som du «fryser» og ikke oppdaterer, og bruk for å beregne de «sanne» tilstandene $ \ hat {Q} (s «, a»; \ theta) $ . Kjør for
num_replay
oppdateringer:-
eksempel
#batch_size
opplevelser fra repriseringsbufferen. -
Bruk de samplede opplevelsene til å pr utføre en batch-oppdatering til funksjonsestimatoren din (f.eks. i Q-Learning der $ \ hat {Q} (s, a) = $ Nevralt nettverk – oppdater vektene til nettverket). Bruk de frosne vektene som den «sanne» funksjonsverdien, men fortsett å forbedre den ikke-frosne funksjonen.
-
-
gjør dette til du nå en terminal tilstand.
-
Ikke glem å stadig legge de nye opplevelsene til Replay Buffer
-
-
Kjør for så mange episoder som du trenger.
Hva jeg mener med «sann»: hver opplevelse kan betraktes som en «overvåket» læringsduo, der du har en virkelig verdifunksjon $ Q (s, a) $ og en funksjonsestimator $ \ hat {Q} (s, a) $ . Målet ditt er å redusere Value-Error, f.eks. $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Siden du sannsynligvis ikke har tilgang til true handlingsverdier, bruker du i stedet en forbedret versjon av den siste estimatoren med tanke på den nye opplevelsen og belønningen som er gitt. I Q-læring er den «sanne» handlingsverdien $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a «} \ hat {Q} (s», a «; \ theta) $ der $ R $ er belønningen og $ \ gamma $ er rabattfaktoren.
Her er et utdrag av koden:
def agent_step(self, reward, state): action = self.policy(state) terminal = 0 self.replay_buffer.append(self.last_state, self.last_action, reward, terminal, state) if self.replay_buffer.size() > self.replay_buffer.minibatch_size: current_q = deepcopy(self.network) for _ in range(self.num_replay): experiences = self.replay_buffer.sample() optimize_network(experiences, self.discount, self.optimizer, self.network, current_q, self.tau) self.last_state = state self.last_action = action return action