Så lär sig nätet Reversi
Del 1 berättade vad vi byggt: en Reversi-motståndare som lärt sig allt själv på en laptop. Reversi är samma spel som det klassiska Othello. Det här är hur, i fyra block. Först nätet: vad datorn ser och vad "hjärnan" faktiskt är. Sedan träningen: vad nätet gör när det tänker, och hur ett varv går till. Sedan vad vi lärde oss på vägen. Sist hur nätet flyttas in i en telefon. Utan matematik.
1. Vad datorn ser
Nätet ser aldrig ett bräde med svarta och vita brickor. Det ser fyra rutnät med ettor och nollor, alltid ur perspektivet hos den som ska dra: mina brickor, motståndarens brickor, rutorna där det är tillåtet att lägga, och ett hjälpplan med bara ettor som gör det lättare att känna av brädets kant. Färg spelar ingen roll. Samma nät spelar svart och vitt, för det vet bara "mina" och "motståndarens".
Tillbaka ur nätet kommer två svar. Det ena är en sannolikhet för varje ruta: hur troligt det är att en stark spelare lägger just där. Vi kallar det policyn, magkänslan. Det andra är ett enda tal mellan minus ett och plus ett: hur bra den som ska dra ligger till. Det kallas value, lägesbedömningen.
2. Vad ett neuralt nät är
Ett neuralt nät är ett räknesystem, löst inspirerat av hjärnan, som hittar mönster i data på egen hand. I stället för regler som någon skrivit lär det sig genom att gissa, mäta hur fel gissningen blev och vrida sina inre kopplingar lite grann i rätt riktning. Räknepunkterna sitter i lager, och varje koppling mellan två punkter har en ratt, en vikt, som säger hur mycket den ena ska påverka den andra.
Ett väldigt enkelt exempel
Tänk dig det lilla nätet ovan. Det får två tal om en ställning, säg hur många hörn jag har och hur många drag jag kan välja mellan, och ska gissa hur stor andel av brickorna som blir mina när partiet är slut. Facit är 57. Rattarna står slumpmässigt, och första gissningen blir 30. Nu händer fyra saker, och det är samma fyra saker som händer i vårt nät hundratusentals gånger per dygn.
- Felet mäts. Gissningen 30 är 27 för lågt.
- Skulden fördelas bakåt. För varje ratt räknas ut om den drog gissningen nedåt eller uppåt, och hur mycket.
- Rattarna vrids. Varje ratt vrids ett litet steg åt det håll som höjer gissningen. Bara ett litet steg, så att nätet inte skjuter över.
- Nästa varv. Gissningen blir kanske 44, sedan 51, 55, 57.
Med en enda ställning har nätet bara lärt sig ett svar utantill. Därför görs samma sak med tusentals ställningar om vartannat, och rattarna hamnar där felet blir minst över alla på en gång. Då står de rätt även för ställningar nätet aldrig sett, och det är hela poängen.
Vårt Reversi-nät fungerar precis likadant, bara större: 1,8 miljoner rattar i stället för 28. Det är byggt som ett torn av lager. Det första lagret tittar på varje ruta tillsammans med dess grannar, och varje lager därefter ser lite mer av brädet, tills tornet ser hela. Högst upp delar det sig i två huvuden, ett för magkänslan och ett för lägesbedömningen.
3. Att tänka framåt: sökningen
Receptet vi följer heter AlphaZero och kommer från DeepMind. Föregångaren AlphaGo slog 2016 världens bästa go-spelare, men hade först fått studera mänskliga partier. Året därpå visade samma lag att det inte behövdes: bara reglerna, och spel mot sig själv. AlphaZero använde ungefär 5 000 specialbyggda chip. Vi använde en laptop, och Reversi är ett mindre spel än schack.
Receptets viktigaste idé är sökningen. Ett nät som bara följer sin magkänsla gör dumma misstag, för det räknar inte. Därför provar sökningen drag i huvudet innan den väljer: nätet pekar ut de drag det tror på, sökningen spelar ett av dem, frågar nätet hur det ser ut nu, och räknar tillbaka svaret. Efter 200 sådana provdrag spelas det drag som besökts flest gånger. Drag som ser bra ut får fler besök, men även oprövade drag får en chans.
4. Träningsvarvet
Träningen är ett varv som upprepas dygnet runt, ett varv per generation.
- Spela. Nätet spelar 2 000 partier mot sig själv, med sökningen. Lite slump i de första dragen gör att partierna blir olika.
- Minnas. Varje ställning sparas med två facit: vad sökningen tyckte om dragen, och hur partiet slutade. Gamla partier skrivs över, för de spelades av ett sämre nät.
- Lära. Nätet gissar på ställningar ur minnet och vrider rattarna mot facit, precis som i det enkla exemplet.
- Duellera. Den nya versionen möter den hittills bästa. Tar den mer än 55 procent av poängen blir den ny bästa och spelar nästa varvs partier. Vi prövade att sänka kravet så att färskare nät skulle spela oftare, men då blev nätet sämre båda gångerna.
- Mäta. Till sist spelar den några partier som bara används till kurvorna, bland annat mot Egaroucid.
5. Vad den lär sig först
Ett hörn i Reversi kan aldrig vändas, så det är brädets säkraste ruta. Rutan snett intill ett hörn är det klassiska nybörjarfelet, eftersom den lämnar hörnet öppet för motståndaren. Ingen har berättat något av detta för nätet. Vi kan mäta när det kommer på det.
| Efter ungefär | Tar hörnet när det kan | Vad det betyder |
|---|---|---|
| 2 000 partier | 27 % | Kaos, knappt bättre än slumpen |
| 10 000 partier | 86 % | Hörnen upptäckta: nybörjarregeln i sin renaste form |
| 200 000 partier | 54 % | Omdöme i stället för regel |
Hörnen på en timme. Efter några tusen partier tar nätet hörnet nästan jämt och har slutat ge bort dem. Det har lärt sig brädets viktigaste regel utan att någon nämnt att hörn finns.
Sedan slutar den ta hörn. Det ser ut som en försämring och är motsatsen. «Ta alltid hörnet» är en nybörjarregel. En stark spelare vet att hörnet oftast står kvar nästa drag och att något annat nästan alltid är värt mer just nu. Tabellen visar var nätet slutade vara nybörjare.
6. Att mäta rätt var det svåraste
Nätet, sökningen och reglerna var ett par dagars arbete. Det svåra var att veta om nätet blev bättre. I självspel mäts allt mot något som rör sig: duellen jämför den nya versionen med förra veckans bästa, som själv är på väg.
Det farligaste misstaget var att tro att styrka är ett tal. Vi valde nät till appen i en kedja: den nya slår den förra, som slog den dessförinnan. När vi till slut lät ändpunkterna mötas visade sig styrkan gå i cirkel, som sten, sax och påse. Den äldsta versionen slog den nyaste. Varje version hade blivit vass mot sina närmaste släktingar och samtidigt smalare.
Lösningen blev att mäta mot någon utanför familjen, på ett sätt där slumpen inte får vara med. Vi tog 300 öppningar ur mänskliga turneringspartier och lät varje nät spela dem med båda färgerna mot Egaroucid. Eftersom inget lottas möter två nät exakt samma partier och kan jämföras parti för parti. Det måttet höll hela vägen, och det var med det vi valde nätet som sitter i appen.
7. Mänskliga ställningar, och hur det slutade
Cirkeln är självspelets svaghet: nätet möter alltid sig självt, och lägen som dess egen familj aldrig bygger har det knappt sett. Botemedlet var riktiga partier. Franska Reversiförbundet har sedan 1977 samlat turneringspartier i ett arkiv som heter WTHOR, 137 548 partier, fritt för alla.
Vi använde det på ett sätt som kan låta bakvänt: vi tog ställningarna och slängde dragen. En del träningspartier började i en ställning ur ett mänskligt parti, och därifrån spelade nätet vidare mot sig självt. Det fick aldrig veta vad människan spelade. Ett tidigare försök att lära ett nät härma mänskliga drag hade visat varför: ett nät som härmar kan aldrig bli bättre än förlagan. Arkivet bidrog med frågor, aldrig med svar.
Med de mänskliga ställningarna, äldre versioner som motståndare och ett större minne började vi om från noll den 18 september. Omstarten tränade i tio dagar och prövade fem förbättringar, en i taget och med facit bestämt i förväg. Varje förbättring flyttade något, men oftast en del av spelet på bekostnad av en annan. Den bästa versionen hamnade strax över nätet i appen, men inom mätfelet.
Vi prövade också ett större nät. Det lärde sig partierna bättre men vann inte fler. Det tyder på att det var partierna som begränsade, inte nätets storlek, och fler partier kräver mer datorkraft än en laptop har. Där stannade vi, med nätet i appen som det bästa vi byggt.
8. Från verkstad till telefon
Det färdiga nätet krymps till ett format som telefoner kan köra, 3,6 megabyte, mindre än ett foto. Innan filen godkänns matas samma ställningar genom originalet och kopian, och svaren måste stämma. Med filen följer provställningar, så att appen kan göra samma kontroll på varje telefon.
Juno i appen är bara nät och sökning, hela partiet. Till en början räknade en exakt lösare ut de sista tolv rutorna. Sedan 26 september söker Juno i stället fyra gånger djupare där, och vinner lika ofta. Segrarna blir knappare i brickor, eftersom nätet lärt sig att vinna, inte att vinna stort.
| Juno-nivå | Hur draget väljs |
|---|---|
| Easy | Magkänslan, med mycket slump |
| Medium | Magkänslan, med lite slump och utan sökning |
| Hard | Kort sökning runt nätet |
| Pro | Längre sökning, och djupast på slutet: det nätet kan som mest |
Koden är skriven tillsammans med Claude, Anthropics AI-assistent, och i en bestämd ordning. Ingen sökning byggdes innan reglerna var bevisat felfria, och inget nät tränades innan sökningen spelat tusen partier utan ett regelfel. Ett nät som tränas på ett bräde med ett regelfel lär sig felet, och ingen ser det på kurvorna.
9. Ordlista
- Generation
- Ett varv i träningen: 2 000 partier, ett lärpass, en duell. Numret på nätet är antalet varv.
- Policy
- Nätets magkänsla för nästa drag, en sannolikhet per ruta.
- Value
- Nätets bedömning av läget, från −1 till +1 för den som ska dra.
- Sökning
- Provdragen runt nätet, med det fina namnet Monte Carlo-trädsökning. Läraren i receptet.
- Simulering
- Ett provdrag i sökningen.
- Duell
- Den nya versionen mot den hittills bästa. Över 55 procent tar den över.
- Egaroucid
- Öppet Reversi-program i världsklass av Takuto Yamana. Vårt yttre facit.
- Juno, Zenith
- Juno är nätet som motståndare i appen. Zenith är appens minimax-botar, som räknar i stället för att känna.