Nauka wzmacniania za pomocą agentów Tensorflow [2022]
Opublikowany: 2021-01-01Uczenie się przez wzmacnianie zyskało cenną popularność dzięki stosunkowo niedawnemu sukcesowi metody AlphaGo firmy DeepMind, która pozwoliła pokonać mistrza świata w grze Go. Metoda AlphaGo została częściowo wykształcona poprzez uczenie ze wzmocnieniem w głębokich sieciach neuronowych.
Ten styl uczenia się jest odrębną cechą uczenia maszynowego od klasycznych paradygmatów nadzorowanych i nienadzorowanych. W uczeniu ze wzmocnieniem sieć reaguje na dane środowiskowe (zwane stanem) za pomocą głębokich sieci neuronowych i wpływa na zachowanie agenta, aby spróbować zoptymalizować nagrodę.
Ta technika pomaga sieci nauczyć się uprawiania sportu, takiego jak Atari lub inne gry wideo, lub innego wyzwania, które można przepisać jako formę gry. W tym samouczku, wspólnym modelu uczenia się przez wzmacnianie, przedstawię ogólne zasady uczenia się Q i pokażę, jak włączyć głębokie uczenie Q w TensorFlow.
Spis treści
Wprowadzenie do uczenia się przez wzmacnianie
Jak wspomniano powyżej, uczenie się przez wzmacnianie składa się z kilku podstawowych bytów lub zasad. Są to: środowisko, które tworzy warunki i nagrodę oraz podmiot, który wykonuje działania w danym środowisku. Na poniższym diagramie widzisz tę interakcję:
Zadaniem agenta w takim otoczeniu jest przeanalizowanie stanu i otrzymanych informacji motywacyjnych oraz wybranie zachowania, które maksymalizuje wkład, jaki otrzymuje z nagrody. Agent uczy się poprzez powtarzalny kontakt ze światem, czyli wielokrotne rozgrywanie gry.
Aby odnieść sukces, agent musi:

1. Naucz się związku między stanami, zachowaniem i wynikającymi z nich zachętami
2. Określ, który ruch jest najlepszy do wyboru (1)
Wdrożenie (1) wymaga zdefiniowania pewnego zestawu zasad, które można wykorzystać do notyfikacji (2) i (2) określane jest mianem strategii działania. Jedną z najczęstszych metod stosowania (1) i (2) przy użyciu głębokiego Q jest sieć Deep Q i polityka epsilon-greedy.
Dowiedz się: 5 najpopularniejszych projektów TensorFlow dla początkujących
Nauka Q
Q learning to oparty na wartości sposób dostarczania danych, aby stwierdzić, jakie działanie może podjąć agent. Stworzenie tabeli podsumowującej korzyści płynące z podejmowania działań w kilku rozgrywkach w danym stanie jest pierwotnie intuicyjną koncepcją generowania zasad, na których można oprzeć działania. Pozwoli to śledzić, które ruchy są najkorzystniejsze. Na początek rozważmy prostą grę w każdym stanie z 3 stanami i dwoma potencjalnymi akcjami – stół może przedstawiać nagrody za tę grę:
Akcja 1 | Akcja 2 | |
Stan 1 | 0 | 10 |
Stan 2 | 10 | 0 |
Stan 3 | 0 | 10 |
W powyższej tabeli widać, że w tej prostej grze, gdy agent jest w stanie 1 i wykonuje akcję 2, jeśli wykona akcję 1, otrzyma nagrodę w wysokości 10, ale nagrodę zero. W stanie 2 warunek jest odwrócony, a Stan 3 ostatecznie przypomina Stan 1. Jeśli agent arbitralnie zbadał tę grę i podliczył zachowanie, które uzyskało największą nagrodę w dowolnym z trzech stanów (przechowywanie tej wiedzy w tablicy, powiedzmy), więc praktyczna forma powyższej tabeli będzie skutecznie znana.
Innymi słowy, gdyby agent rzeczywiście wybrał zachowanie, którego nauczył się w przeszłości, które przyniosło największą nagrodę (skuteczne nauczenie się jakiejś formy powyższej tabeli), nauczyłby się, jak skutecznie grać w tę grę. Kiedy właściwe jest proste budowanie tabel przez sumowanie, dlaczego potrzebujemy wymyślnych pomysłów, takich jak uczenie Q, a następnie sieci neuronowe?
Nagroda odroczona
Cóż, pierwszą oczywistą odpowiedzią jest to, że powyższa gra jest po prostu bardzo prosta, z zaledwie 3 stanami i 2 aktami na stan. Prawdziwe gry są znacznie bardziej złożone. Innym istotnym pojęciem, którego nie ma, jest zasada opóźnionej nagrody w powyższym przypadku. Agent musi nauczyć się być w stanie podjąć kroki, aby prawidłowo grać w najbardziej realistyczne gry, co niekoniecznie musi prowadzić do nagrody, ale może później zaowocować znaczącą nagrodą.
Akcja 1 | Akcja 2 | |
Stan 1 | 0 | 5 |
Stan 2 | 0 | 5 |
Stan 3 | 0 | 5 |
Stan 4 | 20 | 0 |
Jeśli Akcja 2 zostanie wykonana we wszystkich stanach w powyższej grze, agent cofa się do Stanu 1, czyli do początku. W stanach od 1 do 3 otrzymuje nawet kredyt 5, gdy to robi. Jeżeli zatem działanie 1 zostanie podjęte we wszystkich stanach 1-3, agent uda się do następnego stanu, ale nie otrzyma nagrody, dopóki nie wejdzie do stanu 4, w którym to momencie otrzyma nagrodę w wysokości 20.
Innymi słowy, agentowi lepiej jest, jeśli nie wykona Akcji 2, aby otrzymać natychmiastową nagrodę w wysokości 5, ale zamiast tego może wybrać Akcję 1, aby przechodzić przez stany, aby otrzymać nagrodę w wysokości 20. Agent chce mieć możliwość wybrać działania, które skutkują opóźnioną nagrodą, gdy wartość opóźnionej nagrody jest zbyt wysoka.
Przeczytaj także: Klasyfikacja obrazów Tensorflow
Zasada uczenia się Q
To zachęca nas do wyjaśnienia zasad uczenia się Q. W głębokim uczeniu Q sieć neuronowa musi przyjąć obecny stan s jako wektor i zwrócić wartość Q dla każdego potencjalnego zachowania a, w tym stanie, tj. konieczne jest zwrócenie Q(s, a) dla obu s i a. To Q(s, a) musi zostać zrewidowane podczas szkolenia zgodnie z następującą zasadą:
Q(s,a) = Q(s,a) + alp[r+γmax Q(s',a ') – Q(s,a)] + alp[r+ γmax Q(s',a')
To prawo wymaga trochę rozpakowania do aktualizacji. Po drugie, widać, że nowa wartość Q(s, a) wymaga zmiany jej istniejącej wartości poprzez wstawienie kilku dodatkowych bitów po prawej stronie powyższego równania. Przełącz się od lewej do prawej. Zapomnij na chwilę o alfie. W nawiasach kwadratowych pierwsze słowo to r, co oznacza nagrodę zdobytą za podjęcie działań w stanach.

To jest natychmiastowa nagroda; nie ma jeszcze odroczonej satysfakcji. Następnym słowem jest oszacowanie odroczonej zachęty. Po pierwsze, mamy wartość γ, która dyskontuje opóźniony efekt nagrody, który zawsze wynosi od 0 do 1. Więcej o tym za sekundę. Następny termin maxa'Q(s, 'a') to maksymalna wartość Q dostępna w następnym warunku.
Ułatwmy sobie sprawę - agent zaczyna w stanach, wykonuje akcję a, kończy w stanach, a następnie kod określa maksymalną wartość Q w stanach, tj. max a 'Q(s',a'). Dlaczego więc Max jest brany pod uwagę jako 'Q(s',a')? Jeśli zacznie działać iw stanie s, wiadomo, że reprezentuje pełną możliwą nagrodę dla przewodnika.
Jednak γ dyskontuje tę wartość, aby wziąć pod uwagę, że czekanie na ewentualną zachętę w nieskończoność nie jest pożądane dla agenta - lepiej, aby agent wybrał największą nagrodę w jak najkrótszym czasie. Zauważ, że wartość Q(s',a)' również pośrednio zachowuje najwyższą zdyskontowaną motywację dla gospodarki po tym, tj. Q(s',a)' ponieważ utrzymuje zdyskontowaną motywację dla stanu Q(s',a) ' i tak dalej.
Dzieje się tak, ponieważ agent wybierze akcję nie tylko na podstawie natychmiastowej nagrody r, ale także na podstawie potencjalnych przyszłych zdyskontowanych zachęt.
Głębokie uczenie Q
Głębokie uczenie Q jest zgodne z prawem aktualizacji uczenia Q w fazie szkolenia. Innymi słowy, tworzona jest sieć neuronowa, która przyjmuje stan s jako dane wejściowe, a następnie sieć jest szkolona do wytwarzania odpowiednich wartości Q(s, a) dla każdego zachowania w stanie s. Akcja agenta zostanie następnie wybrana poprzez podjęcie akcji o największej wartości Q(s, a) (pobierając argmax z wyjścia sieci neuronowej). Można to zobaczyć w pierwszym kroku poniższego diagramu:
Etapy wyboru działań i szkolenia – uczenie głębokiego Q

Po wykonaniu tego przelewu i wybraniu akcji agent wykona akcję. Agent uzyska wtedy informację zwrotną na temat tego, jaka zachęta jest motywowana do podjęcia działania z tego stanu. Zgodnie z wytycznymi Q Learning Guide, następnym krokiem, który chcemy teraz zrobić, jest szkolenie sieci. W drugiej części widać to na powyższym schemacie.
Wektor stanu s jest tablicą wejściową x dla uczenia sieci, a próbka uczenia wyjściowego y jest wektorem Q(s, a) zebranym podczas procesu wyboru akcji. Jednak jedna z wartości Q(s,a), odpowiadająca działaniu a, jest ustawiona na r+γQ(s',a'), jak widać na powyższym rysunku. Trenując sieć w ten sposób, aby poinformować agenta, jakie zachowanie będzie najlepsze do wyboru dla jego długoterminowej korzyści, wektor wyjściowy Q(s, a) z sieci będzie z czasem silniejszy.
Zalety uczenia się zbrojenia:
- Uczenie się przez wzmacnianie może być wykorzystywane do rozwiązywania bardzo trudnych wyzwań, których nie można pokonać za pomocą konwencjonalnych metod.
- Ta strategia jest wybierana w celu uzyskania długoterminowych rezultatów, które są bardzo trudne do osiągnięcia.
- Ten wzorzec uczenia się jest nieco podobny do uczenia się ludzi. Dlatego jest bliski osiągnięcia perfekcji.
- Model poprawi błędy, które pojawiły się w fazie testowania.
- Jeśli błąd zostanie skorygowany przez model, prawdopodobieństwo wystąpienia tego samego błędu jest nieco mniejsze.
- Stworzyłoby to najlepszy paradygmat rozwiązania konkretnego problemu.
Wady uczenia się przez wzmacnianie
- Uczenie się przez wzmacnianie jako schemat jest nieprawidłowe pod wieloma względami, ale to właśnie ta cecha sprawia, że jest ono przydatne.
- Zbyt dużo uczenia się przez wzmacnianie może spowodować przytłoczenie stanów, co może zmniejszyć wyniki.
- Uczenie się przez wzmacnianie nie jest lepsze niż wykorzystywanie do rozwiązywania podstawowych problemów.
- Uczenie się ze wzmocnieniem wymaga dużej ilości inteligencji i dużej ilości obliczeń. To głodny danych. Dlatego tak dobrze pasuje do gier wideo, więc możesz grać w tę grę w kółko i wydaje się, że można uzyskać wiele szczegółów.
- Uczenie się ze wzmacnianiem zakłada, że wszechświat jest markowski, a nim nie jest. Model Markowa opisuje sekwencję możliwych zdarzeń, w których prawdopodobieństwo wystąpienia każdego zdarzenia zależy tylko od stanu osiągniętego w poprzednim zdarzeniu.
Co następne?
Jeśli chcesz opanować uczenie maszynowe i nauczyć się szkolić agenta, aby grał w kółko i krzyżyk, szkolił chatbota itp., sprawdź kurs Uczenie maszynowe i sztuczna inteligencja firmy upGrad.
Co to jest TensorFlow?
Python, język programowania powszechnie używany w uczeniu maszynowym, zawiera obszerną bibliotekę funkcji. TensorFlow to jedna z takich bibliotek Pythona uruchomiona przez Google, która obsługuje szybkie i wydajne obliczenia numeryczne. Jest to biblioteka typu open source stworzona i utrzymywana przez Google, która jest szeroko wykorzystywana do opracowywania modeli Deep Learning. TensorFlow jest również używany wraz z innymi bibliotekami wrapperów w celu uproszczenia procesu. W przeciwieństwie do niektórych innych bibliotek numerycznych, które są również wykorzystywane w Deep Learning, TensorFlow został opracowany zarówno do badań i rozwoju aplikacji, jak i funkcji środowiska produkcyjnego. Może działać na maszynach z pojedynczymi procesorami, urządzeniach mobilnych i rozproszonych systemach komputerowych.
Jakie są inne biblioteki, takie jak TensorFlow w uczeniu maszynowym?
Wcześniej inżynierowie zajmujący się uczeniem maszynowym pisali cały kod dla różnych algorytmów uczenia maszynowego ręcznie. Teraz pisanie tych samych linijek kodu za każdym razem dla podobnych algorytmów, modeli statystycznych i matematycznych było nie tylko czasochłonne, ale także nieefektywne i żmudne. Jako obejście wprowadzono biblioteki Pythona w celu ponownego wykorzystania funkcji i zaoszczędzenia czasu. Kolekcja bibliotek Pythona jest obszerna i wszechstronna. Niektóre z najczęściej używanych bibliotek Pythona to Theano, Numpy, Scipy, Pandas, Matplotlib, PyTorch, Keras i Scikit-learn, z wyjątkiem TensorFlow. Biblioteki Pythona są również łatwo kompatybilne z bibliotekami C/C++.
Jakie są zalety korzystania z TensorFlow?
Wiele zalet TensorFlow sprawia, że jest to niezwykle popularna opcja tworzenia modeli obliczeniowych w uczeniu głębokim i uczeniu maszynowym. Po pierwsze, jest to platforma typu open source, która obsługuje rozszerzone formaty wizualizacji danych wraz z prezentacją graficzną. Programiści mogą również z łatwością wykorzystać go do debugowania węzłów, co oszczędza czas i eliminuje konieczność badania całego kodu sieci neuronowej. TensorFlow obsługuje wszystkie rodzaje operacji, a programiści mogą na tej platformie zbudować dowolny model lub system. Jest łatwo kompatybilny z innymi językami programowania, takimi jak Ruby, C++ i Swift.