Mariusz Tober

Agent RL nauczył się zwiedzać poziom, ale go nie przeszedł

3 min czytania#rl#agenci#eksperyment

Uczenie agenta w klasycznej platformówce zacząłem od problemu z tempem eksperymentów. Przechwytywanie obrazu z działającego okna gry było zbyt wolne. Każda zmiana funkcji nagrody oznaczała długie czekanie, zanim mogłem sprawdzić, czy pomogła.

Sięgnąłem więc po otwarty port silnika, dopisałem API i skompilowałem całość jako bibliotekę ładowaną bezpośrednio do procesu przez ctypes. Mogłem uruchamiać grę bez okna, wykonywać ją krok po kroku, odczytywać stan oraz zapisywać i odtwarzać pełne migawki.

Po zrównolegleniu symulacji uzyskałem dziesiątki tysięcy kroków na sekundę. Agent dostawał prostą obserwację: numer pokoju i pozycję postaci. Miałem wreszcie środowisko, w którym mogłem szybko porównywać pomysły. Pozostało sprawić, żeby agent chciał dokądkolwiek pójść.

Nagroda za nowe miejsca

Uruchomiłem PPO i zacząłem od intuicyjnego pomysłu: karać za śmierć. Agent znalazł wygodne rozwiązanie. Uczył się nie umierać i stać w miejscu. Zmiana siły kary czy dodanie premii czasowej nie dawały takiego postępu, na jaki liczyłem.

Przełom przyniosła niewielka premia za odwiedzenie nowego miejsca. Agent zaczął eksplorować i zdobywać miecz. W oddzielnej ocenie odwiedzał średnio około 10 pokoi, podczas gdy agent losowy odwiedzał około 3. Poprawa powtórzyła się w kolejnych, niezależnych treningach. Pierwszy cel, czyli wyraźne przekroczenie wyniku losowego, miałem osiągnięty.

Chciałem jednak mieć pewność, że mierzę rzeczywisty postęp. Sprawdziłem zgodność numeru pokoju odczytywanego przez środowisko z tym, co rysowała gra. Przejścia między pokojami porównałem z grafem odczytanym z pliku poziomu. Ziarna przeznaczone do oceny zablokowałem w kodzie treningowym, a samą ocenę uruchamiał osobny robotnik, który nie pisał środowiska ani pętli treningowej.

Przy okazji natrafiłem na pułapkę determinizmu. Ta sama polityka deterministyczna na tym samym poziomie odtwarzała dokładnie tę samą trasę. Kolejne epizody nie były więc niezależnymi próbami, choć łatwo byłoby je tak policzyć. Ostateczny werdykt oparłem na polityce z próbkowaniem akcji.

Miecz w ekwipunku to za mało

Następnym celem było ukończenie pierwszego poziomu. Tu postęp się zatrzymał. Po kilku nocach eksperymentów, w końcowej ocenie obejmującej 100 epizodów, agent nie wyszedł z poziomu ani razu. Zwykle zdobywał miecz i odwiedzał wiele pomieszczeń, ale nigdy nie pokonał strażnika.

Najbardziej zastanowiło mnie to, że w ogóle nie dobywał miecza. Podnosił go, a później omijał przeciwnika. Moja metryka nagradzała nowe miejsca i postęp, lecz nie sprawdzała walki. Zdobycie przedmiotu wyglądało obiecująco, ale samo w sobie nie potwierdzało, że agent potrafi go użyć.

Nie rozstrzygnąłem, czy brakowało mu umiejętności ataku, czy odpowiedniej okazji. Nie zmierzyłem też rozkładu nagrody między poszczególnymi gałęziami trasy. Nie mogłem więc uczciwie przypisać tego zachowania jednej przyczynie.

Próba pomocy przez kurs wsteczny również zawiodła. W porównaniu startów z demonstracji agent z takim kursem rzadziej wychodził z poziomu niż wariant bez niego, mimo tych samych wag początkowych i tej samej demonstracji. Samo dodanie programu nauczania nie oznaczało poprawy.

Czego się nauczyłem

Przyspieszenie silnika pozwoliło mi sprawniej prowadzić eksperymenty. Premia za odkrywanie nowych miejsc zmieniła zachowanie agenta i wyciągnęła go z początkowych pomieszczeń. Liczba odwiedzonych pokoi okazała się jednak niewystarczającą miarą tego, czy potrafi ukończyć poziom. Podobnie było z mieczem: mierzyłem jego zdobycie, a umiejętność walki pozostawała niewyjaśniona.

Granice tego wyniku są nadal wyraźne. Nie sprawdziłem, jak polityka radzi sobie na innych poziomach. Przy obserwacji opartej na numerze pokoju i pozycji postaci najpewniej zapamiętuje konkretną mapę. Lepsza eksploracja znanego poziomu nie daje mi jeszcze podstaw do wnioskowania o uogólnianiu.

Nie znam również dokładnego wpływu samej premii czasowej. Dotychczasowe porównanie obejmowało zbyt mało biegów, a wyniki mocno się różniły. Ciekawość pomogła agentowi ruszyć z miejsca. Droga od zwiedzania do ukończenia poziomu pozostała otwarta.

← Wszystkie wpisy