Wprowadzenie do nauki wzmocnień. Part 3: Q-Learning with Neural Networks, Algorithm DQN

Możesz uruchomić kod TensorFlow samodzielnie w tym linku (lub wersję PyTorch w tym linku), lub czytać dalej, aby zobaczyć kod bez uruchamiania go. Ponieważ kod jest nieco dłuższy niż w poprzednich częściach, pokażę tutaj tylko najważniejsze fragmenty. Cały kod źródłowy dostępny jest pod powyższym linkiem.

Tutaj znajduje się środowisko CartPole. Do wizualizacji i uruchomienia tego środowiska używam OpenAI Gym. Celem jest przesuwanie wózka w lewo i prawo, tak aby utrzymać słupek w pozycji pionowej. Jeżeli wychylenie tyczki będzie większe niż 15 stopni od osi pionowej, odcinek się zakończy i zaczniemy od nowa. Film 1 pokazuje przykład przebiegu kilku odcinków w tym środowisku poprzez losowe podejmowanie działań.

Wideo 1: Losowa rozgrywka na środowisku CartPole.

Aby zaimplementować algorytm DQN, zaczniemy od stworzenia głównej (main_nn) i docelowej (target_nn) sieci DNN. Sieć docelowa będzie kopią sieci głównej, ale z własną kopią wag. Będziemy również potrzebowali optymalizatora i funkcji straty.

Algorytm 1. Architektura Głębokich Sieci Neuronowych.

Następnie stworzymy bufor odtwarzania doświadczenia, aby dodawać doświadczenie do bufora i próbkować je później do treningu.

Algorytm 2. Bufor odtwarzania doświadczenia.

Piszemy również funkcję pomocniczą do uruchamiania polityki ε-greedy, oraz do trenowania sieci głównej z wykorzystaniem danych przechowywanych w buforze.

Algorytm 3. Funkcje dla polityki ε-greedy i dla treningu sieci neuronowej.

Zdefiniujemy też niezbędne hiperparametry i wytrenujemy sieć neuronową. Odtworzymy jeden odcinek przy użyciu polityki ε-greedy, przechowamy dane w buforze odtwarzania doświadczenia i będziemy trenować sieć główną po każdym kroku. Raz na 2000 kroków skopiujemy wagi z sieci głównej do sieci docelowej. Zmniejszymy również wartość epsilon (ε), aby zacząć od wysokiej eksploracji i zmniejszać eksplorację w czasie. Zobaczymy jak algorytm zaczyna się uczyć po każdym epizodzie.

Algorytm 4. Pętla główna.

Taki wynik zostanie wyświetlony:

Episode 0/1000. Epsilon: 0.99. Reward in last 100 episodes: 14.0 Episode 50/1000. Epsilon: 0.94. Reward in last 100 episodes: 22.2 Episode 100/1000. Epsilon: 0.89. Reward in last 100 episodes: 23.3 Episode 150/1000. Epsilon: 0.84. Reward in last 100 episodes: 23.4 Episode 200/1000. Epsilon: 0.79. Reward in last 100 episodes: 24.9 Episode 250/1000. Epsilon: 0.74. Reward in last 100 episodes: 30.4 Episode 300/1000. Epsilon: 0.69. Reward in last 100 episodes: 38.4 Episode 350/1000. Epsilon: 0.64. Reward in last 100 episodes: 51.4 Episode 400/1000. Epsilon: 0.59. Reward in last 100 episodes: 68.2 Episode 450/1000. Epsilon: 0.54. Reward in last 100 episodes: 82.4 Episode 500/1000. Epsilon: 0.49. Reward in last 100 episodes: 102.1 Episode 550/1000. Epsilon: 0.44. Reward in last 100 episodes: 129.7 Episode 600/1000. Epsilon: 0.39. Reward in last 100 episodes: 151.7 Episode 650/1000. Epsilon: 0.34. Reward in last 100 episodes: 173.0 Episode 700/1000. Epsilon: 0.29. Reward in last 100 episodes: 187.3 Episode 750/1000. Epsilon: 0.24. Reward in last 100 episodes: 190.9 Episode 800/1000. Epsilon: 0.19. Reward in last 100 episodes: 194.6 Episode 850/1000. Epsilon: 0.14. Reward in last 100 episodes: 195.9 Episode 900/1000. Epsilon: 0.09. Reward in last 100 episodes: 197.9 Episode 950/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0 Episode 1000/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0

Teraz, gdy agent nauczył się maksymalizować nagrodę dla środowiska CartPole, sprawimy, że agent wejdzie w interakcję ze środowiskiem jeszcze raz, aby zwizualizować wynik i zobaczyć, że teraz jest w stanie utrzymać równowagę bieguna przez 200 klatek.

Wideo 2. Wynik wizualizacji wyszkolonego agenta DQN wchodzącego w interakcję ze środowiskiem CartPole.

Kod TensorFlow można uruchomić samodzielnie w tym linku (lub wersję PyTorch w tym linku).

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.