7: AlphaGoZero, AlphaZero, Leela Zero i KataGo

Półtora roku po tryumfie AlphaGo nad Lee Sedolem zespół DeepMind w opublikowanym w piśmie Nature artykule "Mastering the game of Go without human knowledge" ogłosił stworzenie nowego, rewolucyjnego programu.
AlphaGoZero był o kilka poziomów lepszy niż ten, który pokonał koreańskiego arcymistrza. Co najbardziej zdumiewało, miał on znacznie prostszą architekturę. Posiadał już tylko jedną sieć neuronową, w której treningu w ogóle nie wykorzystano partii ludzkich. Swój niewyobrażalny poziom gry osiągnął już po 40 dniach nauki, zaczynając (dosłownie) od zera! Lepiej od AlphaGo grał już po 5 dniach. Czytając artykuł, gracze go mogli się cieszyć diagramami przedstawiającymi partie, które program rozgrywał sam ze sobą. Pierwsze składały się z ruchów całkowicie przypadkowych. W dalszych program wykonywał zagrania bardzo naiwne, dążąc, zupełnie jak początkujący gracz, głównie do zbijania kamieni przeciwnika. Po kilkunastu godzinach grał już na poziomie całkiem silnego amatora. W pewnym momencie zaczął odkrywać znane ludziom joseki (standardowe warianty w rogach planszy rozgrywane w początkowej fazie gry). W ostatnich dniach treningu część z tych joseki odrzucił i zaczął wymyślać własne, z których wiele było całkowicie szokujących: zaskakiwały i amatorów, i czołowych zawodowców. Zdawały się łamać podstawowe, wielowiekowe mądrości dotyczące go. Dziś zarówno te wymyślone przez program joseki, jak i całe podejście do początkowej fazy partii, weszły do kanonu gry uznawanego przez całą czołówkę zawodowców i silnych amatorów.
AlphaGoZero stworzony został w ramach programu badawczego, którego celem było rozpoznanie możliwości zastosowania zbliżonego do użytego w AlphaGo podejścia w innych dziedzinach. Zespół DeepMind przede wszystkim chciał przetestować, czy bez zasilania ogromnym zbiorem ludzkich zagrań, opierając się wyłącznie o naukę ze wzmocnieniem, można będzie osiągnąć program o porównywalnej do AlphaGo sile. Chodziło o to, by na przykładzie go przetestować bardziej ogólne podejście do tworzenia tego typu rozwiązań. Dane (tu: zapisy partii ludzkich) są często niedostępne - stąd bardziej generyczne rozwiązanie musiało być “zerowe”. Wzmocniony przez MCTS trening sieci musiał odbywać się wyłącznie w oparciu o same reguły gry. Ponadto postanowiono zrezygnować z podawania na wejściu sieci dodatkowych informacji będących efektem “ręcznego” wyliczania pewnych atrybutów pozycji na planszy. Architektura sieci znacznie się uprościła, o czym bardziej szczegółowo opowiem niżej. Zrezygnowano również z rozgrywania losowych partii w liściach drzewa, pozostawiając z algorytmu MCTS wyłącznie technikę jego budowania. Rezultaty zaskoczyły samych twórców. Przy znacznie większej prostocie samego rozwiązania i zastosowanego treningu program grał o kilka klas lepiej niż wszystkie wersje AlphaGo, jakie zespół do tej pory stworzył.
Zaledwie kilka miesięcy po opublikowaniu informacji o AlphaGoZero DeepMind pochwalił się kolejnym osiągnięciem: generycznym algorytmem grania w gry logiczne i generyczną metodą treningu sieci neuronowych. Program, który nazywał się AlphaZero, miał jeszcze prostszą architekturę od swojego poprzednika. Osiągnął najwyższy poziom w trzech grach: go, szachach i szogi (dalekowschodnia odmiana szachów), pokonując najwyżej notowane programy we wszystkich tych grach (w przypadku gry w go porównywany był z AlphaGoZero).
Pomiędzy AlphaZero i jego poprzednikiem występowały różnice, które omówię niżej. Zacznę jednak od naszkicowania elementów wspólnych w sposobie działania tych programów. Oba bazowały na algorytmie MCTS wspomaganym tylko jedną siecią neuronową o dwóch wyjściach (nazwanych głowami). Jedno wyjście - “policy head” - odpowiadało na pytanie, jaka jest wartość zagrań dostępnych w danej sytuacji. Drugie - “value head” - odpowiadało na pytanie jakie jest prawdopodobieństwo określonego wyniku partii w danej sytuacji. Jak możemy sobie przypomnieć, głowy te odpowiadały funkcjonalnie temu, co robiły dwie sieci neuronowe wykorzystywane przez AlphaGo: “policy network” i ”value network”. Algorytm MCTS został znacznie uproszczony. Zrezygnowano z losowych rozgrywek. Działał on tak, że na etapie selekcji opierał się wyłącznie na:
  • wycenach (szacowanych przez “policy head”) wszystkich legalnych zagrań możliwych do wykonania w danej, odpowiadającej węzłowi drzewa sytuacji;
  • wycenach dokonanych w liściach (i węzłach) przez “value head” uśrednionych po wszystkich elementach poddrzew, do których prowadzą te zagrania, dla których drzewo zostało już rozbudowane;
  • liczbie odwiedzin poszczególnych dzieci węzła, w którym podejmowano decyzję o wyborze dalszej ścieżki.
Gdy etap selekcji kończył się dotarciem do liścia, od razu dodawany był pod nim nowy liść, odpowiadający sugerowanemu przez “policy head” zagraniu. Podobnie jak w AlphaGo, nowy liść mógł też zostać dodany do dowolnego węzła drzewa, jeśli wynikałoby to z metody selekcji. W nowo dodanym liściu algorytm tworzył tablicę legalnych zagrań z ich wycenami szacowanymi przez “policy head” oraz dokonywał wyceny sytuacji za pomocą wyjścia “value head”, po czym następowała propagacja tego wyliczenia ku korzeniowi drzewa MCTS. Wejście sieci zostało pozbawione wszystkich elementów związanych z logiką gry: nie było oznaczania legalnych zagrań, liczenia oddechów czy drabinek. Było tylko siedemnaście (a nie 48) powierzchni o rozmiarach odpowiadających gobanowi, a więc 19x19. Osiem pierwszych odzwierciedlało pozycje kamieni gracza, który wykonuje ruch w sytuacji bieżącej i w siedmiu sytuacjach poprzedzających. Analogicznych osiem powierzchni odzwierciedlało kamienie przeciwnika. Ostatnia powierzchnia wskazywała czy gracz, który wykonuje ruch, gra czarnymi. AlphaZero, wykorzystując podobne sieci, grał również w szogi i w szachy. Ze względu na odmienne, bardziej skomplikowane reguły tamtych gier (zasady wykonywania ruchów) warstwa wejściowa miała więcej powierzchni. Dla szachów 73 o wymiarach 8x8. Dla gry w szogi 139 powierzchni o wymiarach 9x9. Wymiary powierzchni w warstwach pośrednich również odpowiadały rozmiarom plansz, na których rozgrywane są te gry. Na etapie treningu zastosowano podejście “zerowe”. Zrezygnowano z nauki pod nadzorem. AlphaGoZero, a następnie AlphaZero, uczyły się, wyłącznie rozgrywając partie z samym sobą, i na podstawie wyników gier oraz próbek zagrań i pozycji system uczący korygował wagi ich sieci. Oba programy miały pełen dostęp do reguł gry: na etapie budowy drzewa w każdym jego węźle “wiedziały”, które zagrania są legalne i potrafiły “rozpoznawać”, czy gra się zakończyła.
Między programami AlphaGoZero i AlphaZero występowały jednak różnice. Temu drugiemu starano się zapewnić maksymalną uniwersalność - dopasować go do gier, które mogą się kończyć innym rezultatem niż zwycięstwo lub porażka. Nie chodziło tu wyłącznie o uwzględnienie remisów, których w go nie ma, za to występują w szachach i szogi. Architektonicznie mechanizm przygotowany był do obsłużenia także innych rezultatów. W przypadku treningu dla gry w go plansza nie była już obracana i lustrzanie odbijana, bo plansze innych gier nie są symetryczne, a chodziło o to, by tak algorytm prowadzenia rozgrywki, jak i metoda treningu sieci neuronowej, były wspólne. Trening AlphaGoZero bazował na rozgrywkach o 1600 iteracjach MCTS na ruch. Trening AlphaZero na rozgrywkach o 800 iteracjach MCTS na ruch. Sieć AlphaGoZero trenowana była w wieloetapowym procesie, gdzie po serii kilkuset tysięcy rozgrywek dokonywano aktualizacji wag a następnie wersja programu z nową siecią rozgrywała pojedynek z programem używającym starej sieci i jeżeli program używający wersji nowej wygrywał więcej niż 55% partii, nowa sieć zastępowała starą. W przeciwnym przypadku nowa sieć była odrzucana. W przypadku AlphaZero zrezygnowano z tych etapów. Nie było też pojedynków między różnymi wersjami sieci. Tu sieć była aktualizowana przez cały czas, na bieżąco po niewielkiej liczbie rozgrywek. “Krok nauki”, czyli parametr wykorzystywany przy modyfikacji wag i decydujący o tempie zbliżania się odpowiedzi udzielanych przez sieć do oczekiwanych, był dla AlphaGoZero stały. W przypadku AlphaZero malał w trakcie treningu. Stałe sterujące procesem tworzenia drzewa MCTS dla AlphaGoZero dobrane zostały na drodze eksperymentów. W przypadku AlphaZero ustawiono je na sztywno dla wszystkich gier, w które grał program, jeszcze przed rozpoczęciem treningu sieci neuronowej. Pod koniec 2017 roku belgijski programista Gian-Carlo Pascutto na podstawie artykułu opublikowanego przez DeepMind stworzył darmowy program Leela Zero działający na dokładnie analogicznych zasadach. Nie posiadając dostępu do tak potężnych serwerów, jakimi dysponuje Google, Pascutto zwrócił się o pomoc do społeczności informatyków i graczy go. Na komputerach wolontariuszy rozgrywane były partie, które następnie wykorzystywano w podnoszeniu jakości sieci neuronowej. Ostatecznie, już po pół roku treningu, ten dystrybuowany na zasadach Open Source program osiągnął poziom wyższy od najlepszych graczy zawodowych na świecie. Wystarczyło go uruchomić na zwykłym komputerze osobistym z dość silną kartą graficzną, na której wykonywałaby swoje obliczenia sieć neuronowa, i rozgrywać partię przy ustawieniach czasowych dających przynajmniej minutę na ruch. Pod koniec 2019 roku ogłoszono, że projekt Leela Zero zostanie niedługo zamknięty. Dokładnie dziś opublikowana została kolejna wersja wag jego sieci - być może już jedna z ostatnich.
Wzorując się na ideach AlphaZero, jednak dodając wiele nowych elementów, w 2019 roku stworzony został program KataGo. W jego przypadku zrezygnowano z pełnej uniwersalności. Program ten jest wyraźnie dedykowany dla gry w go. Dodano (między innymi) “ręczne” wyliczanie drabinek, których wyniki podawane są na wejściu sieci neuronowej tego programu. Dlatego nawet przy bardzo małej liczbie iteracji MCTS KataGo nigdy nie popełnia błędów przy liczeniu drabinek, z czym Leela Zero, grając blitze czasem sobie nie radzi. Dodatkowo zaimplementowano w nim “wirtualne komi”, które maleje w trakcie gry na handicapach. Dzięki temu KataGo jest znacznie silniejszy od Leela Zero w grach, w których daje fory słabszym zawodnikom. Potrafi obliczać, ile punktów w stosunku do optymalnego traci konkretne zagranie. Umie wreszcie przewidywać, w jakich obszarach planszy najprawdopodobniej pojawi się czyje terytorium. Dzięki temu jest w stanie dawać ciekawe komentarze i ma duże walory dydaktyczne. Program ten oczywiście również gra lepiej od najsilniejszych graczy zawodowych.
Dożyłem więc czegoś, w co absolutnie nie wierzyłem, że spełni się za mojego życia. Mogę ściągnąć z Internetu darmowe oprogramowanie silniejsze od najlepszych graczy na świecie i pobierać od niego za darmo naukę gry, która od 16 roku życia jest moją pasją.

Komentarze