Nevralt nettverk

Fra Wikipedia, den frie encyklopedi
Gå til: navigasjon, søk
An artificial neural network with input, hidden and output layers
Fig. 1: Et kunstig nevralt nettverk, med input, hidden (skjult) og output lag.

Nevralt nettverk brukes som benevnelse på kunstig etterligning av biologisk nervevev fra hjernen eller det sensoriske system. Metodene og algoritmene forsøker å etterligne egenskaper som er funnet i nerver og hjernen, men bruker bare inspirasjon fra biologisk nervevev og er ikke en eksakt etterligning av hjernen eller deler av denne. Slike kunstige nevrale nettverk stod i spissen blant de nye «biologiinspirerte» teknikkene innen databehandling som voks frem på 1970-tallet, selv om metode grunnlaget kan føres tilbake til forskning på Frank Rosenblatt sin forskning på perceptroner ved Cornell Aeronautical Laboratory i 1957.[1]

Frasen nevralt nettverk refererer ofte til kunstige nevrale nettverk på en klassisk digital form, men det finnes flere varianter som går ut over de kjente metodene fra biologien. Tilsvarende er det også kjent metoder fra biologien som vanskelig lar seg kopiere i kunstige implementasjoner. Det er flere mulige grenser som kan trekkes mellom slike implementasjoner. En kan dele i digitale implementasjoner i mykvare og maskinvare på ene siden og analoge implementasjoner på den andre, en kan dele i nettverk som har liten eller ingen tidsdimmensjon vs nettverk hvor tidsdimmensjonen er vesentlig, en kan dele i nettverk med lineære noder (også kalt overføringsfunksjoner eller aktiveringsfunksjoner) og nettverk med ulineære noder, en har ettlagsnettverk og flerlagsnettverk, en har homogene nettverk med like noder og heterogene nettverk, og så videre.

De viktigste anvendelsene er innen selvlærende flerlags nettverk med ulineære noder. Slike vil ofte bli initialisert til en startverdi utfra et kjent treningssett (apriori kunnskap) hvoretter det brukes selvlærende algoritmer for å få nettverket til å følge et arbeidssett. Dette forutsetter at en på noe vis kan avgjøre hva som er riktig respons for arbeidssettet (aposteriori kunnskap).

Bakgrunn[rediger | rediger kilde]

Den originale inspirasjonen til nevrale nettverk kom fra forskning på og observasjon av sentralnervesystemet, der nerveceller, aksoner, dendritter og synapser bygger opp hjernen eller «prosessoren» i levende vesener som har et sentralnervesystem. Inspirasjon til noen av bestanddelene er også fra forskning på levende vesener med et nervesystem, men som mangler sentralnervesystem. Metodene er generelle og ikke spesifikt knyttet til eksistensen av et emulert sentralnervesystem, selv om et overordnet mål for deler av forskningen er å nå frem til noe slikt.

Siden forskning på nervenes funksjon fortsatt er på et ungt stadie der det finnes mange ubesvarte spørsmål og abstraksjonsnivå, så finnes det ingen entydig definisjon av hva som er et kunstig nevralt nettverk. En løst definert fellesnevner er at slike består av et nettverk av enkle prosesseringselementer som utvører en globalt kompleks handling basert på koblinger mellom prosesseringselementer og disses parametere. Det er vanlig å bruke algoritmer for maskinlæring til å balansere og tilpasse parametrene som i denne sammenheng typisk kalles «vekter».

Utrykket kunstige nevrale nettverk blir i hovedsak brukt om nevrale nettverksmodeller nyttet i statistikk, kognitiv psykologi og kunstig intelligens.

I moderne programvareutvikling har man tatt i bruk en mer praktisk tilnærming basert på statistikk og signal prosessering. Prinsippet om ikke-lineær, distribuert, parallell og lokal prosessering og adapsjon blir ivaretatt i disse systemene, selv om mye av elementene fra biologi ikke finnes i disse systemene.

Oppbygning[rediger | rediger kilde]

Et nevralt nettverk er bygget opp av nevroner, som i sin enkleste og eldste form også kalles perceptrons, og bindingene mellom disse og påtrykk fra foregående lag. Bindinger er i noen sammenhenger brukt om de enkelte vektene i nettverket, i andre sammenhenger er de brukt om de enkelte utganger fra foregående lag. I mange typer nevrale nettverk er det veldefinerte inngangsnoder (inputvector), som vektes og prosesseres med overføringsfunksjonen (aktiveringsfunksjonen), hvoretter de leveres til veldefinerte utgangsnoder (outputvector). Disse blir gjerne kalt Feed-forward nettverk hvis de ikke har læring aktivert.

Det snakkes ofte om inngangsnoder og utgangsnoder som ikke har noen selvstendig overføringsfunksjon, samtidig som det snakkes om prosesserende noder i laget. Dette kan være forvirrende. Det er enklere å se på dette som en inngangsvektor og en utgangsvektor, hvor en matrise bringer inngangsvektoren over på formen til utgangsvektoren.

I det etterfølgende beskrives et forovernett (feed foreward net). Hvis en legger til læring så vil dette fungere som et nett rettet motsatt vei og som propagerer feilverdier. I praktisk bruk er det imidlertid vanligere å flytte selve lærealgoritmen (backpropalgoritmen) inn i enheten som definerer det kunstige nevronet.

Nevron[rediger | rediger kilde]

Nevrale nettverk består av et stort antall relativt enkle noder, alle kjører den samme algoritmen. Opprinnelig var disse ment som en emulasjon av en enkelt nervecelle eller nevron. Hvert nevron kommuniserer med et subset av de andre kunstige nevronene i nettverket.[2] Hver input et nevron får fra andre nevroner har en vekt assosiert. Vekten sier hvor viktig denne inputen er for nevronet.[3] Nevroner har også en aktiveringsfunksjon som prosesserer summen av påtrykket, og et tilhørende bias. Bias fungerer som en terskel i et perceptron. Det er i noen tilfeller enklest å skille ut bias i en egen parameter, mens det i andre tilfeller er enklere å se på bias som et konstantpådrag i en av inngangsnodene.

Aktiveringsfunskjon[rediger | rediger kilde]

I nevrale nettverk beskrive aktiveringsfunskjonen outputoppførselen til et nevron. De fleste nevrale nettverk starter med å beregne den vektede summen av alle inngangene. Denne verdien (total net input) blir deretter vanligvis transformert ved hjelp av overføringsfunksjonen (aktiveringsfunksjon, squashing function). En av de enkleste overføringsfunksjonene sier kun at hvis total net input er mindre enn 0 så er output fra nevron 0, ellers output 1.[4] Denne overføringsfunksjonen er tett opp mot funksjonen som finnes i enkelte former for biologisk nervevev, hvor en sier at nerven «fyrer» når potensialet kommer opp i et gitt nivå. Andre viktige funksjoner er en identitetsfunksjon, eller en slik med øvre og/eller nedre skranke. Slike funksjoner er så tilnærmet med en eller flere logaritmiske funksjoner eller endog en hyperbolsk funksjon. Valget av den siste kommer av disses egenskaper i forbindelse med maskinlæring.

Vekt[rediger | rediger kilde]

En vekt, i et kunstig nevralt nettverk, er en parameter tilknyttet tilkoblingen mellom et nevron M, til et annet nevron N. Dette er omtrent det samme som bindingen til en synapse i et biologisk nevron. Vekten bestemmer hvor mye nevron N bryr seg om aktiveringen N får fra nevron M, eller hvor mye av pådraget fra N som når frem til M.[5]

I noen spesielle former for nettverk brukes det også ulineære overføringsfunksjoner istedenfor lineær vekting, men slike nettverk kan skrives om til to eller flere koblede nettverk med ulike overføringsfunksjoner. Slike nettverk brukes vanligvis i forbindelse med problemstillinger hvor en ønsker separasjon av datasett og ikke bare dekorrelering, det vil si dekorrelering over høyereordens komponenter.

Bias[rediger | rediger kilde]

I feedforward og noen andre nevrale nettverk er hvert nevron tilkoblet et fast bias, som også kan beskrives som et konstantpådrag, via en trenbar vekt. Dennes eksaktverdi er uvesentlig, men blir ofte satt til 1 eller -1. Fortegnet er uvesentlig om det kan trenes negative vekter. Dette gjør at hver skjulte enhet og outputenhet får et trenbart threshhold. Hvis eksaktverdien er -1 så blir threshold verdien til vekten knyttet til nevronets bias.

Perceptron[rediger | rediger kilde]

Hvordan et perceptron fungerer
Fig. 2: Et perceptron, med vekter  w_0,\dots, w_4 og treshold T

Et perceptron er et enkelt kunstig nevron som har en aktiveringsfunksjon som tar total net input og gir 1 hvis dette er over en grense (treshold), eller 0 hvis ikke.[1] I noen sammenhenger er det praktisk å behandle alle nevrons som en perceptron.

Det er litt forskjell i litteratur med hensyn på hva som kalles et perceptron. I noen tilfeller brukes begrepet om et enkelt kunstig nevron, i andre tilfeller om et helt lag av slike, i noen tilfeller om et nevron med lineær overføringsfunksjon, i andre tilfeller med en enkelt terskel.

Grensefunksjon (threshold function)[rediger | rediger kilde]

Output fra et perceptron er 0 hvis total net input til perceptronet er mindre enn grensen(threshold) T, ellers er output 1. [6]

Enkelt lag forovermatet nevralt nettverk[rediger | rediger kilde]

Et nettverk der alle input er koblet direkte til output blir kalt et ettlagsnettverk (single layer network) eller perceptron nettverk. Igjen er bruk av perceptron litt uklart, for normaltolkingen vil være at hver node også har egenskapene til en ren thresholdfunksjon. Når nodene implementerer en 'treshold' funksjon så kan vi se på perceptronene som en representasjon av en boolsk funskjon.[7] Det er en del boolske funksjoner et slikt ettlags perceptron nettverk ikke kan representere.

A perceptron network
Fig. 3: Et perceptron nettverk med innganger, vekter og utganger.

Læringsalgoritme[rediger | rediger kilde]

For et perceptron nettverk kan det brukes en enkel læringsalgoritme for å trene vektene utfra et datasett. For flerlagsnettverk må en bruke tilbakepropageringsalgoritmer for læring. Læringsalgoritmen som blir presentert her er den samme for alle output-nevroner, derfor blir algoritmen beskrevet for ett enkelt nevron i isolasjon.

Vi definerer noen variabler
y = f(\mathbf{z}) \, funskjon for output fra en perceptron med input vektor \mathbf{z}.
b \, er bias termen.
D = \{(\mathbf{x}_1,d_1),\dots,(\mathbf{x}_s,d_s)\} \, er treningsdatasettet bestående av s verdier, der \mathbf{x}_j er den n-dimensionale input vektoren og d_j \, er den ønskede utgangsverdien for den gitte inngangsvektoren.
Vi gir pådraget på nodene slik at
x_{j,i} \, er verdien av for inngangsnode i og løpenummer j i treningssettet.
x_{j,0} = 1 \, er tilsvarende pådraget for bias i datasettet.
For å representere vektene
w_i \, er verdien for nummer ii vektvektoren, som skal multipliseres med input node nummer i, eller for et fullt lag så vil dette være matrisen alle innganger vektes med.

En ekstra dimensjon, med indeks n+1, kan bli lagt til alle input vektorer, med x_{j,n+1}=1 \,, i så fall vil w_{n+1} \, erstatte bias termen.

For å vise hvordan \mathbf{w} endres over iterasjonen som en løpetid brukes

w_i(t) \, som er vekten i på tidspunktet t.
\alpha \, som er læringsraten, der 0 < \alpha \leq 1.

Med for høy læringsrate vil perceptronet periodisk variere over og under løsningen. En mulig forbedring for å få det til å konvergere er å bruke LR^n med n=1 i begynnelsen og inkrementere med 1 når en loop i læringen blir funnet. Dette implementerer et fall (decay) i læreraten for å sikre konvergens.

Stegene i læringsalgoritmen[rediger | rediger kilde]

1. Initialisering av vekter og 'threshold'. Vekter kan initialiseres ved å sette hver vekt node w_i(0) \, til 0 eller til en lav tilfeldig verdi.

2a. Kalkuler det faktiske output:
y_j(t) = f[\mathbf{w}(t)\cdot\mathbf{x}_j] = f[w_0(t) + w_1(t)x_{j,1} + w_2(t)x_{j,2} + \dotsb + w_n(t)x_{j,n}]
2b. Tilpass vektene:
w_i(t+1) = w_i(t) + \alpha (d_j - y_j(t)) x_{j,i} \,, for all nodes 0 \leq i \leq n.

Steg 2 er repetert til feilen i en iterasjon d_j - y_j(t) \, er mindre enn en brukerspesifisert grense \gamma \,, eller etter at et predefinert nummer av iterasjoner har blitt gjennomført. Legg merke til at algoritmen tilpasser vektene øyeblikkelig etter at steg 2a og 2b er utført på et par i treningsdatasett istedenfor å vente på at alle parene i et treningsdatasett har blitt evaluert.

Separerbarhet og konvergering[rediger | rediger kilde]

Novikoff (1962) beviste at perceptron algoritmen vist ovenfor konvergerer etter et endelig nummer av iterasjoner hvis datasettet er lineært separerbart. Hvis datasettet ikke er lineært separerbart vil ikke algoritmen overfor konvergere.

Flerlags forovermatet nevralt nettverk[rediger | rediger kilde]

Nevrale nettverk med flere lag blir som oftest referert til som Flerlags forovermatet nevralt nettverk. Der den mest vanlige versjonen har et inputlag, et skjult lag og et outputlag, slik som figuren overfor (Fig. 1) viser. I dette tilfellet er ikke inngangsvektoren og utgangsvektoren vist. Man kan tenke seg at hver skjulte enhet er et perceptron som representerer en grensefunksjon fra inputlaget. Videre kan man tenke seg at en outputenhen er en begrenset(thresholded) lineær kombinasjon av flere skjulte enheter. Med et stort nok skjult lag kan et nevralt nettverk med kun ett skjult lag representere alle kontinuerlige funksjoner, med to lag kan til og med ukontinuerlige funskjoner representeres.[8] Hvis overføringsfunksjonene kan velges ideelt så blir også antall skjulte noder begrenset og endelig. Forutsetningene for at dette skal skje er aldri tilstede i praksis.

Læringsmetode[rediger | rediger kilde]

Læringsalgoritmene for flerlags forovermatete nevrale nettverk er sammenlignbare med algoritmene for perceptronettverk, en variasjon av disse er vist over. En av hovedforskjellene er at vi kan ha flere output, slik at vi har en outputvektor y_f(z) istedenfor en enkeltverdi, hvert eksempel har også en outputvektor x. Hovedforskjellen mellom singlelayer og multilayer er at feilen til output (x - y_f) er tydelig, mens feilen til det skjulte laget forblir ukjent siden treningsdatasettene ikke har noe data om hva de skjulte nodene skal gi som output.[9] Feilen fra utgangen kan imidlertid propageres gjennom nevronet ved å invertere overføringsfunksjonen og dermed fordeles på feil introdusert fra de enkelte pådrag. En slik tilbakepropagering kan gjøres gjennom mange skjulte lag, men som det viser seg, med stadig lavere lærerate.

Algoritmen[rediger | rediger kilde]

En generell tilbake-forplantningsalgoritme (back-propagation algorithm):

  Initialisering: vektene til det nevrale nettverket får små tilfeldige verdier
  Gjør:
         For alle eksempler e i datatreningssettet:
              O = output fra bruk av inputs mot vektene i nettverket sine verdier
              T = output for e fra treningsdatasettet
              Kalkuler feilen(T - O) for outputenhetene
              Rekn ut \Delta w_h for alle vektene fra det skjulte laget til outputlaget
              Rekn ut \Delta w_i for alle vektene fra inputlaget til outputlaget
              Oppdater alle vektene i nettverket
  Til: Alle eksemplene er klassifisert korrekt eller til et stoppkriterium blir møtt
  Returner nettverket

Referanser[rediger | rediger kilde]

  1. ^ a b Rosenblatt, Frank (1957), The Perceptron--a perceiving and recognizing automaton. Report 85-460-1, Cornell Aeronautical Laboratory.
  2. ^ Millington, Ian; Funge, John (2009). Artificial intelligence for games (2nd ed. utg.). Burlington, MA: Morgan Kaufmann/Elsevier. ISBN 978-0-12-374731-0. 
  3. ^ «The Machine Learning Dictionary». 
  4. ^ «The Machine Learning Dictionary». 
  5. ^ «The Machine Learning Dictionary». 
  6. ^ «The Machine Learning Dictionary». 
  7. ^ Russell, Stuart J.; Norvig, Peter (2003). Artificial intelligence : a modern approach ; [the intelligent agent book] (2. ed., internat. ed. utg.). Upper Saddle River, NJ [u.a.]: Prentice Hall. ISBN 0130803022. 
  8. ^ Russell, Stuart J.; Norvig, Peter (2003). Artificial intelligence : a modern approach ; [the intelligent agent book] (2. ed., internat. ed. utg.). Upper Saddle River, NJ [u.a.]: Prentice Hall. ISBN 0130803022. 
  9. ^ Russell, Stuart J.; Norvig, Peter (2003). Artificial intelligence : a modern approach ; [the intelligent agent book] (2. ed., internat. ed. utg.). Upper Saddle River, NJ [u.a.]: Prentice Hall. ISBN 0130803022. 

Se også[rediger | rediger kilde]

Maskinlæring