Jag skriver och pratar mycket om artificiell intelligens, AI. I vanliga fall är mitt budskap att man inte behöver kunna så mycket, att det bästa bara är att börja labba hejvilt. Det tycker jag fortfarande. Men här är ändå en artikel för dig som vill förstå grunderna för hur en maskin egentligen kan lära sig saker.
Om artificiell intelligens (AI) är målet så är Artificiella Neurala Nätverk, ANN, ett verktyg som tar oss dit. ANN är det som gör det möjligt för AI att lära sig saker.
Vad är ett ANN då? Jo, ett ANN är en något som försöker efterlikna ett biologiskt neuralt nätverk. Och ett biologiskt neuralt nätverk är ju till exempel det som du använder just nu när du läser den här texten – din hjärna.
Hur lär vi människor oss saker då? Förenklat består hjärnan av ett stort antal neuroner (cirka 100 miljarder faktiskt). Neuronerna sitter ihop med synapser. När en människa lär sig något förstärks en del av synapserna. Så för varje ny sak vi lär oss byggs hjärnan om lite. En ettåring som för första gången får syn på en katt kommer troligtvis peka på den med ett pyttelitet pekfinger och uppmanande kräva att få veta vad det är. Det krävs inte så många exemplar av katter för att ettåringen ska kunna identifiera en katt och skilja en katt från till exempel en hund eller en råtta. Ettåringens hjärna har byggts om med nya synapser och förstärkningar där det behövs för att komma ihåg rätt och kunna skilja ett litet pälsigt djur från ett annat.
Läs också: Är du smartare än en AI?
Ett ANN fungerar på ungefär samma sätt. Inlärningen sker genom förstärkning av synapser. Däremot är det ovanligt att vi lär ettåringar hur en katt ser ut genom att visa upp tiotusentals bilder på katter medan det är ett vanligt sätt att lära upp ett ANN.
Bara för att förstå principen för hur maskinlärning går till tänkte jag beskriva den allra enklaste formen av ett ANN. Det är då ett exempel på ett tränat nätverk – alltså ett nätverk som lär sig genom att matas med kända mätdata och kända svar. Under träningen så gör man så att om svaret man får på sin fråga skiljer sig från ”facit” så justeras nätverket. Sen itererar man om och om igen tills man får ut rätt svar tillräckligt ofta. Vad som är tillräckligt ofta beror så klart på vad man ska använda ANN:et till. Är resultatet livsavgörande eller är det bara en kul grej?
Så här ser en modell av en neuron ut i den allra enklaste formen av ett ANN:

x1 och x2 är värden på insignaler till neuronen. w1 och w2 är vikten på insignalerna. Det är den vikten som ändras vid inlärning.
I det allra enklaste fallet kan vi tänka oss helt binära insignaler. x kan alltså bara vara 0 eller 1. Då har vi 4 olika fall av input: (x1=0, x2=0), (x1=0, x2=1), (x1=1, x2=0) och (x1=1, x2=1). Vi kan då bestämma att vi vill bara att nätverket ska ge utsignalen y=1 om både x1 och x2 är 1.

Vi vill alltså att ANN:et bara tolkar (1,1) som 1 och alla andra kombinationer som 0. För att göra det sätter vi upp villkoren:

Alltså Y är 1 om summan av värdet på insignalerna gånger vikten på insignalerna är större än ∅ som är ett gränsvärde som vi hittar på. Det kan till exempel vara 1.
w kan sättas till vad som helst till att börja med. För enkelhetens skull kan vi börja med att w1=w2=1.
Iteration 1: x=0, x2=0
Då blir summan 1*0 + 1*0 = 0. 0 är mindre än gränsvärdet 1 alltså blir y=0.
Vi har sagt att vi vill bara att två 1:or ska tolkas som en 1:a så vi vill att två 0:or ska tolkas som en 0:a. Alltså är 0 rätt svar och vi ändrar inga vikter.
Iteration 2: (x1=0, x2=1)
Då blir summan (1*0) + (1*1) = 1. I och med att vi har satt gränsvärdet, ∅, till 1 och villkoret att y är 1 om summan är lika med eller mindre än ∅ så blir y här 1. Det är fel. Vi vill inte att nätverket ska tolka en 1:a och en 0:a som en 1:a.
Iteration 3, med samma värden på x1 och x2 igen: (x1=0, x2= 1) och nu är w1=1 som från början men w2=0.5.
Då blir summan (1*0) + (0,5*1) = 0,5. Alltså under gränsvärdet så Y blir 0 och det tycker vi är rätt. Alltså ändras ingen vikt utan vi fortsätter iterera med andra värden.
Iterationen fortsätter tills vi alltid får ut rätt svar. I det här, enkla fallet, finns det många vikter som kommer ge rätt svar.
Om vi byter ut 1:or och 0:or mot katter och hundar då (inte för att det blir lättare att förstå men kanske lite roligare). Hur blir det om vi ska lära ett ANN att känna igen en katt?
Alltså:

Och i just det här fallet, när vi ska lära vårt ANN att känna igen en katt, så är hunden med i egenskap av att vara [inte katt]. Så vi har en [katt] och en [inte katt] och det som inte är en katt är ingenting. Hunden har inget värde för ANN:et. (Men hallå det är ju människans bästa vän protesterar du! Människans ja. För ANN:et är den inget.)
I fallet då neuronen tar emot endast två insignaler kan alltså de här fyra varianterna förekomma:

Vi vill bara att ANN:et identifierar det den ser som en katt i ett av fallen. Så precis som med 1:orna och 0:orna börjar vi skicka in bilder och vi börjar med default-vikten 1 på båda insignalerna.

Så en katt plus en hund som är ingenting i det här fallet. Summan av en katt och ingenting är en katt. Men det är ju fel! För vi vill att om vi skickar in en katt och en hund så ska nätverket inte tolka det som en katt. Alltså måste vi justera vikten på den insignal där vi skickade in katten. Vi skickar in lite mindre katt nästa gång. En halv katt. Sen itererar vi på samma sätt som med 1:orna och 0:orna tills insignalerna har en vikt som gör att endast två katter identifieras som en katt.
Läs också: Googles nya neuronnät ska ge ett nytt AI-språng
Det här är grunden för alla artificiella neurala nätverk: att vikten på ”synapserna” ändras vid inlärning. Sen kan man bygga det hur komplext som helst med antalet neuroner och vilka algoritmer man använder sig av.
Nu har vi ju inte sådär superstor användning av ett ANN som kan känna igen en katt. Just det kan ju faktiskt en ettåring göra och jag tror inte att vi ska ersätta våra ettåringar. Men nu vet vi i alla fall hur vi skulle göra om vi skulle vilja det.
Befattning: Managementkonsult
Företag: Thread
Linkedin: Maria Idebro
Hemsida: thread.se
E-post: maria.idebro@thread.se
Expertområden: AI, UX, användarupplevelse.
Certifieringar: Scrum
Bakgrund: Civilingenjör i farkostteknik på KTH som halkade in i it-branschen. Har de senaste tio åren mest jobbat med olika former av ledarskap inom it. Brinner för vad som händer i mötet mellan teknik och människa.