Jak wdrożyć ograniczoną przestrzeń działania w uczeniu się przez wzmacnianie?

13

Koduję model uczenia się zbrojenia z agentem PPO dzięki bardzo dobrej bibliotece Tensorforce , zbudowanej na bazie Tensorflow.

Pierwsza wersja była bardzo prosta i teraz nurkuję w bardziej złożonym środowisku, w którym wszystkie działania nie są dostępne na każdym kroku.

Powiedzmy, że jest 5 akcji, a ich dostępność zależy od stanu wewnętrznego (który jest zdefiniowany przez poprzednią akcję i / lub nowy stan / przestrzeń obserwacji):

  • 2 akcje (0 i 1) są zawsze dostępne
  • 2 akcje (2 i 3) są dostępne tylko wtedy, gdy stan_zewnętrzny == 0
  • 1 akcja (4) jest dostępna tylko wtedy, gdy stan_zewnętrzny == 1

W związku z tym dostępne są 4 akcje, gdy stan_zewnętrzny == 0 i 3 akcje dostępne, gdy stan_zewnętrzny == 1.

Myślę o kilku możliwościach wdrożenia tego:

  1. Zmień przestrzeń akcji na każdym kroku, w zależności od stanu wewnętrznego. Zakładam, że to nonsens.
  2. Nie rób nic: pozwól modelowi zrozumieć, że wybór niedostępnej akcji nie ma wpływu.
  3. Nie rób prawie wszystkiego: nieznacznie negatywnie wpływaj na nagrodę, gdy model wybierze niedostępną akcję.
  4. Pomóż modelowi: wprowadzając liczbę całkowitą do przestrzeni stanu / przestrzeni obserwacyjnej, która informuje model, jaka jest wartość stanu wewnętrznego + punktor 2 lub 3

Czy istnieją inne sposoby na wdrożenie tego? Z własnego doświadczenia, który byłby najlepszy?

Max
źródło

Odpowiedzi:

5

Najprostszym rozwiązaniem jest po prostu uczynienie każdej czynności „legalną”, ale wdrożenie spójnego, deterministycznego mapowania od potencjalnie nielegalnych działań do różnych działań prawnych. Ilekroć implementacja PPO, z której korzystasz, wybiera nielegalne działanie, po prostu zastępujesz je działaniem prawnym, na które jest mapowane. Twój algorytm PPO może następnie aktualizować się tak, jakby wybrano nielegalne działanie (nielegalne działanie po prostu staje się ... zamiast tego „pseudonimem” dla czynności prawnej).

Na przykład w opisanej sytuacji:

  • 2 akcje (0 i 1) są zawsze dostępne
  • 2 akcje (2 i 3) są dostępne tylko wtedy, gdy stan_zewnętrzny == 0
  • 1 akcja (4) jest dostępna tylko wtedy, gdy stan_zewnętrzny == 1

W przypadkach internal_state == 0, gdy 4wybrano akcję (akcję nielegalną), zawsze możesz ją zamienić na jedną z innych akcji i zamiast tego zagrać. Teoretycznie nie ma znaczenia (teoretycznie), który wybierzesz, pod warunkiem, że będziesz konsekwentny. Algorytm nie musi wiedzieć, że wybrał nielegalną akcję, ilekroć ponownie wybierze tę samą nielegalną akcję w przyszłości w podobnych stanach, konsekwentnie zostanie zamapowany na tę samą akcję prawną, więc po prostu wzmocnij ją zgodnie z tym zachowaniem.


Rozwiązanie opisane powyżej jest bardzo proste, prawdopodobnie najłatwiejsze do wdrożenia, ale oczywiście to… „pachnie” nieco „hacky”. Czystsze rozwiązanie wymagałoby pewnego kroku w sieci, który określa prawdopodobieństwo wyników nielegalnych działań0i ponownie normalizuje resztę do sumowania 1jeszcze raz. Wymaga to znacznie więcej starań, aby upewnić się, że aktualizacje edukacyjne są nadal wykonywane poprawnie, i prawdopodobnie jest o wiele bardziej skomplikowane do wdrożenia na istniejącym frameworku, takim jak Tensorforce (jeśli nie jest już w jakiś sposób obsługiwany po wyjęciu z pudełka).


W przypadku pierwszego „rozwiązania” napisałem powyżej, że „teoretycznie” nie ma znaczenia, w jaki sposób wybierzesz mapowanie. Absolutnie oczekuję, że twoje wybory tutaj będą miały wpływ na szybkość uczenia się w praktyce. Wynika to z faktu, że na początkowych etapach procesu uczenia się prawdopodobnie wybierzesz działania zbliżone do losowych. Jeśli niektóre akcje „pojawią się wielokrotnie” na wyjściach, będą miały większe prawdopodobieństwo, że zostaną wybrane przy początkowym wyborze akcji close-tor-andom. Będzie to miało wpływ na twoje początkowe zachowanie, co wpłynie na gromadzone doświadczenie, co z kolei będzie miało wpływ na to, czego się nauczysz.

Z pewnością spodziewam się, że będzie to korzystne dla wydajności, jeśli możesz dołączyć funkcje wejściowe dla internal_statezmiennej.

Jeśli można zidentyfikować pewne działania prawne, które są w jakiś sposób „semantycznie bliskie” niektórym nielegalnym działaniom, może być również korzystne dla wydajności powiązanie tych „podobnych” działań w „mapowaniu” z działań nielegalnych do prawnych, jeśli zdecydujesz się na to rozwiązanie. Na przykład, jeśli masz akcję „przeskocz do przodu”, która staje się nielegalna w stanach, w których pułap jest bardzo niski (ponieważ uderzysz się głową), może być lepiej odwzorować tę akcję na akcję „przesuń do przodu” (która nadal jest podobny, oboje idą do przodu), niż byłoby to odwzorowaniem na działanie „cofnij się”. Ta idea „podobnych” działań będzie miała zastosowanie tylko do niektórych domen, w niektórych domenach mogą nie występować takie podobieństwa między działaniami.

Dennis Soemers
źródło
2

Celem jest zaprojektowanie proksymalnego komponentu optymalizacji polityki, który ma określone ograniczenia przestrzeni działania zależne od reguł opartych na stanie, przy użyciu frameworku takiego jak Tensorforce.

Opcje projektu wymienione w pytaniu

Opcje te są wymienione tutaj w celu szybkiego odniesienia podczas czytania wstępnej analizy poniżej.

  • Zmień przestrzeń akcji na każdym kroku, w zależności od stanu wewnętrznego. Zakładam, że to nonsens.
  • Nie rób nic: pozwól modelowi zrozumieć, że wybór niedostępnej akcji nie ma wpływu.
  • Nie rób prawie wszystkiego: nieznacznie negatywnie wpływaj na nagrodę, gdy model wybierze niedostępną akcję.
  • Pomóż modelowi: wprowadzając liczbę całkowitą do przestrzeni stanu / przestrzeni obserwacyjnej, która informuje model, jaka jest wartość stanu wewnętrznego + punktor 2 lub 3

Wstępna analiza

Rzeczywiście rozsądnie jest zmienić pole akcji dla każdego ruchu. Jest to w rzeczywistości odpowiednia reprezentacja opisanego problemu oraz normalny sposób gry przez ludzi i sposób, w jaki komputery pokonują ludzi w grze Chess and Go.

Pozorna bezsensowność tego pomysłu jest jedynie artefaktem postępu na mapie drogowej projektu Tensorforce i postępów w teorii zbrojenia, obaj młodzi w szerszym ujęciu. Po przeczytaniu dokumentacji Tensorforce i często zadawanych pytań nie wydaje się, aby struktura została zaprojektowana do podłączenia silnika reguł w celu określenia przestrzeni działania. To nie jest wada open source. Wydaje się, że nie ma żadnych artykułów przedstawiających teorię lub proponujących algorytmy dla uzależnionego od reguł podejmowania decyzji w łańcuchu Markowa.

Opcja „nic nie rób” pasuje do obecnie dostępnych strategii przedstawionych w literaturze. Niemal nic nie jest prawdopodobnie podejściem, które zapewni bardziej niezawodne i być może bardziej natychmiastowe pożądane zachowanie.

Problem z koncepcją pomocy modelowi polega na tym, że nie jest on tak silnym pomysłem, jak rozszerzenie modelu. W open source można to zrobić poprzez rozszerzenie klas reprezentujących model, co wymagałoby trochę pracy teoretycznej przed kodowaniem do

    a. Represent rule-conditioned learning in nomenclature
    b. Represent convergence mathematically using the new nomenclature
    c. Determining a method of convergence
    d. Proving convergence
    e. Rechecking
    f. Defining a smooth and efficient algorithm
    g. Providing PAC learning information for planning
    f. Peer review
    g. Extending the classes of the library
    h. Proof of concept with the current problem above
    i. Additional cases and metrics comparing the approach with the others
    j. Extending the library flexibility to support more such dev

Rozszerzenie systemów nauczania na przypadki ograniczone regułami to świetny pomysł na pracę doktorską i może latać w laboratoriach badawczych jako propozycja projektu z wieloma możliwymi zastosowaniami. Nie pozwól, by wszystkie kroki zniechęciły badacza. Są one zasadniczo listą kroków do dowolnej pracy doktorskiej lub finansowanego projektu laboratorium AI.

W przypadku rozwiązania krótkoterminowego pomoc w modelu może działać, ale nie jest to rozsądna strategia dla wspierania idei sztucznej inteligencji na ścieżce uczenia się wzmacniającego. Jako krótkoterminowe rozwiązanie konkretnego problemu może działać dobrze. Pomysł „prawie nic” może być bardziej rozsądny, ponieważ mieści się w dowodach konwergencji, które doprowadziły do ​​konkretnej implementacji, której prawdopodobnie użyje Tensorforce.

Zmiana nazwy z „prawie nic” na „pomoc w konwergencji” może pomóc rozwinąć właściwą perspektywę przed wypróbowaniem. Podczas zbliżania się do konwergencji konieczne może być osłabienie asysty, aby uniknąć przekroczenia, tak jak w przypadku wskaźnika uczenia się.

Douglas Daseeco
źródło
3
Zwykle dzieje się, np. AlphaGo, to, że reprezentacja niskiego poziomu w sieci neuronowej reprezentuje bardzo dużą przestrzeń akcji, z których większość jest niemożliwa w obecnym stanie (robi to z powodu ograniczeń prostych NN, które wysyłają wektory o stałym rozmiarze ). Następnie inna część kodu stosuje filtr, aby wybrać i znormalizować prawdopodobieństwa tylko dla dozwolonych ruchów. Połączone NN i filtr są częścią agenta. Można więc powiedzieć, że agent jako całość „zmieni przestrzeń akcji dla każdego ruchu” - nie wiem jednak, jak można to osiągnąć w bibliotece Tensorforce.
Neil Slater,
1

Zwykle zestaw akcji, które agent może wykonać, nie zmienia się z czasem, ale niektóre akcje mogą stać się niemożliwe w różnych stanach (na przykład nie każdy ruch jest możliwy w dowolnej pozycji gry w kółko i krzyżyk).

Weź przykład jako fragment kodu https://github.com/haje01/gym-tictactoe/blob/master/examples/base_agent.py :

ava_actions = env.available_actions()
action = agent.act(state, ava_actions)
state, reward, done, info = env.step(action)
madpower2000
źródło