Det är dags att lägga till maskininlärning i din verktygslåda

mars 28, 2017

AI och maskininlärning uppfattas ofta som något magiskt. Vi förundras över program som gör saker som tidigare varit science-fiction och program som kan lära sig vad just jag vill.

När vi vänjer oss vid teknikerna uppfattas de dock inte längre som AI utan övergår till att bli något “normalt”. Ofta övergår det ganska snart även till att vara förväntad funktionalitet. Vi förväntar oss att tjänster anpassas efter oss och förstår vad vi vill.

Det har varit mycket hype kring AI och maskininlärning det senaste året. Den här artikeln är ett försök att hjälpa er ett steg förbi hypen, så att vi kan börja använda teknikerna i praktiken. Om ni inte redan börjat titta på maskininlärning så är det hög tid att göra det. De här teknikerna är inte längre bara något som de stora internetjättarna och forskningsinstituten kan använda sig av. Idag finns det många tekniker som är både enkla att använda och beprövade. Att läsa skriven text, klassificera bilder och hitta mönster i data är i många fall inte längre särskilt svårt eller dyrt att göra.

Molntjänster

Ett av de enklaste sätten att börja med maskininlärning är att använda färdiga tjänster. Just nu dyker det upp nya tjänster nästan varje vecka. Bland de största är Google, IBM, Microsoft och Amazon, men det finns flera andra aktörer också som t.ex. HavenOnDemand eller BigML. Amazon har olika apier för specifika uppgifter som bildigenkänning och text-to-speech. De har även ett mer generellt api för klassificering och prediktion.

Öppen källkod

Fram tills nyligen har det framförallt varit den akademiska världen som drivit utvecklingen. Det har medfört en kultur av öppenhet där man delar med sig av sina tekniker, kod och även dataset att testa mot. Nu satsar dock Google, Facebook, Microsoft, Baidu, m.fl. hårt på maskininlärning och positionerar sig genom att släppa egna öppna ramverk. De är relativt lättillgängliga med bra dokumentation och kodexempel.

För den som har svårt att välja bland ramverken kan en bra ide vara att börja med Keras. Det är ett bibliotek som fungerar som ett enklare API-lager över andra ramverk. Idag fungerar det mot Theano samt Googles TensorFlow. Google har uttryckt att det kommer att bli ett officiellt api till TensorFlow. Även Microsoft har planer på att bygga stöd för Keras till deras Cognitive Toolkit.

Ett bra sätt att lära sig och labba med några av de här ramverken är att gå till det sociala nätverket Kaggle. Där arrangeras tävlingar med olika maskininlärningsproblem. Medlemmarna laddar upp, delar och diskuterar lösningar. Som företag eller organisation går det även att arrangera en tävling via dem och på så sätt få hjälp att hitta bättre lösningar på sina affärsproblem.

blue-robot.jpg

Öppna modeller och öppen data

De vanligaste teknikerna som används idag bygger på något som kallas Supervised learning. Det betyder att du tränar systemet med många exempel på indata och förväntad utdata. Om du t.ex. ska träna ett system för att känna igen olika arter av fjärilar, så behöver du ha en massa bilder på fjärilar samt information om vilken art det är i respektive bild. För att träna ett neuralt nätverk behövs ofta väldigt stora datamängder och den behöver vara korrekt uppmärkt. Detta kan innebära en tröskel om det inte finns något enkelt sätt att samla in den datan.

Det finns dock många färdigtränade modeller för olika vanliga problem som t.ex. avläsning av handskriven text. Det finns även flera modeller som är grundtränade, men som går att anpassa till sina egna specifika behov genom att träna dem vidare på egen data. T.ex. finns det många modeller för bildigenkänning som är tränade på det öppna datasetet ImageNet. De kan tränas vidare till att bli riktigt bra på att känna igen specifika saker. Då krävs inte alls lika mycket träningsdata. Det kan räcka med något hundratal exempel.

Ett annat alternativ som kan fungera i vissa fall är att använda sig av tjänster som CrowdFlower eller CrowdAI. De kan hjälpa till att samla in data eller märka upp data via betald crowdsourcing.

Hantera osäkerheten

Det är en tunn linje mellan att en tjänst är irriterande och att den är riktigt bra. Vi har väl alla svurit åt röstigenkänning som inte fattar vad du säger eller fått rekommendationer på filmer som inte alls känns intressanta för dig. Teknikerna blir hela tiden bättre, men system som bygger på maskininlärning har alltid ett visst mått av osäkerhet. Den här osäkerheten behöver hanteras på ett bra sätt. Det kan t.ex. vara viktigt att användargränssnittet inte lovar för mycket utan att copytexter och grafik är anpassade till osäkerheten i resultaten. För vissa typer av system kan det även vara väldigt viktigt att systemet inser när det behöver lämna över ansvaret till en människa och att det är tydligt när detta sker.

Svårt och tidskrävande att testa och debugga

I "Machine Learning: the high interest credit card of technical debt" beskriver Peter Norvig bland annat svårigheterna med att testa system som baseras på maskininlärning.

Det är ofta svårt att applicera traditionella funktionstester av typen mata in ett värde, se att rätt värde kommer ut. Med tanke på osäkerheten i systemen så handlar det snarare om att mäta hur stor felfrekvensen är. Många system är inte heller deterministiska d.v.s. det är inte säkert att du får samma svar två gånger på en viss fråga.

En vanlig approach är att dela upp sin exempeldata i träningsdata och testdata. Träningsdatan används för att träna systemet och testdatan används sen för att validera hur bra systemet presterar. Ett annat sätt att testa systemen kan vara att göra A/B-tester mot användare och på så sätt utvärdera hur bra en algoritm fungerar jämfört med andra. Oavsett vilken approach du väljer så tar det ofta lång tid att träna och sedan testa systemen, så du kan få räkna med ganska långa cykler för att utvärdera ändringar.

Att systemen är svåra att testa kan ibland kompenseras för genom bra monitorering. Om du mäter hur bra systemet presterar och kontinuerligt övervakar, så kan det vara ett bra komplement.

Vägen framåt

Just nu är neurala nätverk väldigt populära. Många problem kan dock lösas tillräckligt bra med enklare algoritmer också. Framöver kommer det troligtvis att bli vanligare med tekniker som bygger på Unsupervised learning, det vill säga tekniker som hittar mönster och lär sig saker utan att kräva en massa uppmärkta exempel. En stor del av det mänskliga lärandet fungerar på det sättet.

Avslutningsvis kan vi konstatera att det fortfarande är ganska långt tills vi uppnår generell intelligens liknande människans. För mer specifika problem har vi dock kommit väldigt långt nu och överträffar i många fall den mänskliga förmågan. De här specifika teknikerna är dessutom relativt enkla att komma igång med redan idag och vi borde lära oss dem för att ha som ett verktyg att ta till där de passar.

Toppbild av Nogran under CC BY 2.0
Bild av Peyri Herrera under CC BY-ND 2.0

Kontakta oss

Let's reinvent the future