@Playchesscoach on Lichess: Uhr | Statistiken | Herausforderung (1+0 oder 0+1 bis 15+10)
Chesscoach ist eine neuronale netzwerkbasierte Schachmaschine, die zu natürlichen Kommentaren in der Lage ist. Es spielt Schach mit einer Bewertung von ca. 3450 ELO, was bedeutet, dass es in der Regel sogar die stärksten menschlichen Spieler bei 2850 ELO und viele andere Motoren schlagen sollte, aber oft gegen die stärksten verliert, wie z. B. Stockfish 14 bei 3550 ELO.
Wie bei allen Motoren ist Chesscoach darauf angewiesen, Millionen von Schachpositionen zu untersuchen, um sich für den besten Schritt zum Spielen zu entscheiden. Es verwendet ein großes, langsames neuronales Netzwerk genau wie Alphazero oder Leela Chess Zero (LC0), um jede Position zu bewerten, im Gegensatz zu klassischen Motoren, die eine Geschwindigkeit mit einer viel einfacheren Bewertung oder neueren Nnue -Motoren anstreben, die ein stärkerer Hybrid beider Stile sind.
Das neuronale Netzwerk im Kern des Motors wird durch das Spielen gegen sich selbst geschult, wobei ein Feedback -Zyklus von fast null Wissen - nur die Regeln des Schaches - verwendet und neue Wege erfährt, sich selbst zu schlagen, wenn es stärker wird. In stärkeren Bewertungen des neuronalen Netzwerks können es besser suchen, und stärkere Suchergebnisse ermöglichen es, die Bewertung der neuronalen Netzwerke effektiver auszubilden.
Chesscoach kann sein Schachwissen auch in ein zusätzliches neuronales Netzwerk einfügen, um Bewegungen und Positionen in Englisch zu kommentieren. Es ist nicht sehr aufschlussreich und oft falsch, zeigt jedoch einige Versprechen für die begrenzten Daten, an denen es trainieren konnte.
Ich begann, Chesscoach als zwei bis drei Monatesprojekte zu entwickeln, um zu sehen, ob es mir maschinelles Lernen mochte und die Dinge weiter als erwartet hatte. Der ursprüngliche Plan hatte drei übermäßig ehrgeizige Ziele: eine kleine Alphazero-ähnliche Motor nachzubilden, den Trainingsfedback-Zyklus natürlicher Sprache zu fügen und auf einer Workstation mit einer GPU ein gewisses Maß an Training zu ermöglichen.
Nach etwas mehr als einem Jahr Entwicklung kann ich fast keine Fortschritte bei den Trainingsmethoden beanspruchen. Ich bin jedoch zufrieden mit dem Kommentar, den Chesscoach produziert, alles in Betracht gezogen und überrascht über die eventuelle Stärke des Motors.
Ich hatte das Glück, so viele öffentliche Ressourcen zur Verfügung zu haben, einschließlich kostenloser Cloud -Computer und frei verfügbaren Arbeiten, Diskussionen und Daten. Ich bin auch sehr dankbar für eine Reihe von Leuten, die mit wichtigen Klarstellungen, Diskussionen und Debuggen geholfen haben.
Der Schachmotor im Kern von Chesscoach ist dem von Alphazero (Silver et al., 2018) oder LC0 (Linscott & Pascutto, 2018) in der Struktur des neuronalen Netzwerks, des Trainingsplans und der Suchalgorithmus, jedoch mit einem praktischen Ansatz, dem Brot und der Tiefe des Forschungs -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talent -Talents sehr ähnlich ist. Ich hoffe jedoch, dass es einige neue Ideen gibt, die anderswo nützlich sein können.
The natural-language commentary piece is most like the work of Learning to Generate Move-by-Move Commentary for Chess Games from Large-Scale Social Forum Data (Jhamtani, Gangal, Hovy, Neubig & Berg-Kirkpatrick, 2018) and Automated Chess Commentator Powered by Neural Chess Engine (Zang, Yu & Wan, 2019), but relies on a more heavily trained chess engine and larger training Corpus, wenn auch mit vereinfachender Architektur.
Chesscoach ist etwas minimal und tragbar. Es läuft unter Linux und Windows und unterstützt Einzel-GPU-, Multi-GPU- und Tensor-Verarbeitungseinheiten (TPUs). Der leistungsorientierte Code befindet sich in C ++ (10,5K-Zeilen), und der neuronale Netzwerkcode befindet sich in Python (3,7K-Zeilen) und stützt sich auf TensorFlow 2. Stockfish-Code wird für die Positionsmanagement-, Verschiebungsgenerierungs- und Endgame-Tabellenuntersuchung verwendet, jedoch nicht für die Suche oder Bewertung. Self-Play-Trainingsdaten wurden im Rahmen des Chesscoach-Projekts nach dem Alphazero-Zeitplan von 44 Millionen Spielen und 700.000 Trainingsanhäusern mit jeweils 4.096 Positionen vollständig generiert.
Einige Ideen jenseits von Alphazero, aber in Literatur und Projekten wie Katago (Wu, 2020) und LC0 wurden integriert (oft dachte ich, ich hätte etwas Neues ausprobiert, aber es stellt sich heraus, dass kluge Leute bei LC0 fast alles ausprobiert haben). Dazu gehören Mate-Probition, Endgame TableBase Probing, Endgame Minimax, stochastische Gewichtsabschnitt (SWA), exponentiell gewichtete bewegliche Durchschnittswerte (EWMA), verschiedene Explorationsanreize, Vorhersage-Caching, Hilfstrainingsziele und Wissensdestillation.
Ich glaube, dass einige Ideen neu sind. Die erste ist eine Suchmethode, die darauf abzielt, taktische Fallen zu vermeiden und einfache Bedauern durch lineare Erkundung und selektive Backpropagation zu minimieren, die durch Eliminierung angewendet werden-SBLE-PUKT. Das zweite ist eine einfache neuronale Architektur für natürliche Kommentare zu Positionen und Bewegungen in Verbindung mit einer optimierten Anwendung der Kernprobenahme (Top-P), die sich auf die Korrektheit mit der Variety-begehrte Probenahme konzentrieren.
Das Ergebnis ist eine Reihe von Tools zum Spielen von Schach, zum Ausbilden der neuronalen Netzwerke, zum Optimieren von Parametern, zum Teststärke, zum Prozesstrainingsdaten, zum Ansehen und zum Debugg-Trainingsdaten, zum Organisieren von Schulungsdaten, zum Einheitentest und koordinierenden Clustern. Um das Projekt abzuschließen, wird ein Bot unter https://lichess.org/@playchesscoach eingerichtet, um Spiele gegen Herausforderer und andere Bots zu spielen und den Zuschauern Kommentare zu geben.
Auf einer neueren V3-8-Cloud-TPU-VM: V3-8 Cloud:
gui -Befehls vor der Suche einzugeben.Einige Schlüsseldateien befinden sich am Root, einschließlich Config.Toml, das die meisten Tools anregt und aus C ++ - und Python -Code gelesen wird. Meson.build definiert den Linux -Build und CPP/chesscoach.sln und cpp/**/*. VCXProj Definieren Sie den Windows -Build. Die Skripte setup.sh/.cmd und build.sh/.cmd automatisieren Setup und Gebäude, obwohl zusätzliche Schritte erforderlich sein können. Dockerfiles am Root definieren Bilder für jede Cluster-Arbeiterrolle, und Docker-*. SH-Skripte helfen beim Erstellen und Hochladen dieser Bilder.
Im Cluster-Verzeichnis verwalten die .sh/.yaml-Dateien Kubernetes-Cluster auf TPUs im älteren Stil, während Py/Alpha.py Cluster auf neueren Cloud-TPU-VMs im neueren Stil verwaltet.
Das CPP -Verzeichnis enthält C ++ - Code, hauptsächlich in CPP/Chesscoach. Chesscoach C ++ - Code ist hauptsächlich leistungsorientiert. Bibliotheken von Drittanbietern umfassen CPP/CRC32C, CPP/Hunspell, CPP/Numpy, CPP/Protobuf-3,13.0, CPP/Stockfish, CPP/TCLAP, CPP/TOML11 und CPP/ZLIB. Daten von Drittanbietern umfassen CPP/Wörterbücher und CPP/Stärketests. Zusätzliche C ++-Bibliotheken von Drittanbietern werden mit dem Advanced Package Tool (APT) installiert und vom Meson Build-System unter Linux festgestellt und mit Nuget unter Windows installiert und ermittelt. Die CPP/Protobuf-Bibliothek wird mit dem Protoc-Tool und dem CPP/Protobuf/Chesscoach.Proto mit Code erzeugt.
Das PY -Verzeichnis enthält Python -Code, auf das primär über network.py von c ++ zugegriffen wird, aber auch einige eigenständige Skript -Tools. Der Chesscoach -Python -Code befasst sich hauptsächlich mit dem neuronalen Netzwerk und dem Cloud -Speicher. Zusätzliche Python-Bibliotheken von Drittanbietern werden mit PIP installiert.
Das JS -Verzeichnis enthält die Debuggui, die in Chesscoachgui und Chesscoachuci verwendet wird und auf Schachbrett stützt.
Das Tools-Verzeichnis enthält Cutechess-Cli und Bayeselo für die Ausführung von Turnieren und die Berechnung der ELO-Bewertungen der Teilnehmer sowie des Binary Motors Binary von Stockfish 13, um als Gegner zu fungieren.
Das Skript -Verzeichnis enthält verschiedene Situationsskripte und Annehmlichkeiten.
Das DOCS -Verzeichnis enthält Dokumentation und unterstützende Vermögenswerte.
Nach der Installation findet Chesscoach statische Daten unter/usr/local/share/chesscoach unter Linux und neben dem Binärer in Windows. Es findet dynamische Daten unter $ {xdg_data_home}/chesscoach oder fehlschlägt, dass bei ~/.local/shary/chesscoach unter Linux und bei %LocalAppData %/Chesscoach unter Windows. Dynamische Daten können sich auch im Google Cloud -Speicher befinden. Zum Beispiel gs: // chesscoach-eu/chesscoach.
Wenn Sie auf Google Cloud ausgeführt werden, kann es das GPU-Setup so vereinfachen, dass ein vorgefertigtes Deep-Lerndisk-Bild mit CUDA 11 verwendet wird.
./setup.sh (es kann 30 Minuten dauern, um Protobuf aus der Quelle zu erstellen).pip3 install -r requirements-all.txt aus.sudo ./build.sh release install ../setup.sh (es kann 30 Minuten dauern, um Protobuf aus der Quelle zu erstellen).pip3 install -r requirements-all.txt aus.sudo ./build.sh release install ../setup.sh (es kann 30 Minuten dauern, um Protobuf aus der Quelle zu erstellen).pip3 install tf-models-official==2.5.0 (dies kräuselt den vorinstallierten TF-Nightly).pip3 uninstall tensorflow tf-slim tf-nightly .--force-reinstall .sudo ./build.sh release install .conda activate chesscoach , aber es ist in Ordnung, wenn dies fehlschlägt, wenn keine virtuelle Umgebung verwendet wird.setup.cmd ausführen (dies setzt nach dem Ausführen von ACTECTE_VIRTUAL_ENV.CMD).build.cmd .Chesscoach ist auf Daten angewiesen, die auf $ {xdg_data_home}/chesscoach installiert sind oder dies bei ~/.Local/Share/Chesscoach unter Linux und bei %LocalAppData %/Chesscoach unter Windows nicht bestanden haben.
Installieren Sie neuronale Netzwerkgewichte. Dies erfordert einen 372 MIB -Download und einen 406 MIB -Scheibenraum.
scripts/download_install_data.sh .scripts/download_install_data.cmd .Installieren Sie optional Syzygy Endgame -Tabellenbasen. Dateien für 3-4-5-Teile dauern ungefähr 1 Gib, und Dateien für 3-4-5 + 6-Teile dauern ungefähr 150 Gib. Der Installationsprozess ist etwas technisch.
Im Cloud -Speichermodus werden Syzygy -Tabellen beim Start automatisch in den lokalen Speicher repliziert.
Die Skriptskripte/Ramdisk_Syzygy6.sh stellt eine RAM-Festplatte auf Maschinen wie Cloud-TPU-VMs im neueren Stil für den Host 3-4-5 + 6-teilige Tabellen ein, wenn der Speicher hoch ist, der Speicherplatz jedoch niedrig ist. Bei Verwendung einer Festplatte ist es am besten, diese Tabellen auf SSDs zu platzieren, um die Suchgeschwindigkeit aufrechtzuerhalten. Die Skriptskripte/ramdisk_syzygy6.sh verwendet den Pfad…/chesscoach/syzygy6, der sich auf eine Konfigurationsänderung in config.toml verlassen, aber…/Chesscoach/Syzygy kann stattdessen verwendet werden.
export PROJECT_ID=<your Google Cloud project ID> aus.Wenn Sie Alpha.py verwenden (dieser Teil ist besonders unordentlich):
cluster/cluster-prep-creds.sh aus, um ein Dienstkonto und eine entsprechende Key.json-Datei zu erstellen.gsutil cp in Key_Path .Der Abschnitt "Distributed Training and Self-Play" in der technischen Erklärung enthält weitere Informationen über die Verwaltung von Clustern im älteren Stil und neuere Art.
Die meisten Chesscoach -Programme hängen von der erstellten und installierten Konfiguration ab. Es ist besonders wichtig, den Parameter von Search_Threads beim Ausführen von Chesscoachuci entweder über Config.toml zur Build -Zeit oder zur UCI -Option zur Laufzeit festzulegen, um eine Thread -Hunger durch unfaire Vorhersageplanung zu vermeiden.
Die Chesscoachuci -Binärin kann als UCI -Motor in verschiedenen Schach -GUIs beladen werden.
Bei Verwendung einer virtuellen Umgebung für Python kann dies jedoch beider:
Chesscoachuci bietet zusätzlich zu denen des UCI -Protokolls benutzerdefinierte Befehle an:
comment erzeugt natürlichen Kommentar für die aktuelle Position und den letzten Schritt gespielt. Es ist am besten, den vollständigen Bewegungsverlauf mit einem position startpos moves … Befehl zu bieten.gui ändert die Debug-GUI, um beim Starten einer Suche zu starten (wie in Abbildung 9 in der Erklärung auf hoher Ebene gezeigt).~ puct [moves …] [csv] Zeigt Debugg -GUI -Daten in Textform an.~ fen zeigt die aktuelle Position in Forsyth -Edwards Notation (FEN) an.Für das Selbstspiel und Training finden Sie in dem Datendokument den Selbsteinsatz und Trainingsprozess.
Für andere in Programmen aufgeführte Dienstprogramme suchen Sie nach Kommentaren in config.toml für die Konfigurationsanleitung. Viele Dienstprogramme unterstützen das Argument --help . Der Inhalt von Skripten im Skriptverzeichnis kann Beispiele zeigen. Bei Verwendung einer virtuellen Umgebung für Python muss sie möglicherweise aktiviert werden, bevor die Versorgungsunternehmen ausgeführt werden, obwohl einige nicht von Python abhängen.
Run build/gcc/debug/ChessCoachTest oder build/gcc/release/ChessCoachTest .
Run activate_virtual_env.cmd cpp/x64/Debug/ChessCoachTest.exe oder cpp/x64/Release/ChessCoachTest.exe .
Sie können das Chesscoachtest -Projekt in Visual Studio auch ausführen/debuggen oder die Test -Explorer -Schnittstelle in Visual Studio verwenden.
Das TPU Research Cloud (TRC) -Programm von Google war außergewöhnlich großzügig mit Rechenressourcen, die dieses Projekt ermöglicht haben, und ich danke Jonathan Caton, insbesondere für die Erschaffung der Dinge.
Ich bin sehr dankbar für das Cloud -TPU -Team von Google für die Verwendung von Cloud -TPU -VMs und insbesondere Michael Banfield für technische Unterstützung im gesamten Alpha der neuen Technologie.
Ich danke Karlson Pfannschmidt (Paderborn University), dessen Schachsteuerwerkzeuge und Bayes-Skopt-Implementierung sowie die Beratung zur Bayesian-Optimierung bei der Stärkung des Chesscoach-Motors von unschätzbarem Wert waren.
Ich bin Matthew Lai (DeepMind) sehr dankbar für die Bereitstellung unabhängiger Funktion, wichtige Klarstellungen auf dem Alphazero -Papier.
Ich dankt an Pierre de Wulf für die Bereitstellung von Forschungs-Credits für Scrapingbee, um ein natürliches Kommentartraining in Chesscoach zu ermöglichen.
Vielen Dank an Ted Li für wertvolle Ideen und Diskussionen zu Beginn des Projekts.
Vielen Dank an Freya Wilcox für die Unterstützung beim Diagrammprototyping.
Und besonderer Dank geht an Gary Butner und Lynelle Rafton für die Bearbeitung, Korrekturlesen und Unterstützung.
Chesscoach wird unter der GPLV3 oder späteren Lizenz veröffentlicht.
Chris Butner, [email protected]