Maskininlärning och djupinlärning är två olika slags artificiell intelligens. Man kan också säga – helt korrekt – att djupinlärning är en speciell typ av maskininlärning. Båda slagen börjar med träning och testdata samt en modell, och de går igenom en optimeringsprocess för att fastställa de ”vikter” som gör att modellen passar till datamängden. Båda slagen kan hantera numeriska problem (regression) och icke-numeriska problem (klassificering), men det finns flera tillämpningsområden, som föremålsigenkänning och översättning, där djupinlärning tenderar att ge bättre resultat än vanlig maskininlärning.

Så fungerar maskininlärning

Man brukar dela upp maskininlärningsalgoritmer i övervakad maskininlärning (träningsdata har försetts med de rätta svaren) och icke övervakad maskininlärning (träningsalgoritmen ”ser” inte de rätta svaren). Övervakad maskininlärning delas dessutom upp i algoritmer för klassificering (svaren uttrycks inte i siffror) och regressionsalgoritmer (som ger bedömningar i siffror, som hur många prylar som kommer att säljas nästa månad i butiken i Örebro).

Icke övervakad inlärning delas in i grupperande (clustering), som upptäcker grupper av likartade föremål, som joggingskor, promenadskor och finskor, associerande (som hittar objekt som tenderar att förekomma tillsammans, som kaffe och mjölk), och dimensionalitetsreducering (projektion, egenskapsurval och egenskapsextraktion).

Klassificeringalgoritmer

Ett klassificeringsproblem brukar vara ett problem inom övervakad inlärning: man vill att algoritmen ska göra ett val mellan två eller flera klasser, vanligtvis med sannolikhetssiffror för varje klass. Om vi bortser från artificiella neuronnät och djupinlärning, som kräver mycket mer datorkraft, är de vanligaste algoritmerna naiv bayesisk klassificerare, beslutsträd, logistisk regression, k-NN-klassificering och stödvektormaskin (SVM). Man kan också använda sammansatta metoder som Random forest eller andra bagging-metoder samt boostingmetoder som Adaboost och XGBoost.

Regressionsalgoritmer

Ett regressionsproblem är ett problem inom övervakad inlärning där modellen ska förutsäga ett tal. Den enklaste och snabbaste algoritmen är linjär regression (minsta kvadratmetoden), men du bör inte nöja dig med den, eftersom den ofta bara ger halvbra resultat. Andra vanliga regressionsalgoritmer (förutom artificiella neuronnät) är naiv bayesisk, beslutsträd, k-NN-regression, Learning vector quantization (LVQ), minst vinkelregression med Lasso, elastiskt nät, Random forest, Adaboost och XGBoost. Du ser kanske att det finns en del överlappning mellan maskininlärningsalgoritmer för regression och klassificering.

Klusteralgoritmer

Ett klusterproblem är ett problem inom icke övervakad inlärning där modellen ombeds att hitta grupper av likartade datapunkter. Den mest populära algoritmen för detta är K-Means clustering. Det finns också mean-shift clustering, DBSCAN (density-based spatial clustering of applications with noise), GMM (Gaussian mixture models) och HAC (hierarchical agglomerative clustering).

Algoritmer för dimensionalitetsreducering

Dimensionalitetsreducering går ut på att ta bort, eller slå ihop, variabler som har ingen eller ringa påverkan på utfallet. Det är en uppgift inom icke övervakad maskininlärning. Det används ofta tillsammans med klassificering eller regression. Algoritmer för dimensionalitetsreducering kan ta bort variabler där många värden saknas och ta bort värden med låg varians. Det kan vara beslutsträd, random forest, borttagande eller sammanslagning av värden med hög korrelation, omvänd egenskapseliminering, framåtriktat egenskapsurval, faktoranalys och principalkomponentanalys (PCA).

Optimeringsmetoder

Med träning och utvärdering blir algoritmer för övervakad inlärning till modeller. Man optimerar vikterna i deras parametrar för att finna de värden som bäst passar in på datamängden. Sådana algoritmer bygger ofta på varianter av metoden brantast nedstigning för sina optimerare, till exempel stokastisk gradient nedstigning – vilket i grund och botten är brantast nedstigning utförd flera gånger från slumpvis utvalda startpunkter. Vanliga förfiningar av stokastisk gradient nedstigning lägger till faktorer som korrigerar gradientens inriktning baserat på momentet, eller som justerar inlärningstakten baserat på förbättringarna från ett pass genom datamängden till nästa (en epok eller batch).

Datatvätt för maskininlärning

Det finns inga rena data i det fria. För att data ska vara användbara för maskininlärning måste de filtreras intensivt. Du vill till exempel:

  1. Granska datamängden och ta bort alla kolumner som saknar mycket data;
  2. Granska datamängden igen och välja ut de kolumner som du vill använda (egenskapsurval) för din prognos. Här kan du vilja variera om du itererar;
  3. Uteslut alla rader som fortfarande saknar data i de återstående kolumnerna;
  4. Rätta uppenbara stavfel och slå ihop värden med identisk betydelse. U.S., US, USA, och America bör till exempel slås ihop med ett enda namn;
  5. Uteslut rader med data som utliggande värden. Om du till exempel analyserar taxiresor i Göteborg vill du kanske filtrera bort rader med upphämtnings- eller avlämningsplatser som ligger långt utanför staden.

Det finns mycket mer som man kan göra, men det beror på vilka data det gäller. Detta kan bli tradigt, men om du lägger upp datatvätt som ett steg i maskininlärningsprocessen så kan du sedan upprepa och ändra det som du önskar.

Datakodning och normalisering för maskininlärning

För att kunna använda kategoriserade data för maskinklassificering måste du koda om textetiketterna i en annan form. Det finns två vanliga sätt att koda.

Ett är etikettkodning. Det innebär att varje textetikettvärde ersätts med ett siffervärde. Den andra är one-hot-kodning, vilket innebär att varje etikettord blir en kolumn med ett binärt värde – ett eller noll. De flesta ramverk för maskininlärning har funktioner som sköter det åt dig. Allmänt sett föredras one-hot-kodning, eftersom etikettkodning kan förvirra algoritmen så att den tror att den kodade kolumnen ska vara en ordnad lista.

För att använda numeriska data för maskinregression brukar man behöva normalisera data. Annars tenderar tal med stort omfång att dominera det raka avståndet mellan egenskapsvektorer, deras inverkan förstoras på bekostnad av andra fält och den brantaste nedstigande optimeringen kan få problem med konvergering. Det finns flera sätt att normalisera och standardisera data för maskininlärning, däribland min-max-normalisering, medelvärdesnormalisering, standardisering och skalning till enhetslängd. Sådana processer brukar kallas för feature scaling.

Egenskapsutveckling för maskininlärning

En egenskap är en enskild mätbar egenskap eller ett kännetecken för ett fenomen som betraktas. Begreppet egenskap hänger ihop med begreppet förklarande variabel, som används i statistiska metoder som linjär regression. Egenskapsvektorer slår ihop alla egenskaper i en enstaka rad till en numerisk vektor.

En del av konsten att välja egenskaper är att välja ut ett minimalt antal oavhängiga variabler som förklarar problemet. Om två variabler är högt korrelerade bör de slås ihop till en enda egenskap, eller också stryks den ena. Ibland gör man principalkomponentanalys för att konvertera korrelerade variabler till en uppsättning linjärt icke-korrelerade variabler.

En del transformationer som man använder för att skapa nya egenskaper eller för att minska dimensionaliteten bland egenskapsvektorerna är rätt enkla. Om man till exempel drar Födelseår från Dödsår får man Livslängd, en grundläggande variabel för analys av befolkningsstatistik. I andra fall är det inte lika uppenbart.

Uppdelning av data för maskininlärning

Det vanliga förfarandet för övervakad maskininlärning är att dela upp datamängden i undergrupper för träning, validering och testning. Ett sätt är att avsätta 80 procent av datamängden till träning och tio procent vardera till validering och testning. (Exakt vilka proportioner man väljer är en smaksak.) Huvuddelen av träningen görs mot träningsdatamängden och prediktion görs mot valideringsdatamängden vid slutet av varje pass.

Fel i valideringsdatamängden kan användas för att fastställa stoppkriterier eller för att driva hyperparameter tuning. Viktigast är att fel i valideringsdatamängden kan hjälpa dig att upptäcka ifall modellen har överanpassats till träningsdatamängden.

Prediktion emot testdatamängden görs vanligtvis när modellen är fullbordad. Om testdatamängden aldrig har använts i träningen kallas det ibland för ”holdout data set”.

Det finns flera andra sätt att dela upp datamängden. Ett vanligt sätt, korsvalidering, innebär att man upprepade gånger delar upp hela datamängden i en träningsdatamängd och en valideringsdatamängd. I slutet av varje pass blandas datamängden och delas upp igen.

Maskininlärningsbibliotek

För Python är Spark MLlib och Scikit-learn utmärkta maskininlärningsbibliotek. För R finns det bland annat maskininlärningsalternativ som CARAT, Randomforest, e1071 och KernLab. För Java är några bra val Java-ML, Rapidminer och Weka.

Djup maskininlärning

Djupinlärning är en typ av maskininlärning där modellen som tränas har fler än ett dolt lager mellan indata och utdata. I de flesta sammanhang betyder djupinlärning att man använder djupa artificiella nätverk. Men det finns algoritmer för djupinlärning som använder andra typer av dolda lager än artificiella neuronnät.

Idén bakom artificiella neuronnät kan spåras till 1940-talet. Grundtanken är att nätverket av artificiella neuroner, uppbyggt av sammankopplade tröskelbrytare, kan lära sig att känna igen mönster på samma sätt som en biologisk hjärna och ett nervsystem (inklusive näthinnan) gör.

Bakåtpropagering

Inlärningen sker främst genom att man stärker förbindelsen mellan par av neuroner som är aktiva på samma gång under träningen. I moderna program för artificiella neuronnät görs detta vanligtvis genom att vikterna för förbindelserna mellan neuroner ökas med användning av en regel som kallas för bakåtpropagering av fel – backprop eller BP.

Neuroner i artificiella neuronnät

Hur efterliknar man neuroner? Var och en av dem har en propageringsfunktion som omvandlar utdata från de anslutna neuronerna, ofta med en viktad summa. Utdata från propageringsfunktionen skickas till en aktiveringsfunktion som utlöses när indata överskrider ett tröskelvärde.

Aktiveringsfunktioner i artificiella neuronnät

På 1940- och 1950-talet använder artificiella neuronnät en stegaktiveringsfunktion. De kallades då för perceptroner. Moderna artificiella neuronnät påstår kanske att de använder perceptroner, men de har i själva verket kontinuerliga aktiveringsfunktioner, som en logistisk funktion eller sigmoidfunktion, hyperbolisk tangent eller rectified linear unit (ReLU). ReLU brukar vara bästa val för snabb konvergens, men det har problem med att neuroner "slocknar" under träningen ifall träningstakten är för högt satt.

Utdata från aktiveringsfunktionen kan skickas till en utdatafunktion för ytterligare omformning. Men ofta är utdatafunktionen samma som identitetsfunktionen, vilket innebär att utdata från aktiveringsfunktionen skickas till anslutna neuroner nedströms.

Topologier för artificiella neuronnät

När vi nu har lärt oss om neuroner måste vi ta itu med de vanligaste topologierna för artificiella neuronnät. I ett framåtmatande neuronnät är neuronerna ordnade i åtskilda lager: ett lager för indata, ett eller flera dolda lager för bearbetning, och ett utdataskikt. Utdata från varje lager skickas till nästa lager.

Träning av artificiella neuronnät

Övervakad inlärning med artificiella neuronnät görs på samma sätt som all annan maskininlärning. Du ger nätverket grupper av träningsdata, jämför nätverkets utdata med det önskade utfallet, räknar fram en felvektor och korrigerar nätverket med användning av felvektorn. Batcher av träningsdata som körs tillsammans innan man utför korrigeringar kallas för epochs.

För de som är intresserade av detaljer använder bakåtpropagering felgradienten (eller kostnadsfunktionen) med avseende på modellens vikter och avvikelser för att hitta rätt riktning för minimering av felet. Två saker styr hur rättelserna införs: optimeringsalgoritmen och variabeln inlärningstakt. Takten inlärningstakt brukar behöva vara låg för att garantera konvergens och för att undvika att ReLU-neuronet slocknar.

Optimerare för artificiella neuronnät

Optimerare för artificiella neuronnät brukar använda något slags algoritm för gradient nedstigning för att driva bakåtpropageringen, ofta med en mekanism som förhindrar att man fastnar i lokala minima, till exempel optimering av slumpvis utvalda minibatchar (stokastisk gradient nedstigning) och tillämpning av momentkorrektion till gradienten. En del optimeringsalgoritmer justerar också inlärningstakten i modellens parametrar genom att se till gradientens historik (AdaGrad, RMSProp och Adam).

Liksom med all maskininlärning behöver du kolla det artificiella neuronnätets förutsägelser mot en särskild datamängd för validering. Om du inte gör det löper du risk att skapa neuronnät som bara memorerar sina indata i stället för att lära sig att göra generella förutsägelser.

Algoritmer för djupinlärning

Ett djupt neuronnät för verkliga problem kan ha så mycket som tio dolda lager. Topologin kan vara enkel eller mycket komplex.

Ju fler lager det finns i nätverket, desto fler karakteristika kan det känna igen. Avigsidan med det är att ju fler lager nätverket har, desto längre tid tar det att göra beräkningarna, och desto svårare blir det att träna nätverket.

Faltningsnätverk (convolutional neural networks, CNN) används ofta för maskinseende. Faltningsnätverk brukar använda faltningslager, poolinglager, ReLU-lager, helt sammankopplade lager och förlustlager för att simulera ögats näthinna. Faltningslagret tar enkelt uttryckt integralen av många små överlappande områden. Poolinglagret utför ett slags icke-linjär nedsampling. ReLU-skiktet tillför en icke-mättande aktiveringsfunktion f(x) = max(0,x). I ett helt sammankopplat lager har neuronerna förbindelser med alla aktiveringar i det överordnade lagret. Ett förlustlager räknar ut hur träningen av nätverket belastar avvikelsen mellan beräknade och verkliga etiketter med användning av Softmax eller en euklidisk förlustfunktion för regression.

Recurrent neural networks (RNN) används ofta för behandling av naturligt språk och annan sekventiell bearbetning, liksom Long Short-Term Memory-nätverk (LSTM) och uppmärksamhetsbaserade neuronnät. I framåtmatande nätverk flödar information från indata genom de dolda lagren till utdata. Det gör att nätverket bara kan hantera ett enda tillstånd åt gången.

I recurrent neural networks går informationen i en slinga, vilket gör att nätverket kommer ihåg tidigare utdata. Det möjliggör analys av sekvenser och tidsserier. RNN har två vanliga problem: exploderande gradienter (lätt att fixa genom att låsa gradienterna) och försvinnande gradienter (inte lika lätt att fixa).

I LSTM kan nätverket glömma tidigare information (”gating”) lika väl som att minnas den. I båda fallen genom att ändra vikter. Det innebär i praktiken att LSTM har både ett långtidsminne och ett korttidsminne, vilket löser problemet med försvinnande gradienter. LSTM-nätverk kan hantera sekvenser av hundratals tidigare indata.

Uppmärksamhetsbaserade moduler är generaliserade grindar som lägger vikter på en vektor av indata. En hierarkisk neural uppmärksamhetskodare använder flera lager uppmärksamhetsmoduler för att hantera tiotusentals tidigare indata.

Slumpmässiga beslutsträd (random decision forests, RDF) är inte artificiella neuronnät, men de är användbara för ett stort antal problem som gäller klassificering och regression. RDF:er består av många lager, men i stället för neuroner är en RDF sammansatt av beslutsträd och har som utdata ett statistiskt genomsnitt (typvärde för klassificering, medelvärde för regression) av de individuella trädens förutsägelser. De slumpmässiga inslagen i RDF:er är användningen av bootstrap aggregation (även känt som bagging) för de enskilda träden och att de slumpmässigt tar delmängder av trädens egenskaper.

XGBoost (eXtreme Gradient Boosting) är inte heller ett djupt artificiellt neuronnät. Det är ett skalbart heltäckande tree boosting system som har fått förstklassiga resultat i många tävlingar i maskininlärning. Bagging och boosting nämns ofta i samma andetag. Skillnaden är att i stället för att generera en uppsättning slumpmässiga beslutsträd börjar gradient tree boosting med ett enda beslutsträd eller regressionsträd, optimerar det och bygger sedan upp nästa tre av återstoderna av det första trädet.

Några av de bästa ramverket för djupinlärning med Python är Tensorflow, Keras, Pytorch, och MXNet. Deeplearning4j är ett av de bästa ramverken för djupinlärning med Java. ONNX och TensorRT är exekveringsprogram för djupinlärningsmodeller.

Djupinlärning eller maskininlärning?

I vanlig klassisk (icke-djup) maskininlärning tränas och beräknar algoritmerna mycket snabbare än med djupinlärningsalgoritmer. Det räcker ofta med en eller ett fåtal processorer för att träna en klassisk modell. Djupinlärningsmodeller behöver däremot ofta hårdvaruacceleratorer som GPU:er, TPU:er eller FPGA:er för träning och också för användning i full skala. Annars skulle det ta månader att träna modellerna.

I många fall räcker det med klassiska maskininlärningsalgoritmer för att producera en modell som är ”tillräckligt bra”. För andra problem har klassiska maskininlärningsalgoritmer inte fungerat så bra i det förflutna.

Ett område som ofta angrips med djupinlärning är behandling av naturligt språk, vilket omfattar översättning, automatisk sammanfattning, samreferensupptäckt, diskursanalys, morfologisk uppdelning, igenkänning av omnämnda entiteter, generering av naturligt språk, förståelse av naturligt språk, taggning av ordklasser, sentimentsanalys och taligenkänning.

Ett annat huvudområde för djupinlärning är bildklassificering, vilket omfattar bildklassificering med lokalisering, objektupptäckt, objektuppdelning, bildstilsöverföring, färgsättning, bildrekonstruktion, superupplösning och bildsyntes.

Djupinlärning har också med framgång använts för att förutsäga hur molekyler kommer att interagera. Detta för att hjälpa läkemedelsföretag att utveckla nya läkemedel, för att söka efter subatomiska partiklar och för att automatiskt parsa mikroskopbilder i syfte att bygga upp en tredimensionell karta av den mänskliga hjärnan.

Läs också: Maskininlärningsmodeller utdaterade på grund av coronaviruset