Predicted Future - att förutsäga aktiekurser med artificiella neuronnät Kandidatarbete inom Data- och informationsteknik LINUS FÄRNSTRAND OSCAR SÖDERLUND NIKLAS LÖNNERFORS EMIL BERNERSKOG TOBIAS AXELL Institutionen för Data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA GÖTEBORGS UNIVERSITET Göteborg, Sverige 2012 Kandidatarbete/rapport nr 2012:12 Sammanfattning Olika modeller har genom åren tagits fram för att förenkla analys av aktiemarknaden. En relativt ny teknik är s̊a kallade artificiella neu- ronnät. Dessa modeller har visat sig lovande när det gäller att förutsäga aktiekurser. Projektets syfte är att hitta artificiella neuronnät som ger bra förutsägelser av framtida aktiekurser. Under projektet har ett mjuk- varusystem som genererar och tränar artificiella neuronnät av typen feed- forward utvecklats för att kunna testa neuronnät med olika indata, struk- tur och träningsinställningar. För att komma fram till vilka konfigura- tioner p̊a neuronnäten som ger bra resultat har näten testats genom simulerad aktiehandel där köp- och säljbeslut grundats p̊a neuronnätens förutsägelser. Vi har framställt ett system med funktionalitet för att gener- era samt utvärdera neuronnät. Med detta har vi även funnit neuronnät som lyckas förutsäga aktiemarknaden, om än under en begränsad period. Abstract A plethora of models have throughout the years been developed with the purpose of aiding analysis of the stock market. A relatively new such model, one that has shown promise in predicting future stock quotes, is artificial neural networks. The purpose of the project is to construct ar- tificial neural networks that yield high-quality predictions of future stock quotes. The project has resulted in a software system with the capa- bility of training a specific subset of artificial neural networks, namely feed-forward networks, with varying input data, structure and training parameters. In order to identify the specific network configurations that consistently lead to positive results, the networks have been tested by making simulated trading decisions based on their output. We have suc- cessfully constructed networks with the ability to accurately predict stock quotes, albeit within a limited time frame. Ordlista AJAX Asynchronous Javascript and XML, en teknik som möjliggör transpar- ent uppdatering av sidor. Artificiellt neuronnät En förenklad modell av ett biologiskt nervsystem som används för att approximera funktioner och hitta mönster i datamängder. Backpropagation En typ av inlärningsalgoritm för feed forward-nätverk. Blankning En strategi för att tjäna pengar vid börsnedg̊ang. Courtage Avgiften som börsmäklaren tar ut för varje transkation. EMH Hypotesen om den effektiva marknaden, en teori som beskriver att mark- naden återger all tillgänglig information i aktiernas pris och att rörelserna följer ett slumpmässigt mönster. Träningsepok En passering i en upplärningsalgoritm genom all träningsdata ett visst neuronnät använder sig av. Feature extraction En typ av förbehandling av data för att förbättra artifi- ciella neuronnäts förutsägelser. Feed forward-nätverk En typ av artificiella neuronnät. Fundamental analys En analysmetod som utvärderar företags tillväxt- och vinstpotential. JDBC Java DataBase Connectivity, ett API för hantering av SQL-databaser. JSON JavaScript Object Notation, ett textbaserat format för överföring av data mellan datorer. jQuery Ett javascriptbibliotek som bland annat förenklar AJAX- funktionalitet. Large cap De största bolagen p̊a Stockholmsbörsen. LMS Least mean squared-algoritmen är en inlärningsalgoritm för artificiella neuronnät. Nasdaq OMX Stockholm Stockholmsbörsen. Nyemission D̊a ett bolag utfärdar nya aktier. Orderdjup Antalet ej genomförda ordrar vid en viss budniv̊a för en given aktie. Perceptron Ett neuronnät best̊aende av endast en neuron. SSH Secure Shell, ett protokoll som möjliggör en säker anslutning mellan da- torer över ett nätverk. Teknisk analys En analysmetod som används för att hitta trender i aktiekurs- er. UNIX timestamp Standard för tidsangivelser som anges i förfluten tid sedan 00:00:00 1 jan 1970. Upplärningsalgoritm Algoritm som givet en mängd träningsdata och ett neuronnät justerar vikterna hos neuronnätet i syfte att förbättra dessa approximation den underliggande funktion träningsdatan representerar. Volym Antal värdepapper som för tillfället omsätts. Öppnings- och stängningscall Öppnings- respektive stängningsprocedur som används p̊a Stockholmsbörsen för att samla ihop bud och ge ett s̊a korrekt öppnings- respektive stängningspris som möjligt. Överanpassning Ett fenomen som innebär att ett neuronnät memorerar träningsdatan den visats istället för att approximera den underliggande funktion datan representerar. Inneh̊all 1 Inledning 1 1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Mål . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3.1 Datainsamling . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3.2 Att skapa ett användargränssnitt för träning av neuronnät 1 1.3.3 Att utvärdera de artificiella neuronnäten . . . . . . . . . . 2 1.3.4 Identifiering av relevant data . . . . . . . . . . . . . . . . 2 1.3.5 Identifiering av parameterinställningar som ger bra resultat 2 1.4 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.5 Metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.5.1 Källsökning och litteraturstudier . . . . . . . . . . . . . . 3 1.5.2 Systemutveckling . . . . . . . . . . . . . . . . . . . . . . . 3 1.5.3 Testning och utvärdering av neuronnät . . . . . . . . . . 3 1.6 Disposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 Teoretisk bakgrund 4 2.1 Artificiella neuronnät . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.1 Perceptronen . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.2 Least mean square-algoritmen . . . . . . . . . . . . . . . . 7 2.1.3 Flerlagersperceptroner . . . . . . . . . . . . . . . . . . . . 11 2.1.4 Feed forward-nätverk . . . . . . . . . . . . . . . . . . . . . 11 2.1.5 Backpropagation-algoritmen . . . . . . . . . . . . . . . . . 14 2.1.6 Praktisk tillämpning . . . . . . . . . . . . . . . . . . . . . 17 2.2 Aktiehandel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.1 Börsen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.2 Courtage . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.3 Öppnings- och stängningscall . . . . . . . . . . . . . . . . 19 2.2.4 Volym . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.5 Orderdjup . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.6 Blankning . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.7 Prissättning . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.2.8 Psykologi . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3 Aktieanalys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.1 Fundamental analys . . . . . . . . . . . . . . . . . . . . . 20 2.3.2 Teknisk analys . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.3 Aktieanalys med hjälp av artificiella neuronnät . . . . . . 21 2.3.4 Hypotesen om den effektiva marknanden . . . . . . . . . . 21 3 Systemdesign och implementation 23 3.1 Datamodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.1 Insamling . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.2 Lagring . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.1.3 Åtkomst . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Beräkningsmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2.1 Generering . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.2.2 Träning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3 Webbservermodul . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4 Gränssnittsmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.1 Träningsvyn . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.2 Statusvyn . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4.3 Administreringsvyn . . . . . . . . . . . . . . . . . . . . . 27 3.5 Simuleringsmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4 Resultat 29 4.1 Slutgiltigt system . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.1.1 Datainsamling och datahantering . . . . . . . . . . . . . . 29 4.1.2 Generering och träning av neuronnät . . . . . . . . . . . . 29 4.1.3 Administrering av neuronnät . . . . . . . . . . . . . . . . 30 4.1.4 Visualisering av förutsägelser . . . . . . . . . . . . . . . . 30 4.1.5 Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2 Neuronnät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2.1 Träning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.2.2 Simulering . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5 Diskussion 36 5.1 Slutgiltigt system . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.1 Skalning av data . . . . . . . . . . . . . . . . . . . . . . . 36 5.1.2 Separering av data . . . . . . . . . . . . . . . . . . . . . . 36 5.1.3 Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.2 Neuronnät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.2.1 För̊aldring . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.2.2 Korrelation av data . . . . . . . . . . . . . . . . . . . . . 37 5.2.3 Resultat av simulering . . . . . . . . . . . . . . . . . . . . 38 5.3 Framtida arbete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6 Slutsatser 39 1 Inledning Att spekulera i aktier kan vara lukrativt men ocks̊a sv̊art d̊a aktiemarknaden är sv̊ar att förutse. Genom åren har många modeller utvecklats för att analysera aktier och förutsäga dess utveckling. En del modeller analyserar företaget ifr̊aga medan andra modeller är oberoende av företaget och endast analyserar trender i aktiens prisutveckling. Analysmodellen ovan gjordes till en början manuellt där investerare satt och observerade grafer och beräknade nyckelvärden p̊a dem och uppskattade deras framtida utveckling. Senare ins̊ags att de uträkningar man gjorde och de beslut man tog utefter dem var statiska och kunde utföras av datorer. Den datoriserade tekniska analysen var född. Sedan dess har m̊anga metoder använts för att försöka lära datorer förutsäga framtida värden av värdepapper. En av dessa är med hjälp av artificiella neuronnät. Artificiella neuronnät är approximatorer för godtyckliga funktioner och kan användas för försöka hitta mönster i tidsserier. Det kan därför vara intressant att använda neuronnät till att hitta mönster i aktiers prisutveckling och därigenom, om n̊agot mönster finns, förutsäga aktiernas pris [1]. 1.1 Syfte Syftet med detta projekt är att utveckla ett system som genererar och testar arti- ficiella neuronnät samt att med detta system hitta neuronnät som framg̊angsrikt förutsäger aktiekurser. 1.2 Mål Målet är att systemets förutsägelser skall vara av högre kvalitet än slumpmässiga gissningar. 1.3 Problem Den övergripande uppgiften är att utifr̊an statistisk data kunna avgöra, i n̊agon m̊an, en given akties trend. Detta innefattar flera deluppgifter: 1.3.1 Datainsamling Nödvändiga förutsättningar för projektet är att hitta och samla in bra aktiedata och avgöra ett bra sätt att lagra samt tillgängliggöra den p̊a. För att kunna genomföra testkörningar behöver ett ramverk för hanteringen av datan byggas upp. 1.3.2 Att skapa ett användargränssnitt för träning av neuronnät För att kunna genomföra testkörningar behöver ett ramverk för hanterin- gen av datan byggas upp. D̊a gruppen saknar kunskap om vilka typer av nätverksarkitekturer och datadimensioner som ger bra förutsättningar för neu- ronnät att producera positiva resultat, krävs det att ramverket till̊ater enkel och snabb konstruktion av olika typer av neuronnät med olika typer av indata. Detta medför att systemet p̊a ett enkelt sätt skall till̊ata utvärdering av hur 1 olika nät presterar och huruvida de är värda att vidareutveckla eller inte. Sys- temet behöver även funktionalitet för att visualisera neuronnätens förutsägelser, exempelvis med hjälp av grafer och tabeller. 1.3.3 Att utvärdera de artificiella neuronnäten För att kunna avgöra hur väl ett neuronnät presterar behöver dess förutsägelser utvärderas. N̊agon form av simulerad handel som utg̊ar fr̊an nätens förutsägelser behöver därför genomföras för att f̊a fram tydliga och mätbara resultat. 1.3.4 Identifiering av relevant data I takt med att mängden insamlad data ökar, ökar även behovet av att kunna s̊alla ut den data som är relevant och leder till bra resultat. I syfte att välja ut relevant aktiedata behöver den filtreras och förbehandlas. Främst behöver datan avgränsas i tidsavseende, men även onödiga parametrar (s̊adana som ej p̊averkar förutsägelser eller p̊averkar dem negativt) kan behöva tas bort. Även hur statistiken bör användas för att göra vinst behöver identifieras, det vill säga vilka aktiedata som neuronnäten kan hitta mönster i. En del aktier kan vara korrelerade, till exempel underleverantörer till en större aktör vars aktiekurser kan tänkas följa varandra n̊agorlunda. Det är ocks̊a tänkbart att valutor kan p̊averka vissa aktiers kurser. 1.3.5 Identifiering av parameterinställningar som ger bra resultat Eftersom de fria parametrarna i ett neuronnät kan varieras i ett obegränsat antal kombinationer, är det viktigt att hitta de kombinationer som upprepande ger bra resultat. Det är även viktigt att komma fram till varför vissa parame- terkonfigurationer ger bättre resultat än andra. 1.4 Avgränsningar • Systemet skall inte kunna genomföra faktiska transaktioner utan är enbart tänkt att användas som r̊adgivning för manuella transaktioner. • Systemet skall i första hand använda artificiella neuronnät för sina anal- yser. Att inkludera metoder fr̊an fundamental och teknisk analys ligger utanför projektets ramar. • Systemet skall inte utgöra en komplett lösning för en aktiehandlare. Detta innebär att det inte skall innefatta hjälpmedel för till exempel portföljhantering eller riskhantering. • Systemet kommer endast att behandla aktier tillgängliga p̊a börsen Nordic OMX Stockholm. 1.5 Metod Projektet har innefattat teoretiska studier i syfte att öka först̊aelsen för neu- ronnät, aktiemarknaden och deras koppling till varandra. Det har dessutom in- volverat utvecklingen av ett system för att bedriva experiment med neuronnät. 2 1.5.1 Källsökning och litteraturstudier Projektet inleddes med en mindre litteraturstudie d̊a det krävdes kunskap b̊ade inom artificiella neuronnät och aktiehandel. Parallellt med den inledande litter- aturstudien letades även källor till aktie- och valutadata för senare användning vid träning av neuronnäten. Studierna fortsatte sedan med att undersöka hur neuronnät kan användas för att förutse aktiemarknanden och hur projekt med liknande m̊al har g̊att tillväga, bland annat Nygren 2004 [2] och McCluskey 1993 [3]. Mer djupg̊aende teoristudier av artificiella neuronnät och aktiehandel genomfördes parallellt med systemutvecklingen. 1.5.2 Systemutveckling Utvecklingen av mjukvaran följde ingen specifik utvecklingsmetod. Den utveck- lingsmetod som användes var av agil karaktär, där ändringar av programmets specifikationer kunde göras även efter att implementation p̊abörjats. Testning utfördes i samband med utveckling. För versionshantering av programvaran användes Mercurial med en central server. Projektet delades upp i olika delprojekt som var och en versionhanterades separat. För att hantera kompilering och körning av de olika delprojekten användes Maven, som automatiskt hanterar beroenden hos koden. 1.5.3 Testning och utvärdering av neuronnät För att hitta bra neuronnät användes systemet för att generera en mängd nät med olika strukturer, parametrar och indata. Sökandet efter bra nät bedrevs i en iterativ process. I processens början genererades nät med stora variationer i struktur och parameterinställningar. När en generering- och träningsomg̊ang blivit klar studerades de resulterande neuronnäten och i nästa omg̊ang kunde de parametervärden som gett d̊aliga resultat sorteras bort och sökandet fokuserades p̊a de parameterinställningar som gett bra resultat. För att kunna avgöra huruvida ett nät ger bra förutsägelser eller ej har aktiehandel med neuronnätens förutsägelser som grund för köp- och säljbeslut simulerats. 1.6 Disposition I kapitel 2 kommer den teoretiska bakgrunden till projektet g̊as igenom. Kapitel 3 kommer att handla om designen av det system som beskrivs i syftet. I kapitel 4 presenteras resultat, i kapitel 5 kommer resultaten diskuteras och i kapitel 6 presenteras slutsatser. 3 2 Teoretisk bakgrund Avsnitt 2.1 förklarar hur artificiella neuronnät är uppbyggda och fungerar, avs- nitt 2.2 behandlar aktiemarknaden och grundläggande aktieanalys, avsnitt 2.3 sammankopplar avsnitt 2.1 och 2.2 och förklarar hur artificiella neuronnät kan användas till aktieanalys med referenser till tidigare liknande projekt. 2.1 Artificiella neuronnät Artificiella neuronnät är förenklade, matematiska modeller av de neurala nätverk som en hjärna är uppbyggd av [4, s. 31]. De har förm̊agan att lära sig av, hitta samband i och klassificera olika typer av data [4, s. 32]. Artificiella neuronnät utgör fortfarande ett aktivt forskningsomr̊ade [5][6][7], och neuronnät som kan tillämpas i praktiken är ofta utvecklade fr̊an enklare neuronnät, där lager p̊a lager av komplexitet medför ökad praktisk användbarhet [8, s. 346]. Detta kapitel tar ursprungligen upp teorin bakom ett enkelt neuronnät, per- ceptronen. Definitionerna för perceptronen används sedan för att förklara en mer avancerad typ av neuronnät, feed forward-nätverktet. 2.1.1 Perceptronen Den enklaste typen av neuronnät best̊ar av endast en neuron. En känd imple- mentation av denna typ av nät är perceptronen, som skapades 1958 av Frank Rosenblatt [9, s. 130]. Rosenblatts perceptron bygger p̊a en modell för arcifi- ciella neuroner som tidigare utvecklats av tv̊a andra forskare vid namn Warren McCulloch och Walter Pitts [4, s. 78]. McCulloch och Pitts ackrediteras som upphovsmännen till det första neu- ronnätet som hade praktiska, om än enkla, tillämpningar. Detta neuronnät, som numera kallas MP-neuronen, bestod av en ensam neuron som kunde ap- proximera de allra enklaste booleska funktionerna, AND och OR. Den saknade dock inlärningsförm̊aga. [10, s. XXXIX] Även Rosenblatts perceptron best̊ar av en ensam neuron, men den skiljer sig fr̊an MP-neuronen p̊a en viktig punkt; perceptronen har inlärningsförm̊aga. Tack vare detta kan perceptronen bland annat användas till grundläggande dataklassificering [4, s. 78]. Neuronen i Rosenblatts perceptron är en enkel beräkningsenhet, som trans- formerar indata till utdata i ett antal väldefinerade och enkla steg. Modellen av neuronen kan avgränsas i följande delar [4, s. 80]: 1. Ett eller flera ing̊angsvärden: x1 . . . xn 2. Ett bias: +1 3. Vikter: w0 . . . wn 4. En kombinerare 5. En aktiveringspotential: v 6. En aktiveringsfunktion: f 7. Ett utg̊angsvärde: y 4 Σ ƒ x1 w0 w1 w2 wn v +1 y x2 xn Figur 1: Figuren illustrerar modellen av Rosenblatts perceptron, som best̊ar av en ensam neuron. Perceptronen används genom att numeriska värden matas in p̊a dess ing̊angar, som benämns x1 . . . xn. Perceptronen har även en särskild ing̊ang med det konstanta värdet +1. Denna ing̊ang benämns som perceptronens bias [4, s. 80]. Varje ing̊ang x1 . . . xn är associerad med ett eget viktvärde, w1 . . . wn. Även perceptronens bias har en s̊adan vikt, w0. Dessa viktvärden används av percep- tronens kombinerare för att bilda en sammantagen aktiveringspotential, v [4, s. 80]. Tillsammans kan perceptronens ing̊angsvärden och vikter representeras p̊a vektorform: [x0, x1, . . . , xn] = ~x (1) [w0, w1, . . . , wn] = ~w (2) Kombineraren beräknar aktiveringspotentialen genom att summera produk- ten av varje ing̊angsvärde och dess associerade vikt [4, s. 80]. Denna operation kan beskrivas som att bilda skalärprodukten av neuronens inputvektor och dess viktvektor: v = n∑ i=0 xnwn = ~x · ~w (3) Perceptronens bias kan beskrivas som en geometrisk translation av aktiver- ingspotentialen. Dess syfte är analogt med konstanttermen i en linjär ekvation. Att värdet av x0 är konstant +1 innebär att olika värden p̊a w0 p̊averkar värdet av aktiveringspotentialen p̊a samma sätt som olika m-värden förflyttar linjen y = kx+m upp och ned i ett kartesiskt koordinatsystem. Neuronens slutgiltiga utg̊angsvärde, y, bestäms genom att applicera neuro- nens aktiveringsfunktion, f , p̊a dess aktiveringspotential [4, s. 80]: y = f(v) (4) 5 Aktiveringsfunktionen transformerar neuronens aktiveringspotential till en meningsfull utsignal. Följande aktiveringsfunktioner är vanligt förekommande [4, s. 43][10, s.151]: Stegfunktionen g(v) = { 1 v >= 0 0 v < 0 (5) Sigmoidfunktionen g(v) = 1 1 + e−av (6) Tangens hyperbolicus g(v) = tanh(av) (7) Signumfunktionen g(v) =  1 v > 0 0 v = 0 −1 v < 0 (8) Linjära funktionen g(v) = v (9) Styckvis linjära funktionen g(v) =  v a < v < b a v <= a b v >= b (10) I figurerna 2 till 7 visas grafer för aktiveringsfunktionerna. 1 -1 Figur 2: Steg. 1 -1 Figur 3: Sigmoid. 1 -1 Figur 4: Tanh. 1 -1 Figur 5: Signum. 1 -1 Figur 6: Linjära. b a a b Figur 7: Styckvis linjära. 6 Vilken aktiveringsfunktion som används är avgörande för vilken typ av funk- tion som perceptronen skall approximera [10, ss. 152-157]. Som exempel använde McCulloch och Pitts stegfunktionen i sin MP-neuron [11, s. 3]. Stegfunktionen används s̊aledes när en neurons utdata skall modellera booleska eller binära värden. P̊a samma sätt kan signumfunktionens användningsomr̊ade härledas till när neuronens utg̊angsvärde även skall kunna anta det negativa värdet -1. Utöver att approximera booleska funktioner kan neuroner med steg- eller signumfunktionen även användas till att klassificera datamängder [12, s. 3]. Att klassificera en datamängd innebär att elementen i mängden delas in i ett antal klasser. En perceptron med stegfunktionen som aktiveringsfunktion kan s̊aledes potentiellt dela in en datamängd i tv̊a klasser, eftersom den endast har ett utg̊angsvärde. Neuronnät som skall klassificera datamängder med större antal klasser kräver fler än ett utg̊angsvärde. Sigmoidfunktionen kan ses som en kontinuerlig variant av stegfunktionen. Tangens hyperbolicus kan p̊a samma sätt ses som en kontinuerlig variant av signumfunktionen. Dessa funktioner har som gemensam egenskap att de är kon- tinuerliga och icke-linjära. De är b̊ada s-formade och har en extra fri parameter a, som bestämmer hur skarpt kurvorna stiger kring v = 0. När sluttningspa- rametern a g̊ar mot oändligheten närmar egenskaperna för sig dessa kurvor sina icke-kontinuerliga motsvarigheter. Eftersom värdemängderna för de kontinuerliga, icke linjära kurvorna inte sträcker sig utanför (−1, 1) oavsett värde p̊a den fria parametern a, används med fördel den linjära funktionen för att approximera funktioner som har en obegränsad värdemängd. Med endast en neuron kan man allts̊a bilda ett fullvärdigt neuronnät. Denna typ av nät är dock mycket begränsad i sin approximationsförm̊aga. Rosenblatt, som använde perceptronen till att klassificera data, lyckades endast träna per- ceptronen att klassificera datapunkter som är linjärt separerbara, det vill säga att klasserna är åtskiljbara med en linje, ett plan eller ett hyperplan [10, s. 158]. Förutom att klassificera linjärt separerbara punkter kan en perceptron, givet rätt aktiveringsfunktion, även tränas att approximera godtyckliga linjära funk- tioner. Detta bevisade Bernard Widrow och Ted Hoff när de utvecklade sin upplärningsalgoritm för perceptronen. Denna algoritm är känd som LMS; least mean square-algoritmen [13]. 2.1.2 Least mean square-algoritmen LMS är en grundläggande upplärningsalgoritm för neuronnät. Trots att den endast är applicerbar p̊a enkla perceptroner använder den sig av en strategi som g̊ar att generalisera till upplärningsalgoritmer för mer komplicerade neuronnät. Den är ocks̊a populär tack vare att den har l̊ag beräkningskomplexitet och är lätt att implementera i ett mjukvarusystem [4, s. 122]. LMS är ett exempel p̊a övervakad inlärning, vilket innebär att träningsdatan förutom ing̊angsvärden även inneh̊aller nätets önskade utg̊angsvärden [9, s. 86]. Träningsdatan, T, ser ut p̊a följande sätt [4, s. 123]: T = [(~x1, d1), . . . , (~xp, dp)] (11) S̊aledes skall varje träningselement inneh̊alla en vektor med perceptronens ing̊angsvärden, ~xi, samt en motsvarande vektor med perceptronens önskade utg̊angsvärde, di. 7 Det önskade utg̊angsvärdet används under träningen för att beräkna hur nära perceptronen approximerar träningsdatan. Perceptronens lokala fel, e, sym- boliserar hur stor perceptronens felmarginal är vid approximering av ett enskilt träningselement. e = d− y (12) Nätets globala felvärde, E, är ett normaliserat m̊att p̊a nätets approxima- tioner [4, s. 132]. E = 0.5 · (d− y)2 (13) I LMS beräknas det globala felvärdet för ett ensamt element i träningsmängden. Detta tillvägag̊angssätt kallas även för online-upplärning, eftersom hela träningsmängden inte m̊aste vara tillgänglig samtidigt. Det glob- ala felet kan även beräknas som en summa av felvärdena för alla element i hela träningsmängden, vilket kallas för offline- eller batchupplärning [9, s. 178]. En slutsats av ekvationen för felvärdet är att om E = 0 s̊a approximer- ar perceptronen träningsdatan perfekt. Upplärningsstrategin i LMS bygger p̊a att hitta en viktvektor ~w som om möjligt uppn̊ar detta, eller åtminstone led- er till att felvärdet blir s̊a litet som möjligt. Detta uppn̊as genom att iterativt justera nätets vikter, där varje iteration leder till att E minskas. När E = 0, eller när dess värde inte längre minskar, avslutas LMS och perceptronen anses färdigtränad [4, s. 124]. Tillvägag̊angssättet för att justera vikterna i LMS kan illustreras genom att se det globala felet som en funktion av perceptronens viktvektor och dess ing̊angsvektor: E = f(~w, ~x) (14) Givet en perceptron med en bestämd ing̊angsvektor, som inneh̊aller ett ing̊angsvärde utöver perceptronens bias, vars viktvektor s̊aledes har tv̊a kom- ponenter, kan det globala felet plottas som en funktion i tre dimensioner med avseende p̊a vikterna: Figur 8: Figuren visar en plot av perceptronens globala fel E som en funktion av dess viktvektor, [w0, w1]. Plotten ger upphov till en yta i tre dimensioner. Att minimera det globala felet E är ekvivalent med att hitta koordinaterna för Emin. Plotten visar tydligt hur dessa koordinater inneh̊aller värden p̊a w0 8 och w1, för det lägsta möjliga värdet p̊a E; Emin. LMS hittar dessa värden genom en metod som kallas gradient descent [13]. Gradient descent bygger p̊a att hitta ett minimivärde till en funktion, i detta fall E, med hjälp av funktionens lutning [4, s. 133]. Tillvägag̊angssättet är iter- ativt, och varje iteration förutsätter n̊agot värde p̊a funktionens ing̊angsvärde, i detta fall ~w [4, s. 133]. För det aktuella ing̊angsvärdet beräknas den partiella derivatan av det glob- ala felet med avseende p̊a viktvektorn [4, s. 133]. Denna derivata är i plotten av E ekvivalent med lutningen av ytan, i den punkt som bestäms av den nuvarande viktvektorn ~wt. ~wt justeras sedan med hjälp av den partiella derivatan för att erh̊alla nästa viktvektor, ~wt+1, som kommer ligga geometriskt närmare Emin än ~wt: [4, s. 133] ~wt+1 = ~wt − η ∗ δE δ ~w (15) Vektorn med det globala felets derivator, δEδ ~w brukar även uttryckas som ∇E. Ekvation 16 visar att ∇ är en vektor av partiella derivator med avseende p̊a de olika viktvärdena i ~w [4, s. 125]. δE δ ~w = ∇E = [ δ δw0 , δ δw1 , . . . , δ δwn ] ∗ E = [ δE δw0 , δE δw1 , . . . , δE δwn ] (16) Genom att analytiskt utveckla derivatan δE δ ~w kan ∇E förenklas enligt ekva- tion 17 [4, s. 132]. ∇E = −~x · (d− y) (17) Komponenterna i ∇E talar om hur mycket varje individuell komponent i viktvektorn, det vill säga varje separat vikt, skall justeras. Eftersom justeringen sker med hjälp det globala felets derivata, kommer det globala felet att vara lägre vid nästkommande iteration. När derivatan är 0, liten eller oföränderlig är gradient descent-metoden slutförd. Ing̊angsvärdet för den första iterationen kan antingen väljas slumpmässigt eller vara ~0 [4, s. 133]. Gradient descent liknar s̊aledes Newton-Rhapsonmetoden som i korthet kan beskrivas som en metod för att hitta rötter till reella funktioner. Likheten med gradient descent ligger i att b̊ada metoder utg̊ar fr̊an godtyckliga ing̊angsvärden till sin m̊alfunktion, för att sedan iterativt justera dessa med hjälp av m̊alfunktionens derivata tills dess att dess önskade värde är funnet. För gra- dient descent är det önskade värdet m̊alfunktionens minimum, medan Newton- Rhapsonmetoden hittar m̊alfunktionens rot [14]. Parametern η i ekvation 15 används för att bestämma hur stora steg varje iteration skall ta. Ett högre värde p̊a η leder till större steg i varje iteration, och s̊aledes ocks̊a till att antalet iterationer potentiellt blir mindre. När gradient descent utnyttjas i LMS-algoritmen, eller andra träningsalgoritmer, kallas η- parametern för upplärningshastighet [4, s. 133]. Ett sätt att illustrera gradient descent-metoden är att tänka sig att en kula placeras p̊a ytan i plotten av E, p̊a de koordinater som bestäms av den aktuel- la viktvektorn ~w. I varje iteration, d̊a viktvektorn justeras och koordinaterna förflyttas mot det lokala minimat, s̊a “rullar” kulan ned̊at mot ytans botten. I de fall där LMS inte konvergerar mot Emin, exempelvis p̊a grund av att koordinaterna oscillerar kring minimat [4, s. 133], kan träningen även avbrytas 9 Figur 9: Figuren visar hur ∇E är ekvivalent med riktningen som en kula färdas när den placeras p̊a ytan som är ett resultat av att plotta den partiella derivatan av E med avseende p̊a viktvektorn. efter ett bestämt antal iterationer. När alla träningselement använts i en av al- goritmens iterationer har en träningsepok passerat. Det är vanligt att träningen sker över flera träningsepoker, beroende p̊a hur m̊anga element som finns i träningsmängden [10, s. 44]. En formulering av LMS-algoritmen i pseudokod kan nu uttryckas som ett antal väldefinerade steg. Algoritm 1 LMS Require: T = [(~x1, d1), . . . , (~xn, dn)] Require: η = η̂ ~w := ~0 i := 0 repeat e := di − (~w · ~xi) ~w = ~w + η · ~x · e i := (i+ 1) mod |T | until done Algoritm 1 förutsätter ingen specifik metod för när träningen skall avbrytas. En faktisk implementation skulle till exempel kunna beräkna E för alla element i träningsmängden T efter varje träningsepok och avbryta träningen när det globala felet inte längre minskar, vilket vore en förenklad variant av en generell metod vid namn early stopping [4, s. 203]. Med hjälp av LMS är det s̊aledes möjligt att hitta optimala vikter för en per- ceptron. Den enda riktiga begränsningen är att neuronen m̊aste ha en deriverbar aktiveringsfunktion, i och med att aktiveringsfunktionen m̊aste kunna deriveras för att sambandet i ekvation 17 ska gälla. I annat fall skulle beräkningen av den nya viktvektorn ej vara giltig i algoritm 1. Trots att algoritmen här demonstrerats för ett neuronnät med endast ett ing̊angsvärde och ett bias, s̊a är det bevisat att gradient descent-metoden är applicerbar för att hitta funktionsminimum i godtyckliga dimensioner. S̊aledes fungerar LMS p̊a alla typer av perceptroner, oavsett hur m̊anga ing̊angsvärden de har. Algoritmen blir dock l̊angsammare ju fler ing̊angsvärden perceptronen har [10, s. 145]. 10 Perceptronen best̊ar som tidigare nämnts av endast en neuron, och p̊a grund av detta är dess användningsomr̊aden begränsade. För att approximera data med samband av högre än linjär komplexitet krävs större och mer komplicer- ade neuronnät [8, s. 346]. Dessa nät best̊ar av flera neuroner och kallas för flerlagersperceptroner. 2.1.3 Flerlagersperceptroner Den konceptuella överg̊angen mellan en perceptron och flerlagersperceptroner är naturlig; en flerlagersperceptron best̊ar helt enkelt av fler än en neuron. Dessa neuroner kan vara sammankopplade med varandra i olika konfigurationer, men allra vanligast är att neuronerna är indelade i separata lager, vilket ocks̊a har gett upphov till flerlagerperceptronens namn [4, s. 153]. Varje lager i en flerlagersperceptron kan inneh̊alla ett godtyckligt antal neu- roner. Det första lagret inneh̊aller nätets inputneuroner, som var och en har ett ing̊angsvärde. Dessa ing̊angsvärden bildar tillsammans nätets totala indata, som i likhet med perceptronen benämns ~x [4, s. 52]. En stor skillnad mellan en flerlagersperceptron och en enkel perceptron, som följer av att alla lager kan inneh̊alla ett godtyckligt antal neuroner, är att fler- lagersperceptronen kan ha flera utg̊angsvärden. Dessa utg̊angsvärden bildas av neuronerna i nätets sista lager, outputlagret. En flerlagersperceptron kan s̊aledes potentiellt approximera funktioner som avbildar vektorer p̊a vektorer, med god- tycklig dimensionalitet i b̊ada ändar, vilket är en betydande generalisering av perceptronen [4, s. 52]. Mellan input- och outputlagret ligger flerlagersperceptronens gömda lager. Dessa lager kan vara godtyckligt m̊anga, men fler än tv̊a gömda lager tillför inte n̊agot till neuronnätets potentiella approximationsförm̊aga [10, s. 158]. Hur lagren i en flerlagersperceptron är konstruerade refereras till som nätverkets topologi [9, s. 451]. Topologin för ett nät brukar ofta skrivas som en sifferserie, där varje siffra anger antalet neuroner i ett av neuronnätets lager. Till exempel beskriver topologin 5-10-1 en flerlagersperceptron med 5 ing̊angsvärden, 10 gömda neuroner och ett utg̊angsvärde [4, s. 52]. Flerlagersperceptroner är indelade i m̊anga olika typer av underkategorier, där varje underkategori har särskiljande egenskaper, s̊asom en viss typ av topolo- gi eller en viss träningsalgoritm. En av dessa kategorier är feed forward-nätverk. 2.1.4 Feed forward-nätverk Feed forward-nätverk är en underkategori av flerlagersperceptroner där signaler- na i nätverket hela tiden matas fram̊at, aldrig bak̊at eller i sidled [4, s. 51]. Topologin för ett feed forward-nätverk karaktäriseras därför av att den efterlik- nar en riktad, acyklisk graf. Trots att det existerar betydligt mer komplexa klasser av flerlagerspercep- troner [9, s. 181], är feed forward-nätverk ett populärt val i m̊anga olika typer av tillämpningar. De har visats besitta en kraftfull förm̊aga att hitta komplicerade samband i stora datamängder [10, s. 158]. I likhet med en generell flerlagersperceptron är neuronerna i ett feed forward- nätverk indelade i lager; ett inputlager, ett outputlager, samt ett antal gömda lager. Utg̊angsvärdena för neuronerna i ett visst lager är sammankopplade med ing̊angsvärdena för neuronerna i nästkommande lager. I de flesta fall är alla 11 neuroner i tv̊a angränsande lager parvis sammankopplade, det vill säga att tv̊a angränsande lager tillsammans bildar en komplett, bipartit graf. Om alla lager i neuronnätet har denna egenskap sägs nätet vara fullständigt sammankopplat, om s̊a ej är fallet är nätet partiellt sammankopplat [4, s. 52]. 1 2 3 4 5 6 7 8 9 x1 y2 y1 w51 w85 w97 w74 x2 x3 x4 Figur 10: Figuren visar ett feed forward-nätverk med topologin 4-3-2. Vikterna i figuren indexeras med index för viktens in- respektive utg̊angsvärde. Vikter fyller samma funktion i ett feed forward-nätverk som i perceptronen. Varje koppling mellan utg̊angsvärdet för en neuron till ing̊angsvärdet för en annan neuron är associerat med en vikt. Varje enskild neuron i nätet följer i princip samma modell som för percep- tronens neuron, med endast ett undantag. Neuronerna i inputlagret är n̊agot förenklade, d̊a de saknar bias och aktiveringsfunktion. Detta beror p̊a att de endast har ett ing̊angsvärde vardera, och detta ing̊angsvärde bildar direkt in- putneuronens utg̊angsvärde som överförs till neuronerna i nästa lager. I vissa modeller kallas inputneuronerna för inputnoder, för att markera att de inte fungerar p̊a samma sätt som resten av neuronerna i nätet [4, s. 51]. Alla neuroner i ett feed forward-nätverk behöver inte ha samma aktiverings- funktion. Däremot bör som tidigare nämnts den linjära funktionen används för neuronerna i outputlagret, förutsatt att nätet skall kunna tränas att approx- imera en godtycklig reell funktion. För kunna referera till varje unik neuron och varje unik vikt i nätet används följande indexeringsmetod. • En unik neuron n kan indexeras nab, där a är index för ett av neuronnätets lager, och b är neuronens index inuti sitt lager. • yab betecknar utg̊angsvärdet för neuron b i lager a. • wabcd betecknar vikten associerad med kopplingen mellan neuron b i lager a och neuron d i lager c. • En nätverkstopologi kan anges p̊a formen L = [l1, . . . , ln], där ln betecknar antalet neuroner i nätets n:te lager. Det är nu möjligt att definera stegen i feed forward-algoritmen, som används för att beräkna utg̊angsvektorn, ~y, för ett feed forward-nät. Algoritmen använder samma metod som i ekvationer 3 och 4 för perceptro- nen, men för varje neuron i nätet. Algoritmen förutsätter att nätet är fullständigt 12 Algoritm 2 Feed forward Require: ~x = [x0, . . . , xm] Require: L = [l1, . . . , ln] Require: ~w for i := 0 to m do y0i := xi end for for c := 1 to n do a := c− 1 for d := 0 to lc do temp := 0 for b := 0 to la do temp := temp+ yab · wabcd end for ycd := temp end for end for sammankopplat. Om nätet är partiellt sammankopplat kan värdet av wabcd l̊atas vara 0 för de neuroner nab och ncd som ej är sammanlänkade. Att feed forward-nätverk har kapacitet att approximera godtyckliga, reella funktioner visade George Cybenko 1989 genom att formulera ett bevis för det universella approximationsteoremet [15]. F (x1, x2, . . . , xm) = m1∑ i=1 αiφ m0∑ j=1 wijxj + bi  (18) Det universella approximationsteoremet är ett matematiskt teorem som säger att vilken reell funktion F som helst kan approximeras av ekvationen p̊a höger sida om likhetstecknet i ekvation 18. Även om Cybenkos bevis inte involverar neuronnät s̊a har Haykin visat att teoremet är direkt applicerbart p̊a feed forward-nätverk [4, s. 197]. Givet en reell funktion F (x1, x2, . . . , xm), samt värden p̊a de fria variablerna i ekvation 18 s̊a att ekvationen h̊aller, kan ett feed forward-nätverk skapas som approximerar F p̊a följande sätt. 1. L̊at antalet inputneuroner vara m0. Nätets ing̊angsvärde blir [x1, . . . , xm0 ]. 2. L̊at nätet ha ett gömt lager med m1 neuroner. 3. L̊at α1, . . . , αm vara vikterna i det gömda lagret. 4. L̊at φ vara nätets aktiveringsfunktion. Cybenko bevisade teoremet för sig- moidfunktionen [15, s. 10]. S̊aledes är det bevisat att ett feed forward-nätverk i teorin kan approx- imera villken reell funktion som helst. Utmaningen är att hitta en topologi för nätverket som passar just den funktion som skall approximeras, och att sedan lyckas träna nätet. 13 Att träna ett feed forward-nätverk involverar en högre niv̊a av komplexitet än för den enklare perceptronen. För att först̊a varför är det viktigt att känna till att nätets träningsalgoritm behöver hitta optimala vikter mellan alla sam- mankopplade neuroner i nätet. Anledningen till att LMS inte kan appliceras p̊a feed forward-nätverk, eller n̊agon annan typ av flerlagersperceptron, är att algoritmen förutsätter ett önskat utg̊angsvärde för alla neuroner vars vikter den justerar. Eftersom LMS erh̊aller detta önskade utg̊angsvärde ur träningselementen saknar algoritmen förm̊aga att justera vikterna för n̊agra neuroner förutom i outputlagret. Att träna feed forward-nätverk och andra typer av flerlagerspereptroner var länge ett olöst problem som medförde att utvecklingen av neuronnät stagnerade. Detta problem löste Arthur Bryson och Yu-Chi Ho när de 1969 publicerade en upplärningsalgoritm kallad backpropagation-algoritmen [16]. 2.1.5 Backpropagation-algoritmen Backprogagation-algoritmen är en upplärningsalgoritm som kan användas för att träna feed forward-nätverk. Likt LMS är den en övervakad up- plärnigsalgoritm, allts̊a använder den sig av träningselement som inneh̊aller ett värde till nätets inputneuroner, samt ett önskat utg̊angsvärde fr̊an nätets outputneuroner. Den avgörande skillnaden fr̊an LMS är att backpropagation- algoritmen löser problemet att träna ett neuronnät med fler än en neuron [9, s. 159]. Backpropagation-algoritmen använder samma gradient descent-strategi som LMS, men den lägger till en extra teknik för att beräkna ett felvärde även för nätets gömda neuroner, vars önskade utg̊angsvärden inte är kända. För en perceptron visades ∇E vara den partiella derivatan av nätets globala fel, E, med avseende p̊a viktvektorn. ∇E kunde s̊aledes användas för att justera hela nätets viktvektor samtidigt. S̊a är inte fallet för ett feed forward-nätverk, eftersom viktvektorn nu inneh̊aller vikter för flera olika neuroner. Beräkningen av ∇E är mer komplicerad för feed forward-nätverk än för perceptroner. För en perceptron inneh̊aller den förändringen för nätets totala viktvektor: [ δEδw0 , . . . , δEδwn ]. I en flerlagersperceptron med m̊anga sammankop- plade neuroner är det lättare att fokusera p̊a enskilda komponenter i viktvek- torn istället för att försöka träna hela nätet i ett svep. För ett feed forward-nät är det intressant att beräkna δE δwji [4, s. 160]. Vikten wji viktar ett utg̊angsvärde yi skickat fr̊an neuron i till neuron j. P̊a samma sätt som i LMS g̊ar det att givet ett felvärde justera vikten med hjälp av felvärdets partiella derivata. Denna partiella derivata kan analytiskt bestämmas till resultatet av ekvation 19 [4, s. 161]. δE δwji = −ej · f ′j(vj) · yi (19) I likhet med LMS kan upplärningstakten η användas för att styra vik- tförändringens storlek. ∆wji = −η · δE δwji (20) 14 Ekvation 19 är mycket viktig, d̊a den talar om hur en individuell vikt wji kan justeras, givet att neuronens aktiveringspotential vj och lokala fel ej är känt. Eftersom feed forward-fasen sker innan backpropagation-fasen finns aktiver- ingspotentialen redan “lagrad”, och även utg̊angsvärdet fr̊an den föreg̊aende neuronen, yi, är känt. Det lokala felet å andra sidan, är inte känt för de gömda neuronerna [4, s. 161]. För outputneuronerna kan det lokala felet beräknas enligt ekvation 12. Detta är möjligt tack vare att det önskade utg̊angsvärdet d är känt för var och en av dessa neuroner. Backpropagation-algoritmen löser avsaknaden av lokala fel i de gömda neuronerna genom att helt enkelt skicka outputneuronernas felvärden baklänges genom nätet, vilket ocks̊a har gett upphov till algoritmens namn [4, s. 160]. För att kunna skicka neuronernas lokala fel bak̊at i nätet p̊a ett korrekt sätt m̊aste ytterliggare ett värde tas i beaktning; neuronens lokala förändringstakt. Den lokala förändringstakten benämns δ. Dess värde erh̊alls genom att räkna bort det inkommande ing̊angsvärdet ur ekvation 19 [4, s. 161]. δj = ej · f ′j(vj) (21) Förändringstakten för en gömd neuron j kan beräknas med hjälp av förändringstakterna för neuronerna i det framförliggande lagret enligt ekvation 22. δj = f ′j(vj) · ∑ k (δk · wkj) (22) När δ är känt för en gömd neuron kan dess vikt justeras, tack vare att ekvation 19 kan formuleras om med avseende p̊a den lokala förändringstakten [4, s. 161]. ∆wji = η · δj · yi (23) Backpropagation-algoritmen kan nu beskrivas i pseudokod som ett antal av- gränsade steg. I algoritmen ovan körs en iteration av backpropagation. I likhet med LMS talar inte algoritmen om när träningen bör avslutas, utan detta lämnas som ett beslut till implementeraren [4, s. 169]. Värt att notera är att alla δ m̊aste beräknas innan vikterna kan uppdateras. Att göra b̊ada parallellt skulle leda till felaktiga värden, p̊a grund utav att δ beräknas med hjälp av de aktuella vikterna. Ett sätt att veta när det är dags att avbryta träningen är att beräkna nätets globala fel som summan av felen hos varje outputneuron och avbryta när det globala felet är noll, litet eller oföränderligt. Problemet med detta är att det globala felet är en funktion av nätets alla vikter, vilket för större nät blir en funktion i m̊anga dimensioner som antagligen har flera lokala minimum och andra egenskaper som försv̊arar träningen [9, s. 178]. För att lösa problemet med att avsluta träningen, samt öka chanserna att träningen f̊ar ett lyckat resultat, finns det ett antal tekniker och metoder man kan använda när backpropagation tillämpas i praktiken. 15 Algoritm 3 Backpropagation Require: ~v Require: ~y Require: ~w Require: ~d Require: ~f Require: L = [l1, . . . , ln] for i := 0 to ln do // Beräkna δ i outputlagret eni := di − yni δni = eni ∗ f ′ni (vni) end for for a := n− 1 to 1 do // Beräkna δ i de gömda lagren c := a+ 1 for b := 0 to la do temp := 0 for d := 0 to la+1 do temp := temp+ wabcd · δcd end for δab := temp end for end for for a := n to 2 do // Uppdatera vikter c := a− 1 for b := 0 to la do temp := 0 for d := 0 to la+1 do temp := temp+ wabcd · δcd wabcd := wabcd + η · δab · ycd end for end for end for 16 2.1.6 Praktisk tillämpning Vid praktisk tillämpning av backpropagation finns ett antal hinder p̊a väget till att lyckas träna högkvalitativa feed forward-nätverk. Ett av dessa hinder är problemet med lokala minima. Ett eller flera lokala minima i funktionen för neuronnätets globala fel kan leda till att träningen slutar ge resultat trots att nätet inte uppn̊at optimal ap- proximationsförm̊aga. Detta beror p̊a att gradient-descent metoden helt enkelt konvergerar i ett lokalt minimum ifall viktvektorn korsar det p̊a vägen mot det globala minimat [4, s. 169]. För att minska risken att träningen konvergerar i ett lokalt minimum kan vik- tvektorn ges en viss rörelsemängd, även kallad momentum, som bevaras mellan iterationerna av träningsalgoritmen. Momentumvärdets p̊averkan kan beskrivas genom att tänka sig att förändringsvektorn för vikterna i en given iteration pekar mot ett lokalt minimum, men att “kulan” tar sig förbi detta tack vare momentum fr̊an tidigare iterationer [9, s. 195]. Figur 11: Figuren visar hur vikterna under upplärningen konvergerat i ett lokalt min- imum. Genom att använda momentum hade “kulan” med större sannolikhet färdats förbi det lokala minimat och istället konvergerat i Emin. Ekvation 24 beskriver hur momentum används vid justering av en given vikt [9, s. 195]. ∆w′t = ∆wt + (α ·∆wt−1) (24) I ekvationen ovan utgör ∆wt justeringen av vikten w utan momentum. Mo- mentum inkorporeras s̊aledes genom att addera en fraktion av föreg̊aende vik- tjustering till den nuvarande viktjusteringen. Värdet av denna fraktion benämns alpha och bör ligga mellan 0 och 1 [4, s. 168]. Detta värde kan i sig hänvisas till som träningens momentum. Inte heller genom att använda momentum g̊ar det att garantera att träningen konvergerar, även om chanserna ökar [4, s. 168]. Ett problem som m̊aste överkommas under träningen är att stora neuronnät tenderar att överanpassas om de tränas under för m̊anga träningsepoker. Med överanpassning menas att neuronnätet i grund och botten “memorerar” träningselementen istället för att approximera den underliggande funktionen [9, s. 153]. 17 Överanpassning kan motverkas genom en metod som kallas early stopping. Early stopping bygger p̊a att en del av elemeneten i träningsmängden T re- servereas för att mäta neuronnätets globala fel efter varje träningsepok, ele- menten som reserveras till dessa benämns därför valideringsdata. Eftersom neu- ronnätet inte tränas p̊a elementen i valideringsdatan kan den användas för att mäta när träningen inte längre p̊averkar nätets approximationsförm̊aga. När detta inträffar kan träningen avbrytas [4, s. 204]. Träningen p̊averkas även av vilka värden som de fria parametrarna utöver vikterna sätts till, dessa kan till exempel vara upplärningshastigheten η och momentum α. För att uppn̊a bästa resultat kan samma nät tränas med olika värden p̊a dessa parametrar. För att mäta skillnaden i approximationsförm̊aga mellan flera nät som tränats p̊a samma data, kan en del av träningsdatan läggas undan som testda- ta. Denna testdata används för att mäta nätens globala fel efter att träningen slutförts. Det globala felet p̊a testdatan kan s̊aledes användas som en indikator för vilket av flera nät som har bäst approximationsförm̊aga [4, s. 204]. 2.2 Aktiehandel En aktie är en andel i ett aktiebolag [17, s. 164]. Anledningen till att aktiebolaget är en s̊a populär bolagsform för större bolag är dels att varje aktieägare enbart svarar för sitt investerade kapital och s̊aledes inte kan förlora mer än s̊a vid en konkurs [17, s. 165], men kanske framförallt att handel med aktier är snabb och enkel även för gemene man via exempelvis internet [17, ss. 137-139]. Det kan finnas flera skäl till att handla med aktier. Att aktieägare f̊ar beslut- srätt i företaget är sällan det mest attraktiva med aktiehandel, d̊a en eller ett f̊atal aktier (och motsvarande röst/er) ofta inte gör n̊agon skillnad d̊a det finns tusentals aktier eller mer. Att f̊a del i den vinst företaget gör kan vara attraktivt p̊a l̊ang sikt, men det som är mest attraktivt är att göra vinst p̊a själva aktiehan- deln. När aktier utfärdas (antingen vid nyemission eller bolagsbildning) har de ett värde som svarar mot det kapital de innebär för företaget, men därefter bestäms deras värde av marknaden. Om spekulanterna tror att företaget kom- mer att g̊a bra och därmed göra vinst är dess aktier mer attraktiva och kommer s̊aledes öka i värde vilket innebär att aktieägare har som m̊al att hitta aktier man tror kommer öka i värde, köpa dem och sedan sälja till ett högre pris efter en tid. 2.2.1 Börsen I Sverige finns tre börser, varav tv̊a aktiebörser. Nasdaq OMX Stockholm för etablerade bolag är den största och mest kända, medan NGM Equity är en mindre börs avsedd för tillväxtbolag. Den tredje, Burgundy, erbjuder inte handel med aktier. Ordet “börs” är i Sverige en skyddad beteckning och f̊ar bara användas av de handelsplatser som f̊att tillst̊and av Finansinspektionen att bedriva börsverksamhet. Syftet med tillst̊andet är att verifiera att allmänheten kan lita p̊a börsen och dess ing̊aende företag, med avseende p̊a redovisning exempelvis, vilket uppmuntrar handel. Att ett bolag är börsnoterat innebär s̊aledes att det genomg̊att de granskningar och uppfyller de krav som ställs p̊a dem av respek- tive börs. 18 P̊a Nasdaq OMX Stockholm återfinns därför huvudsakligen bolag med my- cket aktiv aktiehandel [18]. 2.2.2 Courtage Privatpersoner f̊ar inte handla direkt p̊a börserna, utan måste bedriva sin handel genom en mäklare. Denna tar vanligtvis ut en avgift, ett courtage, för varje transaktion. Courtaget är ofta en procentsats av hela beloppet i affären men med ett minimicourtage för att även sm̊a affärer skall generera en märkbar inkomst för mäklaren [17, s. 364]. 2.2.3 Öppnings- och stängningscall Varje handelsdag p̊abörjas och avslutas med ett s̊a kallat call, där handel inte sker p̊a samma sätt som under resten av handelsdagen. En call är till för att sam- la ihop köp- och säljbud, för att sedan räkna ut ett jämviktspris till vilket flest antal transaktioner kan ske. Öppningscallet startar 08:45 och d̊a är det möjligt att lägga ordrar för samtliga aktier, men själva handeln börjar genomföras först klockan 09:00. Stängningscallet startar vid 17:25 och därefter avslutas handeln för kvarliggande ordrar i bolagens storleksordning fram till klockan 17:30. De jämviktspriser (ett för varje aktie) som räknas fram av morgoncallen används som öppningspriser och de jämviktspriser som räknas fram av stängningscallen används som stängningspriser [19]. 2.2.4 Volym Antal värdepapper som omsätts. Det vill säga antalet aktier som bytt ägare under en tidsperiod. Ofta är tiden s̊a länge som börsen varit öppen nuvarande dag. Vanligtvis menar man allts̊a antalet aktier som bytt ägare under börsdagen [17, s. 411]. 2.2.5 Orderdjup Orderdjupet anger antalet köp- respektive säljbud som finns p̊a varje budniv̊a för en given aktie. Till exempel kan det finnas 1000 aktier med säljbud p̊a 14.10 kr och 800 aktier med köpbud p̊a 14.00 kr. I detta fallet finns d̊a orderdjupen 1000 för 14.10 kr och 800 för 14.00 kr [20]. 2.2.6 Blankning Som spekulant är det även möjligt att göra vinst vid nedg̊angar p̊a börsen. En spekulant som tror att en aktie kommer att minska i värde kan l̊ana ett antal av dessa aktier av n̊agon som innehar dem. Tanken är att denne säljer aktierna omedelbart för att vid ett senare tillfälle, när aktien minskat i värde, köpa tillbaka dem och returnera till l̊angivaren. Om aktien faktiskt minskar i värde kommer spekulanten att vid köp av den behöva lägga ut mindre pengar än denne fick in vid försäljning och s̊aledes ha gjort vinst. Denna proccess kallas blankning [17, s. 360]. 19 2.2.7 Prissättning När ett aktiebolag bildas eller beslutar att utfärda nya aktier (s̊a kallad nye- mission) har aktierna ett värde som bestämts av bolaget, det nominella värdet. Transaktioner vid nyemission och bolagsbildning utgör dock en minoritet av alla transaktioner. Den vanligaste transaktionen är överl̊atelse av aktier mellan aktieägare. Vid s̊adana transaktioner bestäms priset av utbud och efterfr̊agan vilket betyder att priset kan vara helt orelaterat till det verkliga värdet p̊a bo- laget. Detta kan självklart leda till enorma överpriser och i slutändan ekonomiska kollapser. Ett tydligt exempel p̊a detta är den s̊a kallade tulpanhysterin i Holland under 1600-talet. N̊agot s̊a underligt som tulpanlökar blev extremt populärt p̊a kort tid och detta resulterade i en enorm “tulpanhysteri” men efter m̊anader utav uppg̊ang s̊a började priset sjunka i snabb takt, p̊a en m̊anad sjönk priset ifr̊an 5500 cent till 50 cent. Detta visar att prissättningen inte är knuten till det faktiska värdet [17, ss. 20-23]. 2.2.8 Psykologi Den ideala investeraren beter sig rationellt - denne verkar oberoende av an- dra och omvärderar alltid sin analys av marknaden d̊a ny information görs tillgänglig. Exempelvis det sista är n̊agot som inte nödvändigtvis är sant i verkligheten, d̊a faktumet att folk tenderar att värdera kortsiktig data mer än l̊angsiktig observerats i studier [21, s. 17]. Även det första, att investerare verkar oberoende av varandra, är inte nödvändigtvis sant, vilket demonstreras med ex- empelvis tulpanhysterin i Holland som nämndes ovan. Flera andra exempel p̊a övertro och flockbeteenden finns, exempelvis “The South Sea Bubble” i England p̊a 1700-taglet [17, ss. 23-25] och IT-bubblan p̊a 90-talet [17, ss. 41-63]. Ytterligare ett “irrationellt” beteende som observerats är att människor tenderar att ha sv̊arare för att sälja än att köpa [17, s. 304]. 2.3 Aktieanalys Det finns ett flertal metoder för att analysera aktiemarknaden och utifr̊an dessa analyser spekulera i hur marknaden kommer se ut i framtiden. 2.3.1 Fundamental analys Målet med fundamental analys är att utvärdera företags framtida tillväxt- och vinstpotential. Detta görs med exempelvis års- och kvartalsrapporter som grund. Även att följa nyhetsflödet och informera sig om företagens kommande investeringar, är en del av denna metod [17, ss. 192-193]. 2.3.2 Teknisk analys Teknisk analys tar till skillnad fr̊an den fundamentala analysen inte hänsyn till respektive företags vinstpotential utan använder sig utav tidigare aktiedata för att förutse framtida kurser. 20 Teknisk analys bygger p̊a att man identifierar mönster i aktiehandeln i förväg, antar att de kommer gälla även i framtiden och baserar sina förutsägelser p̊a matematiska modeller som konstruerats utifr̊an dessa mönster. Att analysera börsen med hjälp av algoritmer är ett omdebatterat ämne d̊a man är oense om huruvida historisk marknadsdata överhuvudtaget kan användas för att förutsäga dess framtida beteende [17, ss. 244-245]. Det finns dock exempel p̊a tekniska strategier som under avgränsade tidspe- rioder visats h̊alla vilket talar för att teknisk analys kan fungera [17, s.246]. 2.3.3 Aktieanalys med hjälp av artificiella neuronnät Artificiella neuronnät har visat sig mycket lämpliga att approximera funktioner och modeller genom att enbart analysera tidsserier [1][22]. Nackdelen med tekniska modeller är att de vilken dag som helst kan sluta fungera om förutsättningarna p̊a marknaden förändras. Här har neuronnät en klar fördel i och med dess förm̊aga att identifiera godtyckliga mönster i datan utan de antaganden som existerar inom klassisk teknisk analys [22]. Neuronnät lämpar sig därför bra för teknisk analys och har ocks̊a använts flitigt för detta ändam̊al i snart tv̊a decennier [23][24][25]. 2.3.4 Hypotesen om den effektiva marknanden Hypotesen om den effektiva marknaden, Effecient Market Hypothesis [26] (hädanefter EMH) beskriver marknaden som effektiv, vilket innebär att all tillgänglig information redan återges i aktiernas pris och att marknadens rörelser följer ett slumpmässigt mönster, vilket Maurice Kendall p̊avisat år 1953 [17, ss. 323-325]. N̊agot som talar emot att marknaden är effektiv, det vill säga att den i n̊agon grad är förutsägbar, är historiskt framg̊angsrika aktiehandlare som beskriver hur de baserat sina förutsägelser p̊a ett antal enkla system. Dessa system är huvudsakligen baserade p̊a att börsen p̊averkas av flockbeteenden och liknande psykologiska fenomen [27]. EMH-förespr̊akare förklarar dock detta med att även om det för individen är osannolikt, m̊aste n̊agon göra vinst även i det l̊anga loppet. Paralleller kan dras till en tänkt turnering i myntkastning, där ett godtyckligt stort antal deltagare möter varandra en mot en och sl̊ar ut varandra genom att gissa vilken sida av myntet som kommer att hamna upp̊at. Även om chansen att vinna turneringen är försvinnande liten för individen, kommer n̊agon att vara vinnare i slutändan [17, ss. 323-325]. Werneryd [21, s. 21] nämner n̊agra av de viktigaste punkterna i kritiken mot EMH: 1. All information är inte publik och all information är inte omedelbart tillgänglig p̊a grund av olika fördröjningar. 2. Investerare är inte nödvändigtvis rationella. 3. Investerare är inte nödvändigtvis oberoende av varandra, det kan finnas flockbeteende. 4. Tidsperspektivet; För längre tidsperioder kan utveck- lingen för en given aktie vara närmare slumpen än för korta tidsperioder. Även om ett neuronnät lyckas finna trender i data betyder det inte att tren- derna är relevanta eller att dessa fungerar för data som neuronnätet inte tränats p̊a [2]. För att förbättra chanserna att hitta relevanta trender i en komplex mod- ell bör man behandla datan i förväg genom att bland annat filtrera ut onödig information [28]. 21 x1 x2 x3 x4 x5 x6 y x7 x8 x9 x10 x11 Figur 12: Figuren visar ett möjligt sätt att konstruera ett feed forward-nätverk som approximerar tidsserien för en aktie. Som ing̊angsvärden ges p̊a varandra följande samplingar ur tidsserien. Det önskade utg̊angsvärdet defineras som nästkommande sampling. Om den sista indatasamplingen är tagen direkt fr̊an aktuell börsdata kan nätet potentiellt approximera tidsseriens framtida värde. 22 3 Systemdesign och implementation I korthet kan systemet beskrivas som att det tillhandah̊aller följande funktion- alitet för användaren: • Träning av neuronnät. • Utvärdering av p̊ag̊aende och planerade träningar. • Utvärdering av färdigtränade neuronnät. • Simulerad handel med hjälp av färdigtränade nät För att tillhandah̊alla denna funktionalitet för användaren utför även systemet kontinuerlig insamling och lagring av aktiedata, vilket är dolt för användaren. Systemets samtliga funktioner är fördelade över fem systemmoduler, som även kan ses i figur 13: • Datamodul • Beräkningsmodul • Webbservermodul • Gränssnittsmodul • Simuleringsmodul Var och en av dessa moduler är därtill indelad i mindre submoduler. Tillsammans bildar modulerna ett system som körs p̊a en centraliserad server. Samtliga moduler förutom gränssnittmodulen är utvecklade i program- spr̊aket Java. Gränssnittsmodulen använder en kombination av HTML, CSS och Javascript. 3.1 Datamodul Systemets datamodul inkapslar och tillhandah̊aller all funktionalitet som in- volverar insamling, lagring och åtkomst av aktiedata. 3.1.1 Insamling Submodulen som sköter insamling av data inneh̊aller ett antal webbspindlar, även kallade webcrawlers. Dessa webbspindlar parsar med jämna intervall ett antal externa webbsidor som tillhandah̊aller kontinuerligt uppdaterad data. Aktiedatan samlas in fr̊an Nasdaq OMX Nordic [29], som tillhandah̊aller realtidsdata fr̊an Stockholmsbörsen med 15 minuters fördröjning. Börsen har öppet fr̊an klockan 09:00 till 17:30 och hemsida. Webbspindeln hämtar data för samtliga large cap-aktier som finns tillgängliga via Nasdaq OMX Nordic. Varje insamlad datasampling inneh̊aller information om aktuellt försäljningspris och orderdjup. Orderdjupet inneh̊aller de fem mest pop- ulära offererade priserna för köp och sälj och för var och en av dessa; antalet ej genomförda ordrar. 23 DB Parser Data- abstraktion Datamodul Server Klient Gränssnitts- modul Webserver html css Java- script Beräkningsmodul Neuronnät Träning Prediktering Internet Simulator SSH Figur 13: Översikt av systemets moduler. En annan webbspindel samlar in valutadata. Denna data hämtas fr̊an en webbsida vid namn CurrencyRates [30] och best̊ar av de relativa priserna för brittiska pund (GBP), amerikanska dollar (USD), Euro (EUR) och svenska kro- nor (SEK). Webbspindeln för aktier hämtar samplingspunkter med 10-sekunders inter- vall, under de tider d̊a Stockholmsbörsen är öppen. Spindeln för valutadata hämtar samplingspunkter med 10-sekunders intervall dygnet runt. 3.1.2 Lagring Varje insamlad samplingspunkt lagras i en relationsdatabas. Databasschemat inneh̊aller en tabell per aktie eller valuta som samlas in och varje rad i tabellerna inneh̊aller en samplingspunkt tillsammans med en tidsstämpel som talar om exakt när samplingen samlades in. Tidsstämpeln representeras p̊a det generiska UNIX timestamp-formatet. Förutom insamlad data s̊a hanterar datamodulen även lagring av data re- laterad till systemets neuronnät. Denna data inkluderar främst parameterkon- figurationer för färdigtränade nät, men även deras resulterande förutsägelser. 3.1.3 Åtkomst Datamodulen inneh̊aller logik som förenklar åtkomst av den lagrade datan för övriga delar av systemet. Internt används JDBC (Java Database Connectivity) för att kommunicera med databasen via SQL, och datamodulen kapslar helt in direktkommunikationen med databasen. 24 Systemet kan returnera alla tidpunkter mellan klockan 09:00 och 17:25 d̊a börsen annars är stängd eller är i en call (se avsnitt 2.2.3). Gränssnittet som tillgängliggör de insamlade datapunkterna använder sig av interpolering för att möjliggöra dataförfr̊agningar med godtyckliga start- och slutdatum, samt med godtyckliga samplingsintervall. Detta åstadkoms genom att interpolera linjärt mellan de insamlade samplingspunkterna, vilket medför att data för vilken tidpunkt som helst kan returneras. Om en önskad tidpunkt inte finns bland de insamlade samplingarna databasen s̊a interpolerar gränssnittet linjärt mellan de tv̊a kringliggande punk- terna. Detta skapar en enkelhet hos resten av systemet som inte behöver ta hänsyn till vilken data som faktiskt finns lagrad. Utöver åtkomst av faktiska samplingvärden stöder datamodulen även grundläggande förbehandling av datapunkterna, även kallad feature extraction. Följande förbehandlingsmetoder är implementerade: • Differens • Signumdifferens • Promilleförändring Differens är en förbehandling som returnerar, istället för de faktiska sam- plingsvärdena, differensen mellan samplingsvärdet för den önskade tidpunkten och samplingsvärdet för den omedelbart föreg̊aende tidpunkten. Signumdifferensen använder datan för samplingspunktens differens och nor- maliserar den ytterliggare med hjälp av signumfunktionen. Signumdifferensen är s̊aledes antingen 1, -1 eller 0. Promilleförändringen är ett m̊att p̊a hur m̊anga promille samplingsvärdet förändrats sedan föreg̊aende samplingspunkt. Promille används istället för pro- cent för att f̊a en lagom numerisk skala för m̊anga olika längder p̊a samplingsin- tervallet. 3.2 Beräkningsmodul 3.2.1 Generering Neuronnät skapas med hjälp av en intern genereringsmodul, som möjliggör för systemet att generera en stor mängd neuronnät med s̊a lite ansträngning fr̊an användaren som möjligt. Gränssnittet mot genereringsmodulen är enkelt; givet en genereringsspecifikation genereras en uppsätting konfigurationer. En konfiguration är en unik parameteruppsättning avsedd att användas för att bygga ett neuronnät. En konfiguration inneh̊aller s̊aledes neu- ronnätets inputvärden, outputvärden, upplärningshastighet, aktiveringsfunk- tioner, träningsdata, interna struktur med mera. En genereringsspecifikation är en generaliserad konfiguration, där de nu- meriska parametrarna kan anges i intervall, och icke-numeriska värden kan anges i listor. Varje intervall inneh̊aller ett startvärde, ett slutvärde, en interpoler- ingsmetod och antalet önskade punkter. De tillgängliga interpoleringsmetoder- na är linjär interpolering, där avst̊andet mellan punkterna är konstant, samt logaritmisk interpolering, där avst̊andet mellan punkterna ökar exponentiellt. 25 Genereringsmodulen sätter sedan samman alla möjliga kombinationer av elementen i listorna och de interpolerade numeriska värdena till en uppsättning konfigurationer. Exempelvis kan en genereringsspecifikation inneh̊alla en lista av tv̊a sepa- rata aktiveringsfunktioner till neuronnätens gömda lager och ett numeriskt tal med med tre logaritmiskt interpolerade samplingar för upplärningshastigheten. Utifr̊an detta bildar genereringsmodulen sex separata konfigurationer. Genereringsmodulen bör användas med försiktighet i och med att antalet konfigurationer som en generationsspecifikation ger upphov till är exponentiellt korrellerat till antalet element i listorna och interpoleringar som ställts in för de numeriska värdena. 3.2.2 Träning När ett nätverk skall tränas har det tillg̊ang till sin egen konfiguration och s̊aledes till vilken data den behöver. Den har även tillg̊ang till databas- gränssnittet och börjar med att hämta all data till lokala arrayer för snabb åtkomst. All data delas sedan in i tre grupper, träningsdata, valideringsdata och testdata, utefter kvoterna definierade i konfigurationen. Träningsdatan används för att lära upp nätverket, det är denna datan den lär sig att approximera en funktion för. I jämna intervall körs även ett test som mäter hur bra nätverket presterar p̊a valideringsdatan. Detta används för att avgöra om nätverket är övertränat och hur bra det anpassar sig till data den inte tränat p̊a. När algoritmen avgör att det är dags att sluta träna, det vill säga när nätverket ej anpassar sig märkbart längre, görs en körning mot testdatan. Detta för att f̊a ett mätvärde p̊a hur bra nätverket är p̊a att förutsäga data det aldrig har sett förut. 3.3 Webbservermodul Webbservermodulens uppgift är att tillgängliggöra de övriga modulernas funk- tionalitet över HTTPS-protokollet. För att webbservermodulen ska kunna till- handah̊alla informationen krävs det att den har kännedom om de övriga modulerna. I och med detta kan webbservermodulen b̊ade leverera data till användaren samt ta emot data, vilket sker genom GET respektive POST förfr̊agningar (s̊a kallade requests). 3.4 Gränssnittsmodul Gränssnittsmodulen använder sig bland annat utav javascriptbiblioteket jQuery, som förenklar modifiering utav HTML, händelsehantering och AJAX- funktionalitet. 3.4.1 Träningsvyn Träningsvyn utgör ett gränssnitt mellan användaren och systemets genereringsmodul för neuronnät. Denna vy utgörs s̊aledes av ett omfat- tande webbformulär, där användaren kan mata in all nödvändig information för att bilda en genereringsspecifikation till genereringsmodulen. Eftersom de fria parametrarna i neuronnät i m̊anga fall är korrelerade till varandra, till exempel aktiveringsfunktioner och deras lutningar, använder 26 träningsvyn Javascript och jQuery för att dynamiskt generera formulärets de- lar progressivt, där nästa del av formuläret kan genereras med hänsyn till användarens val i tidigare delar av formuläret. 3.4.2 Statusvyn Konfigurationsuppsättningen som skapas i beräkningsmodulen efter att användaren genomg̊att träningsvyn kan inneh̊alla en mängd neuronnät som p̊abörjar träningsfasen i omg̊angar. Dessa neuronnät, b̊ade de som p̊abörjat träning och även de som väntar p̊a att p̊abörja träning finns under statusvyn, bland annat i tabellform. Användaren kan sortera eller söka efter neuronnäten beroende p̊a dess parametrar och även radera dem. I och med att funktionaliteten för den ursprungliga HTML-tabellen är rela- tivt enkel s̊a använder sig gränssnittsmodulen utav ett jQuery-bibliotek, datat- ables.js, som ger tabellen egenskaper som till exempel sortering och sökning av rader med mera. Användaren har möjlighet att välja ett neuronnät i tabellen och utvärdera prestationen genom att undersöka dess utveckling som finns tillgänglig i form av tv̊a grafer som beskriver hur nätet anpassar sig. Den ena grafen visualiserar ett m̊att p̊a nätets fel i förh̊allande till det ko- rrekta förväntade värdet. Algoritmen som mäter felet är root mean squared [31]. Den andra grafen är baserad p̊a ökning/minskning och ger högre fel om nätet förutser värdeökning när värdet sjunker eller värdeminskning när värdet ökar. Den andra grafen ser allts̊a inte till det faktiska utvärdet av nätverket utan endast ökning/minskning gentemot nuvarande värde. Att denna graf visar ett fel lägre än 0.5 innebär att nätverket gissar rätt riktning oftare än det gissar fel. I de fall där användaren upptäcker att ett neuronnät presterar d̊aligt, finns det möjlighet att manuellt stoppa träningen. Graf-funktionaliteten är implementerad med hjälp av en modifierad version utav g.raphael, som är en utbyggnad av javascript-biblioteket Raphael.js, vars uppgift är att skapa SVG-bilder direkt i webbläsaren. Grafbiblioketet utnyttjar detta till att rita kurvor i form utav SVG-bilder. 3.4.3 Administreringsvyn Administreringsvyn följer en liknande princip som statusvyn, men istället för att visa neuronnät som för tillfället är under träning visas här istället neuronnät som är färdigtränade. 3.5 Simuleringsmodul Modulen simulerar handel med olika aktier. Simulatorn kan använda sig av godtyckliga prediktorer för att avgöra hur den ska agera. En prediktor kan till exempel vara ett färdigtränat neuronnät. En simulator startas med en portfölj som initialt inneh̊aller en miljon obund- na kronor och noll aktier. Simulatorn genomför transaktioner i samma intervall som prediktorn ger förutsägelser. Varje handelstillfälle börjar med att prediktorn förutsäger värdet p̊a aktien vid nästa handelstillfälle. Om det förutsagda värdet skiljer sig med 27 mer än ett öre fr̊an nuvarande värde p̊a aktien kommer simulatorn antingen att försöka köpa aktier (vid uppg̊ang) eller sälja aktier (vid nedg̊ang). Simulatorn investerar om möjligt alla tillgängliga medel vid transaktionerna. Simulatorn kan köras med flera olika alternativ. Det är möjligt att handla med/utan courtage, transkationsmarginal och blankning. Courtage är satt till 0,055 % av transaktionssumman eller 99 kr minimum. Transaktionsmarginal innebär att simulatorn endast genomför affärer med potentialen att generera en vinst större än en viss (variabel) andel av transaktionssumman. Blankning innebär att simulatorn har möjligheten att blanka genom att l̊ana aktier till ett värde av dess tillg̊angar. Det antas här att det alltid finns tillg̊ang till aktier att l̊ana, omedelbart och utan utl̊aningsränta eller andra avgifter. Köp sker genom att simulatorn itererar igenom de olika niv̊aer av säljbud som finns. P̊a varje budniv̊a avgör simulatorn hur m̊anga aktier den kan köpa med tillgängliga medel (det vill säga obundna pengar), om möjligt genomförs transaktionen. Om blankning är aktiverat och simulatorn har l̊anat aktier beta- las dessa tillbaka omedelbart. Kan inte simulatorn genomföra n̊agon transaktion p̊a budniv̊an eller om alla budniv̊aer understigande aktiens förutsagda värde vid nästa handelstillfälle har g̊atts igenom vilar den tills nästa handelstillfälle. Vid försäljning g̊as p̊a motsvarande sätt som vid köp de olika niv̊aerna av köpbud igenom. P̊a varje budniv̊a avgör simulatorn hur m̊anga aktier den kan sälja och om möjligt genomförs transaktionen. Om blankning är aktiverat l̊anar (om möjligt) simulatorn aktier att sälja d̊a den s̊alt slut p̊a egna aktier och fortsätter sedan sälja. Kan inte simulatorn genomföra n̊agon transaktion p̊a bud- niv̊an eller om alla budniv̊aer överstigande aktiens förutsagda värde vid nästa handelstillfälle har g̊atts igenom vilar simulatorn tills nästa handelstillfälle. Observera att courtage utg̊ar p̊a varje transaktion (det vill säga ej endast vid varje handelstillfälle). Med en transaktion avses här samtliga genomförda köp eller försäljningar vid en viss budniv̊a och ett visst handelstillfälle. Simulatorn använder sig av dataabstraktionslagret för att komma åt data om aktier, dock med ett mellanliggande transaktionshanteringslager. Lagret h̊aller reda p̊a vilka köp eller försäljningar som genomförts vid ett handelstillfälle s̊a att det inte är möjligt att sälja/köpa flera g̊anger till samma köpare/säljare vid samma handelstillfälle. Simulatorn skriver ut status om simulationen p̊a skärmen och generar dia- gram i form av länkar till Google Charts. Simulatorn körs p̊a servern, och för att kunna köra den behöver man vara inloggad (exempelvis via SSH). Simulationer körs ej per automatik för färdigtränade nät utan m̊aste startas manuellt. Simulatorn kan även utnyttja en slumpmässig prediktor. Simulatorn kom- mer d̊a istället för att använda ett neuronnäts förutsägelser till grund för sina beslut slumpa fram förutsägelser och använda dessa som grund vid beslut. Den- na slumpprediktor kommer att ange priset vid nästa handelstillfälle till 1% över, 1% under eller samma som det nuvarande priset med 1 3 sannolikhet för samtliga alternativ. 28 4 Resultat Resultaten är naturligt indelade i tv̊a större delavsnitt, 4.1 som avhandlar det system som tagits fram för experimentering med neuronnät och 4.2 som avhand- lar de neuronnät som tagits fram och deras resultat vid träning och simulering. 4.1 Slutgiltigt system Den slutgiltiga versionen av systemet är ett mjukvarusystem vars ändam̊al är att generera och träna artificiella neuronnät för att förutsäga aktiekurser samt att testa dessa genom att simulera aktiehandel baserad p̊a nätens förutsägelser. Med systemet kan en användare generera artificiella neuronnät av typen feed- forward, se de nät som redan finns i systemet och deras egenskaper, administrera näten samt starta simulationer. 4.1.1 Datainsamling och datahantering De webbspindlar som använts till datainsamling har sedan början av febru- ari samlat in sampel av aktie- och valutakursdata. Insamlingen av valutadata avbröts den 17 april d̊a källan som valutaspindeln hämtade data fr̊an upphörde att existera. Valutaspindeln kraschade även ett antal g̊anger dessförinnan. Totalt har data för 144 aktier samlats in, dessa aktier utgör samtliga large- cap-bolag p̊a OMX Nordic. Antalet datapunkter varierar mellan aktierna p̊a grund av problem vid insamlingen. 2012-05-14 befinner sig spannet av antalet insamlade datapunkter mellan 400 000 och 500 000. 4.1.2 Generering och träning av neuronnät Genom systemets webbgränssnitt kan användare skapa nya neuronnät. Användaren f̊ar specificera en rad olika inställningar antingen genom en guide, eller genom att manuellt skriva inställningarna p̊a JSON-format i ett textfält. De inställningar som användaren kan göra är: Utdata Vilken utdata näten ska tränas att ge, det vill säga vilken akties kurs näten skall förutsäga och p̊a vilken form aktiens kurs ska förutsägas; dif- ferensen, signumdifferensen, promilleförändringen (se 3.1.3 Åtkomst) eller den faktiska kursen. Indata Vad näten ska ta som indata, det vill säga vad näten ska basera sina förutsägelser p̊a. Intervall Tiden mellan varje sampling som plockas ur dataserien och används till indata. Intervallet är även avst̊andet till den punkt i framtiden nätet försöker approximera data för. Steg Hur m̊anga steg bak̊at i tiden som näten ska ta indata. Parametern inter- vall anger tiden mellan varje steg. Dolda lager Hur m̊anga dolda lager näten kommer ha samt hur m̊anga neu- roner varje dolt lager skall ha. Aktiveringsfunktion Vilka aktiveringsfunktioner som neuronerna i de dolda lagren kommer att använda. 29 Lutning p̊a aktiveringsfunktion Aktiveringsfunktionerna sigmoid och tan- gens hyperbolicus har en konstant som avgör deras lutning. Momentum Vilka momentum som skall användas av backpropagation- algoritmen under träning. Upplärningshastighet Vilka upplärningshastigheter som skall användas av backpropagation-algoritmen under träning. Träningsdatans start och slut Perioden vars data kommer att användas vid träningen av näten. Träningsdatafraktion Hur stor andel av datan i träningsperioden som ska användas till träning. Valideringsdatafraktion Hur stor andel av datan i träningsperioden som ska användas till validering. Minsta antal träningsepoker Det minsta antalet träningsepoker ett neu- ronnät ska tränas innan träningen kan avrbrytas genom early stopping. Stoppfaktor Hur m̊anga träningsepoker neuronnätet fortsätter att tränas in- nan den avbryts om inte resultatet av träningen förbättras i förh̊allande till hur m̊anga träningsepoker som redan körts. För inställningarna momentum, upplärningshastighet, aktiveringsfunktion och lutning p̊a aktiveringsfunktion kan användaren välja mer än ett värde. Sys- temet kommer d̊a att generera ett neuronnät för alla möjliga kombinationer av användarens valda värden för dessa inställningar. 4.1.3 Administrering av neuronnät Systemets webbgränssnitt har tv̊a vyer för administration av neuronnät, en för färdigtränade neuronnät och en för neuronnät som ännu inte tränats färdigt. För alla neuronnät visas deras konfiguration, hur länge de har tränat (b̊ade i tid och antal träningsepoker) samt hur de har presterat i träningen. Utöver att inspek- tera existerande neuronnät kan användaren genom systemets webbgränssnitt söka efter neuronnät, avbryta träningar och radera neuronnät. 4.1.4 Visualisering av förutsägelser Webgränssnittet ineh̊aller en p̊abörjad vy vars syfte är att visualisera statistik fr̊an handelsimulering som kör i bakgrunden. Vyn ska för varje färdigtränat neuronnät visa en graf med den faktiska kursen för aktien som nätet är tränat att förutsäga tilsammans med en graf över nätets förutsägelser. Denna vy är ej färdigställd och kan ej användas. 4.1.5 Simulator Det är möjligt att utvärdera färdigtränade neuronnät genom att simulera ak- tiehandel med dessa som grund för beslutsfattande. Simuleringen är ej tillgänglig via webbinterfacet utan startas manuellt och konfigureras beroende p̊a syftet med simuleringen: 30 Courtage anges ifall användaren vill testa hur neuronnätet skulle prestera i en mer verklighetsenligt miljö, där courtage utg̊ar för varje transaktion. Tröskelvärde anger hur riskfyllda köp/säljtransaktioner simulatorn ska genomöra. Ett högre tröskelvärde innebär att det krävs en högre vinst- potential för att simulatorn ska genomföra transaktionen. Blankning avgör ifall simulatorn ska ha möjlighet att blanka. Startdatum anger vilket datum simulationen ska starta p̊a. Slumpförutsägelser anger att simulatorn ska använda sig av slumpförutsägelser. 4.2 Neuronnät Nedan presenteras resultaten för ett urval av de nät som togs fram under pro- jektets g̊ang. 4.2.1 Träning 0.5135 0.5175 0.5214 0.5254 0.5293 0.5333 0.5372 0.5412 0.5452 0.5491 0.5531 0.5570 0.5610 0.5649 0.5689 1 22 43 65 86 107 #träningsepoker an de l f el Träningsdata Valideringsdata Investor Figur 14: Figuren visar andelen av träningsdatan och valideringsdatan vars utdata förutsägs g̊a åt rätt h̊all. Indatan är Investors akties värde och utdatan detsamma. Resterande resultat presenteras för träningar p̊a svenska banker d̊a denna branch var den med flest aktörer och mest komplett data i databasen. 4.2.2 Simulering Redovisade simuleringar har körts p̊a neuronnäten som förutsäger Nordeas ak- tievärde d̊a dessa var de som gav bäst och stabilast resultat under träningen. 31 Parameter Värde Upplärningshastighet 0.0005 Aktiveringsfunktionslutning 0.07 Aktiveringsfunktion Tangens Momentum 0.9 Intern struktur Tv̊a dolda lager med n/2 neu- roner var. Där n är antalet in- dataneuroner Tidsintervall 1 minut Indata Differens i aktievärdet och köpvolymen p̊a följande bolag: Nordea, SEB, Handelsbanken, Swedbank, Danske bank och Sydbank Utdata Differensen för aktievärdet hos Nordea Tabell 1: De exakta parametrarna för nätverken som i simulation gav mest avkastning och vars träning presenteras i figur 15. 32 0.3492 0.3583 0.3673 0.3764 0.3855 0.3945 0.4036 0.4126 0.4217 0.4308 0.4398 0.4489 0.4580 0.4670 0.4761 1 19 37 56 74 92 #träningsepoker an de l f el Träningsdata Valideringsdata Neuronnät 1 0.3523 0.3620 0.3716 0.3813 0.3909 0.4006 0.4102 0.4199 0.4296 0.4392 0.4489 0.4585 0.4682 0.4778 0.4875 1 28 55 81 108 135 #träningsepoker an de l f el Träningsdata Valideringsdata Neuronnät 2 0.3466 0.3559 0.3653 0.3746 0.3840 0.3933 0.4027 0.4120 0.4214 0.4307 0.4401 0.4494 0.4588 0.4681 0.4775 1 19 37 55 73 91 #träningsepoker an de l f el Träningsdata Valideringsdata Neuronnät 3 0.3571 0.3679 0.3787 0.3894 0.4002 0.4110 0.4218 0.4325 0.4433 0.4541 0.4649 0.4757 0.4864 0.4972 0.5080 1 21 40 60 79 99 #träningsepoker an de l f el Träningsdata Valideringsdata Neuronnät 4 0.3991 0.4098 0.4205 0.4312 0.4419 0.4526 0.4633 0.4739 0.4846 0.4953 0.5060 0.5167 0.5274 0.5381 0.5488 1 24 47 70 93 116 #träningsepoker an de l f el Träningsdata Valideringsdata Neuronnät 5 Figur 15: Figuren visar andelen av träningsdatan och valideringsdatan vars utdata förutsägs g̊a åt rätt h̊all för de fem nät som tränats med ovanst̊aende parametrar. 33 Figur 16: Simulatorns tillg̊angar över tiden för de fem neuronnäten vars träning kan ses i figur 15. Här körs simuleringen med courtage och ett tröskelvärde p̊a 0.00055. Figur 17: Nordeas aktiepris under samma tidsperiod som simuleringen i figur 16. Figur 18: Medelvärdet p̊a tillg̊angarna för prediktorerna i figur 16 och 15 slump- prediktorer (beskrivna i slutet av avsnitt 3.5). 34 Figur 19: Jämförelse av medelvärdet p̊a tillg̊angarna för simulatorer som kör predik- torer med och utan blankning. Alla simulatorer använder här courtage. Figur 20: Jämförelse av medelvärdet p̊a tillg̊angarna för simulatorer som kör med och utan tröskelvärde p̊a 0.00055. 35 5 Diskussion Först kommer systemet som har utvecklats diskuteras och därefter de neuronnät som har producerats av det. Sist diskuteras framtida förbättringar av projektet. 5.1 Slutgiltigt system Systemet har i stort sett den funktionalitet som planerades ifr̊an början. Dock har vissa funktioner f̊att lämnas ute och nya krav har under projektets g̊ang införts d̊a de framkommit. 5.1.1 Skalning av data Det ins̊ags snabbt att det faktiska värdet p̊a en aktie inte var användbart i näten, vilket kan utläsas ur figur 14. Huruvida en aktie kostar 100 eller 500 kr är irrelevant och bör ej p̊averka nätet ifr̊aga. Därför användes endast differensen och förändringen vid alla körningar därefter, vilket har resulterat i nätverk som presterar bättre. Ett potentiellt problem med interpoleringen är att den introducerar värden p̊a kursen som inte finns p̊a riktigt. Men d̊a de underliggande punkterna i van- ligtvis har 10 sekunders avst̊and mellan varandra kommer felmarginalen för de interpolerade värdena att vara försumbar. 5.1.2 Separering av data Till en början och under en väsentlig del av projektet fördelades datamängden tillgänglig för träning upp i träningsdata, valideringsdata och testdata slumpmässigt. Detta var n̊agot som v̊allade problem d̊a alla tre dataset var blan- dade med varandra och starkt korrelererade. Senare gjordes en mindre omim- plementering s̊a att träningsdatan togs fr̊an början av datamängden, valider- ingsdatan ur mitten och testdatan ur slutet. P̊a s̊a sätt har datan separerats mer och tillförlitligheten för den statistik man f̊ar ut av att mäta felet p̊a valid- eringsdatan och testdatan har ökats. 5.1.3 Simulator Simuleringsmodulen kan utföra simulationer med ett antal olika parametrar (med/utan blankning/courtage/transaktionsmarginal). För den begränsade tid som tilläts projektet och den tid varje simulering potentiellt kan ta, i storlek- sordningen flera timmar, kan antalet parametrar anses vara tillräckliga. De varierbara parametrarna bör dessutom vara bland de mest intressanta. Att kunna köra simulationer utan courtage är intressant för att utröna huruvida näten åtminstone teoretiskt sett kan nyttjas i aktiehandel framg̊angsrikt. En större brist med simulationen är att transaktioner ej p̊averkar mark- naden. De simulerade köp och försäljningar som genomförs p̊averkar inte utbud och efterfr̊agan mer än vid det specifika handelstillfället. Det antal köpare och säljare som finns vid nästa handelstillfälle kommer att finnas där oavsett om sim- ulatorn säljer/köper till alla köpare/säljare vid det nuvarande handelstilfället. Om simulatorn köper en större mängd aktier är det rimligt att n̊agon motreak- tion kan inträffa p̊a marknaden. Möjligen hade färre säljare funnits vid nästa 36 handelstillfälle, n̊agot simulatorn allts̊a ej tar hänsyn till. Noterbart är att den- na felkälla är större ju kortare predikteringsintervallen är d̊a eventuella effekter transaktioner har p̊a marknaden försvinner med tiden. Det hade varit önskvärt att implementera fler strategier för simulatorn. En tänkbar förändring är att inte investera samtliga tillgängliga medel vid varje transaktion. Att anta att aktier alltid finns tillgängliga till utl̊aning, dessutom utan avgift, vid blankning är en förenkling av verkligheten. Dock verkar blankning p̊averka simulationens resultat negativt och används inte i de simuleringar som utgör huvudresultaten och redovisas i denna rapport (se figur 16). 5.2 Neuronnät Huvudobservationer: • Nästintill inga nät presterade väl vid simulering under längre tidsperioder. • Blankning verkar p̊averka simulationens resultat negativt (se figur 19). • Användning av tröskelvärde p̊averkar simulationens resultat positivt (se figur 20). • Nätverken presterar väsentligt bättre än slumpmässiga prediktorer under samma förh̊allanden (se figur 18). 5.2.1 För̊aldring Att näten presterade bra under en tid för att sedan försämras (se figur 16) var att vänta, d̊a den data näten tränats p̊a blev äldre och utdaterad. Denna utdatering kan bero p̊a att de trender nätet har funnit i träningsdatan relativt snabbt förändras och att marknaden inte längre följer dessa. Det intressanta att notera är efter hur l̊ang tidsperiod detta sker. Det hade varit intressant att se om denna tidsperiod p̊averkas av neuronnätens förutsägelseintervall. En lösning p̊a detta problem skulle vara att systemet kontinuerligt mäter ett näts kvalitet och automatiskt tränar om det när det n̊ar en viss kritisk niv̊a. 5.2.2 Korrelation av data Indatan till det nät som visas i figur 14 bestod endast av aktiens värde. Det visade sig under projektets g̊ang att näten presterade bättre d̊a även orderdjup användes som indata (se figur 15). Det nät som mest framg̊angsrikt föruts̊ag Nordea-kursen använde sig av indata även fr̊an andra banker och det tycks allts̊a vara möjligt att dessa aktier i n̊agon m̊an är korrelerade. Det var ej möjligt att undersöka huruvida aktiekurser var relaterade till valutakurser d̊a valutadatan upphörde att samlas in under projektet och datan även dessförinnan inte var fullständig eftersom valutaspindeln kraschade ett antal g̊anger. 37 5.2.3 Resultat av simulering Som kan utläsas av resultaten (figur 18) g̊ar neuronnäten i snitt med varken vinst eller förlust. Man ska dock ta hänsyn till att courtage utg̊ar vid varje transaktion och allts̊a försämrar neuronnätens vinst och att varje köp eller försäljning av aktier innebär en direkt förlust d̊a ett köp av en aktie alltid sker till ett högre pris än vad man i det läget kan sälja samma aktie för. Med andra ord förlorar man direkt pengar om man hela tiden skulle köpa och sälja en aktie vars medelpris st̊ar stilla. Sammantaget preseterar neuronnäten bättre än simuleringarna med slumpprediktorer. 5.3 Framtida arbete Den naturliga fortsättningen p̊a projektet vore att fortsätta variera olika kon- figurationer för neuronnäten och även att testa strategier för användning av dem. Även andra tekniker hade kunnat tillämpas. Exempelvis klassificering av förutsägbarhet hos dataserier genom beräkning av Hurstexponenten. Även an- dra typer av neuronnät s̊asom Kohonen-nätverk och recurrent-nätverk hade kunnat användas. Träningen och testningen av olika nätverk och parame- trar hade kunnats automatiseras ytterligare och det hade varit intressant att använda en genetisk algoritm för att hitta s̊a bra parametrar till neuronnäten som möjligt. Problemet med för̊aldrig som har diskuterats i kapitel 5.2.1 borde även avhjälpas med kontinuerlig omträning av neuronnäten i fasta intervaller. För förbättrat resultat skulle man även kunna förbehandla datan mer genom s̊a kallad feature extraction. En form av feature extraction som redan utforskats i projektet är differensen och promilleförändringen av indatan men det finns m̊anga fler avancerade s̊asom dimensionsreducering, glidande medelvärde, sig- nalutjämning med flera. 38 6 Slutsatser Systemet har de flesta av de ursprungligen planerade funktionerna och det har producerat neuronnät som i simuleringar gett resultat avsevärt bättre än simu- leringar med slumpmässiga investeringar. En slutsats som dragits är att det är viktigt med den feature extraction som används i form av förändring snarare än det faktiska värdet p̊a all data. Ytterligare en slutsats är att orderdjup som indata förbättrar neuronnätens förutsägelser, medan endast aktiekurser som indata ger sämre resultat. De förbättringar av systemet som antagligen skulle förbättra resultaten mest är mer avancerad feature extraction och kontinuerlig omträning av neuronnät. 39 Referenser [1] K. H. och M. Stinchcombe och H. White, “Multilayer feedforward networks are universal approximators,” Neural networks, vol. 2, no. 5, pp. 259–366, March 1989. [2] K. Nygren, “Stock prediction - a neural network approach,” Kungliga Tekniska Högskolan, Stockholm, Tech. Rep., 2004. [3] P. Mccluskey, “Feedforward and recurrent neural networks and genetic pro- grams for stock market and time series forecasting,” Brown University, Providence, Rhode Island, Tech. Rep., 1993. [4] S. Haykin, Neural Networks and Learning Machines, 3rd ed. Upper Saddle River: Pearson Education Inc., 2009. [5] F. Ozkan, “A comparison of the monetary model and artificial neural net- works in exchange rate forecasting,” Business and Economics Research Journal, vol. 3, no. 1, p. 27, January 2012. [6] M. Udrescu and C. Ilie, “New techniques applied in economics. artificial neural network,” Annals of Faculty of Economics, vol. 4, no. 1, pp. 1080– 1084, May 2009. [7] S. Wong, K. K. Wan, and T. N. Lam, “Artificial neural networks for energy analysis of office buildings with daylighting,” Applied Energy, vol. 87, no. 2, pp. 551–557, February 2010. [8] T. Szecsi, “Cutting force modeling using artificial neural networks,” Journal of Materials Processing Technology, vol. 92-93, pp. 344–349, Augusti 1999. [9] R. Rojas, Neural Networks: A Systematic Introduction, 1st ed. New York: Springer, 1996. [10] J. Heaton, Introduction to neural networks with Java. St. Louis: Heaton Research, 2008. [11] W. S. McCulloch and W. Pitts, “A logical calculus of the ideas immanent in nervous activity,” Bulletin of mathematical biology, vol. 5, no. 4, pp. 115–133, 1943. [12] T. Shinzato and Y. Kabashima, “Perceptron capacity revisited: classifica- tion ability for correlated patterns,” Journal of physics A-Mathematical and theoretical, vol. 41, no. 32, p. 324013, 2008. [13] B. Widrow, “Thinking about thinking: the discovery of the lms algorithm,” Signal Processing Magazine, vol. 22, pp. 100–106, 2005. [14] Wolfram Research Inc, “Newton’s method,” http://mathworld.wolfram.com/NewtonsMethod.html. [15] G. Cybenko, “Approximations by superpositions of a sigmoidal function,” University of Illinois, Urbana, Illinois, Tech. Rep., 1989. [16] J. A. E. Bryson and Y.-C. Ho, Applied Optimal Control: Optimization, Estimation and Control, 2nd ed. Taylor & Francis, 1975. [17] J. Bernhardsson, Tradingguiden, 2nd ed. Stockholm: Fischer & Co, 2002. [18] Finansinspektionen, “Börser och aktiehandel,” http://www.fi.se/Konsument/Fragor-och-svar/Borser-och-aktiehandel/, April 2012. [19] Avanza, “Kundhandbok - s̊a här g̊ar handeln till,” https://www.avanza.se/aza/kunskapscenter/depahandbok.jsp?page=shght er. [20] G. Wrede, “Visar orderdjupet hur aktien ska g̊a?” https://www.avanza.se/aza/press/press article.jsp?article=122343, Maj 2012. [21] K. Wärneryd, Stock-Market Psychology, 1st ed. Cheltenham: Edward Elgar Publishing Ltd., 2001. [22] B. Q. och K. Rasheed, “Hurst exponent and financial market predictabil- ity,” in Proceedings of The 2nd IASTED international conference on fi- nancial engineering and applications. Cambridge, MA, USA: IASTED international, November 2004, pp. 203–209. [23] A. Refenes, Neural networks in the capital markets, 1st ed. New York: Wiley, 1995. [24] E. Gately, Neural networks for financial forecasting, 1st ed. Wiley, 1996. [25] S. Walchak, “An empirical analysis of data requirements for financial fore- casting with neural networks,” Journal of management information sys- tems, vol. 17, no. 4, pp. 203–222, 2001. [26] R. Lawrence, “Using neural networks to forecast stock market prices,” Uni- versity of Manitoba: Department of Computer Science, Manitoba, Tech. Rep., 1997. [27] C. Faith, Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders, 1st ed. McGraw-Hill, 2007. [28] L. Chulhee, “Decision boundary feature extraction for neural network,” IEEE Transactions on Neural Networks, vol. 8, no. 1, pp. 75–83, January 1997. [29] NASDAQ OMX Nordic, “Nasdaq omx nordic,” http://www.nasdaqomxnordic.com/. [30] Currencyrates, “Currencyrates,” http://www.currencyrates.com. [31] Wolfram Research Inc, “Root-mean-square,” http://mathworld.wolfram.com/Root-Mean-Square.html.