Jeg har læst Googles DeepMind Atari papir og jeg prøver at forstå begrebet “oplevelsesafspilning”. Oplevelsesafspilning kommer i mange andre forstærkende læringsopgaver (især AlphaGo-papiret), så jeg vil forstå, hvordan det fungerer. Nedenfor er nogle uddrag.
Først brugte vi en biologisk inspireret mekanisme kaldet oplevelsesafspilning, der randomiserede dataene og derved fjernede korrelationer i observationssekvensen og udjævnede ændringer i datadistributionen.
Papiret uddyber derefter som følger:
Mens der findes andre stabile metoder til træning af neurale netværk i indstillingerne for forstærkningslæring, såsom neuralt tilpasset Q-iteration, involverer disse metoder gentagen træning af netværk de novo hundredvis af iterationer. Derfor er disse metoder, i modsætning til vores algoritme, for ineffektiv til at blive brugt med succes med store neurale netværk. Vi parameteriserer en tilnærmet værdifunktion $ Q (s, a; \ theta_i) $ ved hjælp af det dybe nedbrydningsneurale netværk vist i fig. 1, hvor $ \ theta_i $ er Q-netværks parametre (dvs. vægte) ved iteration $ i $ . For at udføre gentagelse af oplevelse gemmer vi agentens oplevelser $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ på hvert tidstrin $ t $ i et datasæt $ D_t = \ {e_1, \ dots, e_t \} $ . Under læring, vi anvender opdateringer til Q-læring på prøver (eller mini-batches) af erfaring $ (s, a, r, s “) \ sim U (D) $ , trukket ensartet tilfældigt fra puljen af lagrede prøver. Q-læringsopdateringen ved iteration $ i $ bruger følgende tabsfunktion:
$$ 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] $$
Hvad er erfaringsgenafspilning, og hvad er fordelene ved lægmænd?
Svar
Den vigtigste del af citeret tekst er:
For at udføre gentagelse af oplevelse gemmer vi agentens oplevelser $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $
Dette betyder i stedet for at køre Q-learning på tilstands- / handlingspar, når de opstår under simulering eller faktisk oplevelse, lagrer systemet de data, der blev opdaget for [tilstand, handling, belønning, næste stat] – typisk i en stor tabel. Bemærk, dette gemmer ikke tilknyttede værdier – dette er de rå data, der skal føjes til handlingsværdiberegninger senere.
Læringsfasen er derefter logisk adskilt fra at få erfaring og baseret på at tage tilfældige prøver fra denne tabel. Du vil stadig sammenflette de to processer – handling og indlæring – fordi forbedring af politikken vil føre til forskellige adfærd, der skal udforske handlinger tættere på de optimale, og du vil lære af dem. Du kan dog opdele dette, hvordan du vil – f.eks. tage et trin, lære af tre tilfældige tidligere trin osv. Q-Learning-målene, når du bruger oplevelses-replay, bruger de samme mål som online-versionen, så der er ingen ny formel for det. Den angivne tabsformel er også den, du vil bruge til DQN uden gentagelse af erfaring. Forskellen er kun hvilke s, a, r, s “, a” du føder til den.
I DQN vedligeholdt DeepMind-teamet også to netværk og skiftede hvilket, der var læring, og hvilken der indgår i aktuelle handlingsværdianslag som “bootstraps”. Dette hjalp med stabiliteten af algoritmen, når du bruger en ikke-lineær funktionstilnærmer. Det er hvad bjælken står for i $ {\ theta} ^ {\ overline {\ space}} _ i $ – det angiver den alternative frosne version af vægtene.
Fordele ved gentagelse af erfaring:
-
Mere effektiv udnyttelse af tidligere erfaringer ved at lære med det flere gange. Dette er nøglen, når det er dyrt at få erfaring i den virkelige verden, du kan få fuld brug af Q-læringsopdateringerne er inkrementelle og konvergerer ikke hurtigt, så flere passeringer med de samme data er gavnlige, især når der er lav variation i umiddelbare resultater (belønning, næste tilstand) givet den samme tilstand, handlingspar.
-
Bedre konvergensadfærd, når man træner en funktions-tilnærmer. Dette skyldes delvis, at dataene ligner iid data, der antages i mest overvågede læringskonvergensbeviser.
Ulempe ved gentagelse af oplevelse:
- Det er sværere at bruge flertrins læringsalgoritmer, såsom Q ($ \ lambda $) , som kan indstilles til at give bedre indlæringskurver ved at afbalancere mellem bias (på grund af bootstrapping) og varians (på grund af forsinkelser og tilfældighed i langsigtede resultater). Flertrins-DQN med oplevelses-replay DQN er en af de udvidelser, der udforskes i papiret Rainbow: Kombinerer forbedringer i dyb forstærkningslæring .
Den tilgang, der anvendes i DQN, er kort skitseret af David Silver i dele af denne videoforelæsning (omkring 01:17: 00, men værd at se sektioner før det). Jeg anbefaler at se hele serien, som er et kursus på forstærket læring, hvis du har tid.
Kommentarer
- Lad ‘ siger under træningen, at vi er i en stat, og vi tager en handling i henhold til epsilon-grådig politik, og du ender i en anden stat. Så du får belønninger og den næste stat. Her kan belønningen være spillets score, og staterne kan være pixelmønstre på skærmen. Og så tager vi fejlen mellem vores funktion aproximator og den værdi, vi fik fra den grådige politik igen ved hjælp af allerede frossen funktion approximator. Men med gentagelsen af oplevelsen, når vi optimerer tilnærmningen, tager vi nogle tilfældige tilstandshandlingsdatasæt. Har jeg ret?
- @ShamaneSiriwardhana: Ja, jeg tror du har ret. Det er nøjagtigt de samme data fra den virkelige bane, men i stedet for kun at lære fra det seneste trin, gemmer du det i en stor tabel og prøver fra den tabel (normalt flere prøver med en butik på 1000erne af tidligere trin at vælge imellem ). Hvis du har brug for mere afklaring, så spørg måske et spørgsmål på webstedet.
- Ja, jeg gik igennem papiret igen. Det siger også, at denne metode også kan forbedre off-policy-læring. Fordi i Q læring med handling i henhold til epsilon-grådig politik, men opdatering af værdier fungerer i henhold til grådig politik. Så når hvert gangstrin bliver vores neurale netparametre opdateret med mini-batchstatistik, hvilket vigtigere er ikke relateret til nøjagtig tidstrinsstatistik, men hvad der skete før dette, hjælper også med at ukorrelere dataene.
- @Neil Slater, I ‘ har gennemgået Rainbow-papiret, og jeg så ‘ ikke nogen specielle kommentarer til brug af et specielt trick til at kombinere gentagelse af oplevelse og multi- trin metode. Også jeg ‘ har hørt, at flertrinsmetode oprindeligt er umulig at kombinere med oplevelsesafspilning, men hvorfor ikke bare tilfældigt vælge n-fortløbende oplevelser i stedet for 1 fra erfaringsgenafspilning, men fra gentagelsen så at der ikke blev fundet nogen sammenhæng mellem hver n-oplevelse? Er ‘ ikke denne gentagelse i flere trin?
- @NeilSlater Hvorfor er det ” sværere at bruge multi- trinindlæringsalgoritmer “? Hvad mente du?
Svar
Algoritmen (eller i det mindste en version af den, som implementeret i Coursera RL capstone-projektet ) er som følger:
-
Opret en “Replay” Buffer “, der gemmer den sidste
#buffer_size
SARS (Stat, handling, belønning, ny stat) oplevelser. -
Kør din agent, og lad den akkumulere oplevelser i replay-bufferen, indtil den (bufferen) har mindst
#batch_size
oplevelser .- Du kan vælge handlinger i henhold til en bestemt politik (f.eks. soft-max for diskret handlingsrum, Gaussian for kontinuerlig osv.) over din $ \ hat {Q} (s, a; \ theta) $ funktionsestimator.
-
Når den når
#batch_size
eller mere:-
lav en kopi af funktionsestimatoren ( $ \ hat {Q} (s, a; \ theta) $ ) på det aktuelle tidspunkt, dvs. en kopi af vægtene $ \ theta $ – som du “fryser” og ikke opdaterer, og brug til at beregne de “sande” stater $ \ hat {Q} (s “, a”; \ theta) $ . Kør for
num_replay
opdateringer:-
eksempel
#batch_size
oplevelser fra gentagelsesbufferen. -
Brug de samplede oplevelser til at pr udform en batchopdatering til din funktionsestimator (f.eks. i Q-Learning hvor $ \ hat {Q} (s, a) = $ Neuralt netværk – opdater netværkets vægte). Brug de frosne vægte som den “sande” funktionsværdifunktion, men fortsæt med at forbedre den ikke-frosne funktion.
-
-
gør dette, indtil du nå en terminal tilstand.
-
glem ikke at konstant tilføje de nye oplevelser til replaybufferen
-
-
Kør så mange episoder, som du har brug for.
Hvad jeg mener med “sand”: hver oplevelse kan betragtes som en “overvåget” læringsduo, hvor du har en ægte værdifunktion $ Q (s, a) $ og en funktionsestimator $ \ hat {Q} (s, a) $ . Dit mål er at reducere Value-Error, f.eks. $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Da du sandsynligvis ikke har adgang til true handlingsværdier, bruger du i stedet en bootstrapped forbedret version af den sidste estimator under hensyntagen til den nye oplevelse og belønning. I Q-learning er den “sande” handlingsværdi $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a “} \ hat {Q} (s”, a “; \ theta) $ hvor $ R $ er belønningen og $ \ gamma $ er rabatfaktoren.
Her er et uddrag af 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