Q Learning w Pythonie: co to jest, definicje [przykłady kodowania]
Opublikowany: 2020-03-26Uczenie się ze wzmocnieniem ma miejsce, gdy uczący się agent uczy się zachowywać optymalnie zgodnie ze swoim otoczeniem poprzez ciągłe interakcje. Agent przechodzi przez różne sytuacje, zwane również stanami. Jak można się domyślić, uczenie się ze wzmocnieniem ma wiele zastosowań w naszym świecie. Dowiedz się więcej, jeśli chcesz dowiedzieć się więcej o algorytmach analizy danych.
Ponadto posiada wiele algorytmów, jednym z najpopularniejszych jest uczenie Q . W tym artykule omówimy, czym jest ten algorytm i jak działa.
Więc bez zbędnych ceregieli zacznijmy.
Spis treści
Co to jest nauka Q?
Q learning to algorytm uczenia się ze wzmocnieniem, który koncentruje się na znalezieniu najlepszego sposobu działania w konkretnej sytuacji. Jest to niezgodne z zasadami, ponieważ działania, z których uczy się funkcja Q learning, są poza istniejącą zasadą, więc nie jest to wymagane. Koncentruje się na nauce zasad, które zwiększają jego całkowitą nagrodę. Jest to prosta forma uczenia się przez wzmacnianie, która wykorzystuje wartości działania (lub wartości Q), aby poprawić zachowanie osoby uczącej się.
Uczenie Q jest jednym z najpopularniejszych algorytmów w uczeniu ze wzmocnieniem, ponieważ jego zrozumienie i wdrożenie jest łatwe. „Q” w nauce Q reprezentuje jakość. Jak wspomnieliśmy wcześniej, Q learning koncentruje się na znalezieniu najlepszej akcji w konkretnej sytuacji. A jakość pokazuje, jak przydatne jest konkretne działanie i do jakiej nagrody może Ci pomóc.
Ważne definicje
Zanim zaczniemy omawiać, jak to działa, powinniśmy najpierw przyjrzeć się kilku podstawowym pojęciom nauki q. Zacznijmy.
Wartości Q
Wartości Q są również znane jako wartości akcji. Są one reprezentowane przez Q(S, A) i dają oszacowanie, jak dobre ma być działanie A w stanie S. Model obliczy to oszacowanie iteracyjnie, używając reguły aktualizacji różnic czasowych, którą omówiliśmy później w tej sekcji.
Odcinki i nagrody
Agent zaczyna od stanu początkowego, przechodzi przez kilka przejść, a następnie przechodzi z obecnego stanu do następnego zgodnie ze swoimi działaniami i otoczeniem. Za każdym razem, gdy agent podejmuje działanie, otrzymuje nagrodę. A kiedy nie ma możliwości przejścia, to koniec odcinka.
Aktualizacja TD (różnica czasowa)
Oto reguła aktualizacji TD lub różnicy czasowej:
Q(S,A) Q(S,A) + (R + Q(S',A')-Q(S,A))
Tutaj S reprezentuje aktualny stan agenta, podczas gdy S' reprezentuje następny stan. A reprezentuje bieżące działanie, A' reprezentuje następujące najlepsze działanie zgodnie z oszacowaniem wartości Q, R przedstawia aktualną nagrodę zgodnie z obecnym działaniem, oznacza współczynnik dyskontowania i pokazuje długość kroku.
Przeczytaj także: Warunek wstępny dla nauki o danych. Jak to się zmienia w czasie?
Przykład Q Learning Python
Najlepszym sposobem na zrozumienie języka Q uczącego się Pythona jest zobaczenie przykładu. W tym przykładzie używamy środowiska siłowni OpenAI i trenujemy z nim nasz model. Po pierwsze, musisz zainstalować środowisko. Możesz to zrobić za pomocą następującego polecenia:
pip zainstaluj siłownię
Teraz zaimportujemy biblioteki, których będziemy potrzebować w tym przykładzie:
importuj siłownię
importować itertools
importuj bibliotekę matplotlib
importuj matplotlib.style
importuj numer jako np
importuj pandy jako PD
system importu
z kolekcji importuj defaultdict
z windy_gridworld import WindyGridworldEnv
importuj wydruk
matplotlib.style.use('ggplot')
Bez niezbędnych bibliotek nie byłoby możliwe pomyślne wykonanie tych operacji. Po zaimportowaniu bibliotek stworzymy środowisko:
env = WindyGridworldEnv()
Teraz utworzymy zasadę -greedy:
def createEpsilonGreedyPolicy(Q, epsilon, num_actions):
„””
Tworzy politykę opartą na epsilon-greedy
na danej funkcji Q i epsilon.
Zwraca funkcję, która przyjmuje stan
jako dane wejściowe i zwraca prawdopodobieństwa
dla każdej akcji w postaci tablicy numpy
długości przestrzeni akcji (zestawu możliwych odpowiedzi).
„””
def policyFunkcja(stan):
Prawdopodobieństwo_działania = np.ones(liczba_działań,
dtype = float) * epsilon / num_actions
best_action = np.argmax(Q[stan])
Prawdopodobieństwo_działania[najlepsza_akcja] += (1,0 – epsilon)
return Action_probabilities
polityka zwrotówFunkcja
Oto kod do budowy modelu q-learningu:
def qNauka(śr, liczba_odcinków, współczynnik_rabatu = 1,0,

alfa = 0,6, epsilon = 0,1):
„””
Algorytm Q-Learning: Kontrola TD poza polityką.
Znajduje optymalną politykę zachłanności, jednocześnie poprawiając
zgodnie z polityką epsilon-greedy”””
# Funkcja wartości akcji
# Zagnieżdżony słownik, który mapuje
# stan -> (akcja -> wartość-działania).
Q = defaultdict(lambda: np.zeros(env.action_space.n))
# Śledzi przydatne statystyki
statystyki = plotting.EpisodeStats(
długości_odcinków = np.zera(liczba_odcinków),
odcinek_nagrody = np. zera (liczba_odcinków))
# Utwórz funkcję polityki epsilon chciwy
# odpowiednio do przestrzeni działania środowiska
policy = utwórzEpsilonGreedyPolicy(Q, epsilon, env.action_space.n)
# Dla każdego odcinka
dla ith_episode w zakresie (liczba_odcinków):
# Zresetuj środowisko i wybierz pierwszą akcję
stan = env.reset()
dla t w itertools.count():
# pobierz prawdopodobieństwa wszystkich działań z obecnego stanu
action_probabilities = polityka(stan)
# wybierz akcję zgodnie z
# rozkład prawdopodobieństwa
akcja = np.losowy.wybór(np.arange(
len(action_probabilities)),
p = prawdopodobieństwo_działania)
# podejmij działanie i zdobądź nagrodę, przejdź do następnego stanu
następny_stan, nagroda, gotowe, _ = env.step(action)
# Zaktualizuj statystyki
stats.episode_rewards[i_episode] += nagroda
stats.episode_lengths[i_episode] = t
# Aktualizacja TD
najlepsza_następna_akcja = np. argmax(Q[następny_stan])
td_target = nagroda + współczynnik_rabatu * Q[next_state][best_next_action]
td_delta = td_target – Q[stan][akcja]
Q[stan][działanie] += alfa * td_delta
# gotowe to prawda, jeśli odcinek został zakończony
jeśli zrobione:
zepsuć
stan = następny_stan
powrót Q, statystyki
Wytrenujmy teraz model:
Q, statystyki = qNauka (śr., 1000)
Po utworzeniu i wytrenowaniu modelu możemy wykreślić podstawowe statystyki tego samego:
plotting.plot_episode_stats(stats)
Użyj tego kodu, aby uruchomić model i wykreślić wykres. Jakie wyniki widzisz? Podziel się z nami swoimi wynikami, a jeśli napotkasz jakiekolwiek wątpliwości lub wątpliwości, daj nam znać.
Przeczytaj także: Algorytmy uczenia maszynowego dla nauki o danych
Ucz się kursów nauki o danych z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Końcowe przemyślenia
Kiedy narysujesz wykres, zobaczysz, że nagroda za odcinek stopniowo wzrasta w czasie. A po niektórych odcinkach fabuła pokazuje również, że wyrównuje wysoki limit nagród na odcinek. Na co to wskazuje?
Oznacza to, że Twój model nauczył się zwiększać całkowitą nagrodę, jaką może zdobyć w odcinku, zapewniając optymalne zachowanie. Musiałeś też wiedzieć, dlaczego q ucząc się Pythona widzi aplikacje w tak wielu branżach i obszarach.
Jakie są wady uczenia się przez wzmacnianie?
1. Nadmierne uczenie się przez wzmacnianie może skutkować nadmiarem stanów, obniżając jakość wyników.
2. Uczenie się przez wzmacnianie nie jest zalecane w celu łatwego rozwiązywania problemów.
3. Uczenie się ze wzmocnieniem wymaga dużej ilości danych i obliczeń.
4. Uczenie się ze wzmocnieniem ma swój własny zestaw unikalnych i bardzo skomplikowanych przeszkód, takich jak trudna konfiguracja projektu szkolenia i problemy z równowagą eksploracji i wzmacniania.
Czy oparty jest na modelu uczenia Q?
Nie, nauka Q nie zależy od modeli. Q-learning to technika uczenia się przez wzmacnianie bez modelu, służąca do określania wartości określonego działania w danym stanie. Q learning to jeden z kilku obecnych algorytmów uczenia ze wzmocnieniem, który nie ma modelu, co oznacza, że może być używany w różnych kontekstach i szybko dostosowywać się do nowych i nieznanych warunków. Może obsługiwać problemy związane z przejściami stochastycznymi i nagrodami bez konieczności adaptacji i nie wymaga modelu środowiska. Q-learning to algorytm uczenia się oparty na wartościach. Algorytmy oparte na wartości wykorzystują równanie do aktualizacji funkcji wartości (w szczególności równanie Bellmana).
Czym Q learning i SARSA różnią się od siebie?
SARSA uczy się prawie optymalnej polityki podczas eksploracji, podczas gdy Q-learning uczy się bezpośrednio optymalnej polityki. Off-policy SARSA uczy się wartości działania w odniesieniu do prowadzonej polityki, podczas gdy on-policy SARSA uczy się wartości działania w odniesieniu do polityki, którą prowadzi. W odniesieniu do polityki zachłanności Q-Learning to robi. Obie zbiegają się do funkcji wartości rzeczywistej w pewnych podobnych warunkach, ale z różnymi prędkościami. Q-Learning zajmuje trochę więcej czasu, aby osiągnąć zbieżność, ale może się nadal uczyć, gdy zmieniają się przepisy. W połączeniu z przybliżeniem liniowym nie ma gwarancji, że Q-Learning będzie zbieżny. SARSA rozważy kary z etapów eksploracyjnych przy zbliżaniu się do konwergencji, podczas gdy Q-learning nie. Jeśli istnieje szansa na znaczącą negatywną nagrodę na idealnej ścieżce, Q-learning spróbuje wywołać ją podczas eksploracji, jednak SARSA spróbuje uniknąć ryzykownej optymalnej ścieżki i nauczy się jej wykorzystywać dopiero po zmniejszeniu parametrów eksploracji.