Neuronnätsbaserad agent

Relevanta dokument
ARTIFICIELLA NEURALA NÄT. MARCO KUHLMANN Institutionen för datavetenskap

Linköpings universitet

729G43 Artificiell intelligens (2016) Maskininlärning 2. Marco Kuhlmann Institutionen för datavetenskap

729G43 Artificiell intelligens / Maskininlärning 3. Marco Kuhlmann

729G43 Artificiell intelligens (2016) Maskininlärning 3. Marco Kuhlmann Institutionen för datavetenskap

2D Potentialen i en nervcell definieras normalt som skillnaden i spänning mellan dess axon och dendrit.

729G43 Artificiell intelligens / Maskininlärning 2. Marco Kuhlmann

Enlagersnät Flerlagersnät Generalisering. Artificiella Neuronnät

Artificiella Neuronnät

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

ANN fk. Örjan Ekeberg. Framåtkopplade Nät. återkopplade nät. Olika arkitekturer. BackPropagation through Time. Kalman-Filter tekniker

1(15) Bilaga 1. Av Projekt Neuronnätverk, ABB Industrigymnasium, Västerås Vt-05

Fråga 5 (1 poäng) För att definiera ett sökproblem krävs...

Artificiell Intelligens Lektion 7

HKGBB0, Artificiell intelligens

LARS ULVELAND HOPFIELDNÄTVERK FÖR IGENKÄNNING AV DEGRADERADE BILDER OCH HANDSKRIVNA TECKEN

de var svåra att implementera och var väldigt ineffektiva.

Optimering med bivillkor

Sub-symbolisk kognition & Konnektionism. Kognitionsvetenskaplig Introduktionskurs (729G01) Mats Andrén,

REGLERTEKNIK Laboration 5

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

MVE465. Innehållsförteckning

där x < ξ < 0. Eftersom ξ < 0 är högerledet alltid mindre än Lektion 4, Envariabelanalys den 30 september 1999 r(1 + 0) r 1 = r.

G(s) = 5s + 1 s(10s + 1)

x +y +z = 2 2x +y = 3 y +2z = 1 x = 1 + t y = 1 2t z = t 3x 2 + 3y 2 y = 0 y = x2 y 2.

SF1669 Matematisk och numerisk analys II Lösningsförslag till tentamen DEL A. r cos t + (r cos t) 2 + (r sin t) 2) rdrdt.

Numerisk lösning till den tidsberoende Schrödingerekvationen.

Tentamen i Digitalteknik, EITF65

Neurala nätverk och språkigenkänning. Henrik Linnarsson. Linköping University

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

Experimentella metoder, FK3001. Datorövning: Finn ett samband

Checklista för funktionsundersökning

6 Derivata och grafer

Pepins Group AB (publ) HANDELSREGLER FÖR PEPINS MARKET

Funktionsstudier med derivata

TATA42: Föreläsning 7 Differentialekvationer av första ordningen och integralekvationer

= 0. Båda skärningsvinklarna är således π/2 (ortogonala riktningsvektorer).

En vanlig uppgift är att bestämma max resp min för en trigonometrisk funktion och de x- värden för vilka dessa antas.

8.3 Variabeltransformationer Frånkoppling. Betrakta ett 2x2-system, som beskrivs med modellen (8.3.1)

x sin(x 2 )dx I 1 = x arctan xdx I 2 = x (x + 1)(x 2 2x + 1) dx

Envariabelanalys 5B1147 MATLAB-laboration Derivator

Sammanfattning av föreläsning 4. Modellbygge & Simulering, TSRT62. Föreläsning 5. Identifiering av olinjära modeller

Pepins Group AB (publ) HANDELSREGLER FÖR. ALTERNATIVA LISTAN Samt för vissa bolag på Interna Listan

Material till kursen SF1679, Diskret matematik: Lite om kedjebråk. 0. Inledning

4 Fler deriveringsregler

TANA09 Föreläsning 8. Kubiska splines. B-Splines. Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

Pepins Group AB (publ) HANDELSREGLER FÖR PEPINS MARKET

TDDB96 Projekt: Object priming med visuell stimuli

f(x + h) f(x) h f(x) f(x h) h

Finns det över huvud taget anledning att förvänta sig något speciellt? Finns det en generell fördelning som beskriver en mätning?

MVE051/MSG Föreläsning 14

f(x) = x 2 g(x) = x3 100 h(x) = x 4 x x 2 x 3 100

Weibullanalys. Maximum-likelihoodskattning

Vektorer, matriser, nätverk - några elementa

Lösningar och kommentarer till uppgifter i 2.2

f(x) = x 2 g(x) = x3 100

Matematik 3c Kap 2 Förändringshastighet och derivator

5B1134 Matematik och modeller Lösningsförslag till tentamen den 13 januari T = 1 ab sin γ. b sin β = , 956 0, 695 0, 891

MAA7 Derivatan. 2. Funktionens egenskaper. 2.1 Repetition av grundbegerepp

Vi ska titta närmare på några potensfunktioner och skaffa oss en idé om hur deras kurvor ser ut. Vi har tidigare sett grafen till f(x) = 1 x.

Flervariabelanalys E2, Vecka 3 Ht08

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

y y 1 = k(x x 1 ) f(x) = 3 x

Kan du det här? o o. o o o o. Derivera potensfunktioner, exponentialfunktioner och summor av funktioner. Använda dig av derivatan i problemlösning.

Inledning. Kapitel Bakgrund. 1.2 Syfte

FMNF15 HT18: Beräkningsprogrammering Numerisk Analys, Matematikcentrum

LÖSNINGSFÖRSLAG TILL TENTAMEN 2 SF1664

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

5B1146 med Matlab. Laborationsr. Laborationsgrupp: Sebastian Johnson Erik Lundberg, Ann-Sofi Åhn ( endst tal1-3

Prissättning av optioner

TANA17 Matematiska beräkningar med Matlab

1. (Dugga 1.1) (a) Bestäm v (3v 2u) om v = . (1p) and u =

f(x, y) = ln(x 2 + y 2 ) f(x, y, z) = (x 2 + yz, y 2 x ln x) 3. Beräkna en vektor som är tangent med skärningskurvan till de två cylindrarna

Kan vi beskriva ett system utan någon fysikalisk kännedom om systemet?

Oändligtdimensionella vektorrum

Signalanalys med snabb Fouriertransform

Inlärning utan övervakning

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 1: TIDSSERIER.

Kognitiv Modellering

TAIU07 Matematiska beräkningar med Matlab

SF1626 Flervariabelanalys Lösningsförslag till tentamen DEL A

Övervakningssystem. -skillnader i bilder. Uppsala Universitet Signaler och System ht Lärare: Mathias Johansson

LAB 3. INTERPOLATION. 1 Inledning. 2 Interpolation med polynom. 3 Splineinterpolation. 1.1 Innehåll. 3.1 Problembeskrivning

Optimala vinkeln av bortklippt cirkelsektor fo r maximal volym pa glasstrut

A B C D E F A B C D E F (3) Svar: Tabellen ger grafen:

Kundhandledning för EBIS. E-space Business Intelligence System. Version

SF1669 Matematisk och numerisk analys II Lösningsförslag till tentamen DEL A

SELF- ORGANIZING MAPS

SF1625 Envariabelanalys Lösningsförslag till tentamen DEL A. e 50k = k = ln 1 2. k = ln = ln 2

För teknologer inskrivna H06 eller tidigare. Skriv GAMMAL på omslaget till din anomyna tentamen så att jag kan sortera ut de gamla teknologerna.

Isometrier och ortogonala matriser

Fel- och störningsanalys

Modeller och simulering av språkprocessning

Monte Carlo-metoder. Bild från Monte Carlo

Antag att b är förgreningsfaktorn, d sökdjupet, T (d) tidskomplexiteten och M(d) minneskomplexiteten.

Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

x ( f u 2y + f v 2x) xy = 24 och C = f

Interpolation Modellfunktioner som satisfierar givna punkter

Pepins Group AB (publ) HANDELSREGLER FÖR PEPINS MARKET

Transkript:

2001-10-05 Torbjörn Bäckmark

Sammanfattning Jag har undersökt möjligheten att utveckla en agent som använder neurala nätverk för övervakning av börssystem. Jag har tittat på sambandet mellan köp- och säljvolymer och affärsvolymer. Genom att experimentera med en modell har jag funnit en struktur som kan prediktera utsignaler från ett ickelinjärt dynamiskt system. Genom att träna nätverket på data från en handelsdag och sedan simulera fel har jag visat hur en sådan agent skulle kunna användas för att påvisa avvikelser i börssystemet. Torbjörn Bäckmark 2 2001-10-05

Förord Den här rapporten är resultatet av mitt examensarbete i optimeringslära och systemteori vid KTH. Jag har exjobbat på OM Technology och min handledare på företaget har varit Lars Wahlberg. Handledare och examinator vid institutionen har Ulf Jönsson varit. Jag vill tacka mina handledare för deras engagemang, idéer och synpunkter. Stockholm, oktober 2001. Torbjörn Bäckmark Torbjörn Bäckmark 3 2001-10-05

Innehåll 1 INLEDNING...5 1.1 BAKGRUND...5 1.2 COMPUTER ASSOCIATES NEUGENTS...5 1.3 IDÉ...6 1.4 PROBLEMFORMULERING...7 2 NEURALA NÄTVERK...8 2.1 NERVSYSTEMET...8 2.2 ARTIFICIELLA NEURALA NÄTVERK...9 2.3 THRESHOLD LOGIC UNITS...9 2.4 LOGISTISKA NODER...10 2.5 KLASSIFICERING...10 2.6 ÖVERVAKAD TRÄNING...11 2.7 DELTAREGELN...11 2.8 MULTILAGERNÄT...13 2.9 BAKÅTPROPAGERANDE ALGORITMEN...15 2.10 SYSTEMIDENTIFIKATION...16 3 BÖRSSYSTEMET...17 4 SNNS...18 5 MODELL FÖR HANDEL I BÖRSSYSTEMET...19 6 JORDANNÄT...22 6.1 TRÄNING AV NÄTVERKET...24 6.3 VALIDERING...25 6.4 EXPERIMENT MED STRUKTUREN...28 6.5 FÖRSÖK ATT BYGGA ETT PERFEKT NÄT...30 7 HANDELSDATA...32 7.1 KÖRNING PÅ TVÅ ORDERBÖCKER...33 7.2 EN STÖRRE TRÄNINGSMÄNGD AV HANDELSDATA...35 7.3 VALIDERING AV HINGEJORDANSTRUKTUREN...39 8 ATT IMPLEMENTERA EN AGENT...40 8.1 SAMPLING AV DATA...40 8.2 INTEGRERAD AVVIKELSE...42 8.3 EXPERIMENT MED FEL...43 9 ANDRA MÖNSTER...45 10 SLUTSATSER...48 KÄLLFÖRTECKNING...49 Torbjörn Bäckmark 4 2001-10-05

1 Inledning Den här rapporten är resultatet av ett examensarbete som har utförts på OM Technology. Syftet med arbetet har varit att undersöka möjligheten att utveckla en agent som använder neurala nätverk för övervakning av börssystem. 1.1 Bakgrund Under de senaste decennierna har handeln på börserna ökat kraftigt. Nya finansiella instrument och tjänster har utvecklats och det ställs allt högre krav på handelssystemen. OM startade sin första elektroniska handelsplats i Sverige för femton år sedan. Sedan dess har de vuxit kraftigt och är numera ett internationellt verksamt företag som utvecklar och driver elektroniska marknadsplatser för finansiella instrument världen över. OM Technology är det affärsområde inom företaget som utvecklar och underhåller programvaran för dessa elektroniska marknadsplatser. I arbetet med att ta fram nya system med ny funktionalitet, och på grund av de kvalitets- och säkerhetskrav som finns, krävs omfattande testning och övervakning av systemen. Under detta arbete görs bland annat allt mer tidskrävande simuleringar av handeln där man är intresserad av att så snabbt som möjligt upptäcka fel. Det är i det här sammanhanget en neuronnätsbaserad agent 1 skulle vara ett intressant verktyg. 1.2 Computer Associates Neugents Computer Associates International har utvecklat en agent, baserad på neurala nätverk, som de kallar Unicenter TNG Neugents. Deras agent tränas först på några veckors data från det system som den ska övervaka. Sedan, i produktion, hämtar den in data periodvis summerat i en vektor och jämför tillståndet med tidigare inhämtade profiler. Med hjälp av parallell mönstermatchning och algoritmer för att modellera data jämförs sedan profilerna för att identifiera avvikelser och beräkna sannolikheten för att en avvikelse ska leda till ett kritiskt fel (Computer Associates 2001, s. 6). 1 En agent är ett program som används för att övervaka system Torbjörn Bäckmark 5 2001-10-05

Fördelen med den här typen av agent är att den kan lära sig att observera ett kritiskt tillstånd. Ett sådant tillstånd ger sedan upphov till att ett alarm utlöses. Dessutom tar agenten till sig förändringar över tiden. Vanligt för agenter är annars att de har ett bibliotek med händelser och att de alarmerar när gränsvärden överskrids. Ett fel kan ofta utlösa en kaskad av alarm och en del möda får läggas ner på hur man ska undvika att utlösa falska alarm, var gränserna ska sättas osv. Typiskt att övervaka är t ex utrymme på hårddiskar, minne, utnyttjande av processorkraft m.m. 1.3 Idé Förhoppningen är att med hjälp av neurala nätverk kunna identifiera samband mellan in- och utsignaler till ett börssystem. Figur 1. Vi söker ett neuralt nätverk, NN, som kan prediktera utsignalen y Om man finner ett neuralt nätverk som på ett bra sätt kan fånga upp ett sådant samband kan man utifrån det konstruera en agent som kan prediktera systemets utsignaler. Om prediktionen inte längre ligger nära det verkliga systemets utsignal befarar man att det har inträffat ett fel i systemet och agenten utlöser ett alarm. Figuren är en schematisk bild av idén. Vi har börssystemet, SAXESS, och observerar vid varje tidpunkt insignaler u och utsignaler y från systemet. Sedan har vi ett neuralt nätverk, NN, med justerbara parametrar θ. Som insignal till nätverket används en regressor ϕ, som kan bestå av insignalerna från den nuvarande och tidigare tidpunkter och eventuellt även utsignaler från tidigare tidpunkter. Med en bra struktur på nätet och parametrar optimerade utifrån tidigare observationer av sambandet mellan regressor och utsignal önskar vi att prediktionen y^ ska vara så god att stora avvikelser ε vittnar om fel i systemet. Torbjörn Bäckmark 6 2001-10-05

1.4 Problemformulering En förutsättning för att kunna övervaka systemet är att man hittar lämpliga in- och utsignaler. Naturligtvis måste det finnas ett samband mellan in- och utsignalerna för att det överhuvudtaget ska vara möjligt att prediktera utsignaler. För att övervakningen ska vara meningsfull måste signalerna naturligtvis väljas så att den typ av fel som vi önskar upptäcka yttrar sig i detta samband mellan signalerna. Formen på regressorn måste bestämmas. Det vill säga man måste avgöra vilka signaler som ska fungera som insignal till det neurala nätverket. Strukturen på nätverket måste väljas utifrån de signaler och den typ av regressor som man har valt att använda. Vidare måste en lämplig metod användas för att optimera nätverkets parametrar. Torbjörn Bäckmark 7 2001-10-05

2 Neurala nätverk Ett neuralt nätverk är en struktur med justerbara parametrar. Termen kommer ifrån parallellen man kan göra till hur nervsystemet fungerar. 2.1 Nervsystemet Nervsystemet är uppbyggt av nervceller, neuroner, som består av en cellkärna, en axon, och dendriter. Sina egenskaper får neuronen tack vare de elektrokemiska processer som sker på dess yta. Neuronen har en axon, men kan ha många dendriter. Dendriterna är ofta rikt förgrenade. Figur 2. En nervcell Det är axonen som sänder signaler till andra neuroner via dess nervterminal, här frisätts neurotransmittorer ut i synapsen vilket är kopplingen mellan axonen och dendriterna. Dendriterna tar in signalerna till cellkärnan. Varje axon är i förbindelse med många dendriter. För att neuronen ska sända en impuls krävs inkommande signaler som överstiger en viss aktiveringspotential. Och när neuronen har skickat en impuls behöver den en viss tid för att återhämta sig. Impulsen kan ses som en våg som vandrar. I detta nätverk av dendriter kan man tänka sig att det hela tiden förekommer små signaler, ett brus. När sedan något signifikant inträffar kommer det att komma kraftiga signaler med tillräcklig styrka för att aktivera neuronen som i sin tur medverkar till att aktivera andra neuroner så att signalen vandrar vidare. Torbjörn Bäckmark 8 2001-10-05

2.2 Artificiella neurala nätverk Det finns många relativt enkla problem som vi ständigt löser vilka bygger på att vi använder oss av våra tidigare erfarenheter som sedan går att generalisera till nya liknande situationer. Dessutom är vi duktiga på att bortse från små störningar. Ett exempel är att vi kan känna igen någon som vi inte har sett på länge trots att han eller hon faktiskt ser annorlunda ut. Den här typen av problem är mycket svåra för datorer att hantera. Teorin för de artificiella neurala nätverken har kommit till som en del av det område som kallas Artificiell Intelligens, AI. AI behandlar metoder för att lösa just den här typen av problem. Det artificiella neurala nätverket kan framställas som noder sammankopplade med länkar. Teorin i sig är naturligtvis abstrakt. Men vi kan föreställa oss matematiska funktioner som noder. Funktionsvärdet blir nodens utsignal och det viktas sedan eventuellt ihop med andra funktionsvärden för att avbildas med ytterligare funktioner. Dessa vikter, länkarna, är justerbara parametrar. x 1 x i w 1 w i y x n w Figur 3. Nod i artificiellt neuralt nätverk 2.3 Threshold Logic Units Det enklaste sättet att bygga ett neuronnät är genom att använda s k Threshold Logic Units (TLU) som noder. TLU;n är binär och har som utdata, y, antingen 0 eller 1. Indata är en vektor x. Till de n elementen i x-vektorn associeras motsvarande vikter w. Och aktiveringen a ges av a = w*x. Aktivering sker om a överstiger ett tröskelvärde θ. 1 y y = 1 om a θ 0 om a < θ θ a Figur 4. Stegfunktionen Torbjörn Bäckmark 9 2001-10-05

2.4 Logistiska noder Oftast ges utdata av en sigmoidfunktion i stället för steget i TLU:n. Vi har fortfarande för neuronen att aktiveringen ges av: a = w*x Men nu får vi utdata istället som: y = σ(a) = ρ avgör formen på sigmoiden och kan ofta vara 1. Figur 5. Sigmoidfunktionen För sigmoidfunktionen gäller att när a = θ så är y = 0,5. 2.5 Klassificering Det mest typiska användningsområdet för neurala nätverk är att klassificera objekt i linjärt separabla klasser. Om vi tänker oss indatavärden som rumskoordinater befinner vi oss i ett mönsterrum. En tänkbar indatavektor utgör en punkt i rummet. Det kritiska villkoret för huruvida neuronen ska aktiveras utgörs av w*x = θ detta definierar en beslutslinje i det 2-dimensionella fallet, eller ett hyperplan, en så kallad beslutsyta i flera dimensioner. Alla mönster på ena sidan av ytan klassificeras som 1, på andra sidan klassificeras alla mönster som 0. Alla vektorer som helt ligger i denna yta är ortogonala mot w. För att förenkla representationen gör man följande: Vänsterledet i det senare ledet utgör det man kallar den utökade viktvektorn w. Tröskelvärdet kan alltså ses som en extra vikt som drivs av ett indata ständigt bundet till 1. Negativiteten i tröskelvärdet gör att det ibland kallas bias. Det neurala nätverket, bestående av en TLU-nod, definierar alltså en beslutsyta. Denna avgränsning i mönsterrummet bestäms till fullo av viktvektorn w. Och den kan användas för att klassificera två linjärt separabla klasser. Med flera noder kan vi avgränsa flera klasser. Torbjörn Bäckmark 10 2001-10-05

2.6 Övervakad träning För att träna vår enkla nod använder vi oss av en träningsmängd bestående av par (v,t). Där v alltså är indatavektorer och t är det för detta indata önskade svaret. För varje v undersöker vi utdata y. Om noden misslyckas i klassificeringen måste vi justera (vrida på) viktvektorn. Om vi t ex önskade målet t = 1 men fick utdata y = 0, så var alltså w*v negativ (vektorerna pekar ifrån varandra) när den borde ha varit positiv. Detta kan vi avhjälpa genom att lägga till en del av v till w så att vektorerna pekar mer åt samma håll. Ändringen påverkar beslutsytan och förhoppningsvis får vi med även den här punkten i mönsterrummet på den sida av beslutsytan vi önskar. Vi vill inte ändra för mycket för risken att förstöra tidigare träning. Det här ger upphov till följande träningsregel: w' = w + α (t y) v w' är den justerade viktvektorn t=1 w t=1 w v v w αv w*v<0 y=0 w *v>0 y=1 Figur 6. Korrektion av viktvektorn När utdata är korrekt fås (t-y) = 0, och vi gör ingen förändring av vikterna. Det här kallas perseptronträningsregeln. Och det finns ett teorem som säger att om två klasser av vektorer X och Y är linjärt separabla, så kommer en algoritm som använder denna träningsregel att definiera en TLU vars beslutsyta separerar X och Y (Gurney 1995 s. 43 ). 2.7 Deltaregeln Betrakta fortfarande ett nätverk bestående av endast en nod, t ex en logistisk nod med sigmoidfunktionen som aktiveringsfunktion. Nätverkets uppförande karaktäriseras av viktvektorn w, så att någon funktion E, som beskriver avvikelsen från det önskade gentemot det faktiska utfallet kan tänkas som en funktion av vikterna: E = E(w 1, w 2,., w n+1 ) Torbjörn Bäckmark 11 2001-10-05

Vi vill justera vikterna för att minska felet, α är en parameter som vi väljer: Definiera E som medelkvadratfelet över alla träningsmönster e p = (t p y p ) 2 e p är felet för ett visst träningsmönster p, t p är målvärde och y p är utdata, kvadreringen för att ge symmetriska fel. Det här ger medelkvadratfelet: För den logistiska noden gäller att y = σ(a) där aktiveringen a = w*x och därför får vi när vi deriverar Och träningsregeln som vi använder för att justera viktvektorn: Felet beror egentligen av alla mönster. Det gör även derivatorna. Men vi använder ett mönster p, där x p i är den i:te komponenten av det mönstret, beräknar den partiella derivatan och använder den som ett estimat av den verkliga gradienten. Detta sätt att uppdatera vikterna skiljer sig från den mycket mer beräkningsintensiva batchträningen där den sanna gradienten beräknas m a p hela träningsmängden. Torbjörn Bäckmark 12 2001-10-05

2.8 Multilagernät Betrakta ett nät med noder i flera lager. Typiskt består det av ett indatalager, ett eller flera lager med gömda noder och sedan ett utdatalager. I utdatalagret får vi nätets svar, y, på en indatavektor som presenteras vid indatalagret. Precis som för den enkla noden använder vi för den övervakade träningen träningsmönster, v med sina respektive målvärdesvektorer, t, för att träna nätet. Idén är fortfarande den samma, vi vill använda en gradientdescentmetod på felet E som en funktion av vikterna. Men nu måste vi ta hänsyn till vikterna från flera lager. Vid utdatalagret får vi uppdateringen av vikterna på samma sätt som för den enkla noden. x. x ji. w ji j y j p t j p x Figur 7. Uppdatering av utdatanoder Indexet j indikerar en viss utdatanod, ji indikerar den i:te länken till noden j, och p är ett visst mönster. Problemet är nu att bestämma gradienterna för de gömda noderna. Vi måste fundera på hur mycket skuld det gömda lagret har till felet i utdata. Vi försöker generalisera ovanstående resultat så att vi kan använda det även för det gömda lagret. Två av termerna, indata och sigmoidfunktionens derivata måste vara samma. De beror bara av nätets struktur. Den kvarvarande termen, (t p j - y p j), är däremot specifik för utdatalagret och behöver modifieras för att kunna gälla det gömda lagret. Den här termen kallar vi δ j, för noden j. Hur den ser ut för de gömda noderna vet vi inte ännu. x. x ki. w ki k y~ Träningsregeln för de gömda noderna blir: x Figur 8. Uppdatering vid det gömda lagret Och det återstår för oss att bestämma δ k. y~ är utsignal från den gömda noden och fungerar som insignal för följande lager i nätet. Torbjörn Bäckmark 13 2001-10-05

Vi tittar på länken mellan den gömda noden k och utdatanoden j. Effekten på det totala felet som denna gömda nod har ges av hur mycket den kan påverka utdatanoden j, och via den, hur mycket utdata av nod j påverkas av felet. k w jk j Figur 9. Den gömda noden k påverkar utdatanoden j via vikten w jk Inflytandet som k har på j ges av vikten w jk och δ j beskriver hur j bidrar till felet. δ j w jk fångar upp samspelet mellan dessa faktorer. Eftersom noden k bidrar till flera utdatanoder måste vi summera dessa produkter över alla j, och får följande samband för δ k : w jk j k I k Figur 10. Den gömda noden k påverkar utdatanoderna I k där I k är mängden med noder som tar indata från nod k. Man får en allmän träningsregel för noder: där δ k : för utdatanoder ges av: och för gömda noder: Lägg märke till att sigmoidfunktionens lutning nu är inbakad i δ-termen. Det är det vanligaste sättet att beskriva det här kompakt. I den tidigare framställningen var sigmoidfunktionens lutning en term för sig. Torbjörn Bäckmark 14 2001-10-05

2.9 Bakåtpropagerande algoritmen Det här är standardalgoritmen för att träna neurala nätverk. Den finns implementerad i t ex SNNS. initiera vikterna repetera för varje träningsmönster: 1. Presentera mönstret vid indatalagret 2. Låt de gömda noderna evaluera sina utdata från mönstret 3. Låt utdata noderna evaluera sina utdata från resultatet i 2 4. Applicera måldatamönstret vid utdatalagret 5. Beräkna δ k för utdatanoderna 6. Uppdatera vikterna för varje utdatanod med gradient descent (Δw) 7. Beräkna δ k för de gömda noderna 8. Uppdatera vikterna för varje gömd nod med gradient descent slut på loopen tills felet är tillräckligt litet Ett steg i den yttre loopen är vad man brukar kalla för en epok. Under en epok tränas nätet en gång på varje träningsmönster. Villkoret, att vi fortsätter tills felet är tillräckligt litet ersätts i praktiken i SNNS av att vi väljer hur många epoker vi vill träna nätet. Sedan kan vi visuellt avgöra om vi är nöjda eller om vi vill fortsätta träningen ett antal epoker till. Algoritmen ger en lokal minimering av felet som funktion av vikterna. Vi kan inte veta att den lösning som vi finner är ett globalt minimum, men det finns olika sätt att undvika att hamna i alltför dåliga lokala minimipunkter. Den metod som jag använder är att aktivera en funktion, jog, i programmet som skakar på vikterna. Inför varje epok slumpas små tal som läggs till vikterna. Detta gör att vi ramlar ur de lösningar som är alltför dåliga. Använder man inte den här funktionen får man mycket sämre resultat vid träning. Torbjörn Bäckmark 15 2001-10-05

2.10 Systemidentifikation Ett annat område där neurala nätverk kan användas är för systemidentifikation. Vi har ett dynamiskt system, i diskret tid, med insignal u och utsignal y som vi kan observera. u y Figur 11. Ett dynamiskt system Vi letar efter ett samband mellan tidigare gjorda observationer och framtida utsignaler så att vi kan prediktera en utsignal y^. För detta använder vi en regressor, ϕ(t), som består av gjorda observationer och föreslår en modell, g(ϕ(t),θ), med justerbara parametrar, θ. Prediktionen ges av där θ är alla parametrarna [α k,β k ] för k = 1 till n. Detta är en basfunktionsutveckling i baserna g k. Och om vi väljer g k så att σ(x) är sigmoidfunktionen så har vi ett neuralt nätverk med ett gömt lager. Vi söker de parametrar som minimerar felen enligt vårt kriterium, V, Z = {(y(t), ϕ(t)) : t = 1,, N} där Z är den datamängd som vi tränar nätverket på, bestående av N gjorda observationer av sambandet mellan regressorn ϕ(t) och utsignalen y. Vi estimerar parametrarna genom att använda bakåtpropagerande algoritmen. Torbjörn Bäckmark 16 2001-10-05

3 Börssystemet SAXESS är OM Technology's handelssystem för aktier, obligationer, derivat och andra finansiella instrument. Systemet består av en börsmotor, en systemdatabas och förbindelsepunkter för externa applikationer som matar systemet med order. Alla order och andra meddelanden som uppdaterar systemets data eller tillstånd följer en speciell slinga i systemet. Varje meddelande får ett sekvensnummer så att de får en väldefinierad inbördes ordning. Detta för att förhindra problem med varierande propageringstider i systemet. Alla meddelanden passerar börsmotorn som innehåller all logik, handelsreglerna. Ut från börsmotorn kommer meddelanden som loggas till en fil. Dessa filer bevaras även i en databas. Torbjörn Bäckmark 17 2001-10-05

4 SNNS Jag använder en programvara, Stuttgart Neural Network Simulator, version 4.2. Programmet är en simulator för neurala nätverk som distribueras som "Free Software". Den har tagits fram vid Universitetet i Stuttgart och går att ladda ner från Internet. Programmet visar nätverken grafiskt. Det finns verktyg för att bygga nätverk och det går att i efterhand lägga till och ta bort noder och länkar. För att göra simuleringar behöver man datamängder att träna på och dessa tar man fram som textfiler av en speciell struktur. När man tränar nätverken kan man i en graf se hur felen utvecklar sig i realtid. I en annan figur får man en grafisk representation av vikterna. När sedan träningen är klar ser man vikterna och nodernas aktivering i den grafiska framställningen av nätverket. Man kan logga det man gör i en logfil, som man sedan kan gå tillbaka till för att se t ex hur träningen har fortlöpt. Resultatet av träningen och validering får man i form av en resultatfil. Även detta är en textfil som innehåller datamängdens insignaler, målvärden, samt nätets approximationer. För att ta fram filerna för datamängderna och för att visualisera resultaten krävs någon form av hantering av data och filer. Detta har jag gjort i Matlab. Torbjörn Bäckmark 18 2001-10-05

5 Modell för handel i börssystemet För att experimentera med neurala nätverk har jag gjort en modell för handel i börssystemet. Den är ett ickelinjärt dynamiskt system. Tanken är att jag ska känna till de bakomliggande sambanden i den datamängd som jag sedan tar fram. Då går det att på ett effektivare sätt undersöka effekten av olika förändringar, och sökandet efter en bra struktur blir enklare. Som med alla modeller är det meningen att den ska vara en förenkling av verkligheten. Men att den fångar något av det verkliga problemets karaktär. Som insignaler väljer jag volymen lagda köprespektive säljorder. Utsignalen är volymen affärer. x 1k z -1 x 1k+1 x 1k + u 1k + u 1k - u 2k min(x 1k +u 1k, x 2k +u 2k ) y k x 2k +u 2k + - x 2k z -1 x 2k+1 Figur 12. En modell för handel i börssystemet x 1k = volymen lagda köporder x 2k = volymen lagda säljorder y k = antalet affärer u 1k = köporder som läggs vid tidpunkten u 2k = säljorder som läggs vid tidpunkten För volymen av lagda köp respektive säljorder gäller då att x 1k+1 = x 1k + u 1k y k x 2k+1 = x 2k + u 2k y k Torbjörn Bäckmark 19 2001-10-05

Låt: x k = [x 1k, x 2k ] T u k = [u 1k, u 2k ] T φ k (x k, u k ) = [-min(x 1k +u 1k, x 2k +u 2k ), -min(x 1k +u 1k, x 2k +u 2k ) ] T Då har vi att: x k+1 = x k + φ t (x k, u k ) + u k = f(x k, u k ) y k = min(x 1k +u 1k, x 2k +u 2k ) = g(x k, u k ) I verkligheten är det så att handeln sker i olika orderböcker, en för varje värdepapper. Det finns handelsregler som definierar hur handeln ska fungera. Dessa regler kan vara olika för olika marknader, dessutom förändras de under dagen. När börsen öppnar och stänger sker detta enligt ett speciellt förfarande där orderboken befinner sig i olika tillstånd, med specifika regler för respektive tillstånd. Under den största delen av dagen sker dock handeln kontinuerligt. Köp och säljorder läggs i orderböckerna och matchas kontinuerligt. För enkelhetens skull betraktar jag ena sidan av min modell. Vid tidpunkten k kommer det in ett antal köporder u 1k. De läggs ihop med de order som redan fanns i orderboken x 1k. I orderboken har vi alltså x 1k +u 1k. Rutan i mitten motsvarar handelsreglerna. I min modell är regeln sådan att order från köp och säljsidan kommer att matchas, och bli affärer y k, tills det inte finns något kvar på en av sidorna. Det som finns kvar i orderboken till nästa tidpunkt är då x 1k +u 1k -y k. Jag har tagit fram datamängder i Matlab där jag slumpar insignaler mellan noll och ett. Sedan beräknas utsignalerna enligt modellen. Ett problem med att slumpa insignaler till modellen på detta sätt är att data får en speciell karaktär. Ifall den större insignalen kommer på den sida där det finns ett orderdjup sedan tidigare så kommer orderdjupet att öka med skillnaden mellan storleken på insignalerna. I det andra fallet, om den större signalen kommer på sidan utan orderdjup kommer den att gå igenom förutsatt att djupet på den andra sidan är stort nog att matcha den. I så fall minskar orderdjupet på den andra sidan med skillnaden mellan storleken på insignalerna. Detta leder till att orderdjupet ökar eller minskar på den ena eller den andra sidan. I fallet med slumpade data blir det hela en ren slumpvandring. I längden kommer detta leda till att vi får ett allt större orderdjup på någon av sidorna. Det förhåller sig på samma sätt som för två spelare som singlar slant. Har spelarna begränsad förmögenhet leder spelet i längden till att den ene spelaren blir ruinerad. I en sådan slumpad datamängd kommer alltså utsignalen att vara som en av insignalerna i långa sekvenser. T ex i en fil som jag genererade på tiotusen data fanns det sådana sekvenser som var mer än tusen data långa. Detta gör att nätet lätt finner en bra lösning i att ställa in sig nära en av insignalerna, den bästa. Torbjörn Bäckmark 20 2001-10-05

Order läggs förmodligen i det vidare perspektivet slumpmässigt och normalfördelat. Men det finns nog även handelsmässiga mekanismer som strävar efter jämvikt och som gör att det inte hela tiden är order av den ena eller den andra typen som läggs och omedelbart går igenom. I verkligheten är det ju dessutom så att det finns orderdjup på båda sidorna i orderböckerna. Handel sker till ett visst pris, senast betalt, som uppkommer momentant när köp- och säljkurserna överensstämmer. Köpkursen är det pris som är det högsta för tillfället bland order på köpsidan i orderboken. Säljkursen, som alltså är högre, är det pris som är det lägsta för tillfället bland order på säljsidan i orderboken. Normalt är det en liten skillnad mellan dessa kurser, men mellanrummet, den så kallade splitten, kan variera. Man kan notera att det alltså går att lägga order, även stora volymer, som aldrig går igenom. T ex en stor köporder till ett mycket lågt pris. Jag har infört en mekanism för att få en mera intressant datamängd och undvika att utsignalen följer en av insignalerna i för långa sekvenser. När orderdjupet blir 5 på någon sida kommer en [1 0]-insignal som minskar orderdjupet. Detta förhindrar slumpvandring för långt ute på endera sidan i orderboken. På så sätt genererar jag en testdatamängd i Matlab, 10000 data. Torbjörn Bäckmark 21 2001-10-05

6 Jordannät Michael Jordan har tagit fram en återkopplad struktur som kan tränas på sekvenser. Jordan använder sitt nät för att modellera koartikulation i tal. När vi talar associeras i tiden närliggande fonem och det är till och med så att vi i förväg förbereder oss för att forma fonem, så kallad framåtkoartikulation. Även bakåtkoartikulation förekommer, det vill säga att det krävs en viss tid för systemet att återgå efter det att vi har format ett fonem. Det här innebär begränsningar i hur vi kan framställa vårt tal. Talet kommer att vara parallellt i den meningen att det antal av de tillgängliga frihetsgrader som för tillfället inte används för att forma ett visst fonem används till att förbereda eller följa upp andra fonem. Och detta krävs för att vi ska få den dynamik som behövs för att tala obehindrat. För att kunna modellera detta behövs en struktur som är kapabel till parallella prestationer. Jordan beskriver sin struktur i termer av plan, tillstånd och aktioner. Vid varje ögonblick väljs en aktion utifrån det plan och det tillstånd vi befinner oss i. Sedan uppdateras tillståndet så att nästa aktion kan väljas (Jordan 1986 s. 535). Jag använder ett Jordannät bestående av två indatanoder, sju gömda noder, en utdatanod och två tillståndsnoder. Tillståndsnoderna låter jag uppdateras med respektive indata minus utdata till nästa steg, då dess aktivering tillsammans med det nya indata presenteras för det gömda lagret. Figur 13. Jordannätet Torbjörn Bäckmark 22 2001-10-05

För den här beskrivningen betraktar jag först vikterna som en del av strukturen, dvs fixerade för ett ögonblick. Nätet kan då beskrivas på följande vis: y k = g(x k, u k ) x k+1 = f(x k, u k ) där y k är utdata, x k tillståndet och u k insignalen x k+1 är tillståndet för nästa tidpunkt Det här är ett ickelinjärt dynamiskt system i diskret tid. Med identitetsfunktionen som aktiveringsfunktion för utdatanoden och med logistiska noder i det gömda lagret, dvs med sigmoidfunktionen som aktiveringsfunktion, har vi att (låt x' vara den sammansatta vektorn av x och u): Nu tittar vi även på vikterna, θ är alla parametrar [α k,β k ], där k är 1 till n. β i 0 är biasen som förknippas med noden i. sigmoidfunktionen Mitt nät har sju gömda noder. x' har fyra element och varje viktas, dessutom förknippas varje gömd nod med en bias β 0. För varje gömd nod gäller alltså att: Det är fem stycken parametrar, β, för varje gömd nod. Sedan har vi sju stycken parametrar, α, en för varje länk från det gömda lagret. Det är alltså totalt 42 parametrar som vi har att ställa in. Tillståndsnoderna uppdateras enligt där e 2 är vektorn [1 1] T Torbjörn Bäckmark 23 2001-10-05

6.1 Träning av nätverket Här nedan är en bild från en körning med motsvarande nät i SNNS, på de datamängder som jag tog fram enligt modellen. Figur 14. Träning av jordannätet i SNNS Jag tränar nätet 2000 epoker. Medelkvadratfelet blir så litet som 0,19 promille för träningsmängden och 0,22 promille för valideringsmängden. Nedan har jag plottat resultatet. Figur 15. Träningsmängdens resultat Figuren visar träningsmängdens målvärden (+) och prediktion (o) förbundna med respektive kurva, den ljusare för målvärden, den mörkare för prediktioner. Punkterna motsvarar insignalerna, dvs inkommande volymer köp respektive säljorder vid tidpunkten. Kurvorna överlappar varandra i hög grad. Det är ett bra resultat. Torbjörn Bäckmark 24 2001-10-05

6.3 Validering När man använder neurala nätverk i praktiken så är det vanligen så att man har en datamängd som härrör från någon slags observationer. För att det ska vara en meningsfull datamängd att undersöka så måste man tro att det finns något slags samband mellan insignaler och utsignaler. Normalt delar man upp data i två mängder. En träningsmängd och en valideringsmängd. Vanligt är att använda 70 % av data för att träna och att man sedan kontrollerar sitt resultat på de återstående 30 %, valideringsmängden. En viktig frågeställning vid träningen av neurala nätverk är huruvida nätverket generaliserar. Vid träningen presenteras träningsmängden för nätverket. Därefter optimeras parametrarna så att utsignalen så bra som möjligt stämmer överens med målvärdena. Det som vi verkligen vill uppnå är att så bra som möjligt fånga det bakomliggande sambandet för träningsdatamängden i vårt nätverk. Detta görs inte alltid av det nätverk som bäst stämmer överens med data i sin träningsmängd. Idén är att det neurala nätverket ska göra bra prediktioner även på data som det inte tränat på, valideringsmängden. Om inte detta uppnås är nätverket meningslöst. Vid valideringen använder vi alltså nätverket, som det är från träningen på träningsmängden, och kontrollerar hur väl det predikterar målfunktionsvärden från valideringsmängden. Om detta lyckas väl tyder det på att nätet har fångat upp det bakomliggande sambandet. Under träningen är det vanligt att man gör valideringar med jämna mellanrum för att se hur det utvecklar sig. I ett av fönstren i simuleringarna med SNNS ser man hur felen utvecklar sig för träningsmängden och valideringsmängden under träningen. Det kan visa sig efter ett tag att felen för valideringsmängden börjar öka trots att felen för träningsmängden fortsätter att minska. Det tyder i så fall på ett fenomen som kallas överträning. Nätverket har då för mycket anpassat sig för punkterna i träningsmängden, på ett sätt som inte är representativt för det bakomliggande sambandet. Jag har gjort en valideringsmängd, på samma sätt som jag gjorde träningsdatamängden. Med hjälp av den kan jag alltså kontrollera att nätverket verkligen har generaliserat. Torbjörn Bäckmark 25 2001-10-05

Figur 16. Valideringsmängdens resultat Resultatet av valideringen. Man ser att även det här resultatet är mycket bra. Möjligen något sämre t ex i början. Vi ser i figuren att målvärdet i sekvenser följer en av insignalerna. Vad är det som händer i början av valideringsmängden? För att få insikt i hur pass komplicerade sambanden ändå är tittar vi närmare på de första tidpunkterna. Vad är det som händer? tidpunkten 1 Från början är tillståndet [0 0], då orderdjupen är 0. Insignalen [0.569, 0.297], mörk resp. ljus punkt vid första tidpunkten i övre figuren. Minimum är 0.297, vilket alltså borde gå igenom och bli affärer, detta är målvärdet (+). Nätets approximation är 0.288 (o). Detta gör att tillståndet inför nästa tidpunkt blir [0.569-0.288, 0.297-0.288] = [0.281, 0.009]. Orderdjupet enligt modellen är [0.569-0.297, 0] = [0.272, 0] tidpunkten 2 Insignalen [0.228, 0.457] och tillstånden [0.281, 0.009] går igenom nätverket. Utsignalen, nätets approximation blir 0.403 (o). Tillståndet inför nästa tidpunkt blir [0.281+0.228-0.403, 0.009+0.457-0.403] = [0.106, 0.062] Enligt modellen har vi det totala orderdjupet, tillståndet från föregående tidsteg plus insignalen, [0.272+0.228, 0.457] = [0.500, 0.457] Minimum av detta är 0.457 vilket alltså är målvärdet (+) för den andra tidpunkten. Och orderdjupet till nästa tillstånd blir [0.500-0.457, 0.457-0.457] = [0.043, 0] Torbjörn Bäckmark 26 2001-10-05

Här är approximationen något fel. Detta är ett exempel där tillståndet uppenbart har stor betydelse. Utsignalen ska vara lika med den större insignalen, eftersom orderdjupet byggts upp på andra sidan sedan tillståndet innan. tidpunkten 3 Insignalen [0.287, 0.886] och tillstånden [0.106, 0.062] går igenom nätverket. Utsignalen, nätets approximation blir 0.432 (o). Tillståndet inför nästa tidpunkt blir [0.106+0.287-0.432, 0.062+0.886-0.432] = [-0.039, 0.516] Enligt modellen är det totala orderdjupet [0.043+0.287, 0.886] = [0.330, 0.886] Minimum av detta är 0.330 vilket är målvärdet (+) för den tredje tidpunkten. Och orderdjupet till nästa tidpunkt blir [0.330-0.330, 0.886-0.330] = [0, 0.556] Vid den tredje tidpunkten har vi ett målvärde som inte är lika med någon av insignalerna. De här tre tidpunkterna visar på svårigheter med att identifiera modellen utifrån datamängden. Här i början har vi orderdjup nära noll och på olika sidor i orderböckerna. Vi har gjort en övergång från orderdjup på vänster till orderdjup på höger sida, med för de tre första tidpunkterna [0.272, 0], [0.043, 0], [0, 0.556]. Oftast kommer orderdjupet att vara större på en av sidorna och utsignalen kommer då att följa den andra sidans insignal. För att förhindra att få alltför långa sådana sekvenser har jag alltså konstruerat datamängderna så att det läggs [1 0]-order när orderdjupet överstiger fem på någon sida. Detta kan man förövrigt se exempel på i figurerna för valideringsmängden vid tidpunkterna 9981 och 9984. Där alltså målvärdet är 1 som den största insignalen, och ej 0, vilket tyder på orderdjup. Torbjörn Bäckmark 27 2001-10-05

6.4 Experiment med strukturen För att verifiera betydelsen av strukturen så experimenterar jag med att skära ner på nätet och verifiera resultatet. Jag har gjort tre olika körningar, först med den fullständiga strukturen, sedan utan återkopplingen till tillståndsnoden och helt utan tillståndsnoder. Det är den senaste strukturen nätet i figuren har. Figur 17. Experiment med strukturen Resultatet är som man väntar sig. Vi ser hur felen utvecklar sig i det lilla fönstret uppe till höger. För de tre olika träningsomgångarna visas felen för träningsmängden (den mörkare kurvan) och motsvarande fel för valideringsmängden (den ljusare kurvan). För den fullständiga strukturen är felen nära noll. Utan återkoppling till tillstånden har vi ett stegs minne, felen är ungefär 0.01 respektive 0.02 för valideringsmängden. Och helt utan tillståndsnoder är felen nära 0.04 för både tränings och valideringsmängden. Torbjörn Bäckmark 28 2001-10-05

Figur 18. Resultat med olika strukturer I figuren ovan ser vi resultatet, av valideringen, från körningarna med olika strukturer. I den översta för nätet helt utan tillståndsnoder. I figuren i mitten utan återkoppling till tillståndsnoden. Och i den understa med den fullständiga strukturen. Det här är de första hundra data i datamängden. Det är alltså en liten del av de 10000 data jag har i valideringsmängden. Felen är störst i den översta. Rent visuellt tycks den dock vara i klass med den mellersta. Jag tycker mig kunna notera att spridningen är något mindre, approximationen av utsignalerna verkar hålla sig närmre 0.5 i den övre figuren än i den i mitten, som tar ut svängarna lite mer. Och det mellersta resultatet är alltså bättre än det övre, sett till hela valideringsmängden. Den fullständiga strukturen är betydligt bättre än de andra två. Torbjörn Bäckmark 29 2001-10-05

6.5 Försök att bygga ett perfekt nät För att konstruera det perfekta nätet behövs en hingefunktion. ϕ(x) x Figur 19. Hingefunktionen För hingefunktionen, ϕ(x), gäller att ϕ(x) = x för x större än 0 ϕ(x) = 0 för x mindre än 0 Minimumfunktionen kan nämligen skrivas om med en hingefunktion. min(x,y) = x - ϕ(x-y) Och på så sätt går det att bygga en perfekt struktur. Figur 20. Hingejordanstrukturen Torbjörn Bäckmark 30 2001-10-05

Hingefunktionen finns inte som standardalternativ i SNNS. Det går däremot att få fram en motsvarighet genom att kombinera en identisk aktiveringsfunktion med en clip0_1 utdatafunktion. Sedan får man skala ner indata till noden och skala upp utdata så att man inte slår i begränsningen 1 vid utdatafunktionen. identitet I(x) 1 clip0_1 x x Figur 21. Identidets- och clip0_1-funktionen Jag gör en validering för att kontrollera strukturen. Figur 22. Validering av hingejordanstrukturen Figuren ovan visar resultatet av valideringen av den perfekta strukturen. Mycket riktigt får vi ett perfekt resultat. Torbjörn Bäckmark 31 2001-10-05

7 Handelsdata Jag har en fil med riktiga handelsdata från en dag. Den består av en tabell med volymer av köp- (bid) och säljorder (ask) respektive antalet affärer som går igenom (trades). Det anges en tid för varje händelse, samt ett nummer som anger vilken orderbok det berör. Tiden räknas i nanosekunder från och med början av den såkallade Epoken, 1:a jan 1970, men i den här filen är den omskalad så att tiden för den första händelsen är noll. tid nr bid ask trades 0 4397 0 600 0 1447000 3142 0 100 0 3583000 5095 0 100 0 25569000 910 0 1000 0 43433000 930 1000 0 0 58753000 281 0 15 0 215092000 960 0 2000 0 222265000 4805 1000 0 0 243123000 3080 0 400 0 Figur 23. Handelsdata Under den här dagen händer det saker i ungefär 3000 orderböcker, med nummer mellan 42 och 12664. Det är stor skillnad i hur pass tung handeln är i de olika orderböckerna. I vissa sker det väldigt mycket, medan andra endast har ett fåtal händelser under en hel dag. Totalt består filen av 185146 rader. Till att börja med har jag bearbetat filen så att det som händer vid samma tidpunkt summeras ihop. Sedan har jag valt ut ett par orderböcker. Sorterat ut de händelser som berör just dessa. Så här ser t ex data ut för orderbok nr 45. För den orderboken har vi 586 rader med data. tid nr bid ask trades 9.2411*1.0e+012 45 2000 0 0 9.2666*1.0e+012 45 400 0 100 9.3004*1.0e+012 45 2200 0 0 9.3004*1.0e+012 45 0 2200 0 9.3495*1.0e+012 45 0 500 0 9.4070*1.0e+012 45 4000 0 0 9.4117*1.0e+012 45 300 0 300 Figur 24. Handelsdata från orderbok nr 45 Torbjörn Bäckmark 32 2001-10-05

Sedan summerar jag ihop data i tiominutersintervall. Det ger 73 intervall över dagen. För orderbok 45 ser data ut på följande vis. I tabellen nedan ser vi raderna 10 till 16. Tiden är den sista tidpunkten i intervallet. I översta raden har vi 6*1.0e+012, vilket är 6000 sekunder efter den första tidpunkten i filen. Det vill säga efter 100 minuter. På nästa rad följer det som händer, under nästa tiominutersintervall, fram till 110 minuter in från tiden 0. tid nr bid ask trades 6.0000*1.0e+012 45 32500 10400 3500 6.6000*1.0e+012 45 41500 8400 1800 7.2000*1.0e+012 45 2100 800 1300 7.8000*1.0e+012 45 3200 5700 1000 8.4000*1.0e+012 45 20600 6600 1600 9.0000*1.0e+012 45 0 12200 22200 9.6000*1.0e+012 45 18700 8900 2838 Figur 25. Handelsdata från orderbok nr 45 i tiominutersintervall 7.1 Körning på två orderböcker Som insignaler till det neurala nätverket använder jag köp- respektive säljordervolymerna. Målvärdet är volym affärer. Jag använder ett jordannät, med tillståndsnoder. Figur 26. Körningar på två orderböcker Här är en körning på två orderböcker, nr 101 och nr 200. Jag tränar nätverket på den ena orderboken och använder den andra för att validera resultatet. Det visar sig i felkurvan för valideringsmängden, när jag tränar på endast en orderbok, att det är svårt att träna nätet med fullständigt minne. Felet för valideringsmängden tenderar att skena iväg. Valideringen verkar t o m bli bäst i det fall jag låter återkopplingen från tillståndsnoderna till sig själva vara noll. Då har vi alltså bara minne från föregående tidssteg. Resultatet varierar ändå rätt så kraftigt mellan olika körningar. Torbjörn Bäckmark 33 2001-10-05

När det fungerar väl så får vi följande resultat. Figur 27. En körning på orderbok nr 101 och nr 200 Figur 28. Resultatet av körningen på två orderböcker Man ser att nätets approximation av antalet affärer fungerar ganska bra även för den andra orderboken, den som jag inte tränade med. Punkterna representerar insignalerna för den andra orderboken. Observera att orderböckerna är individuellt skalade. Orderbok 200 vars utsignaler ligger överst i figuren är i själva verket tio gånger mindre till beloppet än motsvarande signaler för orderbok 101. Torbjörn Bäckmark 34 2001-10-05

7.2 En större träningsmängd av handelsdata Figur 29. Fördelningen av orderboksnr Figur 30. Volymen affärer över dagen För att få en större datamängd att träna på väljer jag ut lämpliga orderböcker. Jag har tittat på antalet händelser, valt ut orderböcker där det finns åtminstone ungefär 500 händelser över en dag. Jag har sedan plottat affärsvolymerna över dagen som i figuren ovan för orderbok 81. Det är vanligt att volymen är spridd i ett intervall, och att det sedan är någon eller några tidpunkter med mycket högre volymer, ofta på eftermiddagen. Jag har även tittat på att volymen inte är noll för allt för många tidpunkter för respektive orderbok. Sedan har jag skalat om varje orderbok med 10000, 100000 eller 1000000 för att få data med de flesta punkterna mellan 0 och 1. Maxvärdena har dock varit upp till 6, ungefär. För orderbok 81 valde jag 100000 och de flesta punkterna kommer alltså här att ligga vid 0-0.2 med några punkter upp mot 1 på eftermiddagen. Jag har bearbetat ett antal orderböcker på detta sätt och har valt ut 20 st. för att träna nätverket på. 14 stycken, 70 % använder jag till en träningsmängd och resterande 30 % dvs 6 stycken till en valideringsmängd. I orderböckerna är det nu 73 stycken tiominutersintervall per dag. Figur 31. Körning på handelsdata Torbjörn Bäckmark 35 2001-10-05

Ett problem med att hantera data på det här sättet är att data från olika orderböcker följer på varandra. För det första innebär det problem med tillståndet i övergångarna. En annan sak är att orderböckerna är omskalade individuellt. Jag plottar utsignalerna från valideringen: Figur 32. Valideringsmängdens resultat Vid valideringen visar det sig att tillståndsnoderna får allt större värden. Efter knappt hundra data blir det gömda lagrets aktiveringsfunktioner mättade och nätet ger 0 som ständig utsignalsapproximation. Problemet med växande värden på tillståndsnoderna kan reduceras genom att låta återkopplingen läcka lite. Vi hade för jordannät att: Låt uppdateringen istället vara På så sätt undviker vi att återkoppla ett och får ett läckande minne. Nätverkets beteende borde bli stabilare. Torbjörn Bäckmark 36 2001-10-05

Jag gör en ny körning med återkopplingen 0.9. Detta motsvaras av att ställa återkopplingarna från tillståndsnoderna till sig själva samt från indata och utdatanoderna till tillståndsnoderna till 0.9. Figur 33. Körning på handelsdata med återkopplingen 0,9 Plotten av utsignalerna för valideringsmängden: Figur 34. Valideringsmängdens resultat I den grova plotten överst ser vi att approximationen fungerar grovt sett. Men att det finns avvikelser. I andra figuren tittar vi närmare på data som motsvarar den fjärde orderboken. Och i den tredje figuren ser vi data från den sjätte orderboken. Vi ser att vi har en relativt bra följsamhet, men att det finns stora avvikelser. T ex vid 378 data. Torbjörn Bäckmark 37 2001-10-05

Är det kanske så att fel uppstår i tillståndsnoderna vid övergångarna mellan olika orderböcker i valideringsmängden? Jag undersöker detta. Figur 35. Tillståndsnodernas värde Figuren visar tillståndsnodernas utveckling över tiden för den validering jag har gjort. I figuren finns två orderböcker med. Den första tar slut efter 73 data, den andra efter 146. Positivt i det här fallet är att tillståndsnodernas värde är nära noll vid båda dessa tidpunkter. Det här visar på att det trots allt kan fungera att träna på orderböckerna på detta sätt. Torbjörn Bäckmark 38 2001-10-05

7.3 Validering av hingejordanstrukturen Jag provar att validera den hingejordanstruktur, som är ekvivalent med modellen som jag konstruerat, med riktiga handelsdata. Figur 36. Validering av hingejordanstrukturen med riktiga handelsdata Det ser relativt bra ut ändå. Det visar sig efter ett tag att den ena tillståndsnoden får ett relativt högt värde, ungefär 30, efter hela datamängden. Så nätets utsignal kommer att vara lika med en av insignalerna. T ex kring 870 följer nätets utsignal den första insignalen, köpordervolymen för det tiominutersintervallet. Vid 877 är den insignalen och alltså nätets approximation 9.6, målvärdet är 0. Det här visar på att modellen inte överensstämmer med börssystemet till fullo, vilket man inte heller hade förväntat sig. Däremot ser vi en viss följsamhet som ändå vittnar om att modellen liknar de samband som finns i börssystemet. Torbjörn Bäckmark 39 2001-10-05

8 Att implementera en agent Vi vill övervaka systemet i realtid. Det är möjligt med ett jordannät, eftersom det behandlar en tidpunkt i taget. Man kan tänkas träna upp strukturen på data från hela handelsdagar för en specifik orderbok. 8.1 Sampling av data Vid handelsdagens början nollställer man tillståndsnoderna. Sedan samlas data in från systemet under ett tidsintervall, t ex tio minuter, och summeras ihop för att fungera som en datapost som valideras med nätet. En viktig frågeställning blir när agenten ska signalera. Den får inte vara för känslig eftersom avvikelser förekommer. Man kan tänka sig att vi mäter avvikelsen gentemot systemets utsignal vid valideringen. Detta ger upphov till punkter på en kurva. Vi vill släppa igenom eventuella naturliga avvikelser men reagera på fel i systemet. Jag tittar på avvikelserna i den validering som jag gjort på handelsdata. Figur 37. Validering på handelsdata Det här är samma data som i den tidigare figuren. Data från en orderbok som särskiljts från min valideringsfil. Torbjörn Bäckmark 40 2001-10-05

Så tittar vi på avvikelsen, de riktiga utdatavärdena minus nätets prediktion från handelsdatafilen. Figur 38. Prediktionens avvikelse Vi ser att det förekommer relativt stora avvikelser, men att de är relativt jämt fördelade kring nollstrecket. Frågan är när man ska låta agenten signalera? Man kan låta agenten integrera ett värde över några tidpunkter, säg de sex senaste. På så sätt kommer normala avvikelser i hög grad att ta ut varandra eftersom de bör vara jämt fördelade kring nollstrecket. Detta integrerade värde kan man låta agenten visa i drift samt låta den alarmera när värdet överstiger en viss gräns. Det integrerade värdet är alltså ett mått på hur mycket systemets utsignal har skilt sig från agentens prediktion under det aktuella tidsintervallet. Valet av samplingsintervall blir betydelsefullt här. Det bör väljas litet för att få agenten att signalera snabbt på avvikelser. Samtidigt måste samplingsintervallet vara stort nog för att få med tillräckligt många händelser från den aktuella orderboken. Man kan tänka sig att använda olika samplingsintervaller för olika orderböcker utifrån respektive volymer affärer i orderböckerna. Vid dagens slut kan man låta nätet tränas någon epok på den gångna dagens data. På så vis kan strukturen även komma att förändras över tiden. Torbjörn Bäckmark 41 2001-10-05

8.2 Integrerad avvikelse Jag går tillbaka till de två största orderböckerna. I dessa har det skett tillräckligt med handel för att använda samplingsintervall på fem minuter. Jag tar fram datamängder för de båda orderböckerna med data summerat i femminutersintervall. Jag tränar jordanstrukturen på orderbok nr 101 och validerar på nr 200. Som tidigare använder jag återkopplingen 0,9. I den övre figuren ser vi resultatet av valideringen, målvärde (+) och nätets prediktion (o). I den mellersta figuren ser vi avvikelsen, dvs målvärdet minus nätets prediktion. Och i den undre figuren ser vi absolutvärdet av det integrerade värdet över de sex senaste tidpunkterna. I det här fallet är alltså värdet i den undre figuren för varje tidpunkt ett mått på hur mycket avvikelse vi har haft från prediktionen under de sex senaste tidpunkterna, dvs den senaste halvtimmen. Och avvikelserna som vi får här skulle alltså vara normala. Antag att vi låter gränsvärdet för det integrerade värdet i det här fallet vara 2. Detta motsvarar avvikelser som i snitt är 0.33 för varje tidpunkt. Med den skala på signalerna som jag har i det här fallet motsvarar det i stort 10 % av signalen när den är som störst. I området kring 100, på eftermiddagen, har vi affärsvolymer på ungefär 300000 affärer per fem minuter. Jag har skalat ner volymerna med 10 5. Torbjörn Bäckmark 42 2001-10-05

8.3 Experiment med fel Jag går in i datamängden och simulerar ett fel. Antag att vi under en halvtimme från och med tidpunkten 100 får en nedgång i antalet affärer som går igenom med 20 %. Jag simulerar detta genom att gå in och ändra systemets utsignal för hand till 80 % av det riktiga värdet. Hur ser det ut? Den övre figuren visar signalerna, målvärde (+) och nätets prediktion (o). För tidpunkterna 100-105 är målvärdet reducerat med 20 % jämfört med de värden som fanns i den riktiga valideringsfilen. I den mellersta figuren ser vi att avvikelserna i detta intervall inte längre är balanserade kring nollstrecket. Och i den undre figuren ser vi det integrerade värdet. De signaler som ligger över 2 är markerade, de motsvarar att agenten alarmerar. I det här fallet skulle agenten alarmera redan efter fem minuter. Torbjörn Bäckmark 43 2001-10-05