Citat:
Ursprungligen postat av
Necris
Fast där har du ju fel. Klart man kan plocka ut ett delsystem och säga att det är det som förstår och att resten gör annat. När du skriver ett ord på tangentbordet så är det väl helt möjligt att isolera just din hjärna och säga att det är den, inte din hand, som förstår vad ett ord är? Man kan väl också hävda att det är just din hand, inte din hjärna, som skriver dessa ord?
Ett vanligt schack program har blivit tillsagt att leta efter visa mönster, det har blivit tillsagt vilka par av pjäser som arbetar bra, det har blivit tillsagt vad en pjäs är värd, det har blivit tillsagt vad som är vinnande strategier. Sen söker den mer eller mindre slumpvis bland miljontals med drag och tar hänsyn till dessa saker den fått berättat för sig. Ett vanligt schack program förstår inte schack.
Neuronätet i AlphaZero har däremot förstått schack, utifrån sitt egna spelande. Den har kommit fram till mönster och regler som den tycker stämmer, vilket sedan avgör vilka drag den söker bland. Så jodå, neuronätet har förstått schack, och den söker sedan drag och letar efter drag som är bra, utifrån dess egen förståelse för schack. Neuronätet är det som har helhetsbilden, drag förkastas enligt dess förståelse, drag letas fram och testas enligt dess förståelse, och drag väljs enligt dess förståelse.
Schack är ett för komplext problem för att gå att lösa med en enda algoritm och därför delar man alltid upp problemet i hanterbara delar.
Huvudalgoritmen är en rekursiv trädsökningsalgoritm som implementerar minimax. Trädsökningsalgoritmen "förstår" att det finns något som kan förändras och utforskar möjliga förändringar. Till sin hjälp har den en generator som givet en aktuell ställning
S kan generera alla tillåtna drag
d₁,
d₂, ... Generatorn "förstår" hur pjäser kan flyttas. Alla drag är inte tillåtna och den genererade listan behöver filtreras från otillåtna drag med hjälp av en regelevaluator som "förstår" spelets regler. Regelevaluatorn implementerar en funktion
f(d, S) -> boolean som testar om draget
d är tillåtet givet ställningen
S. Genom att applicera de tillåtna dragen på den aktuella ställningen så skapas en ny lista av ställningar
S₁,
S₂, ... som kan nås genom tillåtna drag. Eftersom inte alla tillåtna drag kan genomsökas på rimlig tid så prioriteras dragen med hjälp av en värderingsfunktion
g(S) -> p som givet en ställning
S returnerar en uppskattad sannolikhet för spelets utgång. Värderingsfunktionen gör alltså en analys av en statisk ställning och kan räkna sådant som pjäsövertag, antal slag mot olika rutor osv. Värderingsfunktionen "förstår" vilken sida som sannolikt vinner utifrån en given ställning.
I princip fungerar alla schackprogram enligt ovan med smärre variationer.
AlphaZero implementerar alltså värderingsfunktionen
g(S) -> p med hjälp av neurala nätverk. De neurala nätverken tränas genom att matas med olika
S med känd utgång genom att datorn får spela mot sig själv.
Eftersom nätverken aldrig har sett något annat än statiska ställningar så kan de omöjligen veta något om spelets dynamik. Skulle du kunna fråga nätverken om hur en spelare kan förbättra sin ställning så skulle nätverken typiskt svara att spelaren skulle skaffa en dam till, därför att damer är bra om man vill vinna. Men hur man gör för att skaffa en dam till har nätverken ingen aning om. Därför förstår de inte heller hur man spelar schack. Den förståelse uppstår först när hela programmet verkar tillsammans.
Citat:
Varför är du så mycket emot detta?
Därför att det ger en felaktig bild av hur programmet faktiskt fungerar. Och för att jag tror att det reduktionistiska synsättet är en återvändsgränd om man vill utveckla AI. För att lösa komplexa problem måste skapa modeller top-down och inte bottom-up.