• No results found

Vilket stöd kan fås genom att skapa och följa upp en systemanatomi?

7.3

Vilket stöd kan fås genom att skapa och följa upp en systemanatomi?

En systemanatomi kan vara ett användbart verktyg för att skapa en struktur för systemet med fokus på beroenden, vilket underlättar planeringen av utvecklingen. Hur användbar systemanatomin är under själva utvecklingen beror mycket på omständigheterna i projektet - hur många utvecklare som finns, hur komplext systemet är och huruvida systemet behöver ändras under arbetets gång. Trots detta kan systemanatomin under hela projektet vara an- vändbar som en övergripande och lättförståelig systembeskrivning, samt som referenspunkt för att bedöma om utvecklingen av systemet går i rätt riktning.

Del II

A

Undersökning av hur data ska

hanteras för maskininlärning i

Tensorflow av Alfred Hagberg

A.1

Inledning

En av de största svårigheterna med maskininlärning och artificiell intelligens är att förbereda data för att användas i algoritmer. För att få en maskininlärningsalgoritm att fungera optimalt måste man hantera datan på vissa sätt först för att få algoritmen att lära sig. Ett problem är att datan består av många olika typer och är inte bara numerisk, utan består också av till exempel text eller kategorisk data. För att data ska kunna användas i till exempel neuronnät så måste det vara i form av vektorer.

A.1.1

Syfte

Syftet med undersökningen är att få en förståelse för hur man ska hantera data av olika for- mer för att få en maskinilärningsalgoritm att fungera på ett bra sätt. Främst svårigheten med att hantera text i neuronnätverk.

A.1.2

Frågeställningar

1. Vilken metod för att mata in data med textsträngar fungerar bäst för Tensorflow? 2. Vilken metod för att mata in data med numeriska värden fungerar bäst för Tensorflow?

A.2

Metod

Undersökningen ska genomföras både genom en litteraturstudie där jag undersöker gjorda upptäckter samt en egen empirisk studie där olika metoder testas genom att data matas in i algoritmer på olika sätt.

A.2.1

Värdering av resultat

För att kunna jämföra metoderna med varandra så testas till största delen hur stor andel den klassificeras rätt. Utöver det så testas också hur mycket beräkningskraft som krävs.

Korsvalidering

Korsvalidering är en metod där man delar upp träningsdata i k delar. När man sedan tränar modellen så utesluter man en av de k delarna för att använder den delen för att testa model- len. Sedan upprepar man detta för samtliga k delar. Med denna metod så testar man bara på

A.3. Teori

data som modellen inte har tränats på så att testmetoden visar om modellen fungerar mer allmänt. [17]

A.2.2

Avgränsningar

Undersökningen kommer endast avse algoritmer för deep learning i biblioteket Tensorflow. Den kommer bara testa vilka metoder som man ska använda för att mata in data i modeller och inte på till exempel strukturen på de neurala nätverken.

A.3

Teori

I det här avsnittet beskrivs bakomliggande teori för neurala nätverk samt om biblioteket Ten- sorflow som undersökningen använde sig av.

A.3.1

Artificiella neuronnät och deep learning

Artificiella neuronnätverk är nätverk som försöker imitera den mänskliga hjärnan genom att den består av ett nätverk av noder som kallas neuroner. Den mänskliga hjärnan består av mer än 10 miljarder sammankopplade neuroner. Dessa är celler som genom biokemiska reaktio- ner tar emot, processar och överföra signaler. Cellerna är ihopkopplade med synapser som signalerna skickas över. Artificiella neuronnätverk togs fram som en generalisering av pro- cesserna som sker i hjärnan genom att man tog fram enklare matematiska modeller. Cellerna representeras av noder och synapserna som kopplar samman dem av vikter som represen- terar hur stark kopplingen är mellan dem. Cellernas olinjära egenskaper representeras av en transferfunktion. Nätverket lär sig genom att vikterna justeras utifrån en inlärningsalgoritm. En neurons utsignal O kan beskrivas i följande formel: [16]

O= f(

n

ÿ

i=1

wixi) (A.1)

Där wiär vikten för insignalen i och xiär insignalerna i samt f transferfunktionen. Transfer-

funktionen, eller aktiveringsfunktionen kan var olika typer av funktioner, till exempel:

f(x) = # 1 x ě 0 0 x ă 0 (A.2) f(x) = # x x ě 0 0 x ă 0 (A.3) f(x) = 1 1+e´x (A.4) f(x) = e 2x´1 e2x+1 (A.5)

Där (A.2) är en perceptron (tröskelfunktion), (A.3) en Rectified Linear Unit (tröskelfunktion), (A.4) en sigmoid-neuron och (A.5) en Tanh-neuron (tangens hyperbolicus). [28]

Neurala nätverks struktur

Neurala nätverk byggs upp genom att koppla ihop neuronerna till en större struktur. Denna strurktur består av tre olika typer av lager: in-lager, dolda lager och ut-lager. Dessa kallas för feedforward-nät. Där är neuronerna fullt sammankopplade mellan lagrena, det vill säga alla neuronerna i ett lager är kopplade till alla neuronerna i nästa lager. [28]

A.3. Teori

Figur A.1: Exempel på struktur av ett artificiellt neuronnätverk

Algoritmer för inlärning

Ett neuralt nätverk ska vara konstruerat så att en mängd indata ger önskad mängd utdata. För att få till detta så måste man ha en inlärningsalgoritm som sätter rätt vikter på vikterna i neuronnätet. Algoritmer för att hitta dessa vikter delas in i tre kategorier: supervised learning, unsupervised learning samt reinforcement learning. Supervised learning (övervakat lärande) in- nebär att man för varje indata har en önskad utdata vilken man lär nätverket med. Unsu- pervised learning (oövervakat lärande) innebär att modellen hittar strukturer i datamängden och till exempel delar in den i kluster. Reinforcement learning (Förstärkt lärande) innebär att modellen lär sig genom att man som återkoppling till den anger om något var bra eller dåligt. En algoritm för supervised learning är backpropagation. Metoden introducerades på 1970- talet men fick inte någon större spridning förrän 1986 då en artikel i tidskriften Nature be- skrev hur den metoden är mycket bättre än tidigare metoder. [29] Den fungerar genom att den tar fram en felfunktion E.

E= 1 2 ÿ c ÿ j (yj,c´dj,c)2 (A.6)

Där c är index över in- och utdatapar i, j index över outputneuronerna, y är outputenhetens tillstånd och d det önskade tillståndet. För att minska felet E så använder man sig av så kallad gradient descent (nedstigning via gradient) där man beräknar partiella derivatan BE/Bwji

med avseende på vikt från neuron i till j. Utifrån denna gradient så förskjuts sedan värdena på vikterna i negativ rikting så att felet blir mindre. [30]

Träning av neurala nätverk

För att träna neurala nätverk så behöver man indata och dess förväntade utdata. Genom att mata in indatan till nätverket och mata in genom backpropagation den förväntade utdatan så lär sig nätverket. [29]

Deep learning

Deep learning, eller djupa neurala nätverk (DNN) är neuronnätverk som består av flera dol- da lager. När man har flera lager så får man flera lager av abstraktion som i sig kan identifiera

A.3. Teori

olika mönster i data vilket gör att det kan krävas färre än att bara ett lager som ska hitta alla mönster. Exempel på detta är i bildigenkänning så kan varje lager hitta olika former i olika detaljnivåer som kombinerat kan hitta vad bilden innehåller. Detta gör att djupa neuronnät- verk kan bli mycket kraftfullare än nätverk med bara ett dolt lager. Man kan jämföra det med vanlig programmering där man kan lösa större problem genom att dela upp dem i mindre enklare funktioner med olika lager av abstraktion som anropar varandra.

Problemet med dessa nätverk är dock att det blir svårare att träna dem. [29]

A.3.2

Tensorflow

Tensorflow är ett ramverk utvecklat på Googles forskningsavdelning Google Research som implementerar ett interface för maskininlärning, främst neurala nätverk. API:et för Tensor- flow släpptes som öppen källkod under licensen Apache 2.0 i november 2015. API:et kan användas på ett stort antal olika enheter och arkitekturer såsom GPU:er och mobila enhe- ter och har använts för många olika syften såsom taligenkänning, robotik och behandling av naturligt språk. Tensorflow är i grunden byggt på dataflödesgrafer. [13]

Implementationer av neurala nätverk

Tensorflows djupa neurala nätverk, som den här undersökningen fokuserar på finns i flertalet implementationer.

Ett exempel på en implementation är DNNLinearCombinedClassifier som är en kombination av djupa och ”icke-djupa” (breda) neurala nätverk.

I figur A.2 visas skillnaden mellan djupa och breda neurala nätverk och hur det har byggts upp i den kombinerade implementationen. I den breda modellen så används inga dolda lager så utsignalen blir bara en linjärkombination av insignalerna, medans i den djupa modellen så används minst två dolda lager. [31]

Figur A.2: Struktur på tensorflows olika implementationer av DNN [31]

Feature columns

För att data ska kunna användas i ett neuralt nätverk så den göras om till vektorer. Detta görs i tensorflow genom så kallade feature columns (egenskapskolumner). Dessa översätter från rådata till format som kan användas i neuronnätverk. [32]

I Tensorflow finns det många olika typer av feature columns för många olika typer av data. I figur A.3 visas en översikt av hur feature columns agerar som [32] översättare från rå indata till data som kan tolkas av ett neuralt nätverk. För att kunna mata in data till ett nätverk i Tensorflow måste man ha en feature column för varje kolumn i indatan. Varje kolumn måste ha matchande datatyp och namn mot en feature column i modellen för att det ska kunna tolkas av Tensorflow.

A.4. Undersökning

Figur A.3: Hur feature columns integreras med DNN i Tensorflow [32]

Embeddings

Embeddings är en avbildning från objekt såsom ord till vektorer med reella tal. I tensorflow finns det många olika implementationer för embeddings. Ett exempel är word2vec som är en embedding av ord där varje ord representeras av en vektor och vektorerna för ord som är relaterade är närliggande. [33, 34]

A.4

Undersökning

Undersökningen utförs med en DNNClassifier i programmeringsspråket Python.

A.4.1

Datamängd att träna på

Datamängden som undersökningen ska utgå ifrån för att träna modellen är en databas med byggvaruprodukter. Datamängden består av både numeriska kolumner (attribut på produk- ter som längd, bredd, m.m.) samt kolumner med strängar (namnen på produkter) samt vissa kategoriska attribut. Dessa produkter är indelade i kategorier och i varje kategori ska varje produkt matchas med en basprodukt. Storleken på datamängden är 264 produkter som ska klassifieras i åtta olika basprdukter.

A.4.2

Test av olika feature columns

Det svåra med datamängden är att få den att fungera på ett bra sätt är att få strängarna till vektorer för att det ska kunna användas med neurala nätverk. Det finns många sätt att göra det på. För data som inte är numerisk används ofta så kallade one-hot kodning då man gör om det till en vektor lika stor som antalet kategorier där för varje kategori så är ett av värdena ett och resten noll. Detta kan göras på texter genom att man har en ordlista och varje ord kategoriseras och görs om till en vektor på det sättet. [32]

Jämförelse mellan embedding column och indicator column

Ett problem är att om man har data som är i form av kategorier och man representerar det i form av en one-hot-vektor så blir vektorn lika stor som antalet kategorier vilket i vissa fall kan vara kanske flera miljoner vilket gör det ohållbart att använda ett neuronnätverk på det. Om man använder en embedding-kolumn i Tensorflow så minskar den storleken på vektorn. Detta genom att den tar varje kategori och avbildar det mot en vektor av lägre dimension än antalet kategorier. [32]

A.5. Resultat

För att skapa en kategorisk indatakolumn där varje kategori representeras av ett ord ska- par man en kategorisk kolumn med en lista på orden som den ska kategorisera efter enligt kodexempel A.1.

Kodexempel A.1: Kategorisk kolumn med ordlista vocabulary_feature_column = \

tf . feature_column . categorical_column_with_vocabulary_list ( key = column_key ,

vocabulary_list = wordlist )

Sedan kan man utifrån den kategoriska kolumnen skapa en embedding column eller en indi- cator column:

Kodexempel A.2: Embedding column

embedding_column = tf . feature_column . embedding_column ( categorical_column = vocabulary_feature_column , dimension = math . ceil (len( wordlist )∗∗0.25))

Där antal dimensioner sätts till fjärderoten ur storleken på längden på ordlistan som enligt Tensoflows dokumentation är en tumregel för hur stor den ska vara. [32]

Dessa kolumner matades sedan in modellen genom att använda en kolumn per ord i pro- dukttitlarna och ordlistan till kolumnerna var alla ord som förekom i dem.

Jämförelse mellan bucketized column och numeric column

För att mata in numerisk data i neuronnätverk i Tensorflow finns det två olika sorts kolumner; numeric column (numerisk kolumn) samt bucketized colunmn (uppdelad kolumn). I den numeriska kolumnen så matas värdet direkt in i neuronnätverket som en skalär medans i den uppdelade kolumnen så delas värdena in i intervall där varje intervall representeras som en egen kategori. Dessa intervall matas sedan in i neuronnätverket som one-hot på samma sätt som den kategoriska kolumnen för varje intervall. Detta kan vid första anblick verka som ett överkomlicerat sätt att mata in ett numeriskt värde i nätverket, istället för att använda den som en skalär i indatavektorn. Anledningen till att göra på det här sättet är att nätverket får en vikt per intervall vilket gör att modellen får fler parametrar att justera vilket gör att den kan fånga upp ett olinjärt samband. [32]

A.5

Resultat

Här presenteras resultat i form av tabeller och grafer.

A.5.1

Modellernas korrekthet

Modellernas korrekthet är ett mått andelen korrekta klassificeringar nätverket gör av det to- tala antalet. Grafen i figur A.4 visar hur korrekta nätverken är efter antalet träningssteg, dvs antalet gånger som den tränas om på samma datamängd. Modell 1 innehåller kolumnera embedding column samt numeric column, modell 2 innehåller embedding column samt buc- ketized column, modell 3 innehåller indicator column samt numeric column och modell 4 innehåller Indicator column samt bucketized column.

A.6. Diskussion 0 100 200 300 400 500 0.2 0.4 0.6 0.8 Antal träningssteg korr ekthet modell 1 modell 2 modell 3 modell 4

Figur A.4: Korrekthet för modellerna efter antal träningssteg

A.5.2

Modellernas körtid

Modellernas körtid är tiden det tog att träna samt testa modellerna med korsvalidering enligt beskrivning i A.2.1. Modellerna tränades med 100 träningssteg.

Feature columns Körtid (s) Embedding column, numeric column 35.3

Indicator column, numeric column 54.6 Embedding column, bucketized column 39.6 Indicator column, bucketized column 60.1

Tabell A.1: Modellernas körtider

A.6

Diskussion

Skillnaden mellan hur stor korrekthet som kunde fås från indicator columns och embedding column var inte alls stor, utan den största skillnaden var i prestanda. Som man ser i tabell A.1 blev körtiden nästan halverad av att använda sig av det. Detta visar att man kan minska antalet insignaler till nätverktet utan att minska hur bra det lär sig. Denna kolumn borde speciellt vara bra när man ska lära nätverk med riktigt stora kategoriserade indatakolumner som t.ex. om man har ordlistan över ett helt språk vid behandling av naturligt språk.

Den största förbättringen på korrektheten uppnåddes vid användningen av bucketized co- lumn då man enligt figur A.4 kan utläsa att den lär sig både mycket snabbare och att den når en mycket högre nivå. Numeric column blev något bättre gradvis, även efter många tränings- steg, så det var svårt att se hur bra den kan bli. Dock om det krävs så många träningssteg för att modellen ska bli bra, så kräver det även mycket datorkraft vilket är en stor nackdel i sig. Sedan finns det också många andra faktorer som spelar in på hur bra ett nätverk fungerar såsom antal lager, antal neuroner per lager, osv. Detta gör det väldigt svårt att hitta den opti- mala modellen för ett klassifieringsproblem.

A.7

Slutsatser

A.7. Slutsatser

Embedding column är den bästa indatakolumnen i Tensorflow för att mata in data i form av text då man kan använda sig av ett stort ordförråd utan att modellen blir för stor och blir långsam.

Bucketized column ger en stor förbättring i hur korrekt modellen klassificerar med numerisk indata, åtminstone på den testade typen av data.

B

En fördjupad granskning av

utvärderingsmetriker för

maskininlärda klassificerare av

Eric Nylander

B.1

Syfte och motivering

Inom optimeringsalgoritmer - särskilt inom maskininlärning finns det en mängd satser som heter ”No free lunch theorems”. Enligt dessa satser så finns det vissa optimeringsproblem som inte har någon optimal lösning för alla möjliga problemuppsättningar. SML faller under en mängd sådana satser och det är därför nödvändigt att testa flera olika algoritmer när en SML lösning används för ett klassificeringsproblem. [35] Vid testning av dessa olika lösningar så krävs effektiva utvärderingsmetrik.

Eftersom SML kräver en uppsättning träningsdata så kommer modellen som resulterar här- stamma från den träningsdata som används. Detta kan innebära att modellen som resulterar är överanpassad efter träningsdatan. Utvärderingsmetriken måste kunna modellera hur den valda lösningen fungerar på det generella fallet för den aktuella problemuppsättningen. Vidare så är det intuitivt att värdera en klassificerare som utför korrekta klassificeringar med hög regelbundenhet. Detta tyder på en klassificerare som sägs ha hög riktighet. Däremot är detta inte tillräckligt effektivt för en bra klassificerare. Som ett exempel där hög riktighet inte ger en bra klassificerare så beaktas en klassificerare med tre möjliga klasser. Av dessa tre klasser så utgör klass A 3% av fallen, klass B 2% av fallen, och klass C 95% av fallen. En klassificerare som tillämpar klass C på all indata kan inte ses som en bra klassificerare, men har ändå en riktighet på 95%. Av den anledningen krävs en mer representativ lösning för utvärdering av klassificerare.

Related documents