Pytanie:
Czy zespół silników szachowych pokonałby najlepszy?
Dennis Jaheruddin
2020-06-20 15:37:29 UTC
view on stackexchange narkive permalink

W wielu obszarach, takich jak przewidywanie i klasyfikacja, metody zespołowe mają zwykle lepsze wyniki niż metody indywidualne. To sprawiło, że zacząłem się zastanawiać, czy sensowne byłoby wybranie kilku najlepszych silników szachowych i współpraca z nimi, aby stworzyć silniejszy.

Załóżmy, że całkowita ilość sprzętu jest dostosowana do tego, z czego ludzie korzystają. dla typowych testów porównawczych i że czas też jest ustalony. Ponadto nie zmienilibyśmy samych silników, aby współpracowały, ale po prostu utworzylibyśmy wokół nich opakowanie, którego praktycznie nie są świadomi.

Stąd moje dopracowane pytanie:

Jak trudne czy byłoby to pokonanie silnika numer 1 na świecie przez zespół silników z uczciwymi zasobami?

Komentarze nie służą do rozszerzonej dyskusji; ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/109865/discussion-on-question-by-dennis-jaheruddin-would-an-ensemble-of-chess-engines-b) .
Siedem odpowiedzi:
#1
+23
Brian Towers
2020-06-20 16:24:07 UTC
view on stackexchange narkive permalink

Odpowiedź brzmi „Nie”.

Jeśli masz zdefiniowany stały zestaw zasobów - procesory, pamięć, pamięć podręczną itp. - i pozwalasz jednemu silnikowi na ich pełne wykorzystanie, wtedy ten silnik będzie w stanie przeprowadzić analizę na większą głębokość, niż gdyby wziąć ten sam zestaw zasobów i podzielić je w jakiś sposób między kilka różnych silników. Nieuchronnie pojedynczy silnik analizujący na większą głębokość będzie działał lepiej niż kilka silników analizujących na znacznie mniejszych głębokościach.

Komentarze nie służą do rozszerzonej dyskusji; ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/109658/discussion-on-answer-by-brian-towers-would-an-ensemble-of-chess-engines-beat- a).
#2
+15
Allure
2020-06-20 16:51:23 UTC
view on stackexchange narkive permalink

Nie, zespół silników szachowych nie pokona tego najlepszego. Przyczyną jest po prostu sprzęt.

Weźmy teraz najmocniejsze silniki procesora, aby wszystko było proste. Są to Stockfish, Komodo, Leela-CPU, Ethereal, Fire i rofChade. Sztokfisz jest najsilniejszy. Masz komputer z czterema rdzeniami i Stockfish. Oczekuje się, że pokona wszystkie inne silniki w meczu na tym samym sprzęcie.

Jeśli na tym samym czterordzeniowym komputerze jednocześnie uruchomisz Komodo, Leela-CPU itp., To nie tylko uruchomisz gorszego oprogramowania, używasz gorszego oprogramowania na gorszym sprzęcie (ponieważ te silniki będą konkurować ze sobą o te same 4 rdzenie). Dlatego zespół przegrywa.

Prawdą jest, że każdy silnik ma swoje mocne i słabe strony, ale aby w pełni to wykorzystać, potrzebny jest człowiek, który przyjrzy się zasadniczym odmianom każdego silnika i wybierze między nimi. Dlatego oczekuje się, że człowiek, który ma dostęp do wszystkich silników, w korespondencyjnym meczu szachowym osiągnie lepsze wyniki niż sam Sztokfisz. Ale zrobienie tego wymaga interwencji człowieka; nie działa tylko z silnikami. Można sobie wyobrazić, że można napisać kod, który rozróżnia, który silnik jest silniejszy w obecnej pozycji, i podjęto taką próbę, ale nigdy nie był w stanie zdecydowanie pokonać dwóch oryginalnych silników.

Lepiej pozwolić, aby grał tylko najlepszy silnik.

#3
+10
Dennis Jaheruddin
2020-06-20 15:37:29 UTC
view on stackexchange narkive permalink

Chociaż sam nie jestem w stanie tego przetestować, jestem pewien co do następującego wniosku:

Zespół silników powinien być w stanie pokonać najsilniejszy pojedynczy silnik

Oto moje kluczowe założenia:

  • Biorąc pod uwagę typowe kontrole czasu stosowane w testach porównawczych, czas „stracony” przez posiadanie cienkiego modułu wstępnej oceny przed silnikami byłby nieistotny. W związku z tym możemy powiedzieć, że silniki w zespole będą miały faktycznie taką samą sumę zasobów, jak silnik najwyższy.
  • Załóżmy, że zespół chciałby obsługiwać dwa silniki w tym samym czasie, byłby w stanie dać każdemu z nich połowę zasobów.
  • Załóżmy, że zespół chciałby uruchamiać silniki po kolei, byłby w stanie zapewnić każdemu silnikowi pełne zasoby. Zakłada się, że czas przyspieszania jest wystarczająco mały, jeśli jest to robione tylko kilka razy podczas gry (ale jest to zaporowe, jeśli byłby wykonywany przy każdym ruchu).

Zwróć również uwagę, że zespół byłby w stanie zawierać kopię samego najsilniejszego silnika. W chwili pisania tego artykułu silniki podążające za najsilniejszym silnikiem nie są daleko w tyle, więc nie jest to punkt krytyczny, ale w przeciwnym razie stałoby się pytaniem o to, `` ile zespół uzyskałby ocenę nad najsilniejszym członkiem '', co jest znacznie trudniejsze.

Scenariusz 1: Silniki są silniejsze w różnych fazach gry

Łatwym „wygranym” byłoby tutaj, gdyby jeden silnik miał silniejszą (interakcję) z książką otwierającą, a inny z engame tablebase. Jednak nawet zakładając, że wszystkie silniki mogą wykorzystywać najlepsze zasoby w tej dziedzinie z równą wydajnością, to nadal powszechnie mówi się, że niektóre silniki są „mocne w początkowej fazie gry” lub „dobre w końcówkach”.

Pozwólcie, że Zrób dodatkowe założenie tutaj:

  • Zakładam, że silniki, które są dobre w określonej fazie, nie mają silnej zależności od innych faz, aby to zrealizować.

Tak więc silnik, który byłby dobry w grach końcowych, byłby dobry nie tylko w grach końcowych, do których sam doszedł, ale także w grach końcowych, do których dotarł inny silnik.

Najprostsze rozwiązanie: zidentyfikuj fazę grę i niech będzie odtwarzany przez silnik, który jest w niej najsilniejszy

Na wypadek, gdybyśmy tylko rozróżnili grę otwierającą i końcową, byłoby trywialne zdefiniowanie otoki do tego i byłoby około 1 przełącznika na grę. Oczywiście można to rozszerzyć, jeśli masz silnik, który jest „świetny w grach końcowych pionków” lub „bardzo dobry w grach pozycyjnych”, ale w tym momencie trudniej byłoby określić, który silnik wybrać bez użycia znacznych zasobów.

Scenariusz 2: silniki mogą znaleźć krytyczne kontynuacje ruchów krytycznych

Ten scenariusz był tym, co mnie pierwotnie ciekawiło. Jednak w oparciu o moje przypuszczenia najprostszym sposobem uzyskania opinii o kilku silnikach byłoby pozwolić im pracować równolegle. Załóżmy, że używamy zespołu dwóch silników, biorąc pod uwagę połowę zasobów, a wtedy oba byłyby nieco słabsze, przyjmijmy inne założenie na podstawie niektórych odniesień.

  • W typowym ustawieniu skaluje siłę logarytmiczną do dostępnych zasobów, a zmniejszenie ich o połowę zmniejsza moc silnika o 50-100 elo

To ważne, szczerze mówiąc, może być zbyt wiele. Załóżmy, że po prostu ustawimy dwa silniki naprzeciw siebie z różnicą 70 elo, oczekiwana wartość będzie wynosić około 60-40. To dużo do nadrobienia, ale chociaż nie mogłem znaleźć żadnych danych na ten temat, może to być możliwe. Zasadniczo wystarczy, aby zaowocował 1 genialnym posunięciem lub 1 unikniętym błędem, aby zamachnąć się na całą grę. Nie byłoby łatwo zdecydować, którego silnika słuchać w każdym ruchu, ale ponieważ silniki zazwyczaj mogą generować podstawowe statystyki (takie jak ocena wszystkich możliwych ruchów i jak głęboko sprawdzały każdy z nich), prawdopodobnie nie byłoby to zbyt trudne podjąć rozsądną i nadal lekką decyzję.

Możliwe alternatywne rozwiązanie: uruchom silniki równolegle i za każdym razem wybieraj najlepszy ruch.

Ponownie można to rozszerzyć, prostym sposobem byłoby posiadanie 3 silników i wybranie ruchu, w którym 2 z nich dawać, ale nie jestem pewien, czy dzielenie środków na jeszcze mniejszy byłby tego warte. Innym interesującym pomysłem może być zapewnienie najsilniejszemu członkowi zespołu jak największej ilości zasobów i sprawdzenie ich poczytalności przez członka, który jest w tym najlepszy. W takim przypadku główny silnik może stracić tylko 10 punktów ELO z powodu zmniejszonych zasobów, więc „nadrabianie tego” mogłoby być dużo łatwiejsze. Ale znowu trudno będzie wybrać właściwy ruch.

Ostatnią myślą byłoby, gdyby silniki korzystały z procesora i GPU, wtedy być może siła poszczególnych silników nie może być zbytnio zmniejszona w każdym z tych zasobów więc mieszanka, w której silnik dostaje 80 cpu + 20 gpu, a silnik 2 otrzymuje 20 cpu + 80 gpu, może pozostawić poszczególne silniki prawie tak mocne, jak wtedy, gdy miały pełne zasoby.

Wniosek

Zwłaszcza gdy silniki może być uruchamiany pojedynczo, powinien być w stanie uzyskać lepszą wydajność, chociaż muszą również istnieć sposoby na uzyskanie lepszych wyników, uruchamiając wiele równolegle. Nie jest to jednak trywialne.

Przeniesienie koncepcji zespołu naprawdę na wyższy poziom byłoby prawdopodobnie możliwe przy niewielkich zmianach w silnikach, na przykład nie tylko zapewniających oczekiwaną wartość wyniku, ale także stopień pewności myślą o swojej ocenie.

Komentarze nie służą do rozszerzonej dyskusji; ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/109659/discussion-on-answer-by-dennis-jaheruddin-would-an-ensemble-of-chess-engines-bea) .
#4
+7
NeuralAdvocate
2020-06-21 22:33:19 UTC
view on stackexchange narkive permalink

Odpowiedź jest bardziej skomplikowana, niż chciałbyś spróbować. Jakakolwiek ostateczna odpowiedź „tak” lub „nie” nasuwa pytania dotyczące warunków meczu, używanego sprzętu i różnicy w sile zaangażowanych graczy. Zamiast odpowiadać bezpośrednio na twoje pytanie, tutaj planuję przejść przez potrzebne procesy myślowe, które prowadzą do stworzenia szczególnego rodzaju silnika zespołowego, który byłby w stanie pokonać „najsilniejszy” silnik. Alternatywą jest faktycznie udzielenie odpowiedzi na twoje pytanie, na które z mojego doświadczenia wynika, że ​​nikt tak naprawdę nie zna odpowiedzi.

Ponadto, jeśli nie znasz otwartego kodu źródłowego Leela Chess Zero ( Lc0) Silnik sieci neuronowej (NN), to powinien być pierwszy temat do zbadania. Został zainspirowany niesławnym, dobrze sprzedanym, zamkniętym źródłem, niedostępnym dla ogółu społeczeństwa i był lodołamaczem dla technik sieci neuronowych AlphaZero (A0), który zawiera kilka artykułów, które również możesz chcieć poznać, aby je zrozumieć.

Sieci neuronowe wprowadziły nowe granice, które wcześniej były tylko z grubsza badane przez ostatnie 10-15 lat. Dopiero w ciągu ostatnich 3 lat stały się one wystarczające, aby móc „pokonać” stare podejścia, które obejmują oceny specyficzne dla szachów programowanych przez człowieka i heurystyczne wyszukiwanie alfa-beta, takie jak silnik Open Source Stockfish. Biorąc pod uwagę, że wymagania sprzętowe dla silników czystej sieci neuronowej są bardziej zorientowane na kartę graficzną, podczas gdy wymagania dla silnika takiego jak Stockfish są zorientowane na procesor, sprzęt jest ogromnym czynnikiem w tworzeniu twojego zespołu.

Kiedy w końcu masz ustalić, jakiego sprzętu zdecydowałeś się użyć, a następnie możesz zastanowić się, które silniki są najsilniejsze, testując je. Następnie musisz zakodować podejście, aby zestawić silniki, których chcesz użyć, aby spróbować go pokonać. Należy pamiętać, że siła wielu dzisiejszych wyszukiwarek jest bardzo mocno uzależniona od ich wyszukiwania, więc jakiekolwiek przekierowanie zasobów z wyszukiwania głębokiego ograniczy głębokość wyszukiwania Twojego zespołu.

Została powołana do życia sieć Leela (ale technicznie nie Leela Chess „Zero”, ponieważ używa gier innych niż „Zero ludzkiej wiedzy”) o nazwie „Antifish”, która została wyszkolona na kilku milionach gier Leela i Stockfish. Hipotetycznie sieć „wiedziałaby”, jak pokonać Stockfisha, ponieważ widziała wiele gier, w których Stockfish okazał słabość. Antifish może być „silniejszy” od Stockfisha, ale nie porównuje się w ten sam sposób pod względem siły z silnikami podobnego rodzaju, jak Komodo i Ethereal. Ponadto sieć hipotetycznie działa lepiej w porównaniu ze sztokfiszem w krótszym czasie, ponieważ zestaw treningowy był silnie zanieczyszczony błędami sztokfisza przy niższych kontrolach czasowych. Antifish mógł kiedyś dobrze radzić sobie ze sztokfiszem, jednak jest przestarzały i potencjalnie słabszy. Antifish jest tym, co nazywamy siecią „kontradyktoryjną”, specjalnie wyszkoloną do wykorzystywania słabości sztokfisza przy niższych kontrolach czasowych i chociaż może być silniejsza niż niektóre wersje sztokfisza, nie jest „obiektywnie lepsza” (termin dyskusyjny) w szachach w general.

Poruszam to, ponieważ jest możliwe, że moglibyśmy użyć Antifish NN Leela w korzeniu wyszukiwania, aby pomóc odgadnąć, czego inna sieć Leela powinna zacząć szukać. O ile mi wiadomo, ten „zespół sieciowy” nie został jeszcze utworzony, a wynikowy silnik może faktycznie być w stanie pokonać Stockfisha lepiej, nawet jeśli Antifish i inna sieć, z której możemy korzystać, mogą być słabsze.

Ponadto, istnieje rozwidlenie Lc0, które pozwala „silnikowi pomocniczemu” sugerować ruchy do Lc0. „ Leelafish” jest technicznie połączeniem obu sztokfiszów i Lc0 i właściwie może być silniejszy niż jego części. Obecnie prace nad tym trwają, a komunikacja między dwoma silnikami przebiega tylko w jedną stronę.

Zasadniczo zespolenie silników może prowadzić do czegoś mocniejszego lub nie może. Ale co jest ważne, aby zauważyć, że jakakolwiek konglomeracja sugestii dotyczących silników lub dwukierunkowa komunikacja między silnikami kosztuje zasoby obliczeniowe, a ten koszt może być zbyt wysoki. Może po prostu lepiej byłoby połączyć każdy dobry pomysł w jeden silnik, technicznie rzecz biorąc, nie czyniąc go już „zespołem silnika”.

#5
+6
Torsten Becker
2020-06-20 21:04:07 UTC
view on stackexchange narkive permalink

Nie, w pewnym momencie legalny ruch zostanie wybrany jako najlepszy ruch. Kto kiedykolwiek podejmie taką decyzję, nie może być lepszy od najlepszego silnika. W przeciwnym razie jest nowy najlepszy silnik.

To pytanie brzmi raczej jak szachowa wersja [interesującego paradoksu liczb] (https://en.wikipedia.org/wiki/Interesting_number_paradox).
#6
+3
Lawnmower Man
2020-06-21 10:33:39 UTC
view on stackexchange narkive permalink

Tak

Jeśli silniki uczą się silników, a nie bezstanowych deterministycznych oceniających, to myślę, że jest oczywiste, że zespół byłby silniejszy z tego samego powodu, z którego ja myślę, że drużyna ludzi w szachach przeciętnie pokona wszystkie osoby w drużynie w pojedynku. Najtrudniejsze jest podjęcie decyzji, który ruch zastosować, gdy wiele silników generuje odpowiedź. Myślę, że aby to zadziałało, silniki musiałyby zaoferować ruch, wynik i wartość pewności . Wybrałbyś wtedy ruch z najwyższym wynikiem * iloczynem ufności.

Uzasadnienie

Metody zespołowe są powszechne w kręgach uczenia maszynowego, ponieważ prawie niemożliwe jest stworzenie optymalnego algorytmu dla każdego możliwego scenariusz. Znacznie lepiej jest wytrenować prawdopodobne scenariusze i pozwolić algorytmom podrzędnym (takim jak na przykład las drzew decyzyjnych) specjalizować się w podzbiorach scenariuszy o dobrych właściwościach uogólniających.

Oczywiście AlphaZero jest lepszy niż wszystkie inne silniki do tej pory, ale zwróć uwagę, że jest to rodzaj uniwersalnego rozwiązania. A co by było, gdyby ktoś próbował wyszkolić „specjalistyczne” warianty AlphaZero, które koncentrują się na określonych strategiach, nawet kosztem nie bycia najsilniejszym graczem generalnym? Pamiętaj, że AlphaZero nie ma i nie może zbadać większości szachowej przestrzeni, ponieważ jest to niewykonalne. Ostatecznie styl gry zależy od szczęścia w sztukach, z którymi się już spotkał. Jest możliwe, że węższy algorytm mógłby go pokonać, gdyby mógł wymusić stan gry, w który AlphaZero rzadko grał, ale grał wiele razy. Teraz powtórz to dla dużej liczby „specjalistów”, a otrzymasz zespół ekspertów, którzy mogą aktywować się na podstawie różnych stanów tablicy. Indywidualnie wszyscy byliby gorsi od AlphaZero w dużej liczbie gier, ale łącznie mogliby go pokonać, ponieważ w wąskim zestawie gier mogliby konsekwentnie go pokonać (nawet jeśli sami byliby tylko instancjami AlphaZero, ale z inny schemat szkolenia).

W tej architekturze każdy specjalista wiedziałby, jak bardzo podoba mu się obecny stan tablicy i użyłby tego do określenia swojego „zaufania” do proponowanego ruchu. To spowodowałoby, że specjalista z największym doświadczeniem w obecnym stanie planszy generalnie kontrolowałby grę.

Z punktu widzenia złożoności obliczeniowej zespół byłby mądrzejszy, ponieważ przechowuje więcej informacji niż system solo, więc ma więcej obciążeń do optymalizacji na szerszym obszarze gry. Nie jest to oczywiście rygorystyczny argument, ale być może jest pomocny.

Komentarze nie służą do rozszerzonej dyskusji; ta rozmowa została [przeniesiona do czatu] (https://chat.stackexchange.com/rooms/109660/discussion-on-answer-by-lawnmower-man-would-an-ensemble-of-chess-engines-beat- th).
#7
  0
Alex Williams
2020-06-23 12:16:18 UTC
view on stackexchange narkive permalink

To zależy od równoległości najlepszego silnika szachowego. Jeśli silnik nie został zaimplementowany do wydajnego działania na wielu rozproszonych komputerach i koordynowania wyników, wówczas alternatywny silnik mógłby teoretycznie to wykorzystać.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...