Optimierung der Stellungsbewertung einer Schachengine durch Efficiently Updatable Neural Networks unter Verwendung der C++ Bibliothek mlpack

Bachelorarbeit Simon Hetzer - Wintersemester 2021 / 2022

Efficiently Updatable Neural Networks (NNUE) haben in den letzten Jahren die Welt der Schachcomputer revolutioniert. Sie bieten die Möglichkeit, eine von einem Künstlichen Neuronalen Netz berechnete Stellungsbewertung effizient mit der Alpha-Beta-Suche zu kombinieren. In der Abschlussarbeit wurde die NNUE-Architektur mit der C++ Bibliothek mlpack rekonstruiert, um sie in das zuvor entwickelte Schachprogramm Heureka Engine einzubinden. Dazu wurden neue Netzwerkschichten entworfen und implementiert. Zur Überwachung und Auswertung des Trainings wurde eine automatisierte Trainingsroutine umgesetzt. Um das Netzwerk performant während der Suche nutzen zu können, wurde eine interne Repräsentation sowie die effiziente Berechnung des Forward Pass zur Engine hinzugefügt. In der Ausarbeitung werden die vorerst gescheiterten Trainingsexperimente dargestellt und in Bezug auf die Einstellung der Hyperparameter und Optimierer analysiert. Außerdem wird die Performanz der Anbindung an die Engine im Hinblick auf weitere Optimierungen evaluiert. Anhand von klaren Zielen kann die Arbeit am Training eines NNUE und an der Engine fortgesetzt werden. Die weiterführende Entwicklung der Engine kann unter https://github.com/rabblerousy/heureka verfolgt werden. Teile der implementierten Klassen werden außerdem zur Aufnahme in die verwendeten Bibliotheken aufbereitet werden. 

Rechts: Graphische Benutzeroberfläche der Heureka Engine, in der gegen den Computer (Schwarz) gespielt werden kann. Links: Konsolenfenster der Engine, in der das Training eines NNUE gestartet oder die Einstellungen im Spiel angepasst werden können. Im Debug-Build werden außerdem detailliertere Informationen ausgegeben.
Mit Hilfe von Python-Skripten konnte der Trainingsverlauf während den Experimenten überwacht und analysiert werden. Alle trainierten Netze stagnierten bei einem Loss von ca. 0,00005 und lernten dabei immer nur eine Normalverteilung um oder lediglich den Mittelwert der Trainingsdaten.

Infos zum Projekt

Studierender Simon Hetzer    
Semester Wintersemester 21/22    
Studiengang Digitale Medien und Spiele (Fachbereich Informatik)    
Art der Arbeit Abschlussarbeit Bachelor    
Graph der NNUE-Netzwerkarchitektur, wie diese ursprünglich von Yu Nasu im Jahr 2018 entwickelt wurde. In der ersten Schicht sind jeweils zwei Hälften der Größe 256 mit 40960 Eingabeneuronen verbunden. Der Rest des Netzwerks ist mit je 32 Neuronen (L2 und L3) vollständig verbunden und die Ausgabeschicht besitzt ein Neuron. Als Aktivierungsfunktion wird in jeder Schicht ClippedReLU verwendet.
Die Klasse NNUE stellt die Schnittstelle zwischen der Engine und den in der Bachelorarbeit implementierten Klassen dar. Außerdem wurden eigene Klassen mit Hilfe der API der Bibliotheken mlpack (Machine Learning) und ensmallen (Lineare Optimierung) erstellt.
back-to-top nach oben