Wykonalność podejść nieopartych na wyszukiwaniu
Opowiem o wykonalności podejścia nie opartego na wyszukiwaniu. Natychmiast przychodzą mi na myśl kilka pytań:
- Czy istnieje dobra funkcja
static_eval
, która przyjmuje (Position, PlayerTurn)
i zwraca trochę Score
? ¹ - Niewielkie zmiany pozycji mogą często prowadzić do ogromnych różnic w ocenach.
- Wyszukiwanie nie jest wykorzystywane wyłącznie przez wyszukiwarki szachowe. Ludzie również szeroko używają wyszukiwania , aczkolwiek dla znacznie mniejszej liczby węzłów.
Teoretycznie każdy wystarczająco duży model (np. z pewną wielokrotnością 6 ^ 64 parametrów ) może dokładnie reprezentować funkcję perfect_eval: (Position, PlayerTurn) -> {Win, Loss, Draw}
. Ale mamy dostęp tylko do skończonej przestrzeni i czasu, więc zamiast tego chcemy mieć funkcję static_eval: (Position, PlayerTurn) -> Score
. Proponowana przez Ciebie formuła cnn_eval: (Position, PlayerTurn) -> Move
jest mniej więcej taka sama, ale bez konieczności wybierania argmax
ruchów kandydata na pozycję. Jednak trochę łatwiej jest porozmawiać o tym, jak zachowuje się static_eval
, więc będę się tego trzymać do końca tej odpowiedzi.
Powiedzmy, że udało nam się znaleźć siebie dobra funkcja static_eval
. Rozważ wszystkie ruchy w tej pozycji:
3qr1k1 / 1b1rbp2 / p2p2p1 / 1p1np3 / 4P3 / P2BB2Q / 1PP3PP / 4RR1K w - - 0 221. Wxf7 Kxf7 2. Hh7 + Ke6 3. exd5 + Kxd5 4. Be4 + Kxe4 5. Hf7 Gf6 6. Bd2 + Kd4 7. Be3 + Ke4 8. Hb3 Kf5 9. Wf1 + Kg4 10. Qd3 Gxg2 + 11. Kxg2 Qa8 + 12. Kg1 Bg5 13. He2 + Kh4 14. Gf2 + Kh3 15 . Be1 1-0
Większość ruchów jest okropna, prawda? (b4, a5, He6, ...) Tak więc, oczywiście, małe odchylenia na wejściu Position
powinny skutkować dużymi różnicami w jego ocenie. Ale to oznacza, że „powierzchnia”, którą reprezentuje static_eval
, jest bardzo, bardzo wyboista. Jest to w porządku, jeśli istnieje struktura tego nierówności, najlepiej taka, którą można przedstawić w ramach naszych ograniczeń czasowych i przestrzennych. Osobiście uważam, że szachy są wystarczająco skomplikowane, a ich powierzchnia jest zbyt wyboista, że modelowanie ich przy naszych bardzo ograniczonych przestrzeniach będzie bardzo trudne. W powyższej pozycji oczywistym posunięciem jest odzyskanie materiału z exd5. Ale jak pokazuje Wei Yi, jeśli przeszukasz wystarczająco głęboko, zdasz sobie sprawę, że Wxf7 wygrywa.
Myślę, że kolejnym argumentem przeciwko podejściu, które nie bierze pod uwagę drzewa wyszukiwania, jest to, że sami ludzie mogą szybko spojrzeć na pozycję i zmienić zdanie po kilku obliczeniach. W poniższej pozycji można łatwo założyć, że czarne wygrywają z powodu wielu jego zagrożeń. Ale po odkryciu prostej sekwencji taktycznej (zaczynającej się od Qxf8 +), jasne jest, że biali matowie w 4.
5rk1 / 3R1p1p / 2p2p2 / 1q2nB2 / 5B2 / QP3nP1 / 4rP1P / R4K2 w - - 2 34
Inny pomysł
Skoro wyszukiwanie jest tak ważne, dlaczego ludzcy arcymistrzowie mogą grać w rozsądnie poprawne gry, mając ograniczoną liczbę rozważanych przez siebie węzłów? Ludzkie „oceny statyczne” mogą być znacznie bardziej czasochłonne, ale zazwyczaj są o wiele bardziej przydatne niż oceny statyczne wykonywane przez tradycyjne silniki szachowe. Istnieje pewien kompromis w zakresie czasu i dokładności oceny, a do niedawna silniki szachowe znacznie preferowały krótkie czasy oceny, aby przeszukać jak najwięcej węzłów.
Jak to ujął @konsolas,
Sieci neuronowe działają znacznie wolniej niż ręcznie tworzone funkcje oceny. W Superfinale TCEC Leela Chess Zero, działająca na dwóch GPU, każdy z dedykowanymi rdzeniami tensorowymi, jest w stanie przeszukiwać około 60 tysięcy pozycji na sekundę. Natomiast Stockfish, na jednym rdzeniu na moim komputerze, przeszukuje ponad 2 miliony pozycji na sekundę.
Myślę, że bardziej owocnym wysiłkiem niż całkowite porzucenie wyszukiwania jest eksperymentowanie z droższymi metodami oceny , ale z mniejszą liczbą przemierzonych węzłów.
Więcej interesujących pomysłów, które ludzie próbowali, można znaleźć tutaj.
¹ Oczywiście jeden musi również wprowadzić parametr State
, aby obsługiwać reguły takie jak roszada, en passant i reguła 50-move.