Köpingkodar upphör snart och flyttar till skolprogrammering.se Välkommen dit! Skolprogrammering.se

AI ⭐

Är du med på AI tåget ?

Image of a robot generated by StableDiffusion
Robot på järnvägsspår genererad av StableDiffusion

Överallt pratas det om AI.

Vilken påverkan kommer det att ha på vår framtid?…är det bra eller inte?

Det finns så många frågor och just nu inga bra svar eftersom det här kan ses som en evolution av datavetenskapen.
Forskare har skapat mjukvara som lånar koncept från darwinistisk evolution, inklusive ”survival of the fittest”, för att bygga AI-program som förbättras generation efter generation utan mänsklig input.

Eftersom det här är en utveckling som kommer att påverka oss alla har vi valt att lägga in lite om AI på den här sidan.

Val vi gjort

Mycket av det vi går igenom här har avancerade algorithmer och matematiska förklaringar men vi väljer att inte gå för djupt in i det. Det finns många maskininlärningsbibliotek, såsom TensorFlow, Keras, Pandas med flera, som programmerare kan använda för att slippa skriva hela koden själv. Det går alltså utmärkt att jobba med AI utan att skriva all kod från början.

Vi kommer att använda JavaScript för de programmeringsuppgifter som vi lägger på den här sidan. Material vi skapat bygger på ett JavaScript bibliotek som heter ml5.js. vilket skapades som ett steg i att göra Machine Learning mer tillgänglig för en bredare publik. ml5.js fungerar väldigt bra med det bibliotek, p5.js, som vi använder för textprogrammering. Biblioteket ger tillgång till maskininlärningsalgoritmer och modeller i webbläsaren, som bygger på TensorFlow.js utan andra externa beroenden.
Läs mer om ml5 på ml5js.org. För att kunna följa med i programmeringsuppgifterna rekommenderar vi att man har tidigare erfarenhet av p5.js. Introduktion till textprogrammering med p5.js finns här.

Kolla också ordlistan för Machine Learning (på engelska). Ordlistan är från Google vilka också har en mängd bra kurser inom AI.

Varför väljer vi då att länka till en engelsk ordlista…..
För att kunna söka effektivt på olika termer gällande AI fås flest svar när man söker på engelska och de flesta kurser mm gällande AI ges på engelska.

Men nu först lite historia

Väldigt länge har människan haft en önskan om att kunna utveckla maskiner med intelligens.
Historien bakom den artificiell intelligens (AI), vi ser idag, går tillbaka till 1940-talet. Det var då forskare och ingenjörer började experimentera med datorer för att simulera mänsklig intelligens. En av de tidigaste och mest inflytelserika förespråkarna för AI var Alan Turing, en brittisk matematiker och kryptolog som under andra världskriget var en nyckelfigur i att knäcka krypterad kod som användes under andra världskriget.

År 1950 höll Turing en föreläsning om AI vid Royal Society i London, där han presenterade ”Turingtestet”, som utvärderar en dators förmåga att uppträda som en människa i en konversation. Detta test används fortfarande idag som ett sätt att mäta en dators AI-förmåga.

Image symbolizing a Turing test

Om man säter en person (B) i ett rum och i angränsade rum sitter en person (A)  och i angränsade rum 2 ”sitter” en dator (C).
Enligt ett Turing test ska person B kunna se om hen kan avgöra om det är en dator eller en person som svarar på frågorna hen ställer.
Om person B inte kan avgöra om det är en dator som svarar så anser man att den datorn programmerad med AI.

Under 1950- och 60-talet började forskare att utveckla program som kunde lösa specifika problem, såsom spel och matematiska problem. Dessa program var de första stegen mot det som idag kallas ”svag AI”, vilket syftar på system som kan utföra en specifik uppgift med hög precision.

Under en sommar-konferensen 1956 på Dartmouth College i USA pratades det för första gången om Artificiell Intelligens, AI

Under 1970-talet började forskarna att utveckla ”expertsystem”, som använde regler och heuristiska algoritmer för att lösa problem inom specifika områden, till exempel medicin och juridik. På den här tiden fanns stor optimism om möjligheterna medAI.

Heuristiska algoritmer är en typ av algoritm som används för att hitta en lösning på ett problem genom att söka igenom ett stort antal möjliga alternativ och sedan välja det bästa alternativet baserat på vissa regler.

AI-vinter 1980-talet

Ai generatet image of a robot in snowstorm
Bild på en robot i snö med tom plånbok genererad av DALL-E

Under 1980-talet började optimismen att avta när det blev tydligt att de system som fanns hade svårt att hantera komplexa problem som inte var definierade av strikta regler och riktlinjer. Det ledde till en period av ”AI-vinter”, där det fanns begränsade investeringar och innovationer inom AI. Det var helt enkelt för dyrt att fortsätta då datorer som behövdes kostade väldigt mycket.

Under senare delen av 1990-talet och tidigt 2000-tal återuppstod intresset för AI tack vare framsteg inom datorkraft, algoritmer och datahantering. Detta ledde till en explosion av forskning och innovation inom AI, vilket resulterade i nya former av AI, inklusive ”djupinlärning” och ”maskininlärning”, vilket möjliggör för datorer att lära sig på egen hand genom att bearbeta stora mängder data.

Nutid

Nog om historia nu. Varför har då det här EXPLODERAT från slutet av 2022?

  • Det finns oerhört stor mängd data vilket finns tillgängligt att samla via internet.
  • Algoritmer har tagits fram som kan lösa många av de problem som AI behöver kunna lösa.
  • Kraften hos datorer är så pass stor idag att de kan genomföra de beräkningar som krävs för en fungerande AI.
  • Intresset för AI är stort hos många i befolkningen vilket gör att man kan se ett ekonomiskt värde i att utveckla AI.

De här fyra sakerna Data, Algoritmer, kraftfulla/billiga processorer och allmänhetens intresse har alltså påverkat utvecklingen och har möjliggjort att en mängd nya applikationer med AI utvecklats.

Vad är då AI?

Artificiell Intelligens ( Artificial Intelligence ), AI är en gren inom datavenskap som handlar om datorers förmåga att simulera intelligent beteende.
AI är ett namn på ett vetenskapsområde inom datavetenskap.

Då begreppet AI skapades långt innan det fanns applikationer som kunde använda den avancerade tekniken är begreppet lite luddigt. Man har fortsatt att bygga på begreppet och det kan vara svårt att se klara gränser mellan vad som är vad.
Viktiga delar inom AI är Machine Learning och Deep Learning.

Egenskaper som är karakteristiska för vad som är AI:

Autonomi
Förmåga att uträtta uppgifter i komplexa miljöer utan ständig styrning av användaren.

Adaptivitet
Kapaciteten att förbättra sin prestationsförmåga genom att lära sig av erfarenheter

Machine Learning (ML) och Deep Learning (DL) är delar som ofta lyfts fram då de algoritmer som används inom ML och DL för att lära används i stor utsträckning i olika modeller.

Några vanliga grenar inom AI

Maskininlärning (Machine Learning):

Denna gren av AI använder algoritmer och statistik för att träna datorer att lära sig från data och göra prediktioner och beslut baserade på den träningen. Datorerna lär sig genom en mängd data utan att ha tilldelats en komplett uppsättning regler.
Vi kommer att dyka ner lite mer i hur Maskininlärning fungerar senare på den här sidan.

Djupinlärning (Deep Learning):

Djupinlärning är en subkategori av maskininlärning där neurala nätverk används för att analysera data och göra avancerade prediktioner. Det används ofta inom områden som bild- och röstigenkänning. Ett neuralt nätverk försöker efterlikna den mänskliga hjärnan där signaler sänds i stora nätverk av nervceller. Nedan finns en bild på ett neuralt nätverk. Nätverket består av lager. Input, 2 hidden layers och en output.

Det kallas Deep Learning om antal Hidden Layers är fler än ett, annars är det Machine Learning.

Image of a neural network

Naturlig språkbehandling (Natural Language Processing, NLP):

NLP handlar om att ge datorer förmågan att förstå, tolka och generera naturligt språk. Det används inom områden som maskinöversättning, chatbots och textanalys. Speech-to-text (STT) och text-to-speech (TTS) är två stora grenar av natural language processing (NLP) där datorer kan generera språk liknande människans språk.
Chat-GPT, Microsoft Bings chat, Googles Bard med flera är modeller som använder NLP.
Man bör vara medveten om att de stora språkmodeller som finns bara grundar sig på att hitta nästföljande (eller föregående) passande ord vilket gör att de ofta ”hallucinerar” som folk inom AI kallar det. Ett annat sätt att beskriva det är att modellen ljuger rätt ut.

Computer Vision: (Computer Vision)

CV handlar om att ge datorer förmågan att tolka och förstå visuell data från den verkliga världen. Det används inom områden som ansiktsigenkänning, objektigenkänning och självkörande bilar.

Expertsystem (Expert Systems):

Expertsystem är programvaror som används för att simulera expertkunskap inom ett visst område. De används inom medicin, lagstiftning, ekonomi och andra områden där expertkunskap är avgörande.

Robotik: (Robotics)

AI inom robotik handlar om att använda datorer och robotar för att utföra uppgifter som traditionellt utförs av människor. Det används inom områden som tillverkning, sjukvård och rymdforskning.

AI i spel:

AI används i datorspel för att skapa mer realistiska och dynamiska spelupplevelser. Det används för att skapa smarta fiender, autentiska karaktärer och för att förbättra spelupplevelsen genom anpassning till spelarens beteende och preferenser

De här olika grenarna använder i stor mån Machine Learning-algoritmer när modeller skapas och tränas.
Vi kommer här att främs fokusera på Machine Learning då det idag är ett oerhört viktigt instrument för att skapa AI.

Låt oss titta närmare på Machine Learning

Machine Learning, ML är en teknik inom AI där en dator kan lära sig genom en mängd data utan att ha tilldelats en komplett uppsättning regler.

Machine Learning kan delas in i tre kategorier

Image showing 3 branches of Machine Learning

Supervised Learning

Supervised learning är en typ av maskininlärning där datamodeller tränas med hjälp av tillgång till kategoriserade data. Modellen lär sig att förutsäga resultatet för nya data baserat på den data modellen tidigare tränats på.

Om det man arbetar med är bilder så görs de om till en matris av siffror. Om det handlar om ljud så görs de först om till en bild (ett så kallat spectrogram) för att sen bli en matris av siffror. Från de siffrorna försöker datorn hitta specifika särdrag för varje kategori (kallas feature detection). När modellen tränats ett antal gånger på träningsdata kan den förhoppningsvis klassificera ny osedd data. Supervised learning används ofta för att lösa problem som klassificering och regression. Regression ger inte en speciell klass utan en siffra (typ förväntad lön beroenda av var du bor, din ålder, utbildning mm). Data som används delas upp i två delar, träningsdata och testdata.

Unsupervised Learning

Här matas data in helt utan märkning. Datorn får då försöka hitta särdrag och placera varje data i ett kluster med liknande data. När träningen är gjord kontrollerar datorn ny data och placerar den i det kluster som den bäst passar i. Vanlig användning är rekommendationer av varor/filmer/böcker på nätet. Unsupervised learning kan användas till klustering eller association. Klustering har ett antal klasser men utan angivna namn. Association fungerar så här: Om du köper korv och korvbröd kan du rekommenderas ketchup.

Reinforcement Learning

Här lär sig algoritmen genom att få positiv eller negativ feedback. Tänk ett självkörande fordon. Om det krockar får den negativ feedback. om den väjer för hinder får den positiv feedback.

Bilder och ML

Konvolutionella neurala nätverk (CNN) är en typ av neuralt nätverk som är utformad för att hantera data som är organiserad i ett rutmönster, till exempel bilder. CNN:er tolkar bilder genom att använda konvolutioner, som är matematiska operationer som utförs på varje del av bilden för att extrahera särdrag som är viktiga för att känna igen objekt i bilden.

Låt oss anta att vi vill skapa en modell som kan särskilja en katt från en hund.

Först behövs en stor mängd data i form av bilder på katter och hundar. Varje bild förses med en etikett (label) om vad bilden visar (katt eller hund). De här bilderna matas in i en machine learning modell. Modellen omformar bilden till ett rutmönster av siffror för varje pixel. Därefter läggs olika filter på mindre delar av bilden för att hitta olika särdrag. Efter att filter lagts på förminskas bilden med hjälpa av något som kallas pooling. På bilden nedan visas några filter som kan appliceras på bilder för att hitta särdrag.

Image of filters applied on image of cat and dog

Filtren kan vara vertikala linjer, horizontella linjer eller andra kännetecken som kan skilja katt från hund. Första gången som bilderna körs genom modellen gissar modellen bara om det är en katt eller en hund för att sen få en återkoppling på vilken etikett som bilden har.

Bilden körs genom modellen ett antal gånger och modellen får möjlighet att förbättra sitt svar och finjustera vad de olika särdragen borde klassificera bilden som.

Image showing a CNN for Machine Learning

Konvolutionella neurala nätverk (CNN) är mycket effektiva för bildtolkning eftersom de kan hantera stora mängder data och utnyttja lokala särdrag i bilden på ett effektivt sätt. CNN kan också lära sig att hantera variationer i ljusstyrka, rotation, skala och perspektiv genom att träna på ett stort antal bilder som täcker en mängd olika scenarier.
Det finns en databas som heter ImageNet som man kan använda sig av för att bygga ett eget bild-klassificerings program.

Länk till programmering av Image classification

Transfer Learning

tränats på en uppgift och använder den som utgångspunkt för att träna en annan modell på en annan uppgift.
Man kan också använda en del av den förtränade modellen: funktionerna. Dessa funktioner låter dig ”omskola” eller ”återanvända” modellen för en ny anpassad uppgift.
Att använda delar av de särdrag som modellen lärt sig kallas Feature Extraction.

denna sida kan du prova att träna en egen modell för två olika saker som hålls upp framför webkameran. Börja att klicka ett antal gånger på knappen som heter ”Add Background”. Därefter väljer du två föremål, den ena hålls framför kameran och du klickar på ”Add Example 1” ett antal gånger. Gör samma sak med föremål nr 2  (då med knapp ”Add Example 2”). Klicka sen på knappen för att träna (”train”). På höger sida visas då hur träningsprocessen går. På x-axeln visas hur många gånger data körts igenom modellen och på y-axeln visas hur fel modellen har (loss). Målet är att få ner det värdet så att det kommer så nära noll som möjligt.
Den här modellen kör alla data igenom modellen 50 gånger och bör närma sig noll mot slutet.
På bilden nedan kan man se hur diagrammet såg ut när modellen tränats med ca 20 bilder i varje kategori.
Föremål som hölls upp framför webkameran placerades också oftast på samma sätt och variationen blev väldigt dålig.

diagram showing outcome of training a Machine Learning algorithm

När modellen tränats klart kan man hålla upp något av de två föremål, som modellen tränats på, framför webkameran och se om modellen kan förutsäga vad det är. Det kommer att visas text i videorutan beroende om modellen tror att det är Bg för background, One för Example 1 och two för Example 2.

Om man vill skapa bättre data för en bättre modell kan man variera hur de olika föremålen placeras, höger/vänster i videorutan, rak/lutad och hur många bilder man tar av varje föremål. Antal bilder bör vara ungefär lika många för respektive föremål.

Klicka på knappen ”Restart” om du vill skapa en ny modell.

Länk till programmering av Feature Extraction

Ljud och ML

Den typ av modeller som används för bilder kan också användas för att klassificera ljud. Precis som med bilder, kan ljud också representeras som ett rutmönster, där ljudvågorna kan ses som en tidsaxel (x-axel) och amplituden som signalens intensitet på y-axeln. Ljudfiler görs om till spektrogram som visar detta mönster.
Modeller kan användas för att extrahera särdrag från ljudsignalen som kan användas för att utföra uppgifter som taligenkänning, ljudklassificering, musikgenerering och ljudanalys.
Nedan kan du se en bild av ett spektrogram.

Image of a spectogram

SoundClassifier

Att klassificera ljud görs genom Deep Learning och modeller som tränats används ofta till smarta högtalare eller annat som kan styras med röst. Det krävs en stor variation av röster för att kunna skapa en bra modell.
Det fnns ett dataset som man kan använda för att själv skapa ett program som lyssnar efter speciella keywords. SpeechCommands 18w är en modell som klassificerar 18 ord. Att klassificera ord kallas också för keyword spotting och används bland annat av Alexa och Google Assistant.

Orden i SpeechCommands18w är:

talen ”zero” till ”nine”, “up” och “down”, “left” och “right”, ”go” och ”stop” samt ”yes” och ”no”

Fördelen med att använda en färdig datamängd är att den då fungerar på de flesta röster.

Länk till programmering av SoundClassification

Om man vill skapa en modell som bara lyssnar på sin egen röst kan man använda Teachable Machine från Google för att träna sin egen modell och sen använda den i en p5.js sketch. Teachable Machine fungerar inte på iPad men är ett kul sätt att träna en modell om man har en PC.
Länk till ett program som visar hur man kan lägga in sin modell från Teachable Machine i ett eget program med ml5.js och p5.js.

Att identifiera olika delar på en människa med ML

FaceMesh

Facemesh är en machine-learning modell som identifierar 486 olika 3D punkter i ett ansikte.. Facemesh fungerar bäst när ansiktet tar upp stor del av bilden/videon. Facemesh och liknande modeller används för att skapa virituell makeup i många appar och för att skapa virituella karaktärer i spel och filmer. Sidor där man kan testa hur man ser ut i olika glasögonmodeller använder liknande modeller för att kunna placera glasögonen rätt i ansiktet.

Modellen är tränad på en mängd bilder av ansikten i olika vinklar, positioner och med olika belysning. Modellen lär sig känna igen de olika delarna av ansiktet och deras relationer till varandra, såsom avståndet mellan ögonen och formen på näsan. Till skillnad från ansiktsigenkänning identifierar inte Facemesh ansikten baserat på databas med kända ansikten utan den identifierar landmarks i realtid.

Nedan är en bild på de olika punkterna som identifieras med modellen.

Image of Facemesh landmarks

Länk till programmering av Facemesh

Länk till programmering av Facemesh med filter

FaceAPI

FaceAPI är en enklare modell för att känna igen landmarks i ansiktet.
Modellen identifierar 68 olika punkter (landmarks) i ansiktet och är ganska bra på att följa med när man rör sig.
I stället för punkter kan man rita ut ”löjliga näsor”, regnbågar, glasögon eller annat.

På bilden nedan kan man se hur de olika landmarks, som modellen känner igen, är numrerade.

Image of landmarks in faceAPI

Länk till program som ritar ut random smiley på de olika landmark som modellen känner igen.

HandPose

Handpose är en modell som känner igen en hand i en bild eller en video.Modellen har tränats på ett stort antal bilder av händer i olika positioner och miljöer. Modellen känner igen olika delar av handen såsom fingrar och handled samt deras relativa position till varandra.

Den modell som används av ml5.js identifierar 21 olika punkter. Handpose kan användas i olika interaktiva applikationer såsom handgestbaserad styrning och virtuell reality (VR).

På bilden nedan kan man se hur de olika landmarks, som modellen känner igen, är numrerade.

Image of landmarks in HandPose

Länk till ett program där användaren kan trigga olika animationer för en 3D-robot genom att placera fingertoppen på en av de olika fingrarna inom en grön kvadrat. Varje fingertopp triggar sin egen animation. Koden hittar du här. Det programmet kan inte byggas i p5.js editor varför vi väljer att bara länka till det.

Länk till programmering av HandPose

PoseNet

PoseNet identifierar 17 punkter (keypoints) på en människas kropp. Punkterna är numrerade från 0 till 16 (se bild nedan).

Olika modeller har olika antal punkter så det är värt att läsa på om modellen innan man börjar använda den. MediaPipe är en annan, vanligen använd modell, som har 33 olika punkter.
Man kan använda en bild eller ett videoflöde via webkameran för att identifiera punkterna. När modellen ser en bild så returnerar den x-koordinat, y-koordinat samt hur säker den är på sin uppskattning.

Länk till ett program med ml5.js och p5.js där modellen används för att ändra bild på en presentation genom att användaren lyfter höger arm upp mot toppen av videobilden för en bild framåt och vänster arm för en bild bakåt.

Länk till programmering av PoseNet

Länk till programmering med micro:bit och AI

Om du har funderingar eller åsikter kontakta oss gärna via vårt kontaktformulär