Nettverk
med læring av feil bakover forplantning
Colin Fahey

En biologisk nettverk
1. Programvare
2. Innledning
Dette dokumentet beskriver hvordan du skal gjennomføre en kunstig nettverk som er i stand til å bli trent til å gjenkjenne mønstre.
Dette dokumentet beskriver en modell av et nettverk som lærer ved en algoritme som bruker "bakover feil forplantning."
Dette dokumentet inneholder grunnleggende demonstrasjoner av lære av "feil bakover forplantning." Dette dokumentet har en kobling til datamaskinen din. Datamaskinen koden inkluderer demonstrasjoner. Datamaskinen koden kan brukes til å lage komplekse neural nettverk. Men datamaskinen koden er kun for demonstrasjon formål. En alternativ implementering kunne redusere minnebruken og kan øke hastigheten.
3. Alternativ til læring av feil bakover forplantning
Dette dokumentet beskriver en modell av et nettverk som lærer ved en algoritme som heter "bakover feil forplantning." Denne algoritmen kan kreve en svært lang tid å lære ulike leksjoner. Også denne algoritmen kan tilfeldig mislykkes i å lære ulike leksjoner på grunn av den tilfeldige første status for nettverk før trening.
Læring ved å "knytte aktive innganger" er et viktig alternativ til læring av "feil bakover forplantning." Læring ved å knytte aktive innganger bare kollegaer innganger som samtidig er aktiv. Slik læring kan være rask og pålitelig. Men for mange praktiske formål, det er ikke opplagt måte å bruke et nettverk som lærer av foreningen, mens det er en åpenbar måte å bruke et nettverk som lærer av feil bakover forplantning.
Noen biologiske neural nettverk er kjent for å lære av sammenslutningen av aktive innganger. Bakover feil forplantning har ikke vært observert i noen biologiske nettverk.
Dette dokumentet beskriver interessante bruker for et nettverk som lærer av feil bakover forplantning. Men læring av foreningen er et svært viktig alternativ algoritme for læring. Design en nettverk som lærer av foreningen for å løse et bestemt problem kan være vanskeligere at desgining et alternativt nettverk som lærer av feil bakover forplantning, men biologiske systemer lære av foreningen, og å lære evnen til biologiske systemer er tydelig.
4. Biologisk Nevron
4.1 Nevron celle

En biologisk Nevron "(multipolar," ~4 um celle kroppen)
En Nevron er type celle som har evne til å motta og sende nerve-signaler.
Neurons er grunnlag for nerve-systemer, som finnes i dyr, fugler, fisk og insekter.
Hjerner med hukommelse og logikk, og enkel refleks, er både basert på ordninger av neurons.
Neurons er også brukt til å formidle signaler over lange avstander i en skapning kroppen, for eksempel fra sensorer til hjernen, eller fra hjernen til muskler.
Virkemåten av en biologisk Nevron er svært sammensatt, men følgende forenklet beskrivelse fanger opp de grunnleggende prinsippet:
Den Nevron akkumulerer signaler mottatt fra andre neurons, og hvis den totale signalet opphopning overskrider en terskel, Nevron overfører sine egne signaler til andre neurons.
4.2 Nevron deler

Deler av et biologisk Nevron
|
Soma
|
Den celle kroppen av en Nevron
|
|
Dendrites
|
Fiber med kjemiske receptors (innganger) som strekker seg fra celle kroppen av en Nevron. En Nevron vanligvis har mange dendrites, og dendrites ofte har mange greiner.
|
|
Axon
|
En fiber med kjemiske emitters (utganger) på sitt endepunkt som strekker seg fra celle kroppen av Nevron. En Nevron har et enkelt axon og axon vanligvis har svært få greiner.
|
|
Synapse
|
En konfigurasjon slik at axon av en Nevron og dendrites av en annen Nevron er atskilt med en svært liten åpning. I en slik konfigurasjon, kjemikalier slippes ut av en axon av en Nevron krysser synapse, og er mottatt av dendrites av de andre Nevron. Dette er hvordan neurons påvirke andre neurons.
|
4.3 Nevron skyting
En Nevron akkumulerer kjemiske signaler fra sin dendrites, og hvis den totale kjemiske opphopning overskrider en terskel i løpet av en periode, Nevron "branner," sende sin egen signalet gjennom axon.
Noen neurons er i stand til avfyring pulses på rekkefølgen av 100 Hz.
Signalene som passerer gjennom neurons innebære ansamlinger av Natrium (Na), kalium (K), og Klor (Cl) ionet, og en resulterende elektrokjemisk potensial (dvs. spenning).
Det hviler spenning (-70 mV) og skyting spenning (+30 mV) kan måles eller selv påvirket av konvensjonell elektrisk krets.
Følgende er en spenning innspilling av en rotte Nevron avfyring med en gjennomsnittsfart på omtrent 100 Hz når en enkelt whisker er berørt og holdt ut av hvile stilling:

En rotte Nevron avfyring (100 Hz) grunn til å holde en whisker.
Selv om stimulans er konstant, Nevron signalet er hurtig pulserende.
4.4 Nettverk
Den menneskelige hjernen har ca 10^11 (100 milliarder) neurons.
Hver Nevron i cerebellum mottar innspill fra så mange som 10^4 (10000) synapses.
Selv om axon og dendrites av en Nevron ofte forlenge bare noen få mikrometer unna cellen kroppen, noen axons er på bestillingen av en meter i lengde.
En kar har neurons med relativt kort axons gruppert i områder eller grupper.
En kar har også bunter av neurons med relativt lang axons å knytte områdene adskilt med centimeter.
Dermed oppstår et hierarkisk nettverk av behandlingen grunnstoffer er dannet.
4.5 Nettverk status
Statusen for et nettverk av neurons er både måten neurons er tilkoblet og signaler på alle de synapses.
Det er uklart hvor mye status informasjon vil gå tapt hvis en hjerne var tranquilized i total inaktivitet for en hvilken som helst tidsperiode.
Man kan forestille informasjon vedvarende bare ved å flytte signaler gjennom nettverket, og ikke av nettverkstilkobling seg selv, som cellular automata simuleringer som Conway's "Game of Life", enkel Dynamic Random Access Memory (DRAM) chips, og reflekterer i et kammer.
4.6 Nettverk Learning
Konvensjonell læring skjer når egenskapene for dendrites endre på en synapse til å bli mer eller mindre effektivt i å motta kjemiske signaler fra en axon.
Årsakene til slike endringer er komplisert, men resultatet er at en Nevron krever en annen kombinasjon av synapse innganger til å utløse en output signal.
5. Kunstig Nevron
5.1 Definisjon
En "kunstig Nevron" er en algoritme eller en fysisk enhet som implementerer en matematisk modell inspirert av den grunnleggende virkemåten til en biologisk Nevron.
En Nevron akkumulerer signaler mottatt fra andre neurons eller innganger (for eksempel sensorer), og hvis den totale signalet opphopning overskrider en terskel, Nevron overfører et signal til andre neurons eller utganger (for eksempel effectors).
Enhver matematisk modell som inkorporerer ideen om accumulating flere innganger og gir en enkel produksjon (som accentuates den relative intensiteten av innspill i forhold til noen nominelle nivå) kan brukes for pattern recognition.
Slike modeller kan være grunnlag for en kunstig Nevron.
Hvis påvirkning av hver inngang kan bli endret, og modellen kan støtte læring.
5.2 Aktivering funksjon
En "aktivering funksjon" er en matematisk funksjon som konverterer inndata verdier under en bestemt verdi til en relativt lav produksjon verdi, og konverterer inndata verdier over en bestemt verdi for en relativt høy produksjon.
En "aktivisering er" brukt til å konvertere vektet sum av input verdiene av en Nevron til en verdi som representerer produksjon av Nevron.
En "sigmoid" funksjonen er en generell klasse for glatte funksjoner som asymptotically tilnærming en nedre grense for innspill verdier nærmer negative uendelighet, og asymptotically tilnærming en øvre grense for innspill verdier nærmer seg positiv uendelig.
En bestemt sigmoid funksjon er "logistic sigmoid" funksjon:

Den "Logistic Sigmoid" funksjon: 1 / ( 1 + Exp( -x ) )
Den "logistic sigmoid" funksjonen kan brukes som en "aktivering funksjon" for en matematisk modell av en Nevron.
Den matematiske avledet av "logistic sigmoid" kan bli beregnet som en formel, som gjør det enkelt å beregne en tilknyttet læring formel.
5.3 Nettverk innspill
Et "nettverk innspill" representerer en inngang til et nettverk.

Nettverk innspill
"Input" er den numeriske verdien av input.
5.4 Nettverk output
Et "nettverk produksjon" representerer en produksjon av et nettverk.

Nettverk output
"Output" er den numeriske verdien av produksjonen.
"Error" er en numerisk verdi som representerer forskjellen mellom produksjon verdi og en "Desired" verdi:
Error = (Output - Desired); // Derived from: Output = Desired + Error;
Den "Desired" verdi representerer en ønsket verdi, eller en ideell verdi, eller en riktig verdi, at nettverk skal produsere som en utgang som svar på spesifikke innganger.
Feilen verdien er beregnet og tilordnet "Error" av en trening algoritmen.
Feilen verdien tilbakemelding til nettverk.
Den nettverk kan tilpasses for å redusere forskjellen mellom sine utganger og ønskede verdier, det vil si at nettverk kan lære, og kan dermed redusere fremtidige feil.
5.5 Nevron kroppen
En "Nevron kroppen" representerer kroppen av en Nevron, som akkumulerer innspill bidrag, og legger til en skjevhet, og forvandler den resulterende verdien av "aktiveringen funksjonen" til å produsere en output verdi.

Nevron kroppen
"InputAccumulator" er en verdi som representerer akkumulerte innspill fra Nevron koblinger der utgangene er koblet til Nevron kroppen.
"Bias" er en justerbar verdi som er kombinert med akkumulert inngang verdi.
"Output" er en numerisk verdi som representerer output verdien av Nevron.
The output-verdien er beregnet ved hjelp av følgende formel:
Output = ActivationFunction( Bias + InputAccumulator );
"ErrorAccumulator" er en numerisk verdi som representerer akkumulerte feil.
Gitt en bestemt output verdien av Nevron kroppen, og gitt en bestemt output feil verdi, med akkumulert feil verdi er justert i henhold til følgende formel:
ErrorAccumulator += Output * (1 - Output) * OutputError;
"Rate" er en verdi som påvirker hvordan "Bias" verdi endringer i svaret til "ErrorAccumulator" verdi:
Bias += (-1) * Rate * ErrorAccumulator;
5.6 Nevron link
En "Nevron link" representerer en kobling mellom:
(1) en inngang til nettverk og et innspill i en Nevron kroppen;
eller,
(2) en produksjon av en Nevron kropp og en inngang på en annen Nevron kroppen;
eller,
(3) en produksjon av en Nevron kropp og en produksjon av nettverk.

Nevron link
"Input" er en buffer av innspill til koblingen.
"Weight" er en justerbar verdi som påvirker hvordan signalet verdier og feil verdier overføres via linken.
"Output" er en buffer i produksjonen av koblingen.
Verdien er beregnet ved hjelp av følgende formel:
Output = Weight * Input;
"Error" er en buffer for feil i koblingen.
"WeightedError" er en buffer for de feil i koblingen, vektet etter vekten faktor:
WeightedError = Weight * Error;
"Rate" er en verdi som påvirker hvordan "Weight" verdi endringer i svaret til "Error" verdi og "Input" verdi.
Under nettverk læring, "Weight" verdien er justert på følgende måte:
Weight += (-1) * Rate * Input * Error;
5.7 Nettverk
Et "nettverk" inneholder innganger, utganger, Nevron etater, og lenker.
Følgende bilde viser et enkelt nettverk, med to innganger og to Nevron organer i det første laget, og en enkelt Nevron i andre lag, og en utgang.

Eksempel på et nettverk
Under en simulering av et nettverk, inn-verdier overføres frem gjennom koblinger og Nevron etater, og til slutt kommer på utgangene.

Eksempel på videre forplantning i et nettverk
Under trening, feil verdier er oppgitt ved utganger, og disse feilene forplante bakover gjennom nettverk, noe som resulterer i endring av vekter og biases i Nevron organer og koblinger.

Eksempel på bakover feil forplantning i et nettverk
5.8 Nettverk simulering
Definisjon:
"Network simulering" er prosedyren brukes til å forplante nettverk innganger gjennom koblinger og Nevron organer til å nå nettverket utganger.
Network simulering innebærer simulering av alle sine deltagende koblinger og Nevron organer.
Simuleringer uten løkker eller tid:
Det er mange mulige nettverks-konfigurasjoner med looper.
Det er mange Nevron modeller som er avhengige av tid.
Men noen av de vanligste programmene av kunstig neurons involverer verken looper eller tid.
Følgende er en matematisk modell av en Nevron organ:
Output = ActivationFunction( Bias + InputAccumulator );
Med denne Nevron modell, og et nettverk uten "looper," vi bare starter fra den eksterne innganger, beregne resultatene av det første laget av neurons, og leverer de resultatene som innganger til neste lag, beregne utganger for at laget, og fortsetter gjennom lag av neurons før den endelige resultat er beregnet.
Loops:
Et nettverk kan ha forbindelser i form av looper (eller "sykluser)."
For eksempel, produksjon av en Nevron kan kobles direkte til en inngang på den samme Nevron, forårsaker "tilbakemelding."
Et annet eksempel er produksjon av Nevron # 1 er koblet til inngangen av Nevron # 2, og produksjon av Nevron # 2 som er koblet til inngangen av Nevron # 1.
Hvis du kan starte fra et punkt i et nettverk og sporstoffer en bane gjennom neurons og koplinger, hensyn til en-veis flyt av signaler, og til slutt kommer på det samme utgangspunkt, og banen er en loop.
Loops innføre interessant mulighet til signaler flyter rundt i nettverket for ubestemt tid.
Noen enkle modeller antar at det tar en bestemt mengde tid for signaler til å passere gjennom individuelle neurons.
I slike modeller, signaler sirkulere gjennom looper med få neurons raskere enn signaler sirkulere gjennom looper med mange neurons.
En Nevron koblet til seg selv vil ha den raskeste signal circulation rate.
Hvis en Nevron har en inngang X, en vekt W, en skjevhet B, og en ikke-negativ utgang Y (f.eks 0.0 -> 1.0), så vi kan danne en oscillator ganske enkelt ved å sette W = (-8) og B = +4 og koble Y til X;
hver gang vi simulere Nevron, signalet vil være toggled til det motsatte.
Et nettverk med looper kan være opptatt med aktivitet selv når den ikke aksepterer eksterne signaler (stimuli) som inndata.
The cellular automata regler Conway's "Game of Life" kunne bli implementert i et nettverk, som gir deg et lite hint av det mangfold av aktiviteter som kan skje i et nettverk med looper.
Finite-state maskiner (FSM), oscillators, flyktig minne (i motsetning til læring mønstre via endrede vekter), er gjort mulig av looping.
Dersom et nettverk har looper, vi kan ikke oppdatere alle utganger før vi beregne alle utganger, dermed trenger vi en midlertidig buffer til å lagre beregnede utganger før vi beregne alle utganger, og deretter kan vi bryte den nye produksjonen verdier til neurons i nettverket.
Enhver metode som oppdaterer utganger på selve nettverket i en progressiv måte, i stedet for en alt-i-én måte, introduserer en vilkårlig bestilling i gang som fører til kaos.
Fysikk simuleringer som involverer kombinert enheter, slik som planetene bane en stjerne med gjensidig gravitasjonsfelt styrker mellom alle etater, krever samme type tilnærming: beregne netto styrker på alle organer før du oppdaterer en hvilken som helst hastighet og posisjon.
Time-avhengighet:
A Simple Network simulering vanligvis innebærer innganger forårsaker den ønskede resultat etter en enkelt simulering tid trinn.
I en slik simulering, vi tror når det gjelder "antall gjentakelser" snarere enn "tid i sekunder."
Det trenger ikke være noen korrespondanse mellom gjentakelser og en gang skala.
Et system kan være utformet for å gjøre et nettverk simulering (iteration) bare når det kommer nye innspill er tilgjengelig, som kan oppstå med ujevne mellomrom over tid.
Imidlertid vurdere en matematisk modell av en Nevron som forsøker å simulere det pulserende produksjon aspekt av en biologisk Nevron.
Den pulserende kan være preget når det gjelder tid, for eksempel pulserende på en bestemt frekvens eller har pulses hvis kurven strekker seg for en bestemt tidsperiode.
Vi kan ha andre tids-avhengige elementer i en matematisk modell av en Nevron, slik som et innspill akkumulator som har en verdi får bidrag fra inngangene, men har en lekkasje proporsjonal til sin nåværende verdi.
Generelt kan vi finne en elektrisk krets analogi til elementene som følge visse matematiske ligninger, og så kan man anser en Nevron som en krets med motstander, kondensatorer, og en ikke-lineær forsterker.
Akkurat som en krets kan fremvise komplekse tid avhengig atferd, produksjon av en Nevron kan betraktes som en funksjon som avhenger av innganger og tid i en komplisert måte.
5.9 Bakover feil forplantning
Definisjon:
"Bakover feil forplantning" er en matematisk prosedyre som starter med feil ved produksjon av et nettverk og sprer denne feilen bakover gjennom nettverket for å gi output feil verdier for alle neurons i nettverket.
Bakover feil forplantning formlene:
Feilen verdier ved nettverk utganger er beregnet ved hjelp av følgende formel:
Error = (Output - Desired); // Derived from: Output = Desired + Error;
Feilen opphopning i en Nevron kroppen er justert i henhold til produksjon av Nevron kropp og output feil (angitt av koblinger koblet til Nevron kroppen).
Hver utgang feil verdi bidrar til feilen gambling på følgende måte:
ErrorAccumulator += Output * (1 - Output) * OutputError;
I en forstand, alle output feil på det neste laget lekkasje bakover gjennom innspill vekter og hoper seg på produksjon av en Nevron i en tidligere laget.
Denne akkumulerte verdien multipliseres med en verdi som er størst når dagens produksjon av Nevron er mest nøytral (mest "uavgjort)" og er minst når produksjonen av Nevron er mest ekstreme (svært "bestemt)."
Vekt endring og favorisering endre formlene:
Grunnlaget for læring er justeringen av vektene og favorisering verdier i et forsøk på å redusere fremtidige produksjon feil.
Læring "Sats" er en numerisk verdi som i hovedsak indikerer hvor raskt en Nevron justerer vekt og bias verdier i henhold til feil verdier.
Følgende formel viser hvordan du kan endre det vekt på en Nevron med et bestemt sett av input verdier og dens utgang feil verdi:
Weight += (-1) * Rate * Input * Error;
Følgende formel viser hvordan du kan endre favorisering av en Nevron gitt dagens produksjon feil for Nevron:
Bias += (-1) * Rate * Error;
6. Opplæring ett nettverk
6.1 Opplæring prosedyre
Man kan starte med et erfarent nettverk og fortsette å redusere produksjonen feil med videre opplæring, men en ofte starter med en untrained nettverket.
Før trening, velge tilfeldige verdier for alle vekter av alle neurons i nettverket.
Jeg observerte problemer når jeg tilfeldig valgte verdier i intervallet [ -1.0, +1.0 ], og jeg har ikke hatt problemer når jeg valgte tilfeldige verdier fra intervallet [ +0.1, +1.0 ].
Jeg nevner disse observasjonene, men de kan være på grunn av mine feil.
Formålet med tilfeldig lodd er å redusere muligheten for en patologisk situasjoner i et nettverk.
Hvis alle neurons i et nettverk startet med samme vekt, nettverket ville ikke grunnlag for økt differensiering mellom neurons.
Jeg har observert at innstillingen alle skjevhet verdier til null (0.0) er akseptabelt.
En treningsøkt innebærer å gå gjennom en opplæring sett mange ganger, kanskje hundrevis eller tusenvis av ganger.
For hver passere gjennom opplæring satt vi vurdere hvert element i opplæringen er angitt.
En opplæring satt element har et sett med innganger, og et sett av ønskede resultatene.
Vi simulerer nettverket, ved hjelp av sett med innganger angitt av treningen.
Simuleringen gir output verdier.
Vi forplante feilene bakover tenkte nettverk for å beregne produksjonsgapet feil for alle neurons.
Vi oppdaterer alle vekter og biases.
Advarsel: En akademisk tekst som diskuteres neural nettverk argumentert for å gå gjennom hele opplæringen, og bare oppsummere vekt endringer og biases.
Etter å gå gjennom hele opplæringen sett har vi et sett av summene av vekt endringer og favorisering endringer.
Vi tar disse summene og oppdatere alle vekter og biases.
Slike summer kan være enorm for store opplæring sett - og den resulterende hoppe i vekt-plass ville bli urimelig store.
Så jeg tror jeg deler av antall trening elementer, for å få snittvekt endre verdier og gjennomsnittlig bias endre verdier, ville være rimelig.
Det er noe appellerende om databehandling en enkelt vekt endre vektorgrafikk som på en eller annen måte tar hele opplæringen sett i betraktning.
Jeg vet ikke om jeg rett og slett gjort en feil i å gjennomføre ideen, men jeg nesten ga opp helt på neural nettverk på grunn av dårlig hvordan ting ble slått ut.
Deretter, når jeg prøvde den godtroende alternativ, nemlig å gjøre oppdateringer på hver trening element, ting fungerte perfekt.
Tatt i betraktning det hele Training Set før du gjør en oppdatering har noen fordeler og ulemper:
Advantage:
Single opplæring elementer i treningen satt med ekstreme feil (dvs. dårlig trening element) vil ikke gi et stort bidrag til oppdateringen, fordi det vil bli overveldet av påvirkning av det "gode" data;
Ulempe:
Hvis N er antall elementer i treningen satt, vil prisen for fremgangen til den optimale vekt vektorgrafikk vil bli delt av N.
Eller, for en gitt avstand du vil ha bare en brøkdel av retning hint underveis i forhold til naiv tilnærming;
Kategori denne teknikken vil fungere for deg, men prøv ut naiv tilnærming før du gir opp på neural nettverk i absolutt frustrasjon!
6.2 Unnlatelse av å redusere feil
Trening kan mislykkes å redusere den totale feilen for opplæring sett.
Det er viktig å oppdage en feil å redusere feil.
Følgende liste beskriver årsakene til unnlatelse av å redusere feil, og mulige løsninger.
Elementene i listen er oppført i omtrentlig rekkefølge av sannsynlighet, med det første elementet som mest sannsynlig.
(1) Vekten kombinasjon har nådd et lokalt minimum av feil overflaten, og "stakk;"
Løsning: Start en ny simulering med nye tilfeldig vekter.
(2) Nettverket har for få neurons eller lag til å kode alle mønstrene i opplæring sett;
Løsning: Cautiously underholde muligheten for å legge lag eller neurons.
(3) En eller flere elementer i opplæringen sett contradicts eller er grossly uforenlig med de andre trening eks;
Løsning: Kontroller dataene satt for uregelmessigheter.
Finn teste elementer som gir flest feil for trent nettverket.
Se på teknikker for snittvekt endringer over hele data satt til å redusere innflytelsen til noen dårlig tilfeller.
(4) The læring frekvensen er for høy (noe over 1.0 er sannsynligvis overdreven), og oppdaterer alltid overshoot målet;
Løsning: Reduser læring rate.
(5) Det læring satsen er for lav (noe under 0.01 kan være for lite), og nettverket er konvergerende på den ideelle vekt kombinasjon - men er for treg;
Løsning: Øk læring rate.
Trening en to-lags tre-Nevron nettverk for å matche den eksklusive-eller (xor) funksjon, kan, til tross for enkelhet av funksjonen, ikke sammen.
Dette kan være overraskende og frustrerende.
Men løsningen er å bare sette alle Nevron link vekt på nye tilfeldige verdier, og deretter forsøke å trene nettverket igjen.
Når det gjelder trening et nettverk for å matche den eksklusive-eller (xor) funksjon, tilfeldige positive vekter synes å føre til vellykket læring hver gang, mens bestemte kombinasjoner av positive og negative vekter av og til føre til at opplæring svikter dramatisk.
Behovet for å velge ny tilfeldig første vekter for å gjenopprette fra en fiasko til sammen er en uheldig konsekvens av kombinasjonen av å lære prosedyren.
Det å lære prosedyren er egentlig søker etter en global minimum av bratteste ned på en overflate, og potensialet for tilstedeværelsen av en "lokal minimum" der søk kan bli fanget.
6.3 Samlet trening feil
Den totale feilen i et nettverk kan være preget av torg-roten av gjennomsnittet av kvadrerte feil, eller "root-betyr-torget" (RMS).
Feilen på noen bestemte nettverk utgang er gitt av følgende formel:
Error = (Output - Desired);
Summen av kvadrerte feil for en enkelt trening elementet er gitt ved følgende formel:
double squaredError = 0.0;
foreach (NeuralNetworkOutput output in ListOfOutputs)
{
squaredError += (output.Error * output.Error);
}
Summen av kvadrerte feil for hele settet av elementer i en opplæring sett er summen av kvadrerte feil av de enkelte elementene. Følgende kode viser hvordan de kvadrerte feil for hele settet med trening elementer som kan være beregnede:
double squaredError = 0.0;
for
(
int trainingItemIndex = 0;
trainingItemIndex < totalTrainingItems;
trainingItemIndex++
)
{
trainingSet.SetAllInputNodeValues( trainingItemIndex );
Simulate( propagationIterations );
trainingSet.SetAllOutputNodeErrorValues( trainingItemIndex );
PropagateErrors( propagationIterations );
UpdateWeightsAndBiases();
foreach (NeuralNetworkOutput output in ListOfOutputs)
{
squaredError += (output.Error * output.Error);
}
}
Den samlede root-betyr-torget (RMS) av feilen er gitt ved kvadratroten av gjennomsnittet av den kvadrerte feil:
double rmsError = Math.Sqrt( squaredError / (double)totalTrainingItems );
Denne verdien er en måte å karakterisere den samlede feil av et nettverk vurderer all opplæring tilfeller.
7. Læring
Læring skjer når vekt og bias verdier av Nevron koblinger og Nevron organer er justert i samsvar med angitte nettverk inngang og utgang feil verdier.
Vurdere et nettverk med to innganger (x1 og x2), og to koblinger (med vekt w1 og w2), og en Nevron kroppen, og en utgang (y).

Nettverk med to innganger og en Nevron kroppen, og en utgang
Vi trener denne Nevron ved å forsyne innganger, data output, data feilen, databehandling vekt og bias endringer, og oppdaterer vekt og bias, ankommer nye vekter ( w1', w2' ).
Det er en svært interessant måte å visualisere denne prosessen.
Vi kan hensyn settet med vekter som en vektor i et multi-dimensjonale rommet. For eksempel for to vekter har vi vektoren W = (w1, w2) i en todimensjonal "vekt plass."
Når vekter er justert, vi har en ny vekt vektoren W' = (w1',w2').
Vi kan se dette som et punkt W flytting til et nytt punkt W' som en del av en prosess for å redusere produksjonen feil.
Normalt vil en ikke beregne produksjonsgapet feil for alle mulige kombinasjoner av vekt, fordi håp er at vekten justering prosessen effektivt kjør mot den beste kombinasjonen.
Men la oss plot overflaten som i hovedsak viser hvor godt et Nevron tilfredsstiller alle elementer i en opplæring angitt som en funksjon av dens to vekter:

Summen av kvadrerte feil for en bestemt opplæring angitt som en funksjon av to vekter (w1, w2)
I utgangspunktet skulle målet om læring er å stige ned til det laveste nivået på denne overflaten, der feil minimeres.
Når vi finner punktet W = (w1, w2) som gir den laveste verdien på denne overflaten, læring er ferdig, og deretter kan vi bare bruke trenet Nevron.
Følgende diagram viser produksjon av en trenet Nevron som en funksjon av alle mulige innganger X = (x1, x2):

Nevron produksjon som en funksjon av to innganger (x1, x2) av en vekt som minimerer squared error
Selv om vekta er for denne to-inngang Nevron er ganske enkelt (w1*x1 + w2*x2), aktivering funksjonen konverterer en enkelt roteres fly på en klippe.
Denne overflaten har riktig output verdier for all input kombinasjoner (x1, x2) angitt av vår opplæring er angitt.
Men du kan forestille deg hvordan input vektorer X = (x1, x2) lik opplæring verdier vil også føre til riktig utgang verdier; denne funksjonen av neural nettverk kalles "generalization" og er den viktigste verdien av neural nettverk.
Som vi forsøke å "stige" til overflaten av kvadrerte feil, må vi "sprang før vi ser!"
Vi oppdaterer vekt vektorgrafikk og favorisering, og vi evaluerer "høyden" av overflaten på vår nye plassering.
En konsekvens av dette er at vi kan flytte til et sted med en mer ekstreme feil.
En annen konsekvens er at det kan ta en stund å stige tilbake til dybden av vår forrige plassering.
Muligheten for "Leaping" til mer ekstreme topper og daler av feilen overflate er direkte relatert til "læring rente," fordi læring rate avgjør hvor mye innflytelse feil verdier har på vår vekt og bias endringer.
Følgende diagram viser hvordan øke læring rate hastens vår ankomst på lavere plasseringer på squared error overflaten, hvor feilen er minimert.
Diagrammet viser også at å øke læring satsen også introduserer muligheten for å gjøre dårlige fremgangsmåten:

KORTVARIG utvikling av rot-betyr-squared (RMS) feil for hele opplæringen sett over flere trening gjentakelser, for læring priser 0.1, 0.5, 1.0, og 2.0.
Her er en graf av rot-betyr-squared output feil av en multi-lags nettverk med opplæring sett med 19386 elementer som opplevd mange dårlige skritt på veien til de beste vekt vektorer:

Opplæring av og til støter på toppene i roten-betyr-squared (RMS) feil, når feilen øker for noen gjentakelser før gjenoppta en fallende trend.
Noen ganger trenden er ganske enkelt jevn konvergens til ønsket sett av vekter:

Utvikling av rot-betyr-squared (RMS) feil for hele opplæringen sett over flere trening gjentakelser, for læring priser 0.1, 0.5, 1.0, og 2.0.
8. Eksempel: Exclusive-eller (xor)
"Exclusive-eller" (xor) er en funksjon som tar imot to boolske innganger og gir et enkelt Boolsk produksjon i henhold til følgende tabell:
|
X1
|
X2
|
Y = xor (X1, X2)
|
|
0
|
0
|
0
|
|
0
|
1
|
1
|
|
1
|
0
|
1
|
|
1
|
1
|
0
|
Vanligvis en enkelt Nevron har innganger {x1, x2, ...}, inn gjennom koblinger med vekter {w1, w2, ...}.
Den Nevron beregner en middels mengde d = bias + (w1*x1 + w2*x2 + ...), som kan betraktes som identifiserer hvilken planet, i en uendelig rekke parallelle fly, inneholder et bestemt punkt med koordinater {x1, x2, ...}.
Den Nevron beregner en produksjon verdi, y = ActivationFunction( d ), som har effekt av å splitte uendelig sett med parallelle fly i to sett, med ett sett produserende lav produksjon verdier, og de andre satt i produksjon med høy produksjon verdier.
Dermed vil en enkelt Nevron deler flerdimensjonale rommet i to regioner, atskilt av flyet bias + w1*x1 + w2*x2 + ... = 0, og tildeler lav produksjon verdier for punktene i regionen på den ene siden av flyet, og tildeler høy produksjon verdier for punktene i regionen på motsatt side av flyet.
Derfor, hvis to sett av punkter i flerdimensjonale rom har forskjellige klassifiseringer og kan være helt atskilt av et fly, da en enkelt Nevron kan brukes til å klassifisere riktig poeng fra disse settene som hører til ett sett eller den andre.
Den eksklusive-eller (xor) funksjon klassifiserer poeng i to-dimensjonale rommet (med koordinatene (x1, x2)) slik at punktene i settet { (0,0), (1,1) } er klassifisert som produserer en effekt på "0," og peker på settet { (0,1), (1,0) } er klassifisert som produserer en effekt på "1."
Det er ikke enkelt "planet" (i dette tilfellet, en linje) som kan skille disse fire poeng på de to settene.
Derfor kan en enkelt Nevron kan ikke brukes til å klassifisere poeng i henhold til eksklusiv-eller (xor) funksjon.
En enkelt Nevron kan bare dele plass med poeng i to regioner.
Den eksklusive-eller (xor) funksjon klassifiserer poeng på en måte som i hovedsak skiller en to-dimensjonale rommet i tre regioner (eller, alternativt, fire regioner).
To neurons kan splitte to-dimensjonale rommet i tre områder (for eksempel ved at to forskjellige parallelle linjer), og kan dermed brukes til å klassifisere poeng i henhold til eksklusiv-eller (xor) funksjon.
En tredje Nevron kan brukes til å kombinere resultatene av de to andre neurons i en enkelt produksjon.
Følgende nettverk, med to innganger og to Nevron organer i det første laget, og en enkelt Nevron i andre lag, og én utgang, kan brukes til å klassifisere poeng i henhold til eksklusiv-eller (xor) funksjon.
Følgende nettverk kan enten være opplært til å beregne den eksklusive-eller (xor) funksjon, eller nettverk kan ganske enkelt ha sin vekt og bias verdier tilordnet på en måte som gir den ønskede virkemåten.

Et nettverk i stand til å klassifisere poeng i henhold til eksklusiv-eller (xor)
Datamaskinen koden tilknyttet dette dokumentet viser trening av nettverk vist i diagrammet ovenfor for å samsvare med eksklusiv-eller (xor) funksjon.
The neural nettverk av og til ikke klarer å lære funksjonen, men den kan bare bli startet på nytt for å prøve å lære med et nytt sett av opprinnelige vekter.
Hvis programvaren vellykket lærer den eksklusive-eller (xor) funksjon, deretter produksjon ligner på følgende:
x1 = 0.0000 x2 = 0.0000 y = 0.0172 error = 0.0172
x1 = 1.0000 x2 = 0.0000 y = 0.9802 error = -0.0198
x1 = 0.0000 x2 = 1.0000 y = 0.9839 error = -0.0161
x1 = 1.0000 x2 = 1.0000 y = 0.0154 error = 0.0154
Produksjonsgapet (y) er innenfor 2% av ønsket verdi for hver av de fire kombinasjoner av variablene (x1, x2).
Selv om nettverket ble opplært til å lære output verdier for bare fire kombinasjon av variabler (med verdier 0.0 og 1.0, representerer boolske verdier), innganger til nettverk kan være satt til en vilkårlig flyttallsytelse verdier.
Følgende bilde viser produksjon av trenet nettverk av mange kombinasjoner av input verdier:

Et nettverk i stand til å klassifisere poeng i henhold til eksklusiv-eller (xor)
Overflaten representerer produksjon av nettverk for alle mulige input kombinasjoner (x1, x2) i områdene [ -2.0, +2.0 ].
Produksjonsgapet er nær 0.0 på lavere områder på overflaten, og produksjonen er nær 1.0 på de høyeste områdene på overflaten.
Vær oppmerksom på at overflaten er lav for at punktene { (0,0), (1,1) }, og overflaten er høy på poeng { (0,1), (1,0) }.
Nettverket ble bare trent til å produsere ønskede resultatene for fire bestemte kombinasjoner av input variabler, men nettverk produserer også utganger for alle andre mulige kombinasjoner av input-verdier.
Muligheten av neural nettverk for å produsere rimelige tiltak for generelle tilfeller etter at de er opplært til konkrete tilfeller kan anses som "generalization."
Enhver prosess som passer dataene peker på en modell som passer peker på en linje eller kurve, også produserer en "generalizing" effekt, slik at montering ett nettverk for å produsere ønskede resultater for bestemte leksjoner resulterer i en slags generalization er ikke ekstraordinær, men det er likevel interessant å observere evnen til å generalisere fra bestemte tilfeller.
9. Eksempel: Tic-tac-toe "(Naughts og krysser)"
9.1 Innledning
Tic-tac-toe "(Naughts og krysser)" er et enkelt spill spilles på en 3 * 3 rutenett av celler som kan bli merket med "O" eller "X".
Spillere vekselvis sted "O" og "X" karakterer på ledig cellene til en av spillerne fullfører en rad, kolonne eller diagonal.
Siden det er 3 rader og 3 kolonner og 2 diagonaler, det er åtte vinne mønstre for hver spiller.

Tic-Tac-Toe bordet og vinnende mønstre
Det er trivielt å skrive en Rekursiv funksjon som undersøker alle mulige Tic-Tac-Toe spill, fordi den maksimale varigheten av spillet er ni trekk.
På hvert punkt i spillet vi bare undersøke resultatene av flytting i hver av de gjenværende ledig celler.
En slik funksjon kan bekrefte at en Tic-Tac-Toe spillet spilles med "perfekt spillere" vil ende med ingen vinner.
9.2 Opplæring ett nettverk for å indikere den beste trekk
En Rekursiv funksjon kan utforske alle mulige spill og finne det beste flytte for hvert bord.
Vi legger til hvert bord konfigurasjon (innganger), og den beste flytte (ønskede utganger), til en liste over trening eks.
Vi så trener nettverk for å produsere de ønskede resultatene for hvert sett med innganger.
Nettverket vil ha 9 innganger tilsvarende for hver celle av rutenettet, og input-verdier vil være begrenset til følgende verdier:
0: ledig celle
+1: Protagonist spiller
-1: Motstander spiller
Nettverket vil ha 9 utgangene tilsvarende for hver celle av rutenettet, og produksjonen vil være begrenset til følgende verdier:
0: Ikke flytt her
1: Flytt hit
Åtte utganger vil bli satt til "0," og en utgang vil bli satt til "1."
Derfor, etter opplæring i nettverk, et styre konfigurasjonen kan være angitt som inndata, og nettverk vil indikere den beste farten.
Produksjonsgapet nærmest "1" viser de beste flytte, og alle andre utganger bør være nær "0."
Generelt noen funksjon med boolske parametere og boolske utganger kan være representert av et nettverk med to lag neurons.
Det første laget av neurons kan dele flerdimensjonale plass i regionene, og det andre laget kombinerer regionen klassifikasjoner for å produsere de riktige output verdier.
Den Tic-Tac-Toe nettverk produserer Boolsk utganger, og selv om innganger har tre stater ( -1, 0, +1 ), vi kunne i princple, konvertere disse få diskret inngang verdier til et sett av boolske innganger.
Derfor, to lag neurons bør være tilstrekkelig til å lære Tic-Tac-Toe.
Fordi nettverket har 9 utganger, det er 9 Nevron organer i den endelige (andre) laget.
Den eneste gjenværende nettverk design beslutningen er å fastlegge antall Nevron organer til å sette inn det første laget av nettverk.
For å ta denne beslutningen, maskin-kode kan generere og trene ett nettverk med N neurons i det første laget.
Muligheten av nettverk for å lære den komplette trening satt for Tic-Tac-Toe kan være i diagrammet.
Følgende diagram viser den generelle opplæring satt feil under trening for hver av 48 forskjellige neural nettverk, med N = 1,2,...,48 neurons i det første laget.

Samlet trening satt feil under trening, for N = 1,2,...,48 neurons i det første laget (N = 1 er øverst og N = 48 er på bunnen, og de fleste mellomliggende kurvene er lavere for høyere verdier av N)
En annen måte å visualisere denne trenden er å danne en overflate fra sekvens av kurver:

Samlet trening satt feil under trening, for N = 1,2,...,48 neurons i det første laget (N = 1 er på baksiden, og N = 48 er på forsiden)
Således ser vi at etter hvert som vi nærmer N = 48 neurons i det første laget, nettverket synes å være i stand til å godta all opplæring tilfeller.
Alt færre enn 48 neurons nivåer synes utilstrekkelig for å lære den komplette sett av tilfellene.
For lavt antall neurons, hver ekstra Nevron reduserer den totale feilen.
Men når antall neurons er nær det antall som kreves for å lære hele sett med leksjoner, hver ekstra Nevron bare reduserer feil ved et relativt lite beløp.
Følgende bilde viser et nettverk med 9 innganger, og 48 Nevron organer i det første laget, og 9 Nevron organer i andre lag, og 9 utganger.

Et nettverk i stand til å lære å spille tic-tac-toe
Datamaskinen koden tilknyttet dette dokumentet inneholder kode for å bygge og trener nettverk vist ovenfor.
Treningen sett har 4520 trening eks.
I 200 opplæring gjentakelser (som involverer 3 forplantning trinn, for hele 200 * 4520 * 3 = 2712000 simulering trinn og samme antall feil forplantning trinn), den totale feilen ble redusert fra 1.520 til 0.153.
(Disse tallene kan variere i henhold til tilfeldige første forholdene.)
Treningen kreves flere minutter.
Følgende er to eksempler på angitte innganger og utganger produsert av trenet nettverk:
Scenario #1:
Input:
1.0000 -1.0000 0.0000
0.0000 1.0000 -1.0000
-1.0000 0.0000 0.0000
Best move:
0.0001 0.0000 0.0676
0.0001 0.0000 0.0000
0.0000 0.0000 0.9870
Scenario #2:
Input:
-1.0000 -1.0000 0.0000
1.0000 1.0000 0.0000
0.0000 0.0000 0.0000
Best move:
0.0000 0.0000 0.0859
0.0000 0.0000 0.9819
0.0000 0.0000 0.0000
Nettverket ble opplært til å produsere de beste trekk for den spilleren som har mark tilsvarer "+1."
Den beste flytte til motspilleren spiller, hvis mark tilsvarer "-1," kan bli funnet ved å multiplisere alle innganger av (-1) før simulere den nettverk.
10. Opplæring neural nettverk
Følgende er et sitat fra "Artificial Intelligence" (3rd