Uczenie przez wzmacnianie

Uczenie przez wzmacnianie (uczenie posiłkowane) (ang. reinforcement learning, RL) – jeden z trzech głównych nurtów uczenia maszynowego, którego zadaniem jest interakcja ze środowiskiem za pomocą polityki na podstawie zebranych przez nią informacji[1][2]. W przeciwieństwie do uczenia nadzorowanego i nienadzorowanego w uczeniu przez wzmacnianie nie przygotowuje się zestawu danych uczących, tylko środowisko (ang. environment), z którego model będzie zbierał dane automatycznie; jego celem jest zmaksymalizowanie zwracanej przez nie nagrody[2]. Większość algorytmów uczenia przez wzmacnianie polega na przygotowaniu polityki, zebraniu za jej pomocą danych o środowisku do bufora, wytrenowaniu jej na ich podstawie i powtarzania tego procesu do osiągnięcia zamierzonego skutku[1]. Środowiskiem może być zależnie od celu nauki gra w przypadku programu uczącego się grać w gry, lub prawdziwy świat, na przykład w przypadku programu uczącego się sterować łazikiem. Uczenie przez wzmacnianie jest powszechnie stosowane do uczenia sztucznej inteligencji grania w gry oraz, coraz częściej, inwestowania na giełdzie[1][3].

Podstawowe elementy

W uczeniu przez wzmacniane wyróżnia się trzy główne elementy[4]:

Środowisko

Środowisko (ang. environment) to zadanie lub symulacja, z którym agent (gracz) wchodzi w interakcję. Przykładowym środowiskiem jest gra komputerowa, w którą agent uczy się grać, lub symulacja giełdy, gdzie agent uczy się inwestować[5]. Celem uczenia przez wzmacnianie jest maksymalizowanie nagrody zwracanej przez to środowisko[6], czyli nauczenie agenta osiągania w nim jak najwyższego wyniku, np. wygrania jak największej liczby gier (jeśli środowisko jest symulacją gry), lub wykonania jak najkorzystniejszych inwestycji (jeśli środowisko jest symulacją giełdy). Cechy środowiska:

  • Stan (ang. state) – zmienna określająca stan środowiska[7].
  • Krok (ang. step) – jest to najczęściej funkcja, która na podstawie podanej akcji aktualizuje stan środowiska i zwraca nagrodę oraz obserwację[6]. Agent uczy się podawać takie akcje, które zmaksymalizują zwracaną nagrodę[6][7]. Na przykład: w środowisku symulującym grę w szachy[8], krokiem jest pojedyncze posunięcie.
  • Epizod (ang. episode) – zbiór kroków, po którym resetowany jest stan środowiska[1][7], np. jedna partia w środowisku symulującym grę w szachy[8].
  • Nagroda (ang. reward) – zmienna zwracana przez środowisko po wykonaniu kroku, która obrazuje jak korzystny był dany krok[6]. Na przykład w środowisku symulującym grę w szachy[8], nagroda może przyjąć wartość figury zbitej w danym ruchu. Agent powinien uczyć się przewidywać długoterminowe skutki swoich akcji, często rezygnując z jednej nagrody na rzecz większej w przyszłości, to jak bardzo będzie skłonny do patrzenia na przyszłe nagrody zależy od jego hiperparametru: stopy dyskontowej[1], oznaczanej jako γ {\displaystyle \gamma } [2]. Waga nagród za n {\displaystyle n} kroków od obecnego wynosi γ n {\displaystyle \gamma ^{n}} [2], w większości przypadków zaleca się, żeby 0.85 < γ < 1 {\displaystyle 0.85<\gamma <1} [1].
  • Obserwacja (ang. observation) – skalar, wektor lub macierz zwracana przez krok, mająca opisać obecny stan środowiska[6] (zazwyczaj im bardziej złożone jest środowisko tym bardziej jest skomplikowana, nie jest to jednak reguła). Wartość ta jest następnie mapowana przez agenta na akcję, którą wykona w następnym kroku[6][9].

Powszechnym zwyczajem jest tworzenie dwóch środowisk – jednego do trenowania, a drugiego do sprawdzania[10].

Wykres nagroda środowiska „CartPole-v1”
Wykres nagrody uzyskiwanej przez algorytm C51 w środowisku CartPole-v1, wygenerowany automatycznie przez bibliotekę matplotlib. Możemy zauważyć niestabilność zmian spowodowaną wychodzeniem z lokalnych minimów oraz stopniowy wzrost nagrody na przestrzeni iteracji.

Agent

Agent (ang. agent) to element, który wchodzi w interakcję ze środowiskiem. Zadaniem agenta jest wspomniane wyżej maksymalizowanie nagrody – nauczenie się jak najkorzystniejszego oddziaływania ze środowiskiem[1][2]. Najważniejsze części agenta:

  • Polityka (ang. Policy) – to funkcja, która na wejście przyjmuje obserwację, a zwraca akcję[1]. To ona odpowiada za zachowanie agenta. Jako politykę najczęściej stosuje się sieć neuronową (uczenie polega na aktualizowaniu jej parametrów) lub funkcję zwracającą losową akcję (najczęściej używa się jej do wstępnego zebrania informacji o środowisku przez rozpoczęciem uczenia)[11]. Agent zawiera dwie polityki:
    1. Główna polityka (ang. policy) – polityka stosowana do ewaluacji agenta i w środowisku produkcyjnym[11].
    2. Polityka kolekcjonująca (ang. collect policy) – używana podczas uczenia do zbierania informacji o środowisku[11].
  • Inne hiperparametry – w zależności od rodzaju agenta możemy podać także różne hiperparametry np. regulujące proces uczenia jak gamma czy maksymalne Q-wartości[12][13][14][15][10].

Bufor

Bufor (ang. Replay Buffer) to kontener danych przechowujący informacje zebrane przez agenta podczas uczenia[16]. Informacji tych używa się do późniejszego wytrenowania agenta. Bufor jest używany tylko w niektórych algorytmach uczenia przez wzmacnianie[3], na przykład jest wykorzystywany w Q-uczeniu, ale już nie w algorytmie REINFORCE[3]. Istnieje wiele rodzajów buforów używanych w różnych algorytmach ze względu na ich różną budowę[4][17][18].

Przebieg uczenia

Uczenie przez wzmacnianie schemat.
Schemat przedstawiający uczenie przez wzmacnianie. Agent zwraca akcje na podstawie obserwacji, środowisko zwraca obserwacje i nagrody na podstawie akcji, bufor kolekcjonuje akcje, obserwacje i nagrody, agent uczy się na podstawie danych w buforze.

Uczenie przez wzmacnianie najczęściej składa się z dwóch etapów: wstępnego zbierania danych oraz pętli uczenia. Pętla uczenia z kolei składa się ze zbierania danych oraz uczenia agenta na ich podstawie[1].

Wstępne zbieranie danych

Wstępne zbieranie danych polega na przeprowadzeniu określonej liczby epizodów i zapisaniu danych na ich temat do bufora[17]. Zbieranie nie jest przeprowadzane zawsze, ale jest niezbędne do utworzenia zestawu danych z bufora[4]. Zazwyczaj definiuje się funkcję kolekcjonującą dane o środowisku i wykonuje się ją określoną liczbę razy przez rozpoczęciem pętli uczenia. Wstępne zbieranie danych najczęściej przeprowadza się polityką losową, aby zebrane dane były jak najbardziej zróżnicowane (sieć neuronowa po otrzymaniu podobnych danych na wejście zwraca podobne dane na wyjście, natomiast losowe polityki zwracają je niezależnie od danych wejściowych)[4].

Pętla procesu uczenia

  • Zbieranie danych – na początku iteracji kolekcjonuje się dane o środowisku do bufora w podobny sposób jak we wstępnym zbieraniu danych, ale z użyciem kolekcjonującej polityki agenta zamiast polityki losowej[17].
  • Uczenie – po zebraniu danych na temat środowiska używa się ich do obliczenia straty (ang. loss) i wytrenowania agenta[2].
  • Ewaluacja – zazwyczaj podczas pętli uczenia przeprowadza się na bieżąco ewaluację agenta, często nie jest to jednak wymóg[2].

Aby zachować równowagę pomiędzy ulepszaniem dotychczasowych, a odkrywaniem nowych zachowań agenta (czyli równowagę pomiędzy uczeniem a eksploracją) można zacząć od wybierania akcji losowo, a w miarę trwania uczenia zmniejszać współczynnik losowych akcji najczęściej do wartości rzędu części setnych jedności.[3]

Przypisy

  1. a b c d e f g h i KrzysztofK. Sawka KrzysztofK., Uczenie maszynowe z użyciem Scikit-Learn i TensorFlow, wyd. II, aktualizacja do modułu TensorFlow 2, Gliwice: Helion, 2020, ISBN 978-83-283-6002-0, OCLC 1183366759 [dostęp 2020-11-06] .
  2. a b c d e f g Introduction to RL and Deep Q Networks [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  3. a b c d MaximM. Lapan MaximM., Deep reinforcement learning hands-on. Apply modern RL methods to practical problems of chatbots, robotics, discrete optimization, web automation, and more, Second edition, Birmingham, UK, ISBN 978-1-83882-004-6, OCLC 1147823256 [dostęp 2020-11-26] .
  4. a b c d SAC minitaur with the Actor-Learner API [online], TensorFlow [dostęp 2020-11-08]  (ang.).
  5. ShivaS. Verma ShivaS., Create Your Own Reinforcement Learning Environment [online], Medium, 31 lipca 2020 [dostęp 2020-11-06]  (ang.).
  6. a b c d e f Environments [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  7. a b c SurajS. Regmi SurajS., Creating a Custom Environment for TensorFlow Agent – Tic-tac-toe Example [online], Medium, 31 maja 2020 [dostęp 2020-11-06]  (ang.).
  8. a b c Reinforcement learning [online], GeeksforGeeks, 25 kwietnia 2018 [dostęp 2020-11-08]  (ang.).
  9. Reinforcement Learning (DQN) Tutorial – PyTorch Tutorials 1.7.0 documentation [online], pytorch.org [dostęp 2020-11-06] .
  10. a b tf_agents.agents.SacAgent [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  11. a b c Policies [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  12. tf_agents.agents.BehavioralCloningAgent [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  13. tf_agents.agents.CategoricalDqnAgent [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  14. tf_agents.agents.DqnAgent [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  15. tf_agents.agents.ReinforceAgent [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  16. Replay Buffers [online], TensorFlow [dostęp 2020-11-06]  (ang.).
  17. a b c DQN C51/Rainbow [online], TensorFlow [dostęp 2020-11-08]  (ang.).
  18. Module: tf_agents.replay_buffers [online], TensorFlow [dostęp 2020-11-08]  (ang.).
Kontrola autorytatywna (technika):
  • LCCN: sh92000704
  • GND: 4825546-4
  • BnF: 17127232k
  • BNCF: 69813
  • J9U: 987007546785305171