Warum gibt es für Schach, ähnlich wie AlphaGo, keine Deep-Enforcement-Lern-Engines?

32

Computer sind seit langem in der Lage, Schach mit einer "Brute-Force" -Technik zu spielen, bis zu einer bestimmten Tiefe zu suchen und dann die Position zu bewerten. Der AlphaGo-Computer verwendet jedoch nur eine ANN, um die Positionen auszuwerten (er führt meines Wissens keine Tiefensuche durch). Ist es möglich, eine Schachengine zu erstellen, die Schach genauso spielt wie AlphaGo Go? Warum hat das niemand getan? Würde dieses Programm eine bessere Leistung erbringen als die Top-Schachengines (und Schachspieler) von heute?

lijas
quelle
5
Siehe arxiv.org/abs/1509.01549 (Giraffe: Deep Reinforcement verwenden, um Schach spielen zu lernen) und einen beliebten Artikel unter technologyreview.com/s/541276/… . Auch erikbern.com/2014/11/29/deep-learning-for-chess.html
Amöbe sagt Reinstate Monica
Es war nur eine Frage der Zeit, bis sich jemand daran gewöhnt hatte, dies richtig zu tun. Einen Monat nachdem Sie Ihre Frage gestellt haben, können Sie diese hier eingeben : arxiv.org/abs/1712.01815 .
Amöbe sagt Reinstate Monica

Antworten:

49

EDIT (nach dem Lesen der Zeitung):

Ich habe die Zeitung nachdenklich gelesen. Beginnen wir mit dem, was Google in der Zeitung behauptet hat:

  • Sie besiegten Stockfish mit Monte-Carlo-Tree-Search + Deep Neural Networks
  • Das Match war absolut einseitig, viele Siege für AlphaZero, aber keine für Stockfish
  • Sie waren in der Lage, es in nur vier Stunden zu tun
  • AlphaZero spielte wie ein Mensch

Leider halte ich es nicht für eine gute Zeitschrift. Ich werde mit Links erklären (damit du weißt, dass ich nicht träume):

https://www.chess.com/news/view/alphazero-reactions-from-top-gms-stockfish-author

Die Spielergebnisse für sich genommen sind nicht besonders aussagekräftig, da die Zeitsteuerung und die Einstellungen der Stockfish-Parameter ziemlich seltsam sind: Die Spiele wurden zu einer festgelegten Zeit von 1 Minute pro Zug gespielt, was bedeutet, dass Stockfish keine Zeitmanagement-Heuristiken verwendet ( Es wurde viel Mühe darauf verwendet, Stockfish zu veranlassen, kritische Punkte im Spiel zu identifizieren und zu entscheiden, wann zusätzliche Zeit für einen Zug aufgewendet werden soll.

Stockfish hätte nicht mit nur einer Minute pro Zug das beste Schach spielen können. Das Programm war nicht dafür ausgelegt.

  • Stockfish lief auf einer normalen kommerziellen Maschine, während AlphaZero auf einer 4-Millionen-TPU-Maschine lief, die auf AlphaZero eingestellt war. Dies ist ein Vergleich zwischen Ihrem High-End-Desktop und einem billigen Android-Handy. Tord schrieb:

Eines ist ein herkömmliches Schachprogramm, das auf normalen Computern ausgeführt wird, das andere verwendet grundlegend andere Techniken und wird auf kundenspezifisch entwickelter Hardware ausgeführt, die nicht käuflich zu erwerben ist (und sonst aus dem Budget gewöhnlicher Benutzer herauskommt).

  • Google hat versehentlich einem 32-Kern-Rechner für Stockfish 64 Threads gegeben. Ich zitiere GM Larry Kaufman (Weltklasse-Computerschachexperte):

http://talkchess.com/forum/viewtopic.php?p=741987&highlight=#741987

Ich stimme zu, dass der Test alles andere als fair war. Ein weiteres Problem, das SF schadete, war, dass es anscheinend auf 64 Threads auf einem 32-Core-Rechner ausgeführt wurde, aber es würde viel besser funktionieren, wenn nur 32 Threads auf diesem Rechner ausgeführt würden, da es fast keinen SMP-Vorteil gibt, um die Verlangsamung von ungefähr 5 zu 3 auszugleichen. Auch das Kostenverhältnis war mehr als ich sagte; Ich dachte, es wäre ein 64-Kern-Rechner, aber ein 32-Kern-Rechner kostet ungefähr die Hälfte dessen, was ich vermutet habe. Also vielleicht ist alles in allem 30 zu 1 keine so schlechte Schätzung. Auf der anderen Seite, denke ich, unterschätzen Sie, um wie viel es noch verbessert werden könnte.

  • Stockfisch gab nur 1 GB Hash-Tabelle. Dies ist ein Witz ... Ich habe eine größere Hash-Tabelle für meine Stockfish iOS-App (Haftungsausschluss: Ich bin der Autor) auf meinem iPhone! Tord schrieb:

    ... viel zu kleine Hash-Tabellen für die Anzahl der Threads ...

Eine 1-GB-Hash-Tabelle ist für ein Spiel wie dieses absolut inakzeptabel. Stockfische stießen häufig auf Hash-Kollisionen. Es dauert CPU-Zyklen, um alte Hash-Einträge zu ersetzen.

  • Stockfish ist nicht für die Ausführung mit so vielen Threads ausgelegt. In meiner iOS-Schach-App werden nur wenige Threads verwendet. Tord schrieb:

... spielte mit weit mehr Suchthreads als jemals zuvor ...

  • Stockfish lief ohne Eröffnungsbuch oder 6-teilige Syzygy-Endspiel-Tischbasis. Die Stichprobengröße war unzureichend. Die Stockfish-Version war nicht die neueste. Diskussion hier .

FAZIT

Google hat nicht ohne Zweifel bewiesen, dass ihre Methoden Stockfish überlegen sind. Ihre Zahlen sind oberflächlich und stark auf AlphaZero voreingenommen. Ihre Methoden sind für einen unabhängigen Dritten nicht reproduzierbar. Es ist noch etwas zu früh, um zu sagen, dass Deep Learning der traditionellen Schachprogrammierung überlegen ist.


BEARBEITEN (Dez 2017):

Es gibt eine neue Veröffentlichung von Google Deepmind ( https://arxiv.org/pdf/1712.01815.pdf ) zum vertieften Lernen im Schach. Aus der Zusammenfassung geht hervor, dass die weltweit führende Stockfish-Schachmaschine "überzeugend" besiegt wurde. Ich denke, dies ist der bedeutendste Erfolg im Computerschach seit dem Deep Blue-Match 1997. Ich werde meine Antwort aktualisieren, sobald ich die Zeitung ausführlich gelesen habe.


Original (vor Dez 2017)

Lassen Sie uns Ihre Frage klären:

  • Nein, Schach-Engines verwenden keine Brute-Force.
  • AlphaGo macht Gebrauch Baumsuch, verwendet es Monte Carlo Baumsuche . Google " Monte Carlo Tree Search alphaGo ", wenn Sie überzeugt sein wollen.

ANN kann für Schachengines verwendet werden:

Würde dieses Programm eine bessere Leistung erbringen als die Top-Schachengines (und Schachspieler) von heute?

Giraffe spielt ungefähr auf der Stufe Internation Master, was ungefähr der FIDE 2400 entspricht. Stockfish, Houdini und Komodo spielen jedoch alle um die FIDE 3000. Dies ist eine große Lücke. Warum? Warum nicht Monte-Carlo Tree Search?

  • Die materielle Heuristik im Schach ist einfach. Meistens gewinnt / verliert eine Schachposition, indem nur die Materialien auf dem Brett gezählt werden. Bitte denken Sie daran, dass das Zählen von Materialien für Go nicht funktioniert. Die Materialzählung ist um Größenordnungen schneller als das Ausführen neuronaler Netze - dies kann durch Bitboards erfolgen, die durch eine 64-Bit-Ganzzahl dargestellt werden. Auf dem 64-Bit-System können nur mehrere Maschinenbefehle ausgeführt werden. Suchen mit dem herkömmlichen Algorithmus ist viel schneller als maschinelles Lernen. Höhere Knoten pro Sekunde bedeuten eine tiefere Suche.
  • In ähnlicher Weise gibt es sehr nützliche und kostengünstige Techniken wie das Beschneiden von Null-Zügen, die Reduzierung von späten Zügen und Killerbewegungen usw. Sie sind günstig in der Ausführung und in Bezug auf den in AlphaGo verwendeten Ansatz sehr effizient.
  • Die statische Auswertung im Schach ist schnell und nützlich
  • Maschinelles Lernen ist nützlich, um Parameter zu optimieren, aber wir haben auch SPSA und CLOP für Schach.
  • Es gibt viele nützliche Metriken für die Baumreduzierung im Schach. Viel weniger für Go.

Es gab Forschungen, dass Monte Carlo Tree Search nicht gut für Schach skaliert. Go ist ein anderes Spiel als Schach. Die Schachalgorithmen funktionieren bei Go nicht, weil das Schach auf brutalen Taktiken beruht. Taktik ist wohl wichtiger im Schach.

Jetzt haben wir festgestellt, dass MCTS für AlphaGo gut funktioniert, aber weniger für Schach. Deep Learning wäre nützlicher, wenn:

  • Die abgestimmte NN-Auswertung ist besser als die herkömmlichen Algorithmen. Doch tiefes Lernen ist keine Zauberei, Sie als Programmierer müssten immer noch programmieren. Wie bereits erwähnt, haben wir so etwas wie SPSA zum Selbstspielen für die Parametereinstellung im Schach.
  • Investition, Geld! Es gibt nicht viel Geld für maschinelles Lernen im Schach. Stockfish ist kostenlos und Open Source, aber stark genug, um alle menschlichen Spieler zu besiegen. Warum sollte Google Millionen ausgeben, wenn jeder Stockfish kostenlos herunterladen kann? Warum werden die CPU-Cluster bezahlt? Wer bezahlt für Talente? Niemand will es tun, denn Schach gilt als "gelöstes" Spiel.

Wenn Deep Learning Folgendes erreichen kann, schlägt es den traditionellen Algorithmus:

  • Wenn Sie eine Schachposition haben, "fühlen" Sie sich wie ein menschlicher Großmeister. Zum Beispiel würde ein menschlicher Großmeister nicht in Zeilen verfallen, die erfahrungsgemäß schlecht sind. Weder der traditionelle Algorithmus noch Deep Learning können dies erreichen. Ihr NN-Modell gibt Ihnen möglicherweise eine Wahrscheinlichkeit [0..1] für Ihre Position, aber das ist nicht gut genug.

Lassen Sie mich darauf hinweisen:

Giraffe (der von @Tim gepostete Link) verwendet keine Monte-Carlo-Baumsuche. Es wird der reguläre Nega-Max-Algorithmus verwendet. Es ersetzt lediglich die reguläre Auswertungsfunktion durch NN und ist sehr langsam.

einer noch:

Obwohl Kasparov 1997 von Deep Blue geschlagen wurde. "Humanity" ging zwischen 2003 und 2005 wirklich verloren, als Kramnik ein Match gegen Deep Fritz verlor und Michael Adams in einem einseitigen Match gegen einen Clustercomputer verlor. In dieser Zeit erwies sich Rybka selbst für die besten Spieler der Welt als zu stark.

Referenz:

http://www.talkchess.com/forum/viewtopic.php?t=64096&postdays=0&postorder=asc&highlight=alphago+chess&topic_view=flat&start=0

Ich zitiere:

Im Schach haben wir das Konzept der Materialität, das bereits eine vernünftige Einschätzung darüber gibt, wie gut eine Maschine läuft und wie schnell sie berechnet werden kann. Darüber hinaus gibt es viele andere Aspekte des Spiels, die in einer statischen Auswertungsfunktion kodiert werden können, die in Go nicht möglich ist. Aufgrund der vielen Heuristiken und der guten Bewertung ist der EBF (Effective Branching Factor) recht klein. Die Verwendung eines neuronalen Netzwerks als Ersatz für die statische Auswertungsfunktion würde den Motor definitiv erheblich verlangsamen.

Kleinschach
quelle
1
Vielen Dank. Einige Fragen: Schach-Engines verwenden den Alpha-Beta-Algorithmus. Ist dies kein "Brute-Force" -Algorithmus? Bedeutet "Monte-Carlo-Baumsuche", dass man der aktuellen Position einige Züge vorausschaut?
Lijas
1
@lijas "brute-force" wird allgemein als Suche nach allen Möglichkeiten definiert. Schach-Engines machen das nicht.
SmallChess
7
@lijas Du hast gerade die Frage beantwortet. Matrixmultiplikationen sind eine langsame Operation.
SmallChess
3
Alpha Beta-Suche ist sicher "brachial". Hans Berliner über AI-Trends: "Ich denke, der wichtigste Trend war, dass Computer in den letzten 50 Jahren erheblich schneller wurden. Dabei fanden wir viele Dinge, für die wir bestenfalls anthropomorphe Lösungen hatten, die in vielen Fällen nicht erfasst werden konnten Der eigentliche Kern der menschlichen Methode könnte durch brachialere Methoden erreicht werden, die nur aufgezählt werden, bis eine zufriedenstellende Lösung gefunden wurde. (Siehe ieeexplore.ieee.org/document/820322/?reload=true )
Daniel Lidström
1
@smallchess alpha beta ist de facto ein Suchalgorithmus, auch wenn es sich um Varianten wie Negascout handelt, bei denen es sich nur um inkrementelle Verbesserungen handelt. Worauf könnte er sich sonst beziehen? Dies wurde lange vor dem Erscheinen von Deep-Learning-Systemen geschrieben.
Daniel Lidström
6

DeepBlue hat Kasparov bereits besiegt, sodass dieses Problem mit einem viel einfacheren Ansatz gelöst werden kann. Dies war möglich, weil die Anzahl der möglichen Züge im Schachspiel viel geringer ist als im Go , so dass es ein viel einfacheres Problem ist. Beachten Sie außerdem, dass sowohl NN als auch Brute Force enorme Rechenressourcen benötigen ( hier finden Sie ein Foto des Computers hinter AlphaGo. Beachten Sie, dass nicht einmal GPUs, sondern TPUs für die Berechnung verwendet werden). Die ganze Aufregung mit go war, dass die Go-Community argumentierte, als Deep Blue Kasparov besiegte, dass dies mit go nicht möglich wäre (aus vielen verschiedenen Gründen, aber um die Argumente zusammenzufassen, müsste ich eine detaillierte Einführung in das Spiel geben von go). Ja, Sie können NN beibringen, Schach zu spielen, Mario , oder versuchen, es zu lehrenStarcraft ...

Ich vermute, der Grund dafür ist, dass man in den Mainstream-Medien einfach nicht oft von Fällen hört, in denen Leute Probleme lösen, die bereits gelöst wurden.

Außerdem ist Ihre Prämisse falsch, Deep Learning wird zum Spielen von Schach verwendet, z. B. wie in Deep Learning Machine unterrichtet sich selbst Schach in 72 Stunden, spielt auf internationalem Meisterebene . Siehe auch das entsprechende Papier, Giraffe: Deep Reinforcement Learning verwenden, um Schach zu spielen .

Tim
quelle
3
Obwohl es offensichtlich einige Schachprogramme gibt, die mit tiefgreifendem Lernen trainiert wurden, bleibt die Tatsache bestehen, dass niemand ein Programm gebaut hat, das "traditionelle" Schachengines schlagen würde. Ich nehme an, das liegt daran, dass dieses Problem (gegen herkömmliche Motoren) einfach nicht interessant / motivierend genug ist, um große Anstrengungen zu unternehmen, um etwas von AlphaGo zu entwickeln.
Amöbe sagt Reinstate Monica
1
@amoeba die weit verbreitete Go-Play-Software verwendet auch kein Deep Learning und ist normalerweise schwächer als Amateur-1-Dan-Spieler, viel schlimmer als AlphaGo. AlphaGo ist ein Proof of Concept.
Tim
1
@ rus9384 es ist nicht einfach aber wir haben es schon "gelöst", Deep Bluie hat Kasparov geschlagen, wir haben unseren schwarzen Schwan, der den Schachturntest bestanden hat.
Tim
5
Ein gelöstes Spiel ist eine andere Sache: Wir wissen nicht, ob ein perfektes Spiel einen Sieg für Schwarz / Weiß oder ein Unentschieden garantiert.
Rus9384
1
@ rus9384: Es würde Spaß machen, ein Spiel gegen eine perfekte Schach-KI zu starten und "Weiß gewinnt. Schachmatt in 97 Zügen" zu sehen.
Eric Duminil