Das Netz von Coherent 0.2.13
Diesen Beitrag anhören9 Min.
Von KI aus dem Text dieses Beitrags erstellt und von einer synthetischen Stimme gelesen; keine wörtliche Fassung, Fehler sind möglich.
Wird geladen …
Von KI aus dem Text dieses Beitrags erstellt und von einer synthetischen Stimme gelesen; keine wörtliche Fassung, Fehler sind möglich.Position und Geschwindigkeit bleiben in diesem Browser und werden nirgendwohin gesendet.
Die Aufnahme konnte nicht abgespielt werden. Audiodatei öffnen
Dieser Beitrag beschreibt das neuronale Netz, das in Coherent Version 0.2.13 Stellungen bewertet, so wie es am 2026-10-12 auf dem Hauptzweig steht. Das Netz selbst kam am 2026-10-11, zusammen mit der Hebung der Version von 0.2.12 auf 0.2.13; das Orakel hat es in einem Lauf übernommen. Jede Zahl unten stammt aus dem Quelltext dieses Stands, aus den Commits und aus dem Register.
Was das Netz sieht
Das Netz bekommt nur die Steine und ihre Felder. Es betrachtet das Brett von beiden Seiten aus; jede davon heißt Sicht. Je Sicht gibt es 768 binäre Merkmale: 2 Farben, eigen oder fremd, mal 6 Figurenarten, Könige eingeschlossen, mal 64 Felder. Je Stein ist 1 Merkmal aktiv, in einer regulären Stellung also höchstens 32.
Dazu wählt das Feld des eigenen Königs 1 von 4 Königseimern, jeder mit eigenen 768 Merkmalen. Das ergibt 3.072 Eingänge je Sicht. Steht der eigene König auf den Linien e bis h, wird das ganze Brett dieser Sicht a ↔ h gespiegelt. Schwarz sieht das Brett senkrecht gespiegelt und mit vertauschten Farben. Werden daher die Farben aller Steine und die Seite am Zug getauscht und die Reihen 1 ↔ 8 gespiegelt, bleiben die Eingänge in ihrer Reihenfolge und damit der Wert unverändert.
Wer am Zug ist, geht nur über die Reihenfolge der 2 Sichten ein: Die Sicht der Seite am Zug kommt zuerst. Nicht mitgeteilt werden dem Netz Rochaderechte, en passant, die Halbzuguhr und Wiederholungen. Halbzuguhr und Wiederholungen behandelt die Suche außerhalb des Netzes.
Schichten und Größe
| Schicht | Ein → aus | Gewichte | Bias | Rechnung |
|---|---|---|---|---|
| Erste Schicht, je Sicht, gleiche Gewichte für beide | 3.072 → 768 | 2.359.296 (int16) | 768 (int16) | Summe der Zeilen der aktiven Merkmale plus Bias, dann auf 0…255 geklemmt |
| Verbindung beider Sichten | 2 × 768 → 1.536 | – | – | Seite am Zug zuerst |
| Verdeckte Schicht | 1.536 → 16 | 24.576 (int16) | 16 (int32) | clamp((Bias + Σ a·w) >> 14, 0, 255) |
| Verdeckte Schicht | 16 → 32 | 512 (int16) | 32 (int32) | clamp((Bias + Σ a·w) >> 14, 0, 255) |
| Ausgang | 32 → 1 | 32 (int16) | 1 (int32) | (Bias + Σ h·w) × 159 / (255 · 16.384), in Zentibauern |
Zusammen hat das Netz 2.385.233 Parameter, 2.384.416 Gewichte und 817 Bias-Werte. 98,9 Prozent davon liegen in der ersten Schicht. Die Daten belegen 4.770.564 Byte, etwa 4,8 MB. Es gibt 1 Ausgang für alle Stellungen; das Netz wechselt nicht zwischen mehreren Ausgangsköpfen.
Durchgehend ganze Zahlen
Das Netz rechnet nur mit ganzen Zahlen. Aktivierungen liegen zwischen 0 und 255, wobei 255 für 1,0 steht. Die Ausgangsgewichte tragen einen Faktor 16.384, und beide verdeckten Schichten schieben ihre Summen vor dem Klemmen um 14 Bit nach rechts. Der Ausgang summiert in 32 Bit; die Skalierung wird in 64 Bit gerechnet, durch 255 · 16.384 = 4.177.920 geteilt und zur Null hin abgeschnitten.
Die Summen der ersten Schicht liegen in 16-Bit-Worten, in denen ein Überlauf festgelegt umläuft. Für die Schichten danach beweisen Prüfungen beim Übersetzen an den tatsächlichen Gewichten, dass keine Summe den 32-Bit-Bereich verlässt. Weil ganzzahlige Addition nicht von der Reihenfolge abhängt, liefern der einfache Weg und die Vektorwege für AVX2 und AVX-512 dasselbe Ergebnis; die Engine wählt den Weg nach den Merkmalen des Prozessors.
Die erste Schicht wird nicht für jede Stellung neu gerechnet. 2 Akkumulatoren, 1 je Sicht, werden Zug für Zug fortgeschrieben: Die Zeilen der hinzukommenden Steine werden addiert, die der weggehenden abgezogen. Wechselt der Königseimer einer Sicht oder seine Spiegelung, wird diese Sicht aus einem Speicher mit 8 Einträgen je Sicht neu aufgebaut, 1 je Eimer mit und ohne Spiegelung.
Was nach dem Netz geschieht
Der Wert des Netzes wird dann nach dem Material auf dem Brett skaliert: Wert + Wert · 80 · (Material − 3.370) / 1.000.000. Das Material zählt beide Seiten in Zentibauern: Bauer 110, Springer 320, Läufer 330, Turm 500, Dame 900, Könige 0. In der Grundstellung beträgt das Material 8.160 und der Faktor 1,3832. Danach wird der Wert auf knapp unterhalb des Bereichs der Mattwerte begrenzt.
In der Suche, außerhalb des Netzes, kommt eine Korrektur aus 6 Tafeleinträgen in 5 Gruppen hinzu, die die Suche unterwegs fortschreibt. Danach wird der Wert mit der Halbzuguhr gedämpft, Wert · (208 − min(Uhr, 100)) / 208, und erneut begrenzt. Je länger die Partie ohne Bauernzug und Schlag läuft, desto näher rückt der Wert an das Remis.
Vom Netzwert zum endgültigen Wert: 1. Netzwert nach Material auf dem Brett skaliert; 2. Wert auf knapp unter den Mattbereich begrenzt; 3. Suche addiert Korrektur (6 Tafeleinträge, 5 Gruppen); 4. Wert mit der Halbzuguhr gedämpft; 5. Wert erneut begrenzt: Endwert.
Woher das Netz kommt
Ausgangspunkt war das vorige Netz des Hauptzweigs, trainiert in 32 Epochen. Feinabgestimmt wurde es auf 150 Millionen Stellungen aus eigenen Selbstspielpartien, einem Teil der Trainingsdaten jenes Netzes, mit Etiketten aus einer tieferen eigenen Suche: Coherent 0.2.8 mit dem vorigen Netz bei 20.000 Knoten je Stellung, 1 Faden und Hash=16, einem Tabellenbudget von 16 MiB. Stellungen aus unseren Prüfmengen wurden vorher aus den Daten gefiltert. Das Rezept: Lernrate 1e-5, je Schritt fallend auf 0, 4 Epochen, WDL-Gewicht 0,5, Ausgangsskala 159 statt 157 beim vorigen Netz. Fremde Etiketten oder Gewichte sind nicht eingeflossen.
Im Orakel spielte der Lauf dieses Netz gegen seinen Vorgänger und bestand beide Stufen: kurz, bei 8+0.08 Sekunden, +24,60 ± 8,58 Elo Stärkeabstand zum Gegner, aus den Partien geschätzt, mit 95-Prozent-Halbbreite, wo das Orakel eine berichtet hat. Nie eine absolute Wertung. nach 1.542 Partien; lang, bei 40+0.4 Sekunden, +31,43 ± 9,51 Elo nach 1.186 Partien. Die Werte sind bedingte logistische Elo-Schätzungen gegen den Vorgänger in Epoche 10, mit Buch A in der kurzen und Buch B in der langen Stufe; ± bezeichnet das ungefähre 95-Prozent-Intervall. Beide Stufen erreichten die Annahmeschranke ihres sequenziellen Tests, der in nElo Normiertes Elo: der Elo-Abstand geteilt durch die Streuung der Partieergebnisse, damit die SPRT-Schranken bei verschiedenen Bedenkzeiten dasselbe bedeuten. entscheidet. Sie endeten nach wenigen Partien; die Werte sind grobe Schätzungen.
Wie das geprüft wurde
Die Fakten stammen aus einem Bericht, den einer der Agenten des Projekts auf Wunsch des Inhabers geschrieben hat; ein Agent einer anderen Modellfamilie hat ihn gegen denselben Quellbaum geprüft. Für diesen Beitrag wurde jede Zahl erneut am Quelltext, an den Commitnachrichten der Netzwechsel und am Registereintrag des Laufs geprüft, und die Rechnungen wurden in Python nachvollzogen; ein Agent einer anderen Modellfamilie hat den Text gegen dieselben Quellen geprüft.
Einiges wurde nicht geprüft: Den Hash der Netzdatei haben wir so übernommen, wie er im Quelltext hinterlegt ist, und nicht neu aus der Datei berechnet. Dass die Vektorwege dasselbe Ergebnis liefern, ist am Code begründet, nicht durch Ausführen getestet. Die Herkunft des Netzes ist im Commit dokumentiert, nicht durch ein neues Training nachvollzogen.