Czytałem dokument Google DeepMind Atari i próbuję aby zrozumieć pojęcie „powtórki doświadczenia”. Powtórka doświadczenia pojawia się w wielu innych dokumentach do nauki o wzmacnianiu (szczególnie w artykule AlphaGo), więc chcę zrozumieć, jak to działa. Poniżej znajduje się kilka fragmentów.

Po pierwsze, użyliśmy inspirowanego biologicznie mechanizmu zwanego odtwarzaniem doświadczenia, który losuje dane, usuwając w ten sposób korelacje w sekwencji obserwacji i wygładzając zmiany w dystrybucji danych.

Następnie w artykule omówiono następujące kwestie:

Chociaż istnieją inne stabilne metody uczenia sieci neuronowych w ustawieniach uczenia się ze wzmocnieniem, takich jak neuronowa dopasowana iteracja Q, metody te obejmują powtarzane uczenie sieci de novo setki iteracji. W konsekwencji metody te, w przeciwieństwie do naszego algorytmu, są zbyt nieefektywne, aby można je było z powodzeniem stosować w dużych sieciach neuronowych. Parametryzujemy przybliżoną funkcję wartości $ Q (s, a; \ theta_i) $ przy użyciu głębokiej konwolucyjnej sieci neuronowej pokazanej na rys. 1, w której $ \ theta_i $ to parametry (czyli wagi) sieci Q w iteracji $ i $ . Aby przeprowadzić powtórkę doświadczenia, przechowujemy doświadczenia agenta $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ w każdym kroku czasowym $ t $ w zbiorze danych $ D_t = \ {e_1, \ dots, e_t \} $ . Podczas ucząc się, stosujemy aktualizacje Q-learning na próbkach (lub mini-partiach) doświadczenia $ (s, a, r, s „) \ sim U (D) $ , pobierane równomiernie losowo z puli przechowywanych próbek. Aktualizacja Q-learning w iteracji $ i $ wykorzystuje następującą funkcję utraty:

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

Co to jest powtórka doświadczenia i jakie są jej zalety w kategoriach laików?

Odpowiedź

Kluczowa część cytowany tekst to:

Aby przeprowadzić powtórkę doświadczenia, przechowujemy doświadczenia agenta $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $

Oznacza to, że zamiast przeprowadzać Q-learning na parach stan / akcja występujących podczas symulacji lub rzeczywistego doświadczenia, system przechowuje dane wykryte dla [stan, akcja, nagroda, następny stan] – zazwyczaj w dużym stole. Zwróć uwagę, że to nie przechowuje powiązanych wartości – są to nieprzetworzone dane do późniejszego wykorzystania w obliczeniach wartości działania.

Faza uczenia się jest następnie logicznie oddzielona od zdobywania doświadczenia i opiera się na pobieraniu losowych próbek z tej tabeli. Nadal chcesz przeplatać dwa procesy – działanie i uczenie się – ponieważ ulepszanie polityki doprowadzi do różnych zachowań, które powinny badać działania bliższe optymalnym i chcesz się z nich uczyć. Możesz jednak podzielić to tak, jak chcesz – np. zrób jeden krok, ucz się na podstawie trzech losowych wcześniejszych kroków itp. Cele Q-Learning podczas korzystania z powtórki doświadczenia używają tych samych celów, co wersja online, więc nie ma na to nowej formuły. Podana formuła strat jest również tą, której używałbyś do DQN bez powtórki doświadczenia. Różnica polega tylko na tym, że które s, a, r, s „, a” wprowadzasz do niego.

W DQN zespół DeepMind utrzymywał również dwie sieci i przełączał, która z nich była uczenie się, a który karmi się aktualnymi szacunkami wartości działań jako „bootstraps”. Pomogło to w stabilności algorytmu przy zastosowaniu aproksymatora funkcji nieliniowej. To właśnie oznacza słupek w $ {\ theta} ^ {\ overline {\ space}} _ i $ – oznacza alternatywną zamrożoną wersję wag.

Zalety powtórki doświadczenia:

  • Bardziej efektywne wykorzystanie wcześniejszych doświadczeń poprzez wielokrotne uczenie się. Jest to kluczowe, gdy zdobywanie doświadczenia w świecie rzeczywistym jest kosztowne, można w pełni wykorzystać Aktualizacje Q-learning są przyrostowe i nie zbiegają się szybko, więc wielokrotne przebiegi z tymi samymi danymi są korzystne, zwłaszcza gdy istnieje mała zmienność w natychmiastowych wynikach (nagroda, następny stan) przy tym samym stanie, parze działań.

  • Lepsze zachowanie zbieżności podczas uczenia aproksymatora funkcji. Częściowo dzieje się tak dlatego, że dane są bardziej podobne do danych iid założonych w większość nadzorowanych dowodów konwergencji uczenia się.

Wada powtórki doświadczenia:

  • Trudniej jest korzystać z wieloetapowych algorytmów uczenia się, takich jak Q ($ \ lambda $) , które można dostroić w celu uzyskania lepszych krzywych uczenia się, równoważąc odchylenie (ze względu na bootstrap) i wariancję (z powodu opóźnień i losowości wyników długoterminowych). Wieloetapowe DQN z powtórzeniem doświadczenia DQN jest jednym z rozszerzeń omówionych w artykule Rainbow: Combining Improvements in Deep Reinforcement Learning .

Podejście stosowane w DQN jest pokrótce nakreślone przez Davida Silvera w częściach tego wykładu wideo (około 01:17: 00, ale warto zobaczyć sekcje przed nim). Jeśli masz czas, polecam obejrzenie całej serii, która jest kursem magisterskim poświęconym uczeniu się przez wzmacnianie.

Komentarze

  • Niech mówi podczas szkolenia, że jesteśmy w jednym stanie i podejmujemy działania zgodnie z polityką zachłanności epsilon, a Ty trafisz do innego stanu. Otrzymujesz więc nagrody i następny stan. Tutaj nagrodą może być wynik gry, a stanami mogą być układy pikseli na ekranie. A następnie bierzemy błąd między naszym aproksymatorem funkcji a wartością, którą otrzymaliśmy z chciwej polityki, ponownie używając już zamrożonego aproksymatora funkcji. Ale z powtórzeniem doświadczenia podczas optymalizacji aproksymatora, bierzemy pewien zestaw danych dotyczących działania stanu. Mam rację?
  • @ShamaneSiriwardhana: Tak, myślę, że masz rację. Są to dokładnie te same dane z prawdziwej trajektorii, ale zamiast uczyć się tylko na podstawie ostatniego kroku, zapisujesz je w dużym stole i próbkę z tej tabeli (zwykle wiele próbek, z pamięcią 1000 poprzednich kroków do wyboru ). Jeśli potrzebujesz więcej wyjaśnień, może zadaj pytanie na stronie.
  • Tak, ponownie przejrzałem artykuł. Mówi się również, że ta metoda może również poprawić uczenie się poza polityką. Ponieważ w Q uczeniu się działaj zgodnie z polityką zachłanności epsilon, ale aktualizuj wartości zgodnie z polityką zachłanną. Więc kiedy za każdym krokiem parametry naszej sieci neuronowej są aktualizowane przez statystyki mini partii, które co ważniejsze nie są związane z dokładnymi statystykami kroku czasowego, ale to, co wydarzyło się wcześniej, pomaga również w nieskorelowaniu danych. ' przejrzałem artykuł Rainbow i nie ' nie widziałem żadnych specjalnych komentarzy na temat używania specjalnej sztuczki do łączenia powtórki doświadczenia z wieloma metoda krokowa. Ponadto ' słyszałem, że metoda wieloetapowa jest pierwotnie niemożliwa do połączenia z powtórką doświadczenia, ale dlaczego nie wybrać losowo n-kolejnych doświadczeń zamiast 1 z powtórki doświadczenia, ale z powtórki tak że między każdym n-doświadczeniami nie znaleziono żadnych korelacji? Czy to nie ' powtórka z wieloetapowego doświadczenia?
  • @NeilSlater Dlaczego ” jest trudniejsze w użyciu algorytmy uczenia krokowego „? Co miałeś na myśli?

Odpowiedź

Algorytm (lub przynajmniej jego wersja, jak zaimplementowano w projekt zwieńczenia Coursera RL ) wygląda następująco:

  1. Utwórz „Bufor” powtórki, który przechowuje ostatnie #buffer_size SARS Doświadczenia (stan, akcja, nagroda, nowy stan).

  2. Uruchom agenta i pozwól mu gromadzić doświadczenia w buforze powtórek, dopóki (bufor) nie będzie miał co najmniej #batch_size doświadczeń .

    • Możesz wybrać akcje zgodnie z pewną polityką (np. soft-max dla dyskretnej przestrzeni akcji, Gaussian dla ciągłego itp.) w $ \ hat {Q} (s, a; \ theta) $ estymator funkcji.
  3. Po osiągnięciu #batch_size lub więcej:

    • zrób kopię estymatora funkcji ( $ \ hat {Q} (s, a; \ theta) $ ) w bieżącym czasie, tj. kopia wag $ \ theta $ – których „zamrażasz” i nie aktualizujesz, i użyj do obliczenia „prawdziwych” stanów $ \ hat {Q} (s „, a”; \ theta) $ . Uruchom dla num_replay aktualizacje:

      1. przykładowe #batch_size doświadczenia z bufora powtórek.

      2. Skorzystaj z próbkowanych doświadczeń, aby pr Wykonaj pakietową aktualizację do estymatora funkcji (np. w Q-Learning, gdzie $ \ hat {Q} (s, a) = $ Sieć neuronowa – zaktualizuj wagi sieci). Użyj zamrożonych wag jako „prawdziwej” funkcji wartości akcji, ale kontynuuj ulepszanie niezablokowanej funkcji.

    • rób to, dopóki nie osiągnąć stan końcowy.

    • nie zapomnij o ciągłym dodawaniu nowych wrażeń do bufora powtórek

  4. Biegaj przez tyle odcinków, ile potrzebujesz.

Co mam na myśli przez „prawdziwe”: każde doświadczenie można traktować jako „nadzorowany” duet uczący się, w którym masz funkcję prawdziwej wartości $ Q (s, a) $ i estymator funkcji $ \ hat {Q} (s, a) $ . Twoim celem jest zmniejszenie błędu wartości, np. $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Ponieważ prawdopodobnie nie masz dostępu do true wartości działań, zamiast tego używasz załadowanej, ulepszonej wersji ostatniego estymatora , biorąc pod uwagę nowe doświadczenie i przyznaną nagrodę. W Q-learning, „true” wartość akcji to $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a „} \ hat {Q} (s”, a „; \ theta) $ gdzie $ R $ to nagroda, a $ \ gamma $ to czynnik dyskontowy.

Oto fragment kodu:

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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *