Volleybollmotståndaren som lärde sig på en timme
Vad det är
Anders bygger Slime Volleyball, ett enkelt volleybollspel för mobilen där två halvklot slår en boll över ett nät. Den här texten är på svenska. Appen finns inte i butikerna än. Motståndaren heter Vali, och i dag spelar Vali efter regler som vi har skrivit för hand. Ett neuralt nät tränas för att ta över namnet: en motståndare som ingen har programmerat, utan som har lärt sig själv.
Nätet fick spelets fysik och regler, inget annat. Ingen har visat det hur man spelar volleyboll. Det lärde sig genom att spela match efter match mot den handskrivna boten och känna efter vilka rörelser som gav poäng.
Det som spelar är ett litet neuralt nät med drygt 10 000 tal. Trettio gånger i sekunden får det tretton tal: var bollen är och hur fort den rör sig, var de två spelarna är och hur många gånger i rad det själv har rört bollen. Det svarar med ett av sex drag: stå still, gå bakåt eller gå framåt, med eller utan hopp.
Varför vi bygger den
Den handskrivna boten finns i tre nivåer, Dag 1, Dag 3 och Mästare. Den räknar ut var bollen kommer att landa, ställer sig strax bakom och hoppar när bollen är nära. För att kännas mänsklig reagerar den lite sent och gissar lite fel, mest på de lätta nivåerna. Den spelar bra, men den gör alltid samma sak, och efter ett tag ser man igenom den.
Vali är experimentet att ta motståndaren ett steg vidare: ett nät som hittar sitt eget sätt att spela. Målet är inte en oslagbar motståndare, utan en rolig: skicklig men felbar. Som med Juno, motståndaren i Reversi Zen, körs allt på en egen dator, den här gången en stationär Ubuntu-dator, och driften kostar inte mer än strömmen.
Hur den lär sig, i korthet
Tänk dig en nybörjare på sexton planer samtidigt. Efter några minuters spel tittar den tillbaka och frågar: vilka rörelser kom före poängen jag vann, och vilka före dem jag förlorade? Den justerar sin magkänsla en aning och spelar vidare.
Datorn hinner med ungefär 11 000 beslut i sekunden. En timme vid datorn blir därför drygt två veckor volleyboll.
Resan
Hela träningen gick på en natt, i en enda körning.
- 00:54Träningen startar. Nätet börjar från slumpmässiga tal: spelaren vandrar och hoppar på måfå, och bollen träffas bara av en slump.
- 01:02 · 8 minuter, 3 100 matcherVali har lärt sig gå till bollen och slå den, men inte att sluta. Fyra av fem poäng den förlorar mot Mästaren är fel: den rör bollen en fjärde gång, och högst tre touch i rad är tillåtet. Den vinner redan 64 av 100 matcher mot Dag 3, men bara 7 mot Mästaren.
- 01:10 · 16 minuterTouch-regeln sitter. Felen har minskat till en fjärdedel, och Dag 1 och Dag 3 vinner nästan aldrig en match. Mot Mästaren vinner Vali 40 av 100.
- 01:18 · 24 minuter, 7 700 matcherVali slår Mästaren i 93 av 100 matcher.
- 01:26–01:50Vinsten svänger mellan 83 och 96 av 100. Varje ny version är inte bättre än den förra; nätet provar sig fram.
- 01:51 · 57 minuter, 17 700 matcherVi stoppar. Regeln som bestämdes före starten, över 80 av 100 vid tre mätningar i rad, är uppfylld. Det motsvarar nästan 14 dygn volleyboll.
Träningen går att följa på monitorn, med samma kurvor som vi tittar på.
Under natten upptäckte vi ett fel i måttstocken. Matcherna avbröts efter 100 sekunder, och när Vali och Mästaren var jämna hann de sällan till 5 poäng. Då avgjorde ledningen när tiden tog slut. Vi spelade om alla mätningar med matcher som går till 5, och det är de siffrorna som står här.
Hur bra den blev
Bättre än Mästaren, med god marginal. Versionen från 56 minuter vann 193 av 200 matcher mot Mästaren och tog 987 poäng mot 239. Mästaren mot sig själv vinner ungefär hälften, som sig bör. Mot Dag 1 och Dag 3 förlorade Vali inte en enda av 400 matcher.
Det mest talande är hur Vali förlorar sina poäng. Mästaren får nästan aldrig bollen förbi den. Av de 239 poäng Mästaren tog kom 188 av att Vali rörde bollen en fjärde gång.
Hur den spelar
Vali finns inte i appen än, så ingen människa har mött den. Men det syns redan att den spelar på sitt eget sätt.
Den hoppar nästan hela tiden. Ett hopp kostar ingenting, så nätet har ingen anledning att låta bli. Det ser lite rastlöst ut, och det är inget en människa skulle göra.
Den spelar säkert. En boll mellan Vali och Mästaren varar i snitt 25 sekunder, mot 19 sekunder när Mästaren möter sig själv. Vali har lärt sig att inte förlora snarare än att vinna snabbt.
Den är för snabb för att vara mänsklig. Vali ser bollen exakt och reagerar på en trettiondels sekund. Därför är nästa steg att göra den mänsklig: den ska se bollen en aning för sent och gissa lite fel, precis som den handskrivna boten. Före det ska den få spela mot äldre versioner av sig själv, så att den inte bara lär sig slå en enda motståndare.
Frågor och svar
Vilken AI-modell använder ni?
Ingen färdig. Det är inte ChatGPT, Claude eller Gemini, utan ett eget litet nät som började med slumpmässiga tal och bara kan en sak: spela den här volleybollen. Det har drygt 10 000 tal. Juno har ett par miljoner, och en språkmodell hundratals miljarder. Koden är skriven tillsammans med Claude, Anthropics AI-assistent, men den som spelar är helt vår egen.
Är det verkligen inlärning?
Ja. Ingen har sagt till Vali att högst tre touch i rad är tillåtet. Den förlorade bara poäng varje gång den rörde bollen en fjärde gång. Efter åtta minuter kom fyra av fem förlorade poäng därifrån. Åtta minuter senare hade felen minskat till en fjärdedel, och ingen hade rört koden.
Varför gick det så mycket fortare än för Juno?
Tre skäl. Nätet är mycket mindre. Datorn spelar sexton matcher samtidigt utan att tänka framåt. Och ribban var lägre: att slå en handskriven bot, inte världens bästa program. Nästa steg, där Vali möter sig själv, blir svårare att mäta och tar längre tid.
Fuskar den?
Den ser inget som inte syns på skärmen: bollen och de två spelarna. Men den ser exakt och reagerar blixtsnabbt, och det är en sorts fördel som ingen människa har. Därför får den handikapp innan den kommer in i appen: fördröjning och lite brus i det den ser.
Varför slutade ni träna?
För att vi bestämde i förväg när den här etappen var klar: över 80 vunna matcher av 100 mot Mästaren, tre mätningar i rad. Då slutar vi och ser efter, i stället för att vrida på inställningar medan träningen pågår. Vali är inte färdig. Den har klarat första etappen.