Upload
matt
View
30
Download
1
Embed Size (px)
DESCRIPTION
Problem wstępnego sortowania ruchów w programie grającym w grę dwuosobową. Magda Kusiak Karol Walędzik. Plan prezentacji. Przypomnienie pierwotnych pomysłów Zmiany w koncepcji AI Zastosowane usprawnienia algorytmu alfa-beta Wyniki nauki, wersja 1 Algorytm ewolucyjny Wyniki nauki, wersja 2. - PowerPoint PPT Presentation
Citation preview
Problem wstępnego sortowania ruchów w programie grającym w grę dwuosobową
Magda KusiakKarol Walędzik
Plan prezentacji
Przypomnienie pierwotnych pomysłów Zmiany w koncepcji AI Zastosowane usprawnienia algorytmu
alfa-beta Wyniki nauki, wersja 1 Algorytm ewolucyjny Wyniki nauki, wersja 2
Problem na przykładzie Go 9x9 Rząd drzewa to 81 w pierwszym
ruchu, w kolejnych maleje Zdecydowanie zbyt dużo, aby
klasyczny algorytm alfa-beta działał w rozsądnym czasie Zastosowanie usprawnień algorytmu
alfa-beta Konieczność wybrania niewielkiej liczby
sensownych ruchów i przeglądania ich w kolejności od najlepszych
Pierwszy pomysł na AI
Dwie sieci neuronowe1. Każdemu ruchowi możliwemu w danej
sytuacji przyporządkowuje wartość określającą, jak korzystny jest ten ruch
2. Ocenia pozycję, próbując przewidzieć, jaki będzie podział planszy po zakończeniu gry
Aktualna wersja pomysłu Zaimplementowana jest sieć proponująca
ruchy Jako heurystykę wykorzystujemy algorytm
Bouzy’ego Uzupełniliśmy uczenie pierwszej sieci o
elementy algorytmu ewolucyjnego Umożliwiliśmy wykorzystanie przez
program grający różnych sieci, zależnie od etapu gry i koloru wykonującego ruch
Zastanawiamy się nad sensem używania drugiej sieci jako heurystyki
Konstrukcja sieci proponującej ruchy
Na ogół go jest grą bardzo lokalną – sytuacja rozwija się w niewielkich regionach planszy
Czasem jednak pojawiają się zagrania, które zmieniają globalny układ sił na planszy
Obie te rzeczy trzeba uwzględnić przy budowie sieci
Podział planszy na regiony
Topologia sieci
1. 162 neurony wejściowe – po 2 na każde pole
2. 9 x 5 neuronów, każda piątka zbiera informacje z jednego regionu planszy + 10 neuronów zbierających kontekst globalny
3. 9 x 5 neuronów, każda piątka połączona z odpowiednią piątką z poprzedniej warstwy i 10 neuronami globalnymi + 15 neuronów połączonych z całą poprzednią warstwą
4. 81 neuronów wyjściowych
Usprawnienia algorytmu alfa-beta: Transposition Tables Wykorzystanie faktu, że często ta sama pozycja na
planszy analizowana jest przez algorytm alfa-beta obcięć wielokrotnie
Informacje o napotkanych wcześniej pozycjach są przechowywane w tablicy hashującej (hash table)
Dla każdej pozycji przechowujemy jej wartość, najlepszy ruch oraz głębokość, na jaką przeszukano drzewo, żeby znaleźć ten ruch
Czasem wynikiem przeszukania jest tylko górne lub dolne szacowanie wartości pozycji – jest to także wartościowa informacja
Transposition tables - kolizje
Dostęp do transposition tables musi być szybki, nieakceptowalny jest narzut na dynamiczne przydzielanie pamięci, dlatego pod każdym indeksem znajduje się tylko jeden element
Co zrobić, gdy pojawi się kolizja Zawsze zastępować dotychczasowy element nowym Zastępować element tylko wtedy, gdy nowy został
wygenerowany w wyniku głębszego przeszukiwania Rozwiązanie pośrednie: zastępowanie elementu
nowym, jeśli nowy powstał w wyniku głębszego przeszukiwania, lub jeśli stary długo nie był przydatny
Transposition tables - wariacje Pomysł: dla każdej pozycji zamiast jednego
najlepszego ruchu przechowywać wszystkie ruchy wygenerowane przez sieć neuronową wraz z ich wartościami
Wada: narzut pamięciowy ograniczenie liczby możliwych do przechowania pozycji
Zaleta: uniknięcie konieczności ponownego, potencjalnie kosztownego generowania dużej liczby ruchów
Po wstępnych testach w celu oszacowania częstotliwości kolizji i zajętości pamięci, zdecydowaliśmy się jednak na klasyczne transposition tables
Usprawnienia algorytmu alfa-beta: Aspiration Search Wykorzystywane w komplecie z iterative deepening Pierwsze przeszukiwanie odbywa się z oknem (-∞,+∞) W kolejnych przeszukiwaniach wykorzystujemy wynik
poprzedniej iteracji Środkiem nowego węższego okna jest wynik
poprzedniego przeszukiwania Jeśli wynik przeszukiwania wypadnie poza okno,
konieczna jest ponowna analiza z rozszerzonym (pełnym) oknem
Aspiration search - problemy Niebezpieczna dla niektórych implementacji
algorytmu może być niestabilność Przykład
Przeszukujemy drzewo z oknem (α, β) i przekraczamy górny kraniec przedziału
Przeszukujemy ponownie z oknem (β-1, +∞) i przekraczamy dolny kraniec przedziału
Przeszukujemy ponownie z oknem (-∞, β) i przekraczamy górny kraniec
itd… Nasze rozwiązanie:
Rozszerzamy zawsze okno w obie strony
Usprawnienia algorytmu alfa-beta: History Heuristic Podejście oparte na założeniu, że ruch dostatecznie
dobry w danej pozycji, będzie prawdopodobnie dobry także w większości innych pozycji w pewnym otoczeniu – założenie to jest szczególnie naturalne w Go Za otoczenie uznajemy wszystkie pozycje
analizowane w jednym wywołaniu pełnego algorytmu alfa-beta obcięć
Za dostatecznie dobry ruch uznajemy ruch o najwyższej ocenie lub powodujący obcięcie
Za każdym razem, gdy dany ruch okaże się najlepszym jaki można wykonać lub spowoduje obcięcie, zwiększana jest jego wartość
Usprawnienia algorytmu alfa-beta: History Heuristic Wartość ta wykorzystywana jest do
sortowania ruchów do analizy (w naszym przypadku po zsumowaniu z ocenami wygenerowanymi przez sieć)
Wartość ruchu powinna być zwiększana proporcjonalnie do głębokości przeszukiwania, które wykazało, że jest on najlepszym z możliwych – sugeruje się przyjęcie wartości 2d, gdzie d – głębokość analizy
Usprawnienia algorytmu alfa-beta: History Heuristic Zalety:
w prosty i naturalny sposób koryguje błędy w posortowaniu propozycji ruchów przez sieć neuronową
Zaniedbywalny narzut pamięciowy Wady:
Narzut czasowy na każdorazowe sortowanie listy ruchów
Pomijalne zyski w przypadku bardzo skutecznego działania generatora ruchów
Nauka sieci – generowanie wzorców uczących
Program korzysta z GNU Go Rozegranie fragmentu gry
Siła obu graczy jest losowo wybierana z zadanego przedziału
Po rozegraniu części gry GNU Go proponuje kilkanaście najlepszych ruchów wraz z ich ocenami
Zaproponowane ruchy są zapisywane do XMLa i potem wykorzystywane w nauce sieci
Sposób oceny nauki Sprawdzamy, jak się ma ocena najlepszego
ruchu zaproponowanego przez sieć do oceny najlepszego w danej sytuacji ruchu zaproponowanego przez GNU Go
Jeśli ten stosunek jest niższy od pewnego współczynnika (0.6), to znaczy, że sieć źle zaproponowała najlepszy ruch
Dotychczasowe wyniki sugerują, że albo kryterium wysokości 0.6 jest za silne albo jest jeszcze gorzej...
Sposób oceny nauki – inny pomysł
Rozsądna wartość progu silnie uzależniona od rozrzutu wartości kilku najlepszych ruchów, więc może: uznawajmy za próg wartość
proporcjonalną do średniej (mediany?) wartości n najlepszych/wszystkich ruchów zaproponowanych przez GNU Go
Sposób oceny nauki – jeszcze inny pomysł
Najważniejsze, żeby najlepszy w danej sytuacji ruch w ogóle znalazł się wśród zaproponowanych przez sieć
Pomysł: Zamiast sprawdzać, czy najlepszy zaproponowany ruch jest odpowiednio dobry, sprawdzajmy, czy rzeczywiście najlepszy ruch nie został odrzucony przez sieć
Wyniki nauki – zbiór uczący
0
2000
4000
6000
8000
10000
12000
14000
16000
0 500 1000 1500 2000 2500 3000 3500 4000
0
0,5
1
1,5
2
2,5
3
3,5
WrongChoices MSE
Wyniki nauki – zbiór testujący
0
200
400
600
800
1000
1200
1400
1600
1800
2000
0 500 1000 1500 2000 2500 3000 3500 4000
WrongChoices
1,9
1,91
1,92
1,93
1,94
1,95
1,96
1,97
1,98
1,99
2
MSE
WrongChoices MSE
Wyniki nie są zadowalające Prawdopodobnie sieć zatrzymuje się
w jednym z minimów lokalnych Stąd pomysł na uzupełnienie nauki
prostym algorytmem ewolucyjnym
Algorytm ewolucyjny – ogólny schemat
1. Utwórz N (6) sieci.
2. Ucz sieci przez pewną liczbę (300) epok.
3. Okresowo (co 100 epok) sprawdzaj wyniki sieci i usuwaj najsłabsze, dopóki jest więcej niż N/2 sieci.
4. Sklonuj najlepsze sieci, dokonując mutacji (aby znów mieć N sieci).
5. Wróć do punktu 2.
Selekcja
1. Oblicz błąd dla każdej sieci
2. Posortuj sieci według malejącego błędu
3. Usuń najsłabszą sieć
4. Usuń wszystkie sieci o błędzie większym niż UnfitnessFactor * błąd najlepszej sieci
Mutacja1. Mutuj z pewnym prawdopodobieństwem (domyślnie
0.25) parametry uczenia
2. Mutuj z pewnym prawdopodobieństwem (domyślnie 0.15) współczynniki funkcji aktywacji
3. Mutuj każdą niestałą wagę (domyślnie prawdopodobieństwo mutacji wagi to 0.25)
a) Jeśli nie zaszło (1) ani (2), mutacja wag zachodzi z prawdopodobieństwem 1
b) W.p.p. mutacja wag zachodzi z pewnym prawdopodobieństwem (domyślnie 0.5)
Wyniki nauki – zbiór uczący
0
2000
4000
6000
8000
10000
12000
14000
0 500 1000 1500 2000
0
0,5
1
1,5
2
2,5
3
WrongChoices MSE
Wyniki nauki – zbiór testujący
0
200
400
600
800
1000
1200
1400
1600
1800
0 500 1000 1500 2000
0
0,05
0,1
0,15
0,2
0,25
0,3
0,35
WrongChoices MSE
Obserwacje Wyniki są lepsze dla mniejszych
prawdopodobieństw mutacji Zdecydowanie lepsze wyniki, jeśli
współczynniki funkcji aktywacji nie mutują Najlepsze wyniki są osiągane, gdy współczynniki
funkcji aktywacji w dwóch pierwszych warstwach są wysokie, a w trzeciej - niskie
Stała ucząca i moment maleją w miarę ewolucji
Algorytm ewolucyjny pomaga, ale wyniki nadal nie są zadowalające
Za mała sieć?
Wyniki sugerują, że sieć może mieć za mało połączeń
Testowaliśmy sieć, w której do warstw ukrytych dodano po 10 neuronów zbierających kontekst globalny
Wyniki na zbiorze uczącym
0
2000
4000
6000
8000
10000
12000
14000
0 500 1000 1500 2000
0
0,5
1
1,5
2
2,5
WrongChoices MSE
Wyniki na zbiorze testującym
0
200
400
600
800
1000
1200
1400
1600
1800
0 500 1000 1500 2000
0
0,05
0,1
0,15
0,2
0,25
0,3
0,35
WrongChoices MSE
Porównanie z mniejszą siecią
0
200
400
600
800
1000
1200
1400
1600
1800
0 500 1000 1500 2000
0
0,05
0,1
0,15
0,2
0,25
0,3
0,35
WrongChoices - bigger net WrongChoices - smaller net
MSE - bigger net MSE - smaller net
Obserwacje
Sieć osiągnęła najlepszy wynik z dotychczasowych 4625 błędów na 15000 elementów zbioru
uczącego 894 błędy na 2000 elementów zbioru
testującego Wyniki nadal nie są zadowalające...
Dziękujemy za uwagę