8: MuZero

Wyobraźmy sobie, że chcemy rozwiązać bardzo trudne zagadnienie technologiczne. Na przykład zbudować mechanizm regulujący warunki wewnątrz reaktora fuzyjnego.
Tworzymy środowisko badawcze. W reaktorze umieszczamy setki rozmaitych mierników: temperatury, natężenia pola elektromagnetycznego i wielu innych parametrów. Badamy, co dzieje się z podgrzaną do milionów stopni Celsjusza mieszaniną zjonizowanych atomów deuteru i trytu. Sprawdzamy, jak na stabilność i energetyczną wydajność reakcji wpływa manipulowanie tymi parametrami, na których zmianę mamy wpływ. Zaczynamy grać z tym środowiskiem w swoistą grę. Nie wiemy do końca, jak będzie ono reagować na nasze działania. Nie rozumiemy dokładnie rządzących nim praw, czyli reguł podjętej gry. Wykorzystanie systemu AI, który nauczy się przewidywać te reakcje i będzie na bieżąco sterować wartościami parametrów, które potrafimy zmieniać, wydaje się bardzo kuszące. Właśnie dlatego zespoły zajmujące się sztuczną inteligencją szczególną uwagę poświęcają w ostatnich latach algorytmom, które potrafią w dynamiczny sposób wpływać na zjawiska zachodzące w jakimś środowisku. Oczywiście przykład z reaktorem fuzyjnym jest jednym z wielu. Znane są próby użycia takich systemów w chemii organicznej czy medycynie. Być może program, o którym w tym wpisie opowiem, stanowi swoisty poligon doświadczalny dla tego typu zastosowań.
A sprawa jest bardzo świeża. Pod koniec listopada 2019 roku zespół DeepMind ogłosił bowiem stworzenie kolejnego przełomowego rozwiązania, które nazwano MuZero. Tym razem był to program, który - podobnie jak było to w przypadku AlphaZero – bez wsparcia zapisami ludzkich gier osiągnął mistrzowski poziom w go, szachach i szogi oraz dodatkowo w 57 grach Atari (chodzi o gry wideo stworzone pod koniec lat 80-tych na popularny wtedy mikrokomputer, takie jak: Alien, Boxing, Space invaders, Tennis). W odróżnieniu jednak od swojego poprzednika MuZero na etapie budowania drzewa MCTS nie miał dostępu do reguł gier, w które grał. Mówiąc obrazowo: nie “wiedział”, a jedynie “domyślał się”, jaka sytuacja na planszy pojawi się po konkretnym zagraniu. W wyobrażonej sytuacji, nawet zakładając, że była trafnie rozpoznana, nie “wiedział”, jakie będą dopuszczalne zagrania. Jak zobaczymy dalej, w przypadku MuZero trudno jest wręcz spekulować odnośnie tego, co program “wiedział” na temat stanu gry w węzłach drzewa MCTS, gdyż były to “stany ukryte”. Programista, badając je, nie mógłby ustalić, jakim pozycjom na planszy one odpowiadają.
Architektura programu dawała mu dostęp tak do legalnych, jak i nielegalnych zagrań w węzłach drzewa. Na przykład w przypadku go w każdej pozycji miał do wyboru 362 zagrania (361 pól i pas). Mógł więc spekulować o postawieniu jednego kamienia na drugim czy o odebraniu własnej grupie ostatniego oddechu bez zbijania przy okazji żadnego kamienia przeciwnika. Podobnie w szachach mógł rozważać wykonanie gońcem ruchu wieży i zamianę go w hetmana. MuZero nie wiedział, jak będzie wyglądać sytuacja po wykonaniu zagrania. Dla jego “wyobraźni” nie było żadnych ograniczeń. Mógł spekulować, że gdy w pierwszym ruchu przesunie w jakimś kierunku własną figurę, to w tym samym momencie przeciwnikowi znikną wszystkie piony i obie wieże. Albo w przypadku go, że stawiając kamień na kamieniu przeciwnika doprowadzi do zniknięcia całego łańcucha.
W odróżnieniu od poprzednich programów stworzonych przez DeepMind w węzłach drzewa analizy nie występowały tu rzeczywiste odzwierciedlenia pozycji na planszy ani zbiory dostępnych w danych stanach legalnych zagrań. Zamiast tego MuZero przechowywało ukryte reprezentacje tych sytuacji. Reprezentacje te mogły odpowiadać sytuacjom wykluczonym przez reguły gry: na przykład, gdy na planszy do go stoi kilka grup pozbawionych oddechów albo na szachownicy brakuje któremuś z graczy króla.
Przejdźmy teraz do opisu programu i sposobu jego nauki. Zacznijmy od podobieństw między AlphaZero i MuZero. Oba te programy grały w oparciu o algorytm MCTS. Oba trenowane były wyłącznie na milionach partii rozgrywanych z samym sobą, bez użycia zapisów ludzkich rozgrywek. Na wejściach sieci nie podawano im jakiejkolwiek wiedzy ludzkiej. Każdorazowo po rozegraniu wielu partii wagi ich sieci neuronowych były aktualizowane. Tu jednak podobieństwa się kończą.
AlphaZero działał w oparciu o jedną sieć neuronową. Zwracała ona oszacowanie pozycji oraz wycenę wszystkich dostępnych zagrań w każdym nowo dodawanym do drzewa liściu. Wewnętrzny mechanizm dbał o to, by w liściach i węzłach drzewa MCTS pojawiały się odzwierciedlenia stanu gry na planszy, który wystąpiłby po wykonaniu konkretnego zagrania. MuZero nie mógł sobie na taki luksus pozwolić. Nie mając dostępu do reguł gry, nie wiedział, jak będzie wyglądać sytuacja po danym zagraniu. Nie wiedział nawet, czy nastąpi wtedy koniec rozgrywki (na przykład mat lub pat w szachach). W żadnym węźle drzewa MCTS program nie znał listy dostępnych zagrań. W trakcie rozgrywek treningowych w korzeniu drzewa zewnętrzny mechanizm eliminował zagrania nielegalne i dzięki temu nie pojawiały się one w zapisach gier wykorzystywanych podczas nauki. Na pewno część problemów to rozwiązywało, jednak sprawienie by taki program mógł uczyć się grać zgodnie z regułami i w dodatku grać bardzo dobrze było bardzo poważnym wyzwaniem technologicznym. Zespół DeepMind zastosował rozwiązanie, wykorzystujące trzy sieci neuronowe. Pierwsza, nazwana “prediction network” działała bardzo podobnie do sieci AlphaZero. Też miała dwie głowy: “policy head” i “value head”. Pierwsza głowa odpowiedzialna była za wycenę dostępnych zagrań, zaś druga za wycenę sytuacji. Sieć ta miała jednak inne wejście: nie realne odzwierciedlenie sytuacji na planszy, a pewną jej “ukrytą wewnętrzną reprezentację”, czyli wielopowierzchniowe “wyobrażenie” stanu gry. Za tworzenie takich reprezentacji odpowiedzialne były dwie pozostałe sieci: “representation network” i “dynamics network”. “Representation network” działała wyłącznie w korzeniu drzewa MCTS i przekształcała bieżącą sytuację na planszy właśnie w jej “ukrytą reprezentację”. Choć opublikowany przez DeepMind artykuł szczegółów tu nie podaje, możemy domyślać się, że wejście tej sieci najprawdopodobniej wyglądało identycznie jak wejście sieci AlphaZero. “Dynamics network” tworzyła ukryte reprezentacje w pozostałych węzłach drzewa. Poza tym zwracała “natychmiastową nagrodę”, czyli spodziewany zysk, jaki odnosił gracz, który wykonywał zagranie prowadzące do konkretnego węzła. Jej wejściem była ukryta reprezentacja ojca oraz konkretny, wybrany w nim (niekoniecznie zgodny z regułami gry) ruch prowadzący do syna. Konieczność “kolekcjonowania nagród” wynikała z tego, że MuZero grał nie tylko w szachy, go czy szogi, gdzie mamy do czynienia wyłącznie z “opóźnioną nagrodą”, jaką jest wynik całej partii, lecz także w gry Atari. W przypadku tych gier, gdy partia się kończy, to właśnie skumulowana punktacja stanowi o jej ostatecznym wyniku. W węzłach drzewa MCTS MuZero występowały więc wyłącznie ukryte reprezentacje sytuacji, które “rozważał” algorytm: w korzeniu stworzona przez “representation network”, a w pozostałych węzłach drzewa utworzone przez “dynamics network”.
Algorytm budowania drzewa MCTS MuZero działał następująco:
  • Na podstawie bieżącej sytuacji na planszy “representation network” tworzyła jej ukrytą reprezentację.
  • Na podstawie tej ukrytej reprezentacji “prediction network” za pomocą “value head” szacowała wartość bieżącej sytuacji oraz za pomocą “policy head” wyceniała wartości wszystkich dostępnych w korzeniu drzewa legalnych zagrań.
  • Następnie algorytm powtarzał kolejno iteracje MCTS, dopóki nie została przekroczona zadana z góry ich liczba.
  • Po zbudowaniu drzewa, gdy czas analizy dobiegł końca, zewnętrzny mechanizm wybierał w korzeniu MCTS to spośród legalnych zagrań, które było najczęściej odwiedzanym dzieckiem korzenia drzewa. Jednocześnie przekształcał sytuację na planszy w sposób zgodny z regułami gry. Następnie zbierał realną, zgodną z regułami gry otrzymaną nagrodę oraz sprawdzał, czy gra nie dobiegła końca.
Na każdą iterację budowy drzewa MCTS składały się następujące kroki:
  • Selekcja, czyli przesuwanie się ku miejscu, gdzie dodany do drzewa będzie nowy liść. Jako że MuZero nie miał dostępu do reguł gry, z pewnością w początkowej fazie nauki wybierał także zagania nielegalne i w jego węzłach pojawiały się reprezentacje zupełnie absurdalne. Wędrówka po drzewie oraz dodanie nowego liścia odbywały się wśród stanów ukrytych, nie wiemy więc dokładnie, czy i które z nich odpowiadały zagraniom dopuszczalnym, a które nie. Wiemy tylko, że w każdym kroku algorytm w węźle, w którym się znajdował, zgodnie z zadaną formułą wybierał dziecko, do którego następnie przechodził. Formuła ta zapewniała balans między eksploracją ścieżek słabiej zbadanych a dalszym zagłębianiem się w te, które lepiej rokowały według wycen sieci. Decydowała więc liczba odwiedzin każdego dziecka węzła, w którym podejmowana była decyzja, oraz wycena dokonana przez głowę “policy head” sieci “prediction network”. Jeśli pod jakimś dzieckiem istniało poddrzewo, algorytm uwzględniał także uśredniony wynik oszacowań “value head” sieci “prediction network” dla liści i węzłów tego poddrzewa oraz zebranych wszystkich nagród dla wszystkich zawartych w nim zagrań.
  • Po dotarciu do miejsca, gdzie do drzewa algorytm miał dodać nowy liść, “dynamics network” tworzyła ukrytą reprezentację sytuacji tego liścia. Jednocześnie sieć zwracała “natychmiastową nagrodę”.
  • W nowo dodanym liściu głowa “policy head” sieci “prediction network” dokonywała wyceny wszystkich zagrań, na których wykonanie w liściu pozwalała architektura wyjścia sieci. Następnie za pomocą głowy “value head” sieci “prediction network” program dokonywał wyceny reprezentacji stanu gry obliczonego w poprzednim kroku przez “dynamics network”.
  • Na koniec odbywała się propagacja wsteczna ku korzeniowi drzewa sumy wartości obliczonej przez “value head” w liściu (wymnożonej przez stały współczynnik) oraz “nagrody” wynikającej z utworzenia liścia. Jednocześnie zwiększano o jeden liczbę odwiedzin we wszystkich węzłach, przez które algorytm przechodził w drodze od korzenia do liścia.
Jako że zagrania nielegalne nigdy nie pojawiały się w zwycięskich partiach, stosunkowo szybko zniknęły one z “obszaru zainteresowań” sieci “prediction network”. Podobnie było w przypadku sytuacji wykluczonych przez reguły gry (w węzłach drzewa). Jednak tak naprawdę nigdy nie będziemy mieć stuprocentowej pewności, czy ostateczne wersje sieci nadal nie prowadzą analiz, w których pojawiają się takie zagrania czy pozycje.
MuZero dla pierwszych trzydziestu zagrań partii losował wybierane zagranie z rozkładem prawdopodobieństwa odpowiadającym liczbie odwiedzin konkretnego dziecka korzenia MCTS, zaś w dalszych ruchach zawsze już wybierał to zagranie, które miało największą liczbę odwiedzin. Podobnie było zresztą w przypadku AlphaZero. Z artykułu poświęconego MuZero dowiadujemy się, że ze względu na większą niż w przypadku AlphaZero niepewność wyceny zagrań, podczas tworzenia drzewa MCTS MuZero nieco silniej preferował sprawdzanie niezbadanych wcześniej wariantów.
Trening odbywał się w cyklach. MuZero rozgrywał sam ze sobą kilka tysięcy partii, po czym aktualizował wagi wszystkich trzech swoich sieci. Taki krok treningowy powtarzał się kilka tysięcy razy dla każdej gry. Ostatecznie MuZero wyrównał rekord AlphaZero w szachach i w szogi oraz lekko przekroczył poziom gry AlphaZero w go. Jeśli chodzi o gry Atari, to we wszystkich osiągnął poziom ponadludzki, a dla zdecydowanej większości z tych gier wyższy od najlepszych grających w nie programów.
“Dynamics network” i “representation network” posiadały po 16 konwolucyjnych warstw ukrytych. “Prediction network” miała ich tylko dwie. Każda warstwa ukryta każdej z tych sieci składała się z 256 powierzchni. Wymiary tych powierzchni odpowiadały wymiarom planszy, na której rozgrywana była konkretna gra.
W świecie specjalistów od sztucznej inteligencji MuZero przyjęte zostało entuzjastycznie jako kolejny gigantyczny przełom - znacznie większy niż ten, którym był tryumf AlphaGo nad LeeSedolem. Na pewno nie jest to jednak ostatnie słowo zespołu DeepMind. Czy odważą się porzucić świat gier i podjąć wyzwania w dziedzinach przełomowych technologii? Niedługo na pewno się o tym przekonamy.

Komentarze