Wie funktioniert Fat Fritz und Machine Learning

21.02.2021 – Das Deep Mind Projekt Alpha Zero und der Vorgang des Machine Learnings hat viel frischen Wind in die Computerschach-Entwicklung gebracht und diese ist lange noch nicht abgeschlossen. Fat Fritz 2 nutzt die neuen Techniken. Tony Schwedek, selber Experte im Bereich künstlicher neuronaler Netze, erläutert das Grundprinzip, hat aber auch kritische Fragen.

ChessBase 16 - Megapaket Edition 2021 ChessBase 16 - Megapaket Edition 2021

Dein Schlüssel zu frischen Ideen, präzisen Analysen und zielgenauem Training!
ChessBase ist die persönliche Schach-Datenbank, die weltweit zum Standard geworden ist. Und zwar für alle, die Spaß am Schach haben und auch in Zukunft erfolgreich mitspielen wollen. Das gilt für den Weltmeister ebenso wie für den Vereinsspieler oder den Schachfreund von nebenan.

Mehr...

Vorab einige Angaben zu meiner Person: Mein Name ist Tony Schwedek, ich habe einen Master of Science im Fach Mathematik mit Nebenfach Informatik, eine Abschlussarbeit im Bereich künstliche neuronale Netze und maschinelles Lernen in Bezug auf Quantenmechanik geschrieben, arbeite seither als Software-Engineer und verfolge in meiner Freizeit mit großer Begeisterung die Entwicklung von maschinellem Lernen in Bezug auf Schach.

Nun las ich in dem genannten Artikel zu Fat Fritz 2.0 (https://de.chessbase.com/post/fat-fritz-2-0-die-juengste-revolution-im-computerschach), eine Passage, die mich zu einem Leserbrief motivierte, weil sie meiner Meinung nach nicht richtig ist und viel von der Brillanz nimmt, die in dem Unterfangen Alpha Zero, LeelaChess und Fat Fritz steckt. Mir ist klar, dass in Artikeln für eine breite Leserschaft öfter mal kleine Unwahrheiten bzw. Vereinfachungen eingebaut werden, um den "Ottonormalleser" nicht durch übermäßige Komplexität abzuschrecken. Aber das scheint mit hier nicht der Fall.

Schachengines bestehen sowohl mit, als auch ohne neuronalem Netzwerk aus zwei Komponenten: Eine Komponente erstellt den Suchbaum, die zweite Komponente wird dann mit den relevanten Stellungen aufgerufen und übergibt die Bewertungen für diese Stellungen. Die erste Komponente vermerkt die Ergebnisse wiederum am Suchbaum und kann am so gewichteten Suchbaum nach dem besten Zug in der aktuellen Stellung suchen. Eine schöne Abbildung dazu findet man hier: https://lczero.org/dev/wiki/what-is-lc0/

Ebenjene zweite Komponente war in der Vergangenheit eine komplizierte, von Menschen optimierte Bewertungsfunktion. Heutzutage besteht die Revolution darin, stattdessen ein neuronales Netzwerk zu benutzen.

Außerdem wurde für die erste Komponente in der Vergangenheit quasi ausschließlich der Minimax-Algorithmus benutzt, im Zusammenhang mit neuronalen Netzten und dem hohen Rechenaufwand für die Auswertung von Stellungen wird stattdessen auch oft auf ein Montecarlo-Verfahren gesetzt.

Nun gab es bisher das Problem, dass sich neuronale Netzwerke lediglich auf einer GPU effizient auswerten lassen, die erste Komponente läuft aber klassischerweise auf einer CPU. Der Flaschenhals für Programme ist die Datenübertragung zwischen den Komponenten (https://de.wikipedia.org/wiki/NNUE). Das NNUE ist eine spezielle Netzwerkarchitektur, speziell für Brettspiele mit zwei Personen, wodurch es sich auch auf einer CPU effizient auswerten lässt.

Zur Klarstellung: Das ganze bleibt in jedem Fall weniger performant, als die erste Komponente auf der GPU laufen zu lassen. Es ist lediglich praktikabler, da fast jeder Computer heutzutage eine ordentliche CPU besitzt, aber nur wenige über eine leistungsstarke GPU verfügen. Diese Klarstellung lässt der Artikel meiner Meinung nach zum Beispiel vermissen, hier wird das NNUE als "heiliger Gral" verkauft.

Es ist klar, dass der Artikel Fat Fritz bewerben möchte und daher mit gewissen Übertreibungen daherkommt - so wird davon gesprochen, dass die Schachengines, die auf neuronalen Netzwerken basieren, in technischen Endspielen manchmal die chirurgische Präzision vermissen lassen würden - ein Umstand, der sich lediglich auf Komponente 1 bezieht: Erstellung und Verwaltung des Suchbaums. Das neuronale Netzwerk (und das ist ja das, was sich hier ändert), hat damit nichts zu tun. Mir ist außerdem nicht bekannt, dass das überhaupt der Fall wäre. Eine Monte-Carlo-Analyse, wie von Alphazero verwendet, kann immer mit einer sehr sehr kleinen Wahrscheinlichkeit fehlschlagen. Nicht nur im Endspiel, auch in Mittelspielen, die Präzision erfordern. Und offenbar geschieht das so selten, dass Alphazero trotzdem überlegen seine Matches gegen andere Schachcomputer gewann.

Eine Sache vermittelt aber meiner Meinung nach einen komplett falschen und verschleierten Eindruck davon, wie man denn überhaupt zu Komponente 2, dem neuronalen Netz, kommt: "Genau wie AlphaZero und die erste Ausgabe von Fat Fritz baut NNUE auch sein eigenes Schachwissen auf, indem es aus Schachpositionen und Bewertungen lernt."

Alpha Zero funktioniert so: Man programmiert Komponente 1. Dann verwendet man für Komponente 2 zufällige neuronale Netzwerke, und lässt die so entstandenen Engines ein Turnier gegeneinander spielen, "auf Leben und Tod", wenn man so will.

Die Gewinner (zum Beispiel die besten 10 aus 100) dürfen sich "fortpflanzen": Man nimmt ihre neuronalen Netze, die Komponenten 2, her und verändert die Parameter des neuronalen Netzwerkes leicht, zufällig ab. Man "mutiert" sie. Von jedem der Gewinner werden verschiedene Mutationen erstellt. Diese nennt man zweite Generation. Sie spielen wieder ein Turnier auf Leben und Tod untereinander und der Prozess wiederholt sich, sehr oft, mehrere tausend mal, das erfordert einen enormen Rechenaufwand. Diese Technik ist als "Reinforcement Learning", auch "bestärkendes Lernen", bekannt.

Das, was mich an diesem Prozess fasziniert, ist die Tatsache, dass es die Evolution der Natur nachbildet. Und auch im Computerbereich funktioniert das Prinzip der natürlichen Selektion blendend. Die stärksten überleben, pflanzen sich fort, und durch Mutationen entwickelt sich eine Art weiter. Nach dem gleichen Prinzip werden auf Youtube diverse Anwendungsfälle abgehandelt, amüsant und zugleich sehr lehrreich finde ich zum Beispiel Super MarI/O:

Von dieser Eleganz wird im Artikel leider nicht gesprochen.

Dort klingt es so, als wären die neuronalen Netze "menschengemacht". Als würden wir vorgeben, welche Stellungen gut und welche schlecht sind, um den Computer daraus lernen zu lassen. Was aber dazu führen würde, dass ein Netz nur so gut sein kann wie sein Trainer, wenn es die Stellungsbewertungen des Trainers als "wahr" ansieht und anhand dessen lernt. Das tut es aber wie gesagt nicht, es entwickelt seine eigene Wahrheit und führt daher für uns Menschen zu neuen Erkenntnissen. Wir lernen quasi vom Computer, nicht umgekehrt.

Ich habe bei meinen Recherchen inzwischen erfahren, dass Albert Silver für Fat Fritz scheinbar tatsächlich den Ansatz fährt, das Netz nicht von Grund auf selbst lernen zu lassen, sondern er "gießt Wissen hinein", ohne dass ich eine genaue Erklärung finden konnte, wie das funktioniert. Die Begründung dafür ist, dass Alpha-Zero in verschiedenen Generationen immer eine Präferenz für gewisse Eröffnungen hatte und daher zu befürchten sei, dass sich die verschiedenen Alphazero-Versionen in verschiedenen Stellungstypen deutlich besser auskennen und dort bessere Entscheidungen treffen, als in anderen. In wie weit das stimmt, kann man vermutlich nur spekulieren, interessant ist der Ansatz allemal.