En neuronnätsbaserad ansats för att extrahera information ur en enkel schackslutspelsdatabas

Relevanta dokument
Schackprogrammet Amundsen

Symmetrireducering av slutspelsdatabas i Schack

2D Potentialen i en nervcell definieras normalt som skillnaden i spänning mellan dess axon och dendrit.

729G43 Artificiell intelligens / Maskininlärning 3. Marco Kuhlmann

ARTIFICIELLA NEURALA NÄT. MARCO KUHLMANN Institutionen för datavetenskap

MinMax Algoritmen Implementation och optimering. Joakim Östlund 15 juni 2004

1(15) Bilaga 1. Av Projekt Neuronnätverk, ABB Industrigymnasium, Västerås Vt-05

729G43 Artificiell intelligens (2016) Maskininlärning 3. Marco Kuhlmann Institutionen för datavetenskap

Linköpings universitet

Enlagersnät Flerlagersnät Generalisering. Artificiella Neuronnät

UPPGIFT 1 V75 FIGUR 1.

Självlärande Othello-spelare

Artificiella Neuronnät

Utförliga regler för TRAX

Programmering II (ID1019) :00-11:00

Kort Sammanfattning av Schack MAS

Schackledarens blad Lektion 1

UPPGIFT 1 TVÅPOTENSER. UPPGIFT 2 HISSEN I LUSTIGA HUSET.

Genetisk programmering i Othello

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

1. Inledning, som visar att man inte skall tro på allt man ser. Betrakta denna följd av tal, där varje tal är dubbelt så stort som närmast föregående

729G43 Artificiell intelligens (2016) Maskininlärning 2. Marco Kuhlmann Institutionen för datavetenskap

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Inlärning utan övervakning

HKGBB0, Artificiell intelligens

TAOP33/TEN 2 KOMBINATORISK OPTIMERING GRUNDKURS

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

UPPGIFT 1 KANINER. Håkan Strömberg 1 Pär Söderhjelm

Datormetaforen. Från människa till dator Från dator till människa o.s.v.

Vad kan biologiskt plausibla modeller säga oss?

AI och schack. En överblick

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Allmänt om Pidro. Spelets uppbyggnad

Vinjetter TDDC91 Datastrukturer och algoritmer

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Sub-symbolisk kognition & Konnektionism. Kognitionsvetenskaplig Introduktionskurs (729G01) Mats Andrén,

Nätverksprogrammering, EDA095

Lutande torn och kluriga konster!

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

kl Tentaupplägg

! "# # # $ # " % & # # '(") " " )## (")"#*+*(, ( - " ' # (") #. % % /

Resurscentrums matematikleksaker

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Flervariabel Analys för Civilingenjörsutbildning i datateknik

Programmeringsolympiaden 2012 Kvalificering

Sagaforms spelregler SCHACK, FIA MED KNUFF, BACKGAMMON, DOMINO

UPPGIFT 1 WILL ROGERS FENOMEN

Googles sidrankning - linjär algebra värt en förmögenhet

AGA-regler. goforbundet.se/ Referens: AGA 1991

Informationsteknologi Tom Smedsaas 19 augusti 2016

TAOP88/TEN 1 OPTIMERING FÖR INGENJÖRER

729G43 Artificiell intelligens / Maskininlärning 2. Marco Kuhlmann

Övningshäfte 2: Induktion och rekursion

UPPGIFT 1 TVETYDIGA DATUM

Uppgift 1. Kylskåpstransporter

Memory Det kombinatoriska spelet

Rektangelpussel 1. Använd tre bitar vilka som helst och gör en 3 5-rektangel.

Problem: FIL File Paths

Projektdokumentation för Othello

Lär datorn att spela luffarschack

ANN fk. Örjan Ekeberg. Framåtkopplade Nät. återkopplade nät. Olika arkitekturer. BackPropagation through Time. Kalman-Filter tekniker

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Histogram över kanter i bilder

Föreläsning 5: Grafer Del 1

Uppgift 1 ( Betyg 3 uppgift )

Ekvivalensrelationer

Schackspelande datorer Hur fungerar de? Joakim Östlund Patrik Lindegrén 19 oktober 2004

729G11 Artificiell Intelligens Marcus Johansson Marjo581. Fuzzy logic. Marcus Johansson Marjo581

Statistisk mönsterigenkänning

Manual för ett litet FEM-program i Matlab

SELF- ORGANIZING MAPS

TAOP33/TEN 2 KOMBINATORISK OPTIMERING GRUNDKURS

Registerforskning Oktober 2018, Stockholm City Conference Centre. Möjligheter med Artificiell Intelligens inom registerforskningen

[][] Arrayer med två index

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Lösning till fråga 5 kappa-06

getsmart Grå Regler för:

1 Minkostnadsflödesproblem i nätverk

Oppositionsprotokoll-DD143x

Programmeringsolympiaden 2008 Kvalificering

Självlärande Dots & Boxes-spelare

Ökat personligt engagemang En studie om coachande förhållningssätt

Programmeringsolympiaden 2018

a = a a a a a a ± ± ± ±500

LARS ULVELAND HOPFIELDNÄTVERK FÖR IGENKÄNNING AV DEGRADERADE BILDER OCH HANDSKRIVNA TECKEN

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Graärgning och kromatiska formler

Algoritm för uppskattning av den maximala effekten i eldistributionsnät med avseende på Nätnyttomodellens sammanlagringsfunktion

En skola på vetenskaplig grund gränsöverskridande mellan akademi, lärarutbildning och skolpraktik

Trädsökning och datorschack

Funktionsstudier med derivata

Kaliningrad) låg vid bägge sidor av floden Pregel samt på

Regression med Genetiska Algoritmer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Schackborgarmärket. Matt med två torn! Namn:

Transkript:

En neuronnätsbaserad ansats för att extrahera information ur en enkel schackslutspelsdatabas JOHN BERGBOM Examensarbete Stockholm, Sverige 00 TRITA-NA-E0

Numerisk analys och datalogi Department of Numerical Analysis KTH and Computer Science 00 Stockholm Royal Institute of Technology SE-00 Stockholm, Sweden En neuronnätsbaserad ansats för att extrahera information ur en enkel schackslutspelsdatabas JOHN BERGBOM TRITA-NA-E0 Examensarbete i datalogi om 0 poäng vid Programmet för datateknik, Kungliga Tekniska Högskolan år 00 Handledare på Nada var Mikael Huss Examinator var Anders Lansner

Sammanfattning För enkla schackslutspel existerar databaser med perfekt information, som talar om avståndet till matt för olika positioner. Dessa databaser är mycket utrymmeskrävande, vilket gör dem otympliga och vållar olika praktiska problem vid användningen av dem. Skulle det vara möjligt att på något sätt extrahera högnivåinformation ur dessa slutspelsdatabaser? Syftet med detta examensarbete är att undersöka hur väl ett artificiellt neuronnät är lämpat för denna uppgift. För mycket enkla slutspel, som till exempel krk (kung-torn-kung), är det en smal sak att skriva regler som mattar den ensamme kungen. Därför är nyttan med att använda ett neuronnät för att spela den sortens slutspel diskutabel särskilt då forskning visat att en neuronnätslösning är långsammare än en regelbaserad lösning. För de lite svårare slutspelen finns dock inte lika enkla regler. Denna undersökning försöker utröna om ett neuronnät kan lära sig att spela kbnk-slutspelet (kung-löpare-springare-kung). Genom att utnyttja slutspelsdatabaser lär sig nätet avståndet till matt för olika positioner. Resultaten av undersökningen antyder att denna typ av problem är för svårt för ett neuronnät att lära sig. Nätverket lär sig den grundläggande strategin för mattsättning, men den inlärda målfunktionen är för inexakt för att nätet ska spela bra nog att vara användbart i praktiken. I den avslutande delen av rapporten ges förslag på framtida forskningsuppgifter inom området.

A Neural Network Approach for Extracting Information from a Simple Chess Endgame Database Abstract For simple chess endgames, there exists databases with perfect knowledge, that give the distance-to-mate (dtm) for any board state. These databases are very large, which makes them inconvenient in several ways. Would it somehow be possible to extract higher-level information and knowledge from these tablebases? This thesis tries to investigate how well a neural network is suited to this task. For really simple endgames, such as krk (king-rook-king), it is a trivial task to write a set of rules that mates the lone king. So the benefit of using a neural network for playing these kind of endgames is not so high especially since research has indicated that a neural network solution gives slower performance than a rulebased solution. Can a neural network be used for learning how to play a little harder endgame, where the rules of play are not so easily defined? This thesis tries to answer this question by teaching a neural net to play the kbnk-endgame (king-bishop-knightking). The net learns to play by learning the distance-to-mate values for different positions. The results indicate that this problem domain is too difficult for a neural network. The network learns the basic strategic concepts of mating, but the learned target function is too inaccurate to make the solution usable in practice. In the final section of the report, suggestions are made for future work in the field.

Förord Detta examensarbete i datalogi är utfört vid NADA på KTH. Handledare har varit Mikael Huss, och jobbet är gjort i NADA:s datasalar. Uppgiftsformuleringen har tänkts ut av undertecknad, och sedan godkänts av NADA som en lämplig examensarbetesuppgift.

Innehåll Bakgrund. Slutspelsdatabaser..... Hurskapasslutspelsdatabaser?..... Problem med slutspelsdatabaser................. Syfte.... Forskningsresultatinomområdet... Teori 8. Neuronnät... 8.. Artificiellanoder... 9.. Artificiellaneuronnät... 9. Kortomslutspel.... Kopplingentillenschackmotor... Undersökning. Prototyp.... Slutspelet kbnk... 9.. Enkelnät... 0.. Multipelnät... Slutsatser. Sammanfattning.... Analysavresultat.... Slutsatser.... Framtida forskningsuppgifter inom området.............. 8 Referenser 0 A Schackställningar B Schackställningar för krk-prototypen

Kapitel Bakgrund Under ca 0 år har forskning bedrivits med avsikt att skapa datorprogram som spelar schack. En av de första artiklarna inom området skrevs 90 av Shannon [], som skisserar algoritmer för hur schackspelande ska gå till. Han beskrev två olika strategier: Titta på alla olika drag i en given position, och expandera alla möjliga dragsekvenser rekursivt, ända till en viss sökhorisont, dvs. ett visst antal drag framåt jämfört med nuvarande position. Denna teknik brukar kallas brute force. Gör en analys av en given position, för att bestämma de bästa dragen, och bygg sedan ett sökträd rekursivt, där endast de bästa dragen (och deras bästa svarsdrag) gås igenom. Detta kallas selektiv sökning. Under schackprogrammeringens barndom användes i huvudsak selektiv sökning. Under hela 0-talet spelade datorerna väldigt dåligt. År 98 presenterade Newell m.fl. [] alfabeta-beskärning, vilken gör det möjligt att undvika att söka igenom en stor del av noderna i ett sökträd. I början av 0-talet började de flesta program gå över till brute force, dvs. ingen selektiv sökning görs, utan alla drag beaktas i sökträdet. År 98 blev Belle det första schackprogrammet som fick en U.S. Master-titel. Första gången ett schackprogram slog en stormästare i turneringsspel skedde 988, och programmet hette Deep Thought. År 99 spelade IBM:s schackdator Deep Blue en match mot regerande världsmästaren Garri Kasparov. I denna match blev världsmästaren för första gången besegrad av en dator, i ett parti. Kasparov vann dock matchen. Ett år senare fick IBM-teamet en returmatch mot Kasparov, och då vann Deep Blue med,, i en match över sex partier. Detta är schackhistoria, eftersom det var första gången en dator slog världsmästaren i en match. Ett antal detaljer som faller utanför ramen för denna rapport, antyder dock att Deep Blue inte nödvändigtvis är en bättre schackspelare än Kasparov. [] Vi kan nog säga att det inte är helt klarlagt vem som är bäst, människan eller datorn. De bästa programmen spelar mycket jämnt mot de allra bästa mänskliga spelarna.

Är det inte bara en tidsfråga innan datorerna enkelt vinner över människan i schack, med ökad beräkningskapacitet? Ja, det ligger mycket i detta. Men det är samtidigt en förenkling av sanningen. Människan och datorn är bra på olika saker. Datorernas starka sida är att de är otroligt snabba, och kan bedöma 00000-tals ställningar i sekunden. En människa kan endast bedöma en eller ett par ställningar per sekund. En människa är dock otroligt överlägsen datorn när det gäller att vaska fram intressanta ställningar att bedöma. En människa går igenom en eller ett par troliga varianter, och räknar ett antal drag framåt på dessa. Detta innebär att datorn kastar bort 99% av sin tid med att bedöma värdelösa ställningar, som knappast kommer att uppkomma i praktiken. Datorprogram bedömer i första hand en ställning efter den materiella balansen, som innebär att man poängsätter de olika pjäserna. Dessutom ges poäng efter olika positionella faktorer såsom exempelvis ägande av en öppen linje, central placering av pjäser, osv. Människan är dock bättre än datorn på positionell bedömning, dvs. datorn bedömer en ställning snabbt, men människans bedömning är bättre. Orsaken till det är att en schackmästares instinktiva känsla för en viss ställning, är svår att formalisera i ett datorprogram. Som exempel kan vi ta en springare jämfört med en löpare. Normalt räknas löparen som något starkare än springaren. Om dessa pjäser ges olika värden, kommer dock datorn att byta bort sina springare mot motståndarens löpare så fort den får chansen. Detta är inte optimalt, och måste därför förhindras. Ofta kan det vara oklart i en given ställning, om löparen eller springaren är starkast. Dessutom finns det väldigt många ställningar där springaren är överlägsen. Det är svårt att uttrycka dessa avvägningar i programkod. Så för att besvara vår fråga: Datorerna blir bättre och bättre med ökad beräkningskapacitet, och förmodligen kommer en dag de bästa mänskliga spelarna vara helt chanslösa mot datorerna. Hur bra en dator spelar är mycket starkt beroende av hur många drag framåt den kan räkna. Den så kallade förgreningsfaktorn beskriver det genomsnittliga antalet drag som är möjliga i varje given ställning. Schack har en förgreningsfaktor på omkring [], vilket är relativt högt. Det innebär att en dubbelt så snabb dator ändå inte kommer att kunna tänka så mycket djupare. En dator måste vara många gånger snabbare än föregångaren för att kunna tänka endast ett halvdrag djupare framåt. Det finns även vissa moment som datorn förmodligen alltid kommer att ha svårt för. En dator kan endast se det som ligger inom dess sökhorisont, vilket ger datorn stora svårigheter att hantera offer som på lång sikt kan ge en fördel. En människa kan se att ett visst offer är fördelaktigt eftersom det t.ex. ger den offrande parten ett mycket aktivt spel, vilket troligtvis ger utdelning betydligt längre fram i partiet. Viktigt att notera är att människan vet detta instinktivt, utan att behöva räkna igenom alla kombinationer. Detta klarar inte en dator. Lite förenklat kan man säga Detta skulle kräva att datorn ser över sin sökhorisont. Vissa enkla fall kan dock programmeras in i evalueringsfunktionen. Till exempel kan datorn i ett bondeslutspel se hur långt ifrån en fribonde dess egen kung befinner sig, och utifrån det avgöra om bonden kan stoppas. Detta kan alltså avgöras utan att faktiskt behöva spela alla drag. Faktum kvarstår dock att en dator i det generella fallet har mycket stora svårigheter att se saker bortom horisonten.

att datorn endast ser mer material = fördel. (Datorprogram försöker även som ovan nämnts att bedöma ställningars positionella element, men de är inte på långt när lika bra som människor på detta.) Taktiska offerkombinationer vars nytta framgår inom datorns sökhorisont hanteras dock galant av ett program. Ytterligare en faktor som är värd att nämna, är att det visat sig att nyttan med ökat sökdjup blir mindre och mindre ju djupare sökning man gör. [] Det innebär att vid en viss gräns ger ytterligare sökning troligen inte så mycket bättre prestanda åt schackprogrammet. Då är det förmodligen bättre att utnyttja de extra klockcyklerna till en förbättrad evalueringsfunktion, än till att söka djupare.. Slutspelsdatabaser Ett schackparti består av tre distinkta faser, som är relativt olika varandra, även om ingen väldefinierad gräns finnes mellan dem. Det är öppningen, mittspelet och slutspelet. I öppningen finns det färdiga databaser med bra drag, och utöver dessa finns enkla regler om att erövra centrum, utveckla pjäserna, ej flytta en pjäs många gånger (tempoförlust), osv. Även i slutspelet finns regler för spelföringen. Det är mittspelet som är det svåra, både för en dator och för en människa. I denna rapport ska vi koncentrera oss på slutspelet. Det har gjorts experiment med att räkna ut de perfekta dragen i enkla schackslutspel. Tanken är att en tabell skapas över alla möjliga positioner som kan uppkomma i ett visst slutspel. För varje position lagras ett värde som beskriver positionen, och tabellen sparas sedan i en så kallad slutspelsdatabas. Allmänt kan sägas att det finns två typer av slutspelsdatabaser: Distance To Mate (DTM), och Distance To Conversion (DTC). DTM innebär att för varje position lagras ett värde som talar om antalet halvdrag kvar till schack och matt. DTC innebär att värdet som lagras representerar antalet halvdrag till förvandling. (Som förvandling räknas något avgörande i partiet, som bondeförvandling, erövring av pjäs eller schack och matt.) DTM-databaser är de vanligast förekommande. En pionjär inom området är Thompson [], som tidigt gjorde experiment med slutspelsdatabaser. Thompsons skapelse interagerade dock inte så bra med sättet ett schackprogram genomför sökningar. Edwards [] skapade en förbättrad typ av databas för att komma till rätta med bristerna i Thompsons variant. Edwards indexering av schackpositioner är långt ifrån optimal, vilket leder till att databaserna kräver mycket större lagringsutrymme än nödvändigt. Nästa förbättring gjordes av Nalimov [, ], vars huvudmål var att lagra databaserna effektivare. Nalimovs databaser är numera de mest använda, och dessa har använts även i detta arbete. För närvarande finns det kompletta slutspelsdatabaser för upp till pjäser, och för många av slutspelen med pjäser. Slutspelsdatabaser för pjäser är idag och inom en överskådlig tid framöver en beräkningsmässig och/eller lagringsmässig omöjlighet. Slutspelsdatabaser kallas för tablebases på engelska.

.. Hur skapas slutspelsdatabaser? För att skapa en slutspelsdatabas går man igenom alla möjliga ställningar som kan förekomma i det aktuella slutspelet. Alla ställningar där motspelaren är mattad kallas matt i 0 -ställningar. Sedan går man igenom alla ställningar igen, och ser vilka ställningar som på ett halvdrag kan nå en matt i 0 -ställning, och kallar dessa matt i -ställningar. På detta sätt fortsätter man tills inga vidare framsteg görs. Man vet då att alla ställningar som ejär uppräknade, är remipartier. Exempel: se figurerna.,. och.. 8 RZ0Z0ZkZ 0Z0Z0ZKZ 8 0Z0Z0ZkZ 0Z0Z0ZKZ RZ0Z0Z0Z 8 0Z0Z0Z0j 0Z0Z0ZKZ RZ0Z0Z0Z Figur.. Matt i 0,spelet slut. Figur.. Matt i, vit vid draget. Figur.. Matt i, svart vid draget... Problem med slutspelsdatabaser Dessa slutspelsdatabaser måste hantera en otroligt stor mängd olika positioner. Som ett räkneexempel tas krk-slutspelet (kung-torn-kung), som består av endast tre pjäser. Den första pjäsen kan placeras på en av rutor, nästa på en av rutor, och den sista på en av rutor. ** blir en kvarts miljon. Dessutom krävs information om vem som är vid draget, svart eller vit, vilket ger en halv miljon positioner. Exemplet visar tydligt att att antalet positioner är mycket stort. Detta ställer krav på att databaserna lagras på ett listigt sätt, för att de inte ska bli allt för stora. Även om lagringen är mycket effektiv, kräver dock databaserna för de större Vissa av dessa positioner är dock illegala, och behöver inte lagras. De två kungarna får ju inte stå på två närliggande rutor. Dessutom kan inte t.ex. svart stå i schack samtidigt som det är vits tur. I de flesta slutspel finns även andra typer av ställningar som omöjligt kan uppstå. Ett exempel är kpk-slutspelet, i följande position: vit kung a, vit bonde a, svart kung a8. Denna ställning kan uppstå om svart är vid draget, och då blir partiet patt (remi), men ställningen kan omöjligt uppkomma om vit är vid draget. För mer information angående otillåtna ställningar hänvisas till Lippolds artikel i ämnet. [8] Ett möjligt sätt att ytterligare minska antalet positioner som behöver lagras, är att ej inkludera speglingar. Exempelvis är ställningen (vit: kung b, bonde c, svart: kung c) endast en spegling av ställningen (vit: kung g, bonde f, svart: kung f). Ett listigt utnyttjande av speglingar ger en signifikant minskning av antalet ställningar som behöver lagras.

slutspelen mycket stort lagringsutrymme. Till exempel beräknas hela mängden av -pjäsers slutspel ta upp minst en terabyte (000 GB). [, sekt. A0] Detta leder till praktiska problem att använda dessa slutspelsdatabaser. De tar lång tid att generera, lång tid att ladda ner, och kräver mycket stort hårddiskutrymme. Dessutom tar det lång tid att göra uppslagningar.. Syfte Det står klart att användandet av slutspelsdatabaser medför vissa problem. Syftet med detta arbete är att undersöka om ett artificiellt neuronnät kan användas för att extrahera högnivåinformation ur dessa databaser. Med högnivåinformation avses här den bakomliggande teorin för spelföring i ett visst slutspel. Tanken är att nätverket genom att titta på olika exempelställningar ska förmås att dra slutsatser om spelföringen, och generalisera denna kunskap till nya osedda positioner. I avsnitt. förklaras mer utförligt hur ett artificiellt neuronnät fungerar. För tillfället räcker det om läsaren ser det som en konstgjord hjärna. Det är känt att artificiella neuronnät kan lära sig att spela enkla slutspel (se avsnitt.). Det är dock oklart hur långt neuronnätens kapacitet sträcker sig. Målet med denna undersökning är att ta reda på det genom att lära ett neuronnät att spela ett något svårare slutspel. Slutspelet som väljs är det så kallade kbnk-slutspelet, vilket innebär att kung, löpare och springare spelar mot en ensam motståndarkung. För motivering till varför detta slutspel valdes, se slutet av avsnitt.. Innan vi går vidare behövs först en kort kommentar angående de termer som kommer att användas då vi talar om slutspel. De vedertagna engelska förkortningarna kommer att användas. Varje pjäs betecknas med en bokstav: k = king/kung, q = queen/dam, r = rook/torn, b = bishop/löpare, n = knight/springare, p = pawn/bonde. Vits kung skrivs alltid ut först, och sedan vits övriga pjäser, varefter svarts kung skrivs ut, samt slutligen resterande svarta pjäser. Ex. kpk = vit kung och bonde mot ensam svart kung, krk = vit kung och torn mot ensam svart kung, kbnk = vit kung, löpare och springare mot ensam svart kung.. Forskningsresultat inom området Schackprogrammering är ett relativt stort forskningsområde, och det samma gäller forskning rörande artificiella neuronnät. Det finns dock relativt lite forskning gjord som kombinerar dessa områden. Heinz [] gjorde en väldigt effektiv implementation av en evalueringsfunktion för (exempelvis) schack. Idén är att man avbildar ett neuralt nätverk på ett träd. På så sätt får man ett system som kombinerar fördelarna med artificiella neuronnät, nämligen jämnheten, anpassningsförmågan och enkelheten, med ett träds fördelar, nämligen effektivitet. Thrun [8] skapade NeuroChess, som är ett program som lär sig spela schack genom att spela igenom stormästarpartier. Målet är att hitta en evalueringsfunktion V, som rankar schackpositioner efter hur fördelaktiga de är. V representeras av ett

artificiellt neuronnät. Inlärningen av V sker genom att träna på hela schackpartier, och av slutresultatet (vinst, förlust eller remi) utröna vilka ställningar som är bra och vilka som är dåliga. Denna typ av inlärning kallas temporal difference. För träningen av V utnyttjas en schackmodell M, som representeras av ett neuronnät och som hanterar domänspecifik kunskap (schackteori). Denna schackmodell tränas med hjälp av en databas med 0000 partier spelade av experter. NeuroChess har lyckats lära sig att skydda sitt material, att byta ner material, och att skydda kungen. Den spelar dock mycket dåligt i spelöppningsfasen. NeuroChess vinner ungefär % av alla partier mot GNU-chess, om bägge använder samma sökmotor. Haworth & Velliste [0] undersöker huruvida ett artificiellt neuronnät kan lära sig att klassificera kpk-positioner som antingen vinst eller remi. De rapporterar att nätet lyckades relativt bra med denna uppgift. Det blev dock inte klarlagt om det existerar någon intern representation för nätverket som är överlägsen andra. Greer m.fl. [8] undersökte om dragföljden i alfabeta-sökning kan förbättras med hjälp av ett neuronnät. Neuronnätet tränas att ordna olika sektorer av brädet efter hur stort territorium varje spelare kontrollerar. Dragen görs sedan i en ordning som beror på vilka sektorer de påverkar. Denna metod rapporteras söka igenom färre noder än vad andra vanliga metoder för dragordning gör. Problemet är att det tar så lång tid att ordna dragen, att den totala tiden ändå inte minskas jämfört med att använda andra tillgängliga metoder för dragordning. Robertsson [] gjorde ett examensarbete som undersöker om ett neuronnät kan spela krk-slutspelet. Neuronnätet lär sig hur många halvdrag det är kvar till matt från en viss position. Slumpmässiga positioner används, och information om antalet halvdrag kvar till matt hämtas från en slutspelsdatabas. Robertsson rapporterar att nätet lärde sig att förstå strategiska koncept i schackslutspel. Det är dock tveksamt om man tjänar något på att använda ett neuronnät i evalueringsfunktionen, eftersom det är så enkelt att skriva regler för hur spelföringen ska gå till. Dessutom är en neuronnätsbaserad lösning långsammare än en regelbaserad lösning. Kort motivering till varför kbnk-slutspelet valdes Det är akademiskt intressant att Robertsson lyckats skapa ett neuronnät som spelar krk-slutspelet. Den praktiska nyttan är dock tvivelaktig. Om ett neuronnät istället skulle kunna lära sig ett svårare slutspel, kanske lösningen skulle bli praktiskt användbar. Dels är det svårare att skapa regler för spelföringen för ett svårare slutspel, och dels är det för de svårare slutspelen problemen uppkommer med mycket stora slutspelsdatabaser. Denna undersökning avser att kasta ljus över ämnet. Riktigt svåra slutspel kommer dock inte att behandlas. Som tidigare nämnts valdes kbnkslutspelet, vilket bedömdes vara ett lämpligt mellanting av ett lätt slutspel och ett svårt slutspel. kbnk-slutspelet är svårt för en människa att lära sig, men består av Vid användning av alfabeta-sökning, som är den metod som används i nästan alla schackprogram idag, är det mycket viktigt att söka igenom dragen i rätt ordning, för att få ett så litet sökträd som möjligt. [, 9]

så få pjäser att möjligheterna att få ett neuronnät att lära sig det, bedömdes som goda. För den intresserade läsaren kan nämnas att en komplett slutspelsdatabas för krk-slutspelet är ca kb stor, medan den för kbnk-slutspelet är ca Mb stor. Som jämförelse tar kbbnkb-slutspelet ca, Gb i anspråk. kbbnkb = kung, två löpare och springare mot kung och löpare

Kapitel Teori Detta kapitel beskriver hur neuronnät fungerar, hur de tränas, samt vissa problem som kan uppstå vid träningen. Vidare sägs några ord om slutspel i schack. Kapitlet avslutas med en beskrivning av hur ett neuronnät som spelar slutspel kan användas av ett schackprogram. I kapitlet kommer termerna artificiellt neuronnät och neuralt nätverk att användas synonymt.. Neuronnät Den mänskliga hjärnan består av uppskattningsvis ca 00 miljarder nervceller, eller neuroner. Dessa nervceller är ihopkopplade i så kallade synapser, och de kommunicerar via svaga elektriska signaler. Till varje neuron är kopplat ett stort antal andra neuroner. Förenklat kan man säga att de inkommande signalerna summeras, och om de kommer över ett visst tröskelvärde genereras en utgående puls. Nervcellerna är alltså ihopkopplade i ett stort nätverk, eller ett så kallat neuronnät. Bearbetningsförmågan hos nätet är lagrad i styrkan hos förbindelsen mellan neuronerna. Kopplingen mellan olika nervceller består av en elektrokemisk process, som vidarebefordrar signalerna. Denna koppling är inte speciellt snabb. Den snabbaste vidarebefordringen av signaler kan ske på runt en tusendels sekund. Detta är mycket långsamt jämfört med en dator, som kan utföra miljarder instruktioner per sekund. För en människa tar det runt en tiondels sekund att känna igen en bild av sin egen mor, vilket innebär att kedjan av neuroner som reagerar inte kan vara längre än högst ett par hundra steg. [0, sida 8] Orsaken till att den mänskliga hjärnan ändå har så stor kapacitet är att informationsbehandlingen sker i en massivt parallell process. Ett artificiellt neuronnät (ANN) är ett försök att modellera beteendet hos den mänskliga hjärnan i ett datorprogram. Naturligtvis arbetar man då med förenklingar, men inspiration är tagen från verklig neural informationsbehandling. Ofta införs vissa trick som effektiviserar beräkningarna, även om de i vissa fall är biologiskt orealistiska. Vid implementationen av ANN-ramverket kom Freeman & Skapura:s bok [] till stor nytta. Här ges en kortfattat beskrivning av funktionaliteten hos ett 8

ANN. För en utförligare beskrivning hänvisas till litteratur inom området... Artificiella noder Den mänskliga hjärnans nervceller motsvaras i vår artificiella modell av noder. På samma sätt som en riktig nervcell, har en artificiell nod flera inputs och en output. De olika inputarna summeras och bildar en så kallad aktivering för noden, se figur.. x w x w x n. w n Σ Aktivering a n a = w i x i i= Figur.. En nod i ett artificiellt nätverk. Denna aktivering används inte direkt som output för noden. Orsaken till det är att aktiveringens belopp kan vara väldigt skiftande. Normalt vill man begränsa outputen till ett visst intervall, och för det används en aktiveringsfunktion. Olika varianter existerar av aktiveringsfunktionen. I detta projekt användes en så kallad semilinjär squashingfunktion, eller sigmoid, se figur.. y a a Output y y = +e a Figur.. Aktiveringsfunktion för en semilinjär nod... Artificiella neuronnät De noder som beskrivits kopplas i sin tur ihop till större nätverk. En vanlig typ av nätverk består av ett inlager, ett gömt lager, och ett utlager. Varje nod i det gömda lagret tar input från hela inlagret och varje utnod tar input från alla outputs i det gömda lagret. Värden propagerar då från inlagret, via det gömda lagret, till utlagret, som ger output. Figur. illustrerar detta. 9

Inlager Gömt lager Utlager x x x x Figur.. Exempel på tvålagersnät. Hur tränas ett neuralt nätverk? Ett neuralt nätverk kan initialt ingenting, utan måste först tränas. Under träningen presenteras en mängd träningsexempel, eller mönster, genom att visa nätet en viss indata och samtidigt visa vilken utdata som önskas för denna indata. Tanken är att nätet ska anpassa sin interna struktur så att utdata genereras som mer liknar den önskade utdatan. Denna typ av inlärning kallas övervakad inlärning. Ett multilagernäts förmåga att automatiskt upptäcka en användbar representation i de gömda lagren, är en nyckelegenskap inom ANNinlärning. Det hela handlar om att få vikterna i nätet att ställa in sig på bra värden. Saken kan ses på olika sätt. Ett nät som har n stycken inputs, kan betraktas som en mönsterrymd med n-dimensioner. Nätverket ska då hitta en partitionering av denna mönsterrymd, som korrekt klassificerar de träningsexempel nätverket får. Ett annat sätt att se funktionaliteten, är att se det som att nätet upptäcker karakteristiska egenskaper i träningsdatat som representerar väsentlig information för att beskriva eller klassificera dessa träningsexempel. Den vanligaste träningsalgoritmen kallas error backpropagation. Den går ut på att man försöker minimera en felfunktion E. Denna funktion uttrycker diskrepansen mellan önskad och faktisk output hos nätverket, och är en funktion av utnodens vikter, E = E(w,w,...,w x ). Varje utnod tränas genom att felfunktionens gradient följs nedåt. Sedan avgörs vilken påverkan de gömda noderna har på felet, varvid dess vikter uppdateras. Vikterna bör inte förändras drastiskt, för då görs tidigare inlärning om intet. Mängden med träningsexempel visas flera gånger, i olika epoker, 0

och för varje exempel som visas modifieras vikterna gradvis. Detta indikerar att artificiella neuronnät tar lång tid att träna. Att använda en inlärd målfunktion går dock fort. Generalisering och överträning. Målet med träningen är att nätverket ska upptäcka karakteristiska egenskaper hos träningsmängden, så att det färdigtränade nätverket korrekt kan klassificera nya mönster som ejingick i träningen. Om detta uppnås sägs nätet generalisera väl. Om nätet får träna nog länge kommer dess felfunktion att gå mot noll. Det är dock inte samma sak som att generaliseringen blir bättre. Faktum är att det oftast är dåligt att träna nätverket för länge. Det som sker vid överdriven träning är att nätet överanpassar sig till träningsdatat, så att de underliggande trenderna glöms bort. Beslutsytan i mönsterrymden blir väldigt veckad. Beslutsyta Vit Svart Beslutsyta Vit Svart Figur.. Generalisering och överträning i mönsterrymden. Graferna i figur. visar ett nät som korrekt ska klassificera en cirkel som antingen svart eller vit. I den vänstra delen har nätet inte tränat så länge, och beslutsytan har därför inte hunnit bli så veckad. Alla träningsexempel utom två är korrekt klassificerade. Antag nu att två tidigare osedda mönster visas för nätet. Dessa nya mönster representeras av den vita respektive svarta kvadraten, och bilden visar att de klassificeras korrekt. Det verkar alltså som att detta nät generaliserar väl trots att alla träningsexempel inte klassificerades korrekt. På den högra bilden är beslutsytan betydligt mer veckad. Alla träningsexempel klassificeras korrekt. De två nya mönstren som visas för nätet blir dock båda felklassificerade. Man kan misstänka att det finns många mönster som kommer att klassificeras fel, särskilt mönster som ligger nära beslutsgränsen. Utan att gå in på en massa matematik vill vi med detta resonemang antyda att en jämn beslutsyta ger en bättre generalisering. Det är också så att ju fler gömda neuroner och/eller gömda lager ett nät har, desto större frihet får nätet att välja beslutsyta och ju större frihet nätet har, desto mer veckad blir beslutsytan. Av detta dras slutsatsen att en så enkel representation för nätet som möjligt är önskvärd.

Hur avgörs när träningen ska avslutas, så att överträning undviks? Träningsdatat delas upp i två delmängder: en träningsmängd T,ochenvalideringsmängd V.Nu tränas nätet med T, och då och då beräknas felet med avseende på V. Felet med avseende på T kommer att minska och minska med ökande träning. Felet med avseende på V däremot, kommer att minska till en början, för att sedan öka. Se figur.. Figuren är visserligen en idealiserad bild av verkligheten, men principen gäller i det normala fallet. Fel Valideringsmängd Träningsmängd Antal epoker Figur.. Felfrekvens för träningsdata och valideringsdata. När valideringsfelet är som lägst, är nätets generalisering med avseende på de osedda exemplen i V som bäst. Av detta följer att den bästa tidpunkten att avsluta träningen är då valideringsfelet når sitt minimum. Denna träningsteknik kallas early stopping. Detta var en kort introduktion till artificiella neuronnät. Det är ejämnat som en utförlig beskrivning av NN:s funktionalitet, utan den intresserade läsaren hänvisas till litteratur i ämnet.. Kort om slutspel För enkla slutspel är det relativt lätt att skapa regler för hur spelföringen ska gå till. I krk-slutspelet ska vit försöka driva den ensamme svarte kungen mot kanten av brädet, och vits kung ska följa efter i bakhasorna (fig..). Mattsättningen sker då den svarte kungen befinner sig vid kanten och inte har någonstans att fly då vit schackar (fig..). Hur sker mattsättningen i det slutspel som valts ut för neuronnätsinlärning, nämligen kbnk? Den ensamme svarte kungen måste drivas till ett hörn som har samma färg som de rutor löparen går på. Endast då kan en matt tvingas fram. Det är inte alls självklart på vilket sätt den svarte kungen ska drivas framåt, och det är inte heller självklart hur svart bäst ska försvara sig genom att försöka hålla sig Svart kan inte hålla remi om vit spelar korrekt, men svart bör försöka fördröja matten så många drag som möjligt. Det kan nämligen hända att vit gör något misstag, och därför inte klarar av att sätta matt inom 0 drag, vilket skulle leda till remi.

8 RZ0j0Z0Z 0Z0J0Z0Z 8 RZ0j0Z0Z 0Z0J0Z0Z Figur.. Svarts kung drivs mot kanten. Figur.. Svarts kung har ingenstans att ta vägen. Matt. kvar på mitten av brädet, eller genom att söka sig till ett hörn av fel färg. Det är betydligt svårare att skriva regler för kbnk- änkrk-slutspelet.. Kopplingen till en schackmotor Hur kan ett neuronnät som spelar ett visst slutspel användas i praktiken? För att förklara det beskrivs här med några korta ord hur ett schackprogram är uppbyggt. Ett schackprogram består förenklat av tre delar: draggenerering, sökning och en evalueringsfunktion. [, 9, 0] Sökningsmodulen skapar ett träd av alla möjliga kombinationer som kan uppstå ett visst antal halvdrag framåt. Draggenereringsfunktionen anropas för att skapa varje ny nod i trädet. Trädet söks igenom i djupet först-ordning och evalueringsfunktionen ger ett värde åt varje löv som stöts på. I evalueringsfunktionen finns schackkunskaperna inlagda. Det absolut viktigaste attributet för att bedöma hur bra en ställning är, är att titta på hur mycket material spelarna har kvar på brädet. Hänsyn tas även till positionella faktorer, såsom dubbelbönder (ger minuspoäng), behärskande av en linje (ger pluspoäng), kungens säkerhet, osv. Det är här i evalueringsfunktionen det tränade neuronnätet placeras. Noderna i figur.8 representerar schackställningar. Lövens värden har getts av evalueringsfunktionen. Ett positivt värde är bra för vit, och ett negativt värde är bra för svart. Lövens värden propageras upp till roten av trädet med den så kallade minmax-proceduren. [] Minmax innebär enkelt att en nod ges samma värde som dess bästa barn. Motståndaren antas alltid spela optimalt. Vad innebär detta i figuren? I nod B kommer svart att välja det bästa draget, dvs. det som har värdet - (vilket är minimum för vit). Därför får nod B värdet -. På samma sätt får nod C värdet. I A väljs det drag som ger störst utdelning för vit, och det blir då den högra noden som har värdet. Dvs. i varannan nivå väljs det drag som maximerar vits utdelning, och i varannan det drag som minimerar vits utdelning därav namnet minmax. För den intresserade läsaren rekommenderas webbsidan http://digilander.libero.it/ gargamellachess/papers.htm, som innehåller en mängd olika forskningsrapporter över mer avancerade områden inom schackprogrammering.

Vits drag (Max) Nuvarande ställning A Svarts drag (Min) B C D - E F G Figur.8. Exempel på sökning två halvdrag framåt. I denna undersökning används en schackmotor som heter Amundsen. [] Den programversion som användes (v. 0,) har inte implementerat dragupprepningsregeln, som säger att om en identisk ställning uppkommer tre gånger i partiet, blir det remi. Ett tillägg gjordes därför i programmet, så att dragupprepningar hanteras korrekt. Amundsen är ett program som jag skrivit själv för en annan kurs. Den materiella balansen räknas ut på konventionellt sätt, utan hjälp av neuronnät. Neuronnätet ger endast den positionella bedömningen, dvs. det som skiljer två materiellt lika ställningar från varandra.

Kapitel Undersökning För att testa olika idéer inleddes detta arbete med att skapa en prototyp. Som prototyp valdes att skapa ett neuronnät som spelar krk-slutspelet, vilket är samma som Robertssons [] exjobb. Tanken är att få prototypen att spela så bra som möjligt, genom att införa lämpliga inattribut (eng: input features) och diverse trick som höjer nätets prestanda. Slutsatserna från skapandet av prototypen utnyttjas sedan för att skapa ett neuronnät för ett svårare slutspel, nämligen kbnk. De träningsexempel neuronnätet tränas med, är konstruerade så att det alltid är vit som har en löpare och en springare, och svarts kung är ensam. För att undvika överträning har en stor mängd träningsexempel använts (0000 stycken), och träningen har inte drivits så långt. Förhoppningen är att nätverket ska ha så många exempel att hålla reda på, att det endast kan lära sig de stora dragen, och inte hinner börja lära sig egenheter hos enskilda exempel. Valideringsmängden innehåller 00 exempel, och det gäller genom hela undersökningen. Alla träningsexempel är skapade slumpmässigt, och de ska vara giltiga schackpositioner, dvs. kungarna kan ejplaceras bredvid varandra, och svart kan inte stå i schack om det är vits tur. Positionerna får ejheller vara sådana att de leder till remi, dvs. att någon av vits pjäser kan tas av svart eller att svart blir pattställd. Varje träningsexempel består av en ställning tillsammans med ett målvärde som fås från en slutspelsdatabas. Målvärdet anger antalet halvdrag som är kvar till matt för ställningen i fråga. Tanken är att för varje exempel nätverket ser, ska dess interna struktur förändras så att nätet ger en output som mer liknar målvärdet. Ett problem är dock att den aktiveringsfunktion som används, sigmoiden (se figur.), endast kan ge output i intervallet 0 till, medan antalet halvdrag till matt alltid är ett heltal. Därför måste det värde slutspelsdatabasen ger transformeras, innan exemplet kan visas för neuronnätet. Då det talas om felet i nätverkets output, avses om inget annat sägs, felet på valideringsmängden. Det är nämligen valideringsfelet som är det intressanta, för det ger ett mått på hur väl nätverket generaliserar för osedda exempel. Figur. visar även att det ejär önskvärt att ha ett så lågt träningsfel som möjligt. (Figuren är Patt = Spelaren vid draget står ej i schack, och kan ej göra något legalt drag. Leder till remi.

visserligen en idealiserad bild av verkligheten, men det förändrar ingenting.) Felet på valideringsmängden E v räknas ut som E v = V p= (t p o p ),där V är antalet valideringsexempel, t p är målvärde för exempel p, ocho p är den output nätverket ger då exempel p ges som input.. Prototyp Här beskrivs krk-prototypen, dvs. ett neuronnät som spelar vit kung och torn mot ensam svart kung. I alla försök med krk-slutspelet används ett gömt lager och stycken gömda neuroner. Robertsson [] skapade ett neuronnät med ett mycket högdimensionellt inlager, nämligen stycken inputs för varje pjäs, plus en nod som uttrycker vem som är vid draget. Tanken med detta var att nätet självt skulle lista ut vilka topologiska aspekter som är viktiga för att spela krk-slutspelet. Prestandan hos ett neuronnät kan dock höjas betydligt om inlagrets dimensionalitet minskas. [, kap. 8] Detta låter sig göras genom att lägga till ett förbearbetningssteg som ur en ställning extraherar olika attribut som bedöms lämpliga, och som presenterar dessa attribut för neuronnätet. Vid bedömningen av vilka attribut som är lämpliga används tillgänglig schackteori. Därför eftersträvas vid skapandet av prototypen en lösning med färre dimensioner i inlagret än vad Robertsson hade. Det är inte självklart vilka attribut som ska medtas, utan detta är föremål för efterforskningar. För övrigt medför få inputnoder även att nätet totalt sett blir mindre, och detta innebär i sin tur minskade träningstider. I krk-slutspelet sker matt inom maximalt drag, eller halvdrag, från godtycklig utgångsposition (vid perfekt spel). Robertsson [, sida 9] rapporterar att en bra transformering är att låta det önskade målvärdet för en viss ställning vara n,därn är antalet halvdrag till matt. Denna formel är bra eftersom den går mellan 0 och, och nätverkets sigmoidfunktion kan hantera värden i detta intervall. I detta arbete används dock initialt formeln n istället, som mer korrekt avspeglar att matt sker inom halvdrag. Ett högre tal innebär en mer näraliggande matt. Första ansatsen Den första ansatsen hade som inattribut: rad och kolumn för varje pjäs, en siffra 0 eller som talar om vems tur det är, samt slutligen ett attribut för bias-termen. Totalt blev detta alltså 8 stycken inattribut. Detta nätverk klarar av att matta för det mesta. I ställningar då den svarta kungen är placerad nära den 8:nde raden, och vits kung är placerad närmare mitten, är dock nätverket dåligt på att matta. Nätet verkar ha problem med att driva den svarta kungen uppåt mot kanten. En bias-term innebär att ett neuronnät får en extra vikt i inlagret som alltid har en etta som invärde. På så sätt kan tröskling av nätets beslutsyta i mönsterrymden hanteras på samma sätt som vikter. [9, sida 9 0]

8 0Z0j0Z0Z 0Z0J0Z0Z S0Z0Z0Z0 Med första ansatsens neuronnät lyckades inte vit sätta matt inom 0 drag från denna utgångsställning. Andra ansatsen Det borde inte vara någon skillnad mellan nätverkets förmåga att driva kungen framför sig, beroende på vilket hörn kungen drivs mot. I ett försök att få nätverket att lära sig principen för hur detta drivande går till, ändrades sättet träningsexempel genereras på. Istället för att generera 0000 träningsexempel, genereras nu 00 exempel, som sedan roteras för att nätverket ska hantera alla riktningar lika bra. Först placerades alla rotationer av en viss utgångsställning efter varandra i listan över träningsexempel. Detta gav ingen minskning av felet på valideringsmängden. Sedan gjordes en test där exemplen blandades, så att olika rotationer av samma ställning ejhamnade bredvid varandra. Detta gav ett lägre fel. Orsaken till detta är att ett nätverk lär sig snabbast då exemplen som presenteras är oväntade. [, sekt...] Så här långt har träningsexemplen skapats slumpmässigt, men utan någon kontroll av att de är unika. Nu läggs en test till, så att alla exempel blir unika. Totalt sett blev felet på valideringsmängden något lägre än i första ansatsen. Nätverket spelade dock inte nämnvärt bättre. Tredje ansatsen Tidigare beskrevs att neuronnätet för varje ställning tränas att ge en output n, där n är antalet halvdrag till matt. Denna formel ger extremvärdena 0 och, och det visar sig att det är bättre om målvärdena ejsätts till dessa asymptotvärden (sigmoidfunktionen ger ju också output endast i intervallet 0 till ). [, sekt...] Träningsprocessen kommer att driva outputen från nätverket så nära målvärdena som möjligt, och målvärdena 0 och kan endast nås asymptotiskt. Detta leder till att vikterna får större och större värden, vilket ökar risken för att nätet överanpassar sig till träningsexemplen. Dessutom tenderar stora vikter att tvinga all output till sigmoidens extremvärden, vilket motverkar avsikten att få en jämn spridning inom intervallet. Därför modifierades funktionen som beräknar nätverkets output till n 0, vilket ger extremvärdena 0, resp. 0,9. Detta gav nätverket betydligt bättre generaliseringsförmåga. Felet minskade med ca 0%. Nu är nätverket bättre på att matta jämfört med den första ansatsen.

Delresultat Den första ansatsen och den tredje ansatsen jämförs genom att dessa nät får spela 0 stycken partier med slumpmässig utgångsposition. Motståndaren är en slutspelsdatabas, som alltid gör perfekta drag. Om ingen matt åstadkommes inom 0 drag (00 halvdrag) är partiet remi. Tabellen nedan till vänster visar för varje parti hur många drag mattsättningen tog. Det är ejmotiverat att lista utgångsställningarna för alla 0 partier. Istället har sex stycken partier valts ut, som får representera de övriga. Utgångsställningarna för dessa partier finns listade i bilaga B (partierna har i tabellen markerats med ). parti drag till matt :a ansats :e ansats 9 8 9 9 0 remi 8 9 0 9 0 8 9 0 9 remi 9 8 9 0 9 0 8 remi 8 9 8 0 9 remi 9 0 9 0 totalt 0 99 8

Tabellen indikerar att den tredje ansatsen troligen spelar något bättre än den första, men skillnaden var inte så stor som förväntat. Det finns många möjligheter till ytterligare förbättringar av detta nätverk, varav tester med andra inattribut kanske är det viktigaste. Ytterligare sätt är normalisering av inputs, annan sigmoidfunktion, osv. LeCun m.fl. ger en bra översikt över olika trick som kan användas, i rapporten Efficient BackProp. [] Denna prototyp får dock anses tillräckligt bra för att det nu ska vara möjligt att gå vidare till att behandla ett svårare slutspel. Ett par ord bör nämnas om hur en slutspelsdatabas agerar perfekt motståndare. Det fungerar på så sätt att alla svarts tillåtna drag utifrån aktuell ställning genereras, varvid en slutspelsdatabas konsulteras för varje ställning som uppstår då dessa drag utförs. Det drag väljs som leder till den mest avlägsna matten.. Slutspelet kbnk Nu skapas alltså ett neuronnät som förhoppningsvis lär sig spela med vit kung, löpare och springare mot ensam svart kung. Haworth & Velliste [0] betraktade hanteringen av vit vid draget-positioner (wtm white to move) och svart vid dragetpositioner (btm black to move) som två olika problem. Även här används separata nätverk för wtm resp. btm, för att göra nätverket så litet som möjligt. För att förenkla nätverket införs begränsningen att endast vitlöpare används, dvs. endast sådana träningsexempel genereras där löparen står på vit ruta. Det innebär att vit måste driva svarts kung till a8- eller h-hörnet, som båda har vit färg. I alla försök används endast ett gömt lager. På grund av att beräkningarna är så tunga, har ingen välstrukturerad genomsökning gjorts gällande vilket antal gömda neuroner som är bäst. Rimliga uppskattningar har gjorts av vilka tester som är lämpliga, och resultaten från dessa tester har legat till grund för bedömningen av vilket antal gömda neuroner som fungerar bäst. Utförandet har gått till på så sätt att tio stycken partier har skapats med slumpmässig utgångsposition. Sedan görs olika försök med olika representationer, där de producerade nätverken får försöka sätta matt utifrån dessa tio genererade utgångsställningar. Motståndet är samma som för prototypen, nämligen en slutspelsdatabas, som spelar perfekta drag. Utgångsställningarna finns listade i bilaga A. Det eftersträvades att hålla nere tiden för testning av neuronnäten, och det är orsaken till att inte fler än tio testpartier användes. Vid skapandet av prototypen upptäcktes att neuronnätets generaliseringsförmåga blir bättre om målvärden mellan 0, och 0,9 används istället för mellan 0 och. För kbnk-slutspelet tar mattsättning maximalt drag ( halvdrag) vid perfekt spel. Därför kan neuronnätet med fördel tränas att ge en output 9 n 0,därn är Att det är vit som har löpare och springare, är egentligen ingen begränsning. Det färdigtränade nätverket kan även användas om det istället är svart som har löpare och springare, genom att i ett förbearbetningssteg invertera spelplanen. 9

antalet halvdrag till matt. Denna formel förenklas till n 80, vilket lägger outputen i ungefär samma intervall... Enkelnät Prototypen visade att det är bra att rotera träningsexemplen om man vill få nätet att klara olika riktningar lika bra. I kbnk-slutspelet sker matten i det hörn som har samma färg som löparen, dvs. i a8- eller h-hörnet, eftersom endast vitlöpare används i denna undersökning. Därför kan endast 80 -rotationer användas, och ej som för prototypen då rotationer i fyra riktningar användes. Dvs. i de försök som innehåller rotationer (ansats ett till och med fyra) genereras 000 träningsexempel, som roteras. Första ansatsen Representationen för den första ansatsen var väldigt enkel, nämligen rad och kolumn för varje pjäs, plus en bias-term, vilket blir totalt 9 inattribut. I det gömda lagret användes gömda neuroner. Felet på valideringsmängden blev betydligt lägre för btm-nätverket än för wtm-nätverket. Detta är genomgående i hela undersökningen, och Haworth & Velliste [0, sida ] rapporterar samma resultat. Orsaken till att btm ger ett lägre fel är ejklarlagd. Haworth & Velliste har inte heller någon förklaring till detta. Resultatet för denna första ansats blev en matt på tio partier. Mattsättningen skedde i parti nummer sex, och det tog drag i anspråk. En test gjordes att skapa ett sådant sökträd att alla löv blev btm-positioner, så det blev möjligt att endast utnyttja btm-nätet, som har lägre fel. Det ledde till samma resultat, nämligen mattsättning i parti sex, och remi i alla andra partier. Matten skedde nu på drag jämfört med tidigare drag, vilket stödjer hypotesen att btm-nätet är bättre. Andra ansatsen Istället för att använda absoluta koordinater gjordes en test med relativa avstånd. Ruta a8 valdes ut som referenspunkt för svarts kung, och som input till nätverket användes avståndet mellan denna ruta och svarts kung. Avståndet beräknades som (rad + kolumn), vilket som exempel ger oss avståndet fyra rutor mellan ruta a8 och b. Input för de vita pjäserna räknades ut som ett avståndsmått relativt den svarta kungens placering, enligt formeln abs(x x )+abs(y y ),därx och y är den vita pjäsens position, och x och y är svarts kungs position. Totalt gav detta stycken inputs, plus en bias-term. Antalet gömda neuroner var. Jämfört med första ansatsen gav denna representation ett något lägre fel för wtm-nätet, medan btm-nätet gav ett något högre fel. (Fortfarande ger dock btm ett betydligt lägre fel än wtm.) Resultatet blev snarlikt första ansatsen, nämligen mattsättning efter drag i parti sex då båda näten användes, och mattsättning 0

efter drag i parti sex då endast btm-nätet användes. Inget annat parti ledde till någon mattsättning. Tredje ansatsen Nu testades en kombination av första och andra ansatsen, dvs. som inattribut användes både de absoluta pjäskoordinaterna och ett avståndsmått. Med biastermen blev det stycken inputs. En test gjordes av vilken storlek på det gömda lagret som är bäst. Valideringsfel 0 0 Gömda neuroner Vilket är det optimala antalet gömda neuroner? Med neuroner blev felet marginellt lägre än med 0 neuroner. Av 0 och stycken är därför 0 att föredra, eftersom nätet är enklare, vilket minskar risken för överanpassning, samtidigt som generaliseringen i stort sett är lika bra. Vad är då att föredra av 0 och 0 stycken gömda neuroner? Det finns inget givet svar på den frågan. Träningstiden för nätet med 0 stycken gömda neuroner var betydligt längre än för stycken (runt gånger längre). Intressant nog gav gömda neuroner ett större fel än vad 0 stycken gav. Detta tros bero på överanpassning. Resultatet för nätet med 0 gömda neuroner blev matt på 0 partier då båda näten användes ( drag för parti ). Då endast btm-nätet användes mattade nätet i två av partierna ( drag för parti, och drag för parti ). Fjärde ansatsen Nästa test gick ut på att utöver de attribut som fanns i föregående ansats, även lägga till attribut som beskriver positionerna för vits pjäser relativt varandra. Relationen beskrivs med samma formel som i föregående ansats, dvs. abs(x x )+abs(x y ), där x och y beskriver koordinaterna för de olika (vita) pjäserna. Detta gav tre extra inputs, och totalt blir det därför inputs inklusive biastermen. Felet på valideringsmängden blev ungefär lika stort som i föregående ansats, men träningstiden blev kortare. Femte ansatsen I detta försök används samma inattribut som i föregående försök. I det gömda lagret används neuroner. Nu tas speglingen av genererade träningsexempel bort, så att nätet nu tränas på 0000 helt unika träningsexempel. Jämfört med tredje ansatsen minskade felet med ca % för wtm-nätet, medan felet ökade något för btm-nätet.