Am citit hârtia Google DeepMind Atari și încerc pentru a înțelege conceptul de „reluare a experienței”. Reluarea experienței apare în multe alte lucrări de învățare de consolidare (în special, lucrarea AlphaGo), așa că vreau să înțeleg cum funcționează. Mai jos sunt câteva extrase.

În primul rând, am folosit un mecanism de inspirație biologică denumit reluare a experienței care randomizează peste date, eliminând astfel corelațiile din secvența de observare și netezind modificările distribuției datelor.

Lucrarea elaborează apoi după cum urmează:

În timp ce există alte metode stabile pentru instruirea rețelelor neuronale în cadrul învățării de întărire, cum ar fi iterația Q cu neurală, aceste metode implică instruirea repetată a rețelelor de novo sute de iterații. În consecință, aceste metode, spre deosebire de algoritmul nostru, sunt prea ineficient pentru a fi utilizat cu succes cu rețelele neuronale mari. Parametram o funcție de valoare aproximativă $ Q (s, a; \ theta_i) $ utilizând rețeaua neuronală convoluțională profundă prezentată în Fig. 1, în care $ \ theta_i $ sunt parametrii (adică greutățile) rețelei Q la iterație $ i $ . Pentru a efectua reluarea experienței, stocăm experiențele agentului $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ la fiecare pas de timp $ t $ într-un set de date $ D_t = \ {e_1, \ dots, e_t \} $ . învățare, aplicăm actualizări Q-learning, pe eșantioane (sau mini-loturi) de experiență $ (s, a, r, s „) \ sim U (D) $ , extrase uniform la întâmplare din grupul de probe stocate. Actualizarea Q-learning la iterație $ i $ utilizează următoarea funcție de pierdere:

$$ 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] $$

Ce este reluarea experienței și care sunt avantajele acesteia, în termeni laici?

Răspuns

Partea cheie a textul citat este:

Pentru a efectua reluarea experienței stocăm experiențele agentului $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $

Acest lucru înseamnă că, în loc să ruleze Q-learning pe perechi de stare / acțiune pe măsură ce apar în timpul simulării sau experienței reale, sistemul stochează datele descoperite pentru [stare, acțiune, recompensă, next_state] – de obicei într-un tabel mare. Rețineți că acest lucru nu stochează valorile asociate – acestea sunt datele brute pentru a fi introduse ulterior în calculele de acțiune-valoare.

Faza de învățare este apoi separată logic de a câștiga experiență și se bazează pe prelevarea de probe aleatorii din acest tabel. Vrei totuși să intercalezi cele două procese – actorie și învățare – deoarece îmbunătățirea politicii va duce la comportamente diferite care ar trebui să exploreze acțiuni mai apropiate de cele optime și vrei să înveți din acestea. Cu toate acestea, puteți împărți acest lucru după cum doriți – de ex. faceți un pas, învățați din trei pași anteriori aleatori etc. Obiectivele Q-Learning atunci când utilizați reluarea experienței folosesc aceleași ținte ca și versiunea online, deci nu există o formulă nouă pentru aceasta. Formula de pierdere dată este, de asemenea, cea pe care ați folosi-o pentru DQN fără reluarea experienței. Diferența este doar care s, a, r, s „, a” pe care o alimentați.

În DQN, echipa DeepMind a menținut, de asemenea, două rețele și a schimbat care era învățarea și care hrănire în acțiunea-valoare curentă estimează ca „bootstraps”. Acest lucru a ajutat la stabilitatea algoritmului atunci când se utilizează un aproximator de funcții neliniare. Asta înseamnă bara în $ {\ theta} ^ {\ overline {\ space}} _ i $ – denotă versiunea alternativă înghețată a greutăților.

Avantajele reluării experienței:

  • Utilizarea mai eficientă a experienței anterioare, învățând cu ea de mai multe ori. Acest lucru este esențial atunci când obțineți experiență din lumea reală este costisitor, puteți utiliza pe deplin Actualizările Q-learning sunt incrementale și nu converg rapid, astfel încât mai multe treceri cu aceleași date sunt benefice, mai ales atunci când există o varianță scăzută a rezultatelor imediate (recompensă, următoarea stare) având în vedere aceeași stare, pereche de acțiuni.

  • Comportament de convergență mai bun atunci când instruiți un aproximator de funcții. În parte, acest lucru se datorează faptului că datele seamănă mai mult cu iid date asumate în cele mai multe dovezi de convergență a învățării supravegheate.

Dezavantajul reluării experienței:

  • Este mai greu să folosiți algoritmi de învățare în mai mulți pași, cum ar fi Q ($ \ lambda $) , care poate fi reglat pentru a oferi curbe de învățare mai bune prin echilibrarea între părtinire (datorită bootstrapping-ului) și varianță (datorită întârzierilor și aleatoriei în rezultatele pe termen lung). DQN în mai mulți pași cu DQN de redare a experienței este una dintre extensiile explorate în hârtie Rainbow: Combining Improvements in Deep Reinforcement Learning .

Abordarea utilizată în DQN este pe scurt prezentată de David Silver în părți ale acestei prelegeri video (în jurul orei 01:17: 00, dar merită să vedeți secțiuni înainte) Vă recomandăm să urmăriți întreaga serie, care este un curs la nivel absolvent de învățare prin întărire, dacă aveți timp.

Comentarii

  • Să s spun în timpul instruirii că suntem într-un stat și luăm o acțiune în conformitate cu politica epsilon-lacomă și ajungeți într-un alt stat. Deci, veți obține recompense și următoarea stare. Aici recompensa poate fi scorul jocului, iar stările pot fi tiparele pixelilor de pe ecran. Și apoi luăm eroarea dintre aproximatorul funcției noastre și valoarea obținută din politica lacomă din nou folosind aproximatorul funcției deja înghețat. Dar odată cu reluarea experienței la optimizarea aproximatorului, luăm câteva seturi de date de acțiune a stării aleatorii. Am dreptate?
  • @ShamaneSiriwardhana: Da, cred că ai dreptate. Este exact aceleași date din traiectoria reală, dar în loc să învățați doar din cel mai recent pas, le salvați într-un tabel mare și eșantionați din acel tabel (de obicei mai multe eșantioane, cu un depozit de 1000 de pași anteriori din care să alegeți ). Dacă aveți nevoie de mai multe clarificări, atunci poate puneți o întrebare pe site.
  • Da, am trecut din nou prin ziar. De asemenea, se spune că această metodă poate îmbunătăți și învățarea în afara politicilor. Deoarece în învățarea Q, acționează în conformitate cu politica epsilon-lacomă, dar actualizează valorile funcționează în conformitate cu politica lacomă. Deci, când fiecare pas de timp parametrii noștri ai rețelei neuronale sunt actualizați prin statistici de mini-lot, ceea ce este mai important nu este legat de statisticile exacte ale pasului de timp, dar ceea ce s-a întâmplat înainte de aceasta ajută și la necorelarea datelor.
  • @ Neil Slater, I ‘ am trecut prin hârtia Rainbow și nu am văzut ‘ niciun comentariu special privind utilizarea unui truc special pentru a combina reluarea experienței și multi- metoda pasului. De asemenea, am ‘ am auzit că metoda în mai mulți pași este inițial imposibil de combinat cu reluarea experienței, dar de ce nu aleg doar întâmplător experiențe n-consecutive în loc de 1 din reluarea experienței, dar din reluare că între fiecare n-experiență, nu s-au găsit corelații? Nu este ‘ această reluare a experienței în mai mulți pași?
  • @NeilSlater De ce este ” mai greu de utilizat multi- algoritmi de învățare în etape „? Ce ați vrut să spuneți?

Răspuns

Algoritmul (sau cel puțin o versiune a acestuia, așa cum este implementat în proiectul Coursera RL capstone ) este după cum urmează:

  1. Creați un „Buffer” de redare care stochează ultimul #buffer_size SARS (State, Action, Reward, New State) experiențe.

  2. Rulați agentul și lăsați-l să acumuleze experiențe în replay-buffer până când acesta (bufferul) are cel puțin #batch_size .

    • Puteți selecta acțiuni în conformitate cu o anumită politică (de exemplu, soft-max pentru spațiul de acțiune discret, Gaussian pentru continuu etc.) pe $ \ hat {Q} (s, a; \ theta) $ estimator al funcției.
  3. Odată ce ajunge la #batch_size sau mai multe:

    • faceți o copie a funcției de estimare ( $ \ hat {Q} (s, a; \ theta) $ ) la ora curentă, adică o copie a greutăților $ \ theta $ – pe care o „congelați” și nu o actualizați, și utilizați pentru a calcula stările „adevărate” $ \ hat {Q} (s „, a”; \ theta) $ . Rulați pentru num_replay actualizări:

      1. eșantion #batch_size experiențe din memoria tampon de redare.

      2. Utilizați experiențele eșantionate pentru a pr Efectuați o actualizare în lot pentru estimatorul de funcții (de ex. în Q-Learning unde $ \ hat {Q} (s, a) = $ Rețea neuronală – actualizați greutățile rețelei). Utilizați greutățile înghețate ca funcție „adevărată” a valorilor de acțiune, dar continuați să îmbunătățiți funcția necongelată.

    • ajunge la o stare terminală.

    • nu uitați să adăugați constant noile experiențe la Replay Buffer

  4. Aleargă pentru câte episoade ai nevoie.

Ce vreau să spun prin „adevărat”: fiecare experiență poate fi considerată ca un duo de învățare „supravegheat”, unde aveți o funcție de valoare adevărată $ Q (s, a) $ și un estimator de funcții $ \ hat {Q} (s, a) $ . Scopul dvs. este să reduceți valoarea-eroare, de ex. $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Deoarece probabil nu aveți acces la true valori-acțiune, utilizați în schimb o versiune îmbunătățită bootstrappată a ultimului estimator , ținând cont de noua experiență și recompensă acordată. În Q-learning, valoarea „adevărată” a acțiunii este $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a „} \ hat {Q} (s”, a „; \ theta) $ unde $ R $ este recompensa și $ \ gamma $ este factorul de reducere.

Aici este un extras din cod:

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 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *