Nu har jag tagit ytterligare ett Coursera-certifikat, det tredje i ordningen. Först gick jag ju en utmärkt kurs i Machine Learning, med Andrew Ng. Efter det gjorde jag en serie kurser, en så kallad specialization i ”Applied Data Science with Python”. Den senaste serien kurser mynnade också ut i en specialisering. Funderar du också på att gå en AI-kurs på nätet? Här följer min Recension av Coursera – Deep learning specialization.

När jag gick min första Coursera-kurs, ”Machine Learning” med Andrew Ng, var jag lite skeptisk till formatet. Jag trodde inte att jag skulle få ut så mycket av kolla på filmer online, men oj vad fel jag hade. Den kursen kan jag verkligen rekommendera. Andrew Ng, mannen med det svåruttalade efternamnet, är ju även en av grundarna till Coursera. Han är synnerligen pedagogisk, och han förklarar på ett sätt som gör att jag har väldigt lätt att förstå.

Den andra serien av kurser jag gick, Applied Data Science with Python Specialization, var inte alls av samma kaliber. Den ges av University of Michigan. Kursen var relativt bra. Man fick lära sig om hur man ritade grafer, samlade data, hur datorn förstår texter och hur man analyserar sociala nätverk. Det var väl intressant, men det var ändå en besvikelse efter den första kursen som var så mycket bättre.

Recension av Coursera – Deep learning specialization

När jag så hittade den här Deep learning-specialiseringen och insåg att det var Andrew Ng som höll även i den blev jag väldigt glad. På grund av det låga trycket på jobbet efter semestern så kunde jag kasta mig in i programmet med hull och hår. Specialiseringen består av fem kurser. Jag tänkte att jag skulle gå igenom var och en av dem nedan för att ge en inblick i vad delarna innehåller.

Det är inget universitet som står bakom kursen, utan det är Andrew Ngs eget företag deeplearning.ai som står som skapare. De försöker ”tillgängliggöra en AI-utbildning i världsklass till människor runt om i värden så att vi alla kan avnjuta en AI-driven framtid”. (Min översättning)

Nåväl, berätta mer om kurserna, Tomas.

Neural Networks and deep learning

Den första kursen handlade om neurala nätverk och deep learning. Denna kurs var i mångt och mycket en repetition av Machine Learning-kursen jag gick tidigare.

Här får man lära sig hur ett neuralt nätverk är uppbyggt och hur man tränar det. Man börjar med att kika på en neuron och hur vikterna och biasen beräknas i den. Sedan bygger man på med en neuron till och Andrew berättar om hur man tränar upp modellen för att fungera.

Mer tekniskt är det alltså Forward propagation och back propagation. Låt inte detta skrämma er. Det är väldigt pedagogiskt, och man får en bra bild av vad derivata faktiskt är för någonting, om man inte redan har koll på det.

Sista delen av kursen berättar hur man gör om beräkningarna från radnivå till matrisnivå. Alltså hur man uppdaterar informationen i nätverket utifrån all data på samma gång. Här behöver man ha tungan rätt i matematik-munnen, men alla beräkningar görs ju i datorn, så det gäller bara att skriva rätt.

Varje kurs avslutas med ett programmerings-uppdrag, som man måste klara om man vill ha diplomet. Dessa uppdrag tar mellan 1-3 timmar beroende på hur hemma man är i Pyton-miljön och Jupyter Notebook. Det första programmeringsuppdraget gick ut på att klassificera bilder, huruvida de innehöll katter eller inte. Ett klassiskt deep learning-uppdrag!

Improving Deep Neural Networks

Nästa del av specialiseringen går åt till att förbättra de neurala nätverken med hjälp av hyperparametrar, regularisering och optimering. En hyperparameter är en inställning man gör för hela nätverket, till exempel hur snabbt den ska lära sig. Lär man sig för fort så kan man lära sig fel. Lär man sig för långsamt så… tar det mycket tid. Man fick lära sig hur man såg att man lärde sig för snabbt eller för långsamt.

Regularisering är ett sätt att få nätverket att inte lära sig alltför mycket om träningsdatat. Man brukar dela upp data som man lär upp algoritmen med i två delar (eller tre), en som man tränar på och en som man validerar med. (Den tredje delen är till för att säkerställa att man inte har optimerat för mycket mot valideringsdatat.)

Om utifall att man lär sig för mycket information om träningsdatat, så har man gjort felet overfitting, som innebär att man lär algoritmen så mycket om träningsdatat att den inte kan generalisera. I exemplet katter kanske träningsdatat bara innehåller stående bruna katter, medan valideringsdatat innehåller en sittande grå katt. Om man har tränat för mycket på de stående bruna katterna kan det bli svårt att hitta den sittande grå. Det är detta som regularisering motverkar.

Under denna kurs fick vi också en kort introduktion till TensorFlow, som är Googles AI-ramverk.

Structuring Machine Learning Projects

Denna delkurs hade jag stora förhoppningar på, eftersom jag jobbar med machine learning-projekt till vardags. Jag hade hoppats på att få lite tips om hur man strukturerar data för att snabbt dyka ner i den. Dessvärre innehöll inte denna kurs så mycket matnyttigt.

Andrew gick in lite mer på hur man kunde se att datat var overfitted och vad man kunde göra åt det. Han pratade lite om transfer learning, alltså när man tar vikter från nätverk som andra redan har tränat och sedan anpassar dem efter ens eget dataset.

Kort sagt var detta specialiseringens bottennapp. Men trots det var det fortfarande ganska intressant.

Convolutional Neural Networks

Vid det här laget tog vi oss från teorin till praktiken. Andrew berättade om hur faltningsnätverk fungerar. Ja, det heter faktiskt så på svenska. Convolutional Neural Networks heter det på engelska, eller CNN förkortat.

Denna teknik används främst vid bildanalys där bilder kan vara extremt stora och det blir därför tungt för datorerna att bygga modeller. Ett CNN är ett slags filter som man flyttar över bilden. Beroende på hur man utformar det så kan man upptäcka olika kanter och strukturer i den underliggande bilden. Man lägger detta filter på en liten del av bilden i taget och flyttar sedan runt filtret så att man skapar en mindre bild. Det är lite svårt att förklara kort, men tänk på den där gamla The Truman Show-filmaffishen.

Där består bilden av små bilder. Ett CNN tar den större bilden och skapar en mindre bild för varje grupp av pixlar i originalbilden.

Naturligtvis blir det inte en fräsig bild av det som kommer ut av CNN’et, utan en kludd med streck, men det märkliga är att när man gör flera lager med CNN så kommer man komma ner till en väldigt liten mängd med variabler som motsvarar hela bilden. Denna representation kan man sedan använda för att träna upp nätverket för att känna igen saker i bilden.
Vi gick också igenom hur man hittar objekt i bilden, exempelvis hur man ser om det är en bil i ett foto. Hur man hittar ett ansikte i en bild och hur man känner igen ansikten i en bild.

Kursen avslutades med en programmeringsuppgift där vi slog ihop två bilder till en, så kallad Neural style transfer. Vi tog en målning av Monet och slog ihop den med ett foto på Louvren, så att det såg ut som att Monet hade målat Louvren.

Det är riktigt häftigt vad man kan göra med Convolutional Neural Networks!

Sequence Models

I den sista kursen gick vi igenom sequence models, vilket innebär data som kommer i en följd, eller en sekvens. Exempel på sådan data är text och prat. Vi fick veta hur en översättningsmodell fungerar.

Tidigare gjordes detta genom att ta en mening, dela upp den i fonem, alltså stavelser, och sedan sätta ihop dessa till någonting vettigt på andra sidan. Det visade sig att hela fonem-steget var helt onödig. Har man bara tillräckligt mycket data så kan ett deep learning-nätverk lära sig detta ändå. Tråkigt för dem som lagt 20 år på att forska på fonem!

Den teknik som används här är Recurrent Neural Networks, förkortat RNN. Dessa skickar med data från föregående ord in i varje nod i nätverket, vilket gör att man har ett minne över det som har sagts tidigare. Det finns en hel uppsättning tekniker, men LSTM – Long Short Term Memory, verkar vara en av de vanligaste.

Vi lärde oss hur man fick ut en känsla ur en fras, alltså om man var kärleksfull eller arg när man skrek ”Måtte djävulen ta alla fruntimmer!”. Vi fick lära oss hur man hittade trigger words, typ ”Hej Siri, eller okej Google”.
En annan rolig sak vi fick lära oss var att man kan koka ner ett ord till en embedding, lite som bilden som kokades ner till ett antal värden. Dessa värden kunde sedan adderas ihop på något märkligt sätt, så att man kunde ställa frågor som: Man jämfört med kvinna är som kung jämför med vaddå?

Algoritmen svarade att ordet du söker är drottning.

Hur häftigt är inte det?

Den första programmeringsuppgiften i den här kursen var helt klart den svåraste av alla. Jag behövde nästan en hel dag för att färdigställa den!

Recension av Coursera – Deep learning specialization

Det sammanfattar alla delar av specialiseringen, liksom min recension av Deep learning specialization hos Coursera. Vad tyckte jag om den? Jag är imponerad över att den gode Andrew Ng kan få så svåra saker att låta så enkla. Dessutom är jag väldigt imponerad över vad AI kan göra. Jag tycker att den här kursen var väl värd min tid och jag rekommenderar den verkligen.

Man kan gå kursen och se alla filmer gratis, men om man vill ha ett diplom (certificate) så behöver man göra inlämningsuppgifterna och erlägga en prenumerationsavgift om 49 USD i månaden. Man kan även prova på kursen gratis i sju dagar, så om du lägger manken till kan du få ditt diplom gratis! enligt kursplanen behöver du dock 18 veckor på dig för att klara kursen, men då behöver du bara lägga 4-8 timmar i veckan.