You are on page 1of 22

Rnninge Gymnasium Rapport fr gymnasiearbete 2016/2017

2017-04-03
Henrik Lindgren, TEINF14

Artificiella neuronnt

Bild: Wikimedia Commons


Handledare: Pascal Olivier
Sammanfattning

This thesis deals with the subject of the Machine Learning method known as Artificial
Neural Networks that seeks to roughly mimic the basic fundamental function of biological
central nervous systems.
The purpose of this thesis was to determine whether or not supervised feedforward
Artificial Neural Networks can be used to solve a sudoku puzzle and to investigate the
function of Artificial Neural Networks. Sudoku solving was attempted by training for each
square in the puzzle separately and by using the rectified linear and the sigmoid activation
function. One hidden layer was used and tests was done using different numbers of hidden
neurons. Loss was determined using cross entropy and optimization was done using the
Stochastic Gradient Descent algorithm together with Adaptive Moment Estimation (for
optimizing learning rate). The result was partially successful with accuracies ranging from
95 to 100% for the first 23 squares (training was unsuccessful for the remaining squares).
It was concluded that it is possible to solve sudoku puzzle using this method if combined
with other simple algorithms.
Innehll

1 Inledning 1
1.1 Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Syfte och frgestllningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Metod 1
2.1 Teoretisk bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.1.1 Biologisk neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.1.2 Artificiell neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.3 Ntverk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.4 Feedforward och recurrent . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.5 vervakade och overvakade ntverk . . . . . . . . . . . . . . . . . . 5
2.1.6 Empirisk riskminimering . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.7 Optimering med Stochastic Gradient Descent . . . . . . . . . . . . . . 7
2.1.8 Aktiveringsfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.9 One hot-vektorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.10 Klassificeringsproblem med softmax-funktionen . . . . . . . . . . . . 9
2.1.11 Kostnadsberkning med softmax och cross-entropy . . . . . . . . . . . 10
2.1.12 TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Om kllorna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3 Resultat 17

4 Diskussion 18
1 Inledning

1.1 Bakgrund
Idn om maskininlrning har funnits lnge och uppkom ur tanken p artificiell intelligens. Redan
mycket tidigt i den artificiella intelligensens historia som akademisk disciplin, pgick forskning
om olika metoder fr att f maskiner att lra sig av information. En av dessa metoder var ar-
tificiella neuronnt (ANN) som syftade till att terskapa en biologisk hjrnas stt att behandla
information.
Redan 1943 uppfann logikern Walter Pitts och neurofysiologen Warren McCulloch en be-
rkningsmodell fr neuronnt.
P slutet av sextiotalet stannade forskningen mer eller mindre av d forskare drog slutsat-
sen att konceptet krvde fr hg berkningskraft fr att vara rimligt. Utvecklingen teruppstod
dock nr datorer fick hgre berkningskraft. Idag anvnds artificiella neuronnt till mnga oli-
ka typer av applikationer som krver mnsterigenknning av olika slag, dribland inte minst
bildigenknning.
Artificiella neuronnt fngade mitt intresse, dels p grund av mitt intresse fr programme-
ring men ocks fr att det ger en inblick i en potentiellt revolutionerande vetenskap om artificiell
intelligens.
Jag kommer hdanefter anvnda frkortningen ANN (Artificial Neural Network) fr att
referera till artificiella neuronnt.

1.2 Syfte och frgestllningar


Syftet med projektet r att utreda konceptet ANN, ta reda p vad som krvs fra att skapa dem,
hur de r uppbyggda och hur de kan anvndas som en metod fr maskininlrning samt hur
metoden kan appliceras fr problemlsning (i det hr fallet logikspelet sudoku).
Huvudsakligen kommer denna rapport besvara frgan Hur kan man lsa ett sudoku
m.h.a. ett ANN (demonstrerat med programkod)?.
Fr att frst bakgrunden till detta kommer ven fljande punkter berras:

Hur ett ANN r uppbyggt

Vilka matematiska modeller och koncept som r relevanta fr ANN

Hur ett ANN lr sig frn information

2 Metod

2.1 Teoretisk bakgrund


2.1.1 Biologisk neuron
Fr att frst ett ANN krvs det att man frstr dess minsta byggsten, nmligen den artificiella
neuronen, en matematisk funktion modellerad efter neuroner som finns i naturen. Frst och

1
frmst r det drfr till hjlp att frst grundlggande hur en biologisk neuron (ven kallad
nervcell) r uppbyggd vilket representeras av skissen i figur 1.1

Figur 1: En skiss av en biologisk neuron/nervcell.

Om man gr igenom skissen frn hger till vnster finns frst dendriterna (Dentrites) som
fngar upp signaler frn andra nervceller. En signal bestr av pulserande elektrisk potentialskill-
nad som sker med olika frekvens, det r denna frekvens som ger upphov till det vrde som sig-
nalen transporterar. Dendriterna frndrar sjlva signalen som gr genom dem, de kan antingen
ka eller minska frekvensen. Signalen fngas upp av cellkroppen (Cell body) som ocks utfr
ngon form av frndring av signalen. Den frdiga signalen gr sedan genom axonen (Axon)
som kan vara flera centimeter eller meter lng och kopplar vidare signalen till andra nervceller.
Axonen r ansluten till dendriterna p andra nervceller med hjlp av kopplingar kallade synap-
ser (Synapses) som representeras av svarta kvadrater i skissen (de tillhr ej nervcellen), ven
de minskar eller kar frekvensen.2

1
Hyvrinen, Hurri och Hoyer 2009, s. 52.
2
Ibid., s. 5154.

2
2.1.2 Artificiell neuron
Ett ANN r ett ntverk av artificiella neuroner. En artificiell neuron kan beskrivas som en funk-
tion y = f (x) dr x r en vektor av ingngsvrden likt hur en biologisk neuron tar emot flera
olika frekvenser frn andra neuroner genom dendriterna. y r en skalr som allts r samma
vrde fr alla neuroner som neuronen kopplas vidare till likt signalen som gr ut genom axonen
p en biologisk neuron.
Figur 2 representerar en artificiell neuron med ingngsvrdena x1 . . . xi . Man kan jmfra
ingngarna till vnster med dendriterna i en nervcell (till hger i figur 1), noden i mitten med
cellkroppen och utgngen till hger med axonen. Neuronens ingngsvrden kan hmmas eller
frstrkas precis som dendriterna och synapserna i en biologisk neuron kan ka eller minska
signalernas frekvens. Detta grs med en viktvektor som betecknas w fr weights (w1 . . . wi
i figuren). w
r allts en vektor med lika mnga dimensioner som x. Vikterna multipliceras
med ingngsvrdena s att de antingen hmmas eller frstrks. Drefter adderas ven en bias
betecknad b fr att ytterligare kunna frndra neuronens beteende.

w1
x1
w2
x2 b y
wi
xi

Figur 2: Artificiell neuron

Den resulterande skalren benmns som pre-aktiveringen (pre-activation) och kan berknas
med fljande funktion:3

p(x) = b + wi xi = b + w
x
i

Pre-aktiveringen berknas allts genom att summera de viktade ingngsvrdena och addera

bias-vrdet. Summan i wi xi kan beskrivas som en vektormultiplikation av viktvektorn och
ingngsvektorn (w x).4
Som nmnt i delavsnittet Biologisk neuron utfr krnan cellkoppen i en biologisk neuron en
frndring av signalen, samma princip gller fr artificiella neuroner och sledes ska allts en
sista berkning utfras. Denna slutgiltiga berkningen i neuronen kallas aktiveringsfunktionen
(activation function), nedan betecknad som a(x) och r en funktion som ser olika ut beroende
p vilken typ av artificiell neuron det rr sig om. En artificiell neuron kan allts beskrivas som
fljande funktion:5

f (x) = a(p(x)) = a(b + w


x)
3
Nielsen 2015a.
4
Ibid.
5
Ibid.

3
2.1.3 Ntverk
Ett ANN bestr allts av artificiella neuroner ihopkopplade som noder i ett ntverk. Noderna r
lagda lager p lager dr varje nod i ett lager r kopplade till varje nod i det nrliggande lagret.
Figur 3 r ett exempel p en ntverkskonfiguration. Det frsta lagret med noder kallas fr in-
gngslagret, detta lager innehller egentligen inga neuroner utan noderna symboliserar endast
ingngsvrden. De har med andra ord ingen aktiveringsfunktion eller bias. Utgngslagret r det
slutgiltiga lagret frn vilket ingngsvrdena hmtas. Lagren mellan ingngslagret och utgngs-
lagret kallas fr gmda lager eftersom de inte interageras med utifrn. Har ett ntverk fler n
ett gmt lager sger man ett ntverket r djupt och begreppet djupinlrning (deep learning)
anvnds.6

Gmt
Ingngslager Utgngslager
lager

x1
y
x2

Figur 3: Ntverkskonfiguration

Ingngsvrdena och utgngsvrdena i ett ANN kan beskrivas som radvektorerna x och y.
Pre-aktiveringen fr ett lager med neuroner kan skrivas som en radvektor p(l) med en di-
mension fr varje nod. l = 1 fr det frsta gmda lagret. Varje kolumn ska innehlla summan av
motsvarande neurons viktade ingngsvrden med bias-vrdet adderat (se delavsnittet Artificiell
neuron).
Ponera fr exemplets skull att det fregende lagret har fyra neuroner. Aktiveringen av det
fregende lagret kan beskrivas som radvektor med fyra dimensioner, a(l1) dr l r lagret vars
pre-aktivering ska berknas.
[ ]
a(l1) = a1 a2 a3 a4

Vikterna fr lagret kan beskrivas som en matris lika hg som bredden p a(l1) och lika
bred som antalet neuroner p lagret allts lika bred som p(l) . Om lagret har tre neuroner blir
viktmatrisen som nedan:

1 2 3

1 w11 w12 w13
2
w21 w22 w23

w(l) =
3 w31 w32 w33
4 w41 w42 w43

6
Nielsen 2015a.

4
Lagret bias-vrden blir d en vektor med tre dimensioner:
[ ]
(l)
b = b1 b2 b3

Pre-aktiveringen kan d berknas enligt:7


[ ]
p(l) = a(l1) w(l) + b(l) = b1 + i wi1 ai b2 + i wi2 ai b3 + i wi3 ai

Fr att f den slutgiltiga aktiveringen av lagret a(l) mste varje neurons pre-aktivering kras
genom aktiveringsfunktionen a(x):8
[ ]
a(l) = a(p(l) ) = a(p1 ) a(p2 ) a(p3 )
Utgngsvektorn y berknas genom att repetera fregende fr varje lager i ntverket frn
det frsta gmda lagret. Ingngslagret ignoreras eftersom detta lager som tidigare nmnt inte
har ngra neuroner utan r endast en representation av ingngsvrden. Sledes finns inte a(l1)
fr det frsta gmda lagret, istllet kommer ingngsvektorn x in som aktiveringen fr det fre-
gende lagret: p(1) = x w(1) + b(1) Utgngsvektorn fs av y = a(a(n) w(n+1) + b(n+1) ) dr n
r antal gmda lager i ntverket.
Ntverket i figur 3 har 2 ingngsnoder, ett gmt lager med tre neuroner och en utgngsneu-
ron. En funktion y = f(x) fr ntverket kan definieras som:

f(x) = a(a(x w(1) + b(1) ) w(2) + b(2) )

2.1.4 Feedforward och recurrent


Ntverket i figur 3 r ett s kallat feedforward ntverk. Med det menas ett ntverk som r fritt
frn loopar. Nodernas utgngar kopplas allts alltid vidare till lagret framfr och aldrig bakt.
Ett ntverk som innehller baktkopplingar kallas fr ett recurrent ntverk och innehller allts
loopar som gr att neuroners ingngsvrden pverkas av deras utgngsvrden. Detta gr syste-
met mycket komplext och r inte lmpade fr den typ av problem som sudokulsning innebr.9
De kommer ej behandlas i denna rapport.

2.1.5 vervakade och overvakade ntverk


ANN kan delas in i tv kategorier, vervakade och overvakade. vervakade ntverk lr sig frn
exempeldata eller trningsexempel. Trningsexemplen r exempel p indata (x(t) ) och korrekt
utdata (y(t) ) d.v.s den utdata som frvntas av ett korrekt ntverk och kan beskrivas som par:
(x(t) , y(t) ) Inlrningsprocessen kallas fr trning av ntverket.
Overvakade ntverk lr sig inte ifrn trningsexempel utan anpassar sig istllet med hjlp
av terkoppling frn anvndaren. Overvakade ntverk kommer ej behandlas i denna rapport.
7
Larochelle 2013b.
8
Ibid.
9
Nielsen 2015a.

5
2.1.6 Empirisk riskminimering
Inlrning kan beskrivas som approximering av en funktion.10 Om ntverket beskrivs som funk-
tionen y = f(x) r problemet som ska lsas allts approximeringen av en oknd funktion g(x).
g(x) skall approximeras med hjlp av trningsexemplen (x(1) , y(1) ), . . . , (x(t) , y(t) ) som allts r
exempel p ingngs och utgngsvrden till g(x).
Empirisk riskminimering eller Empirical Risk Minimization r ett koncept inom maskinin-
lrning som anvnds fr just detta.
Om ntverket beskrivs som en funktion y = f(x; ) dr r alla parametrar i ntverket, d.v.s
w och b kan problemet definieras som fljande enligt ERM:11

1
arg min l(f(x(t) ; ), y(t) ) + ()
T t
l(f(x; ) r en s kallad frlustfunktion (loss function), en funktion som ger ett mtt p skill-
naden mellan utgngsvektorn y d.v.s f(x(t) ; ) och den frvntade utgngsvektorn y(t) . T r

antalet trningsexempel och T1 t l(. . . ) ger allts den genomsnittliga frlusten ver trnings-
exemplen.12
Termen () anvnds inte fr vanlig ERM utan r ett tillgg som anvnds fr att frebyg-
ga att ntverket blir fr anpassat till trningsexemplen och drmed fungerar smre fr generella
fall (overfitting). Funktionen () r en s kallad regularizer som bestraffar vissa parametrar
av detta skl. r en koefficient som bestmmer balansen mellan regularizer-termen och den
genomsnittliga frlusten. Med detta tillgg kallas metoden egentligen Structural Risk Minimi-
zation (SRM) istllet fr ERM.13
Problemet gr allts ut p att minimera den genomsnittliga frlusten (loss) i ntverket
genom att optimera ntverkets parametrar. Det r allts ett optimeringsproblem och kan drfr
lsas med ngon redan knd optimeringsalgoritm.14

10
Principles of Risk Minimization for Learning Theory.
11
Larochelle 2013c.
12
Ibid.
13
Ibid.
14
Ibid.

6
2.1.7 Optimering med Stochastic Gradient Descent
Man kan beskriva optimeringspoblemet frklarat i fregende avsnitt som att hitta minimi-
punkten p frlustfunktionen. Ponera att frlusten endast beror p tv variabler, w och b och att
frlustfunktionen ser ut som i figur 4. Detta exempel r frsts grovt frenklat, ANN har ofta
miljontals parametrar som mste optimeras och en betydligt mer komplicerad frlustfunktion.
Man skulle kunna tnka sig att frska finna minimipunkten genom att g igenom alla punkter
dr gradienten r lika med noll d.v.s. alla lokala minima fr att sedan hitta de(t) lgsta av dessa.
Detta kan fungera med en enkel funktion som den i figur 4 men fr mer komplicerade funktioner
som i sammanhanget ANN blir det alldeles fr tidskrvande fr att metoden ska vara gngbar.15

40
z

20
5
0
4 2 0
0 2 4 5 b
w

Figur 4: verfrenklad frlustfunktion

En mer lmplig optimeringsalgoritm r Stochastic Gradient Descent (SGD). SGD anvn-


der sig av frlustfunktionens gradient med avseende p parametrarna fr att hitta den riktning
hos funktionen dr den minskar och frndrar parametrarna genom att flja riktningen ner till
minimipunkten. Man skulle kunna likna det med att man lter en boll rulla ner till funktionens
globala minimipunkt.16
SGD algoritmen kan definieras som fljande:17

Repetera fr varje trningsexempel (x(1) , y(1) ), . . . , (x(t) , y(t) ) :

1. Berkna riktningskoefficienten enligt = l(f (x; ), y(t) ) ()

2. Uppdatera sedan parametrarna enligt +

betecknar gradienten med avseende p parametrarna (). Eftersom gradienten r positiv


nr funktionen lutar uppt blir riktningskoefficienten den negativa gradienten s att frndringen
15
Nielsen 2015a.
16
Ibid.
17
Larochelle 2013c.

7
rr sig nert mot funktionens minima. () r den negativa gradienten av regularizer-
termen. Koefficienten r ett vrde som kallas learning rate och bestmmer noggrannheten p
optimeringen, lgre vrden ger hgre noggrannhet men lngsammare optimering.18
Fr optimal prestanda mste ven vrdet p optimeras. ven detta finns det algoritmer fr
och en av dessa r Adaptive Moment Estimation eller Adam Optimizer algoritmen som kommer
terkomma i metoddelen.

2.1.8 Aktiveringsfunktionen

4
relu(x)

0
6 4 2 0 2 4 6
x

Figur 5: Rectified linear-aktiveringsfunktion

0.8

0.6
(x)

0.4

0.2

0
6 4 2 0 2 4 6
x

Figur 6: Sigmoidfunktion

I metoddelen i denna rapport anvnds aktiveringsfunktionerna rectified linear (se figur 5) och
sigmoid-funktionen (se figur 6). De r bda populra alternativ fr aktiveringsfunktioner.19
18
Larochelle 2013c.
19
Larochelle 2013a.

8
Sigmoid funktionen r definerad som (x) = 1+e1x och har bland annat egenskaperna
att dess vrde varierar mellan noll och ett samt att funktionens vrde strikt kar nr x kar.20
Funktionen kan ven approximera en stegfunktion.21
Rectified linear funktionen r definierad som relu(x) = max(0, x) och har bland annat
egenskaperna att funktionens vrde aldrig r negativt, att den ej har ngon vre grns samt att
dess vrde alltid blir noll vid negativa x.22

2.1.9 One hot-vektorer


One hot-vektorer r vektorer dr alla utom en dimension har vrdet 0 som anvnds fr att re-
presentera heltalsvrden. Vrdet representeras genom att den dimension som motsvarar siffran
tilldelas vrdet 1. Som exempel motsvarar fljande vektor siffran 4:

(0 1 2 3 4 5 6 7 8 9)
0 0 0 0 1 0 0 0 0 0

2.1.10 Klassificeringsproblem med softmax-funktionen


Problemet som beskrivs i metoddelen r vad som kallas fr ett klassificeringsproblem. Ett sdant
problem gr ut p att avgra vilken av en mngd specificerade klasser som ingngsvektorn x
tillhr. Till exempel kan det som i det hr fallet handla om att avgra vilken siffra som r korrekt
fr en sudokuruta givet en ingngsvektor som representerar en olst sudokuplan, varje siffra r
d en klass.
Om man tilldelar en utgngsneuron till varje klass kan man optimera fr att maximera ak-
tiveringsvrdet p den neuron som motsvarar den korrekta klassen. Skulle man gra detta med
en vanlig aktiveringsfunktion som t.ex. sigmoid-funktionen tas det dock ej hnsyn till aktive-
ringsvrdet p de andra neuronerna. Lsningen r att anvnda softmax-funktionen som aktive-
ringsfunktion vid utgngslagret.
Softmax gr om vektorn av utgngsvrden till en vektor som representerar en sannolikhets-
frdelning d.v.s. med vrden inom intervallet 0 x 1 som summerar till 1.23 P s vis
kommer en maximering av aktiveringsvrdet fr den korrekta klassen ven innebra en mini-
mering fr de felaktiga klassernas aktiveringsvrden.
Softmax r definierad som fljande:24
[ ]
softmax(x) = exp(x1 ) exp(x i)
i exp(xi ) i exp(xi )

Funktionen resulterar allts i en vektor av brk dr nmnaren alltid r summan av exponen-


tialfunktionen av varje element i x och tljaren r exponentialfunktionen av respektive element.
20
Larochelle 2013a.
21
Nielsen 2015b.
22
Larochelle 2013a.
23
Larochelle 2013b.
24
Ibid.

9
Eftersom ex r strikt positiv och nmnaren alltid r strre n tljaren hamnar alltid alla element
inom intervallet 0 x 1.

2.1.11 Kostnadsberkning med softmax och cross-entropy


I delen om empirisk riskminimering beskrivs hur en frlustfunktion anvnds. Funktionen cross-
entropy r den frlustfunktion som anvndes fr ntverkstrningen som beskrivs i metoddelen.
Den anvnds fr att berkna frlusten fr ett klassificeringsproblem med softmax-aktiveringsfunktion
p utgngslagret.
Cross-entropy som frlustfunktion definieras som fljande:25

l(a(x), y) = log a(x)y


Dr a(x) ger en vektorrepresentation av utgngslagrets aktivering (d.v.s. den sannolikhets-
frdelning som gives av softmax-funktionen) och y r vektorelementet fr den korrekta klassens
sannolikhet.
Eftersom frlusten ska minimeras och frlusten blir strre d sannolikheten fr den korrekta
klassen minskar mste logaritmen vara negativ s att en minimering av frlusten leder till en
maximering av sannolikheten.26

2.1.12 TensorFlow
TensorFlow r ett pythonbibliotek fr maskininlrning som tillhandahlls av Google.27 Bibli-
oteket innehller relevanta funktioner fr ANN trning och uppbyggnad som t.ex. relevanta
mattematiska funktioner och optimeringsalgoritmer. Denna del r en verblick ver hur Ten-
sorFlow fungerar.
TensorFlow utfr inte berkningar i python-tolken, istllet skapar TensorFlow en s.k. graf
(graph) som sedan krs i TensorFlows egna tolk. Grafen r en representation av programmet
som skapas av TensorFlow.28
Exemplet nedan visar hur det fungerar.

1 import tensorflow as tf
2

3 a = tf.add(1, 1) # a = 1+1
4 b = tf.mul(a, 2) # b = a*2
5

6 with tf.Session() as sess:


7 print(b.eval(session=sess))

P frsta raden importeras TensorFlows python-modul som namnet tf. Rad 3 lgger till en
operation p grafen i det hr fallet add operationen som adderar tv tal. Variabeln a har allts inte
25
Larochelle 2013d.
26
Ibid.
27
Additional Resources.
28
Getting Started With TensorFlow.

10
tilldelats vrdet av operationen utan a har istllet tilldelats operationen sjlvt d.v.s. 1+1 istllet
fr 2. variabeln b blir allts tilldelad operationen a*2. Det skapas allts en kedja av operationer
ungefr som i ett funktionsorienterat programsprk, denna kedja r vad som kallas fr grafen.
Fr att utfra grafen och f ett vrde behvs en session. En session hller reda p grafens
tillstnd under krningen, inkluderat vrden p alla grafens variabler. Den kan sparas till en fil
samt terupptas. With-satsen skapar en session och evaluerar vrdet p b genom att kra grafen
i sessionen. Koden nedan r likvrdig.

1 with tf.Session() as sess:


2 print(sess.run(b))

TensorFlow representerar data med Tensors. Tensors kan vara antingen skalrer (rang 0),
vektorer (rang 1), matriser (rang 2) eller n-dimensionella matriser (rang n).
29
Man kan definiera en konstant tensor [med constant.
] Nedan definieras en konstant vektor
1 2 3
som (5, 4, 3) och en konstant matris som .
4 5 6

1 vektor_tensor = tf.constant([5,4,3])
2

3 matris_tensor = tf.constant([[1,2,3],
4 [4,5,6]])

Man behver inte initiera tensorn frn brjan, istllet kan man anvnda en placeholder. En
sdan variabel kan anvndas i grafen men behver inte initieras frrn sessionen ska kras.30
Nedan definieras en placeholder med datatypen float och med formen [3, 4] d.v.s. en matris
med bredden 3 och hjden 4.

1 p = tf.placeholder('float', [3, 4])

Fr att definiera en variabel tensor som ven rknas in som parametrar hos TensorFlow
inbyggda optimeringsalgoritmer anvnds Variable vars frsta argument krver ett initialt vrde
fr tensorn.31 Nedan definieras en variabel tensor som vektorn (1, 5).

1 v = tf.Variable([1,5])

Variabler mste initieras med global_variables_initializer innan de kan anvndas:32

1 with tf.Session() as sess:


2 sess.run(tf.global_variables_initializer())
29
Getting Started With TensorFlow.
30
Ibid.
31
Ibid.
32
Ibid.

11
w3 = 0, 5
x3 = 3, 6
w2 = 0, 2
x2 = 2, 5 b = 0 y = 0, 919827
w1 = 0, 1
x1 = 1, 4

Figur 7: Artificiell neuron

Koden nedan r ett exempel p en artificiell neuron definierad som den i figur 7.

1 import tensorflow as tf
2

3 x = tf.placeholder('float', [3])
4

5 w = tf.Variable([0.1,0.2,0.5])
6 b = tf.Variable(0.)
7

8 pre_activation = tf.add(b, tf.reduce_sum(tf.mul(w,x)))


9 activation = tf.nn.sigmoid(pre_activation)
10

11 with tf.Session() as sess:


12 sess.run(tf.global_variables_initializer())
13 print(sess.run(activation, feed_dict={x: [1.4,2.5,3.6]}))

Vid rad 3 definieras en placeholder fr ingngsvektorn x med tre dimensioner. Rad 5 och
6 definieras variabler fr viktvektorn w och bias-vrdet b. Vid rad 5 Definieras operationen fr

hur pre-aktiveringen ska berknas (b + i wi xi ), sedan definieras operationen fr berkning av
aktiveringen, i det hr fallet anvnds en sigmoid-funktion som aktivererings-funktion. I nsta
steg skapas en session i vilken variablarna frst initieras. Sedan evalueras aktiveringen samtidigt
som x tilldelas ett vrde via argumentet feed_dict.
feed_dict-argumentet till sess.run tilldelar tensors i grafen vrden angivna i ett python dictionary-
objekt. I exemplet tilldelas placeholdern x vrdet [1.4,2.5,3.6], med andra ord anges ingngs-
vektorns vrde.

2.2 Metod
Mlet var att skapa ett program med Python och TensorFlow som kan trna artificiella neu-
ronnt att frutsga den korrekta siffran i en specifik ruta p slumpgenererade sudokuplaner.
Programmet anvndes sedan fr att trna ett separat ntverk fr varje ruta p planen (trningen
slutade dock fungera vid ruta 23). De resulterande trnade ntverken skulle allts kunna frut-
sga siffran i den ruta de var trnade fr givet en slumpmssig olst sudokuplan. Varje ntverk
testades med 200 slumpgenererade olsta sudokuplaner och en noggrannhet (andel korrekta
frutsgelser) berknades fr varje ntverk.

12
Varje sudokusiffra representerades som en one hot-vektor med tio dimensioner (0-9). Noll
anvndes nr en ruta var tom.
Ett separat ntverk trnades fr varje sudokuruta. Trningsexemplen bestod av par av ett
slumpgenererat olst sudoku och den korrekta siffran fr rutan som trnas fr. Bde ingngs-
och utgngsexemplet var representerat med one hot-vektorer. Varje ntverk fr rutorna trnades
med 100000 olika trningsexempel och trning med samma trningsexempel repeterades tio
gnger (varje repetition kallas fr en epok). Optimeringsalgoritmen var Adam Optimizer d.v.s
Stochastic Gradient Descent med Adaptive Moment Estimation.
Trningsexemplen genererades med hjlp av en sudoku-generator utvecklad av mjukvaruin-
genjren Paul Rutledge vars kllkod finns att hmta p https://github.com/RutledgePaulV/
sudoku-generator. Kllkoden granskades fr att skerstlla att sudokuplanerna verkligen ge-
nereras slumpmssigt.
Ntverket konfigurerades med ett ingngslager med 810 ingngar, ett sudoku har 81 rutor
och varje ruta krver tio ingngsvrden fr att dess siffra ska kunna representeras som en one
hot-vektor. Ett gmt lager anvndes och det gjordes olika frsk med 900, 500, 300, 200, 100
respektive 50 neuroner i lagret. P utgngslagret anvndes nio neuroner fr att representera en
siffra frn 1-9 med en one hot-vektor.
Olika frsk gjordes med aktiveringsfunktionerna textitrectified linear respektive sigmoid.
Tabellen nedan visar konfigurationerna fr de frsk som gjordes.

Aktiveringsfunktion antal neuroner (gmt lager)


Sigmoid 900
Rectified linear 900
Rectified linear 500
Rectified linear 300
Rectified linear 200
Rectified linear 100
Rectified linear 50
Frlusten berknades med cross entropy. Noggrannheten testades genom att testa ntverket
p en separat mngd av exempel och berkna andelen korrekt frutsagda siffror.
Nedanstende kod r den viktigaste biten av kllkoden, icke-vsentliga bitar r borttagna.
Klassen Layer nedan representerar ett lager i neuronntet, antal neuroner i lagret och antal
neuroner/noder i det fregende lagret anges vid instansieringen. Klassen innehller funktioner
som ger lagrets aktivering och pre-aktivering.

1 class Layer:
2 def __init__(self, n_nodes, n_prev_layer_nodes):
3 self.n_nodes = n_nodes
4 self.n_prev_layer_nodes = n_prev_layer_nodes
5

6 self.biases = tf.Variable(tf.random_normal([self.n_nodes]))
7 self.weights = tf.Variable(

13
8 tf.random_normal([self.n_prev_layer_nodes, self.n_nodes])
9 )
10

11 def get_pre_activation(self, data_in):


12 return tf.add(tf.matmul(data_in, self.weights), self.biases)
13

14 def get_activation(self, activation_function, data_in):


15 pre_activation = self.get_pre_activation(data_in)
16

17 return activation_function(pre_activation)

Funktionen random_normal initierar parametrarna i ntverket med slumpade vrden.


Layer implementeras sedan av klassen NetworkModel som skapar ett ntverk av lager.
De fsta argumentet r antalen ingngsnoder och antalet utgngsneuroner, efterfljande argu-
ment r antalet neuroner i varje gmt lager. Funktionen get_output tar en aktiveringsfunktion
(callback-objekt) som det frsta argumentet och ingngsdatan (d.v.s. en tensor) som det andra.
Funktionen returnerar sedan en tensor fr utgngsdatan.

1 class NetworkModel:
2 def __init__(self, n_input_nodes, n_output_nodes, *n_hidden_layer_nodes):
3 self.hidden_layers = []
4

5 self.hidden_layers.append(Layer(n_hidden_layer_nodes[0], n_input_nodes))
6

7 n_prev_layer_nodes = self.hidden_layers[0].n_nodes
8

9 for n_nodes in n_hidden_layer_nodes[1:]:


10 self.hidden_layers.append(Layer(n_nodes, n_prev_layer_nodes))
11 n_prev_layer_nodes = n_nodes
12

13 self.output_layer = Layer(n_output_nodes, n_hidden_layer_nodes[-1])


14

15 def get_output(self, activation_function, data_in):


16 prev_activation = self.hidden_layers[0].get_activation(
17 activation_function, data_in
18 )
19

20 for layer in self.hidden_layers[1:]:


21 prev_activation = layer.get_activation(
22 activation_function, prev_activation
23 )
24

25 return self.output_layer.get_pre_activation(prev_activation)

14
Funktionen train_neural_network r den som trnar ntverket. x r ingngs-tensorn, square
r numret p sudoku-rutan (brjar p noll). Hr specificeras ven antalet epoker antalet batcher
(grupper av trningsexempel) och storleken p varje batch (antalet trningsexempel som ingr).
Slutligen testas noggrannheten och resultatet skrivs till en fil. Filnamnet talar om att akti-
verinsfunktionen r rectified linear och antalet neuroner fr det gmda lagret r 200 (Det nd-
rades fr respektive krning).

1 def train_neural_network(x, square):


2

3 n_epochs = 10
4 n_batches = 1000
5 batch_size = 100
6

7 test_y = get_square(testing_set_y, square)


8 train_y = get_square(training_set_y, square)
9

10 batches_x, batches_y = get_batches(batch_size, training_set_x, train_y)


11

12 for epoch in range(n_epochs):


13 for batch_n in range(n_batches):
14 batch_x = batches_x[batch_n]
15 batch_y = batches_y[batch_n]
16

17 sess.run([optimizer, cost], feed_dict={x: batch_x, y: batch_y})


18

19 accuracy_value = accuracy.eval({x: testing_set_x, y: test_y})py


20 with open('result_relu_200.txt', mode='a') as f:
21 f.write(str(square) + ' & ' + str(round(accuracy_value*100, 2)) +
22 r' \% \\' + '\n')

Sista biten i programmet r den som definierar modellen, och anropar train_neural_network
fr varje ruta. NetworkModel instansieras och antal ingngs, utgngs, och neuroner fr det gm-
da lagret definieras. Antalet gmda ndrades vid respektive krning och likas aktiveringsfunk-
tionen som anges vid get_output.

1 neural_network = NetworkModel(810, 9, 900)


2

3 prediction = neural_network.get_output(tf.nn.relu, x)
4 cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y))
5 optimizer = tf.train.AdamOptimizer().minimize(cost)
6

7 correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))


8 accuracy = tf.reduce_mean(tf.cast(correct, 'float'))

15
9

10 with tf.Session() as sess:


11 sess.run(tf.global_variables_initializer())
12

13 for square in range(81):


14 train_neural_network(x, square, save_session=False)

2.3 Om kllorna
Nedan fljer en redogrelse fr de kllor som teorin bakom denna rapport har hmtats frn
och dess trovrdighet. ven om flera kllorna ej var frstahandskllor r de att betrakta som
trovrdiga och valdes ven p grund av sin pedagogik.
Boken Natural Image Statistics r en lrobok och monografi om statistisk analys av naturli-
ga bilder (d.v.s. vanliga fotografier). Den huvudsakliga motiveringen till att skriva boken var att
kunna utveckla berkningsmodeller av biologiska visuella system (drav kopplingen till neu-
ronnt). Boken r bland annat skriven av Aapo Hyvrinen som r professor i datorvetenskap
inriktat p maskininlrning p Hlsingfors universitet och har publicerat ett flertal artiklar inom
maskininlrning, ANN och datorseende. ven om kllan ej r en frstahandsklla (d det r en
monografi och lrobok) r den skriven av experter och r ngorlunda ny fr den informationen
som hmtades frn kllan (2009).
Neural Networks and Deep Learning r en introducerande bok om ANN, skriven av kvantfy-
sikern Michael A. Nielsen. Boken sponsras bland annat av fretaget TinEye som tillhandahller
kommersiella APIer fr bildigenknning och fretaget VisionSmarts som erbjuder mjukvaru-
lsningar fr bild- och filmanalys. ven om Nielsen inte r ngon expert inom omrdet r han
en seris akademiker och informationen i boken r grundlggande samt stmmer verens med
andra kllor. Informationen r dessutom uppdaterad januari 2017.
tensorflow.org r den officiella hemsidan fr TensorFlow och drmed sjlvfallet den bsta
kllan fr information om hur TensorFlow fungerar.
Videolektionerna i serien Neural networks av Hugo Larochelle behandlar grunderna i ANN.
Larochelle r forskare inom maskinintelligens p Google Brain och expert p djupinlrning.
Lektionerna r dessutom frn 2013 vilket r ngorlunda nytt fr denna typ av grundlggande
teori som sllan frndras.
Principles of Risk Minimization for Learning Theory r en artikel skriven av Vladimir N.
Vapnik som behandlar empirisk riskminimering och strukturell riskminimering. Vapnik r ma-
tematiker, expert p maskininlrning och statistik och en av skaparna av stdvektormaskin-
algoritmen.

16
3 Resultat

Tabell 1 visar noggrannheten fr ntverket, trnat fr de olika rutorna och med de olika aktive-
ringsfunktionerna(Sigmoid och Rectified Linear). Talen i rubrikerna under aktiveringsfunktio-
nerna refererar till antal neuroner i det gmda lagret. Programmet slutade dock fungera vid ruta
23 (notera att rutorna r numrerade med noll som frsta rutan).

Tabell 1: Resultat fr trning

Noggrannhet (%)
Sigmoid Rectified linear
Ruta 900 900 500 300 200 100 50
0 96 98 97 97 98 97 93
1 96 98 99 99 98 100 100
2 97 98 99 97 99 100 99
3 96 99 99 98 99 100 94
4 98 98 98 100 99 100 98
5 97 99 97 99 98 98 97
6 95 92 100 98 97 97 93
7 98 99 99 100 99 99 98
8 99 98 100 100 99 100 96
9 99 99 100 97 99 99 96
10 99 99 99 98 99 99 96
11 99 100 99 98 99 99 93
12 96 99 99 99 99 98 95
13 98 99 99 99 99 99 98
14 99 100 100 100 100 100 97
15 97 99 98 100 98 100 97
16 97 98 99 98 98 99 93
17 98 99 100 99 100 99 94
18 96 100 99 99 99 99 92
19 98 97 96 97 98 99 97
20 100 98 99 99 99 100 95
21 98 99 99 98 99 99 94
22 98 100 100 99 100 100 97

17
Tabell 2 visar den genomsnittliga noggrannheten ver alla rutor fr de olika frsken.

Tabell 2: Genomsnittlig noggrannhet

Aktiveringsfunktion antal neuroner (gmt lager) genomsnittlig nogrannhet (%)


Sigmoid 900 97,6
Rectified linear 900 98,5
Rectified linear 500 98,9
Rectified linear 300 98,6
Rectified linear 200 98,8
Rectified linear 100 99,1
Rectified linear 50 95,7

4 Diskussion

Den genomsnittliga noggrannheten ver rutorna blev som mest 99,1 % (med aktiveringsfunk-
tionen rectified linear och 100 neuroner i det gmda lagret). ven om ntverket endast trnades
fram till ruta 23 gr det utifrn detta att dra slutsatsen att metoden fungerar fr att lsa sudo-
ku och drmed besvara den huvudsakliga frgestllningen. Eftersom ett sudoku kan roteras och
spegelvndas kan algoritmen appliceras p alla rutor utom de nio mittersta. De mittersta rutorna
kan sedan lsas genom att applicera reglerna som finns fr sudoku och anvnda uteslutnings-
metoden. Detta r frsts att betrakta som en separat algoritm om n en mycket simpel sdan
som kan implementeras mycket enkelt. Strngt talat s kan allts metoden anvndas fr att lsa
sudoku i kombination med en annan mycket simpel algoritm (uteslutningsmetoden).
En mjlig invndning r att noggrannheten inte uppndde 100 % fr varje ruta, ovannmnda
princip gller ven hr, detta ej ett problem om metoden anvnds i kombination med den tidigare
nmnda uteslutningsmetoden.
Nr det gller felkllor s kommer den huvudsakliga av att det endast gjordes en krning fr
varje ntverkskonfiguration. Eftersom att parametrarna initieras med slumpade vrden skulle
resultatet kunna ha blivit annorlunda vid andra krningar.
Det rcker med ett gmt lager fr att ett ANN ska kunna approximera vilken funktion som
helst och ju fler neuroner desto noggrannare blir approximeringen.33 Resultatet visade att nog-
grannheten blev ngot bttre nr antalet neuroner i det gmda lagret minskade. Vid 50 neuroner
blev dock noggrannheten signifikant smre. Troligen blir resultatet bst nr det finns s f pa-
rametrar som mjligt att optimera samtidigt som det finns tillrckligt mnga neuroner fr att
approximeringen ska kunna bli tillrckligt noggrann. Det mste allts finnas en balans mellan
komplexitet och mjlig approximeringsfrmga i systemet. Troligtvis tar helt enkelt ett fr kom-
plext ntverk mycket lngre tid att optimera. Det skulle behvts mer n tio epoker och kanske
fler trningsexempel. Det var troligen ett bra val av metod nr det gller antal gmda lager d
det verkar som att ett lager rckte fr att f fram en hg noggrannhet. En kad komplexitet i
form av fler lager skulle troligen ha varit en nackdel.
33
Nielsen 2015b.

18
Resultatet hade allts frmodligen kunnat frbttras genom att anvnda fler trningsexempel
och fler epoker samt fler neuroner. I framtida underskningar skulle man kunna studera de
trnade ntverken fr att f en viss frstelse fr hur algoritmen fungerar. Resultatet skulle man
senare kunna utnyttja fr att utveckla bttre modeller.

Referenser
Additional Resources. URL: https://www.tensorflow.org/about/ (hmtad 2017-03-09).
Getting Started With TensorFlow. URL: https : / / www . tensorflow . org / get _ started / get _
started (hmtad 2017-03-09).
Hyvrinen, A., J. Hurri och P.O. Hoyer (2009). Natural Image Statistics: A Probabilistic Approach to
Early Computational Vision. 1st. Springer Publishing Company, Incorporated. ISBN: 978-1-84882-
491-1.
Larochelle, H. (2013a). Neural networks [1.2] : Feedforward neural network - activation function.
Youtube. URL: https://www.youtube.com/watch?v=tCHIkgWZLOQ (hmtad 2017-02-04).
(2013b). Neural networks [1.4] : Feedforward neural network - multilayer neural network. Youtube.
URL: https://www.youtube.com/watch?v=apPiZd-qnZ8 (hmtad 2017-02-04).
(2013c). Neural networks [2.1] : Training neural networks - empirical risk minimization. Youtube.
URL: https://www.youtube.com/watch?v=5adNQvSlF50 (hmtad 2017-02-04).
(2013d). Neural networks [2.2] : Training neural networks - loss function. Youtube. URL: https:
//www.youtube.com/watch?v=PpFTODTztsU (hmtad 2017-02-04).
Nielsen, M.A. (2015a). Neural Networks and Deep Learning. Kap. 1.
(2015b). Neural Networks and Deep Learning. Kap. 4.
Vapnik, V.N. Principles of Risk Minimization for Learning Theory. I: AT &T Bell Laboratories.

19

You might also like