Biografier Kjennetegn Analyse

Tilbakepropageringsalgoritme. Tilbakepropageringsmetode: matematikk, eksempler, kode

I flerlags nevrale nettverk er de optimale utgangsverdiene for nevroner i alle lag, bortsett fra det siste, vanligvis ukjente.

En måte å løse dette problemet på er å utvikle sett med utgangssignaler som tilsvarer inngangssignalene for hvert lag. nevrale nettverket, som selvfølgelig er en svært tidkrevende operasjon og ikke alltid er gjennomførbar. Det andre alternativet er dynamisk justering av vektkoeffisientene til synapser, hvor som regel, svake bånd og endre med en liten mengde i en eller annen retning, og bare de endringene lagres som førte til en reduksjon i feilen ved utgangen av hele nettverket. Det er åpenbart at denne metoden, på tross av

tilsynelatende enkelhet, krever tungvinte rutineberegninger. Og til slutt, det tredje, mer akseptable alternativet er forplantning av feilsignaler fra utgangene til det nevrale nettverket til dets innganger, i motsatt retning av foroverforplantningen av signaler i normal drift. læringsalgoritme kalles prosedyren tilbakeforplantning feil (feil tilbake forplantning) Det er han som anses nedenfor

Backpropagation er en iterativ gradientlæringsalgoritme som brukes til å minimere standardavvik strøm fra de nødvendige utgangene til flerlags nevrale nettverk med serielle forbindelser

Etter metoden minste kvadrater, er den objektive funksjonen til den nevrale nettverksfeilen som minimeres verdien

hvor er ekte utgangstilstand nevron ved utgangslaget til det nevrale nettverket når et bilde mates til inngangene, den nødvendige utgangstilstanden til dette nevronet

Summen utføres over alle nevroner i utgangslaget og over alle bildene behandlet av nettverket. Minimering ved gradientnedstigningsmetoden gir justering av vektkoeffisientene som følger

hvor er vektkoeffisienten til den synaptiske forbindelsen som forbinder nevronet i laget med nevronet i laget er læringshastighetskoeffisienten,

I samsvar med regelen om differensiering av en kompleks funksjon

hvor er den vektede summen av inngangssignalene til nevronet, argumentet for aktiveringsfunksjonen. jevne funksjoner, som en hyperbolsk tangens eller en klassisk sigmoid med en eksponent (se tabell 1 1) For eksempel, i tilfellet med en hyperbolsk tangens

Den tredje multiplikatoren er lik utgangen fra nevronen til det forrige laget

Når det gjelder den første faktoren i (1.11), kan den enkelt utvides som følger:

Her utføres summeringen over blant nevronene i laget. Vi introduserer en ny variabel:

vi får en rekursiv formel for å beregne verdiene til laget fra verdiene til det eldre laget

For utdatalaget:

Nå kan vi skrive (1.10) i utvidet form:

Noen ganger, for å gi vektkorreksjonsprosessen litt treghet, og jevner ut skarpe hopp når du beveger deg langs overflaten objektiv funksjon, (1.17) er supplert med verdien av vektendringen ved forrige iterasjon.

hvor er treghetskoeffisienten; nummeret på gjeldende iterasjon.

Dermed er den komplette nevrale nettverksopplæringsalgoritmen ved bruk av tilbakepropageringsprosedyren konstruert som følger.

TRINN 1. Send inn et av de mulige bildene til nettverksinngangene og i modusen for normal drift av det nevrale nettverket, når signaler forplanter seg fra innganger til utganger, beregn verdiene til sistnevnte. Husk det:

hvor er antall nevroner i laget, tatt i betraktning nevronet med en konstant utgangstilstand som setter forskyvningen; lag nevroninngang

hvor er sigmoid,

hvor er komponenten til inngangsbildevektoren.

TRINN 4. Juster alle vekter i det nevrale nettverket:

TRINN 5. Hvis nettverksfeilen er betydelig, gå til trinn 1. Avslutt ellers.

Nettverket på trinn 1 presenteres vekselvis med alle treningsbilder i en tilfeldig rekkefølge slik at nettverket billedlig talt ikke glemmer ett da det husker andre.

Fra uttrykk (1.17) følger det at når utgangsverdien har en tendens til null, synker læringseffektiviteten markant. Med binære inngangsvektorer vil i gjennomsnitt halvparten av vektkoeffisientene ikke bli korrigert, så det er ønskelig å skifte rekkevidden av mulige verdier av nevronutganger innenfor grensene, som oppnås ved enkle modifikasjoner av logistiske funksjoner. For eksempel blir en sigmoid med en eksponent konvertert til formen:

Vurder spørsmålet om kapasiteten til et nevralt nettverk, det vil si antall bilder som presenteres for inngangene det er i stand til å lære å gjenkjenne. For nettverk med mer enn to lag forblir dette spørsmålet åpent. For nettverk med to lag estimeres den deterministiske kapasiteten til nettverket som følger:

hvor er antall justerbare vekter, er antall nevroner i utgangslaget.

Dette uttrykket oppnås med visse begrensninger. For det første må antall innganger og nevroner i det skjulte laget tilfredsstille ulikheten. For det andre ble estimatet ovenfor gjort for nettverk med terskelaktiveringsfunksjoner til nevroner, og kapasiteten til nettverk med jevne aktiveringsfunksjoner, for eksempel (1.23). er vanligvis større. I tillegg betyr begrepet deterministisk at det resulterende kapasitetsestimatet er egnet for alle inngangsmønstre som kan representeres av inngangene. I virkeligheten har distribusjonen av inngangsbilder som regel en viss regelmessighet, noe som lar det nevrale nettverket generalisere og dermed øke den reelle kapasiteten. Siden distribusjonen av bilder, i generell sak, er ikke kjent på forhånd, kan man snakke om den reelle kapasiteten bare antagelig, men vanligvis er den to ganger høyere enn den deterministiske kapasiteten.

Spørsmålet om kapasiteten til et nevralt nettverk er nært knyttet til spørsmålet om den nødvendige kapasiteten til utgangslaget til nettverket som utfører den endelige klassifiseringen av bilder. For eksempel, for å dele et sett med inngangsbilder i to klasser, er ett utgangsnevron tilstrekkelig. Samtidig, hver logisk nivå vil betegne en egen klasse. På to utgangsnevroner med en terskelaktiveringsfunksjon kan fire klasser allerede være kodet. For å øke klassifiseringsreliabiliteten er det ønskelig å introdusere redundans ved å allokere ett nevron til hver klasse i utgangslaget eller, enda bedre, flere, som hver er opplært til å bestemme om et bilde tilhører en klasse med sin egen grad av pålitelighet , for eksempel: høy, middels og lav. Slike nevrale nettverk gjør det mulig å klassifisere inngangsbilder kombinert til uklare (fuzzy eller kryssende) sett. Denne egenskapen bringer slike nettverk nærmere de reelle betingelsene for funksjonen til biologiske nevrale nettverk.

Det betraktede nevrale nettverket har flere flaskehalser. Først i prosessen, store positive eller negative verdier vekter kan flytte operasjonspunktet på sigmoidene til nevronene til metningsområdet. Små verdier av den deriverte av den logistiske funksjonen vil føre, i samsvar med (1.15) og (1.16), til å stoppe læringen, noe som lammer nettverket. For det andre garanterer ikke bruken av gradientnedstigningsmetoden å finne det globale minimum av objektivfunksjonen. Dette er nært knyttet til spørsmålet om valg av læringsgrad. Inkrementene til vektene og derfor læringshastigheten for å finne ekstremumet må være uendelig, men i dette tilfellet vil læringen være

være uakseptabelt sakte. På den annen side kan for store vektkorrigeringer føre til permanent ustabilitet i læreprosessen. Derfor velges vanligvis et tall mindre enn 1 (for eksempel 0,1) som læringshastighetskoeffisient 1], som gradvis avtar i løpet av læringsprosessen. I tillegg, for å utelukke tilfeldige treff nettverk til lokale minima, noen ganger, etter stabilisering av verdiene til vektkoeffisientene, økes 7 kort betraktelig for å starte gradientnedstigning fra nytt punkt. Hvis gjentakelse av denne prosedyren flere ganger bringer nettverket til samme tilstand, kan det antas at et globalt minimum er funnet.

Det er en annen metode for å eliminere lokale minima og nettverkslammelse, som er å bruke stokastiske nevrale nettverk.

La oss gi den ovennevnte geometriske tolkningen.

Tilbakepropageringsalgoritmen beregner feiloverflategradientvektoren. Denne vektoren indikerer retningen til den korteste nedstigningen på overflaten fra det nåværende punktet, bevegelse langs som fører til en reduksjon i feilen. En sekvens med avtagende trinn vil føre til minimum en eller annen type. Vanskeligheten her er spørsmålet om å velge lengden på trinnene.

stor størrelse trinnkonvergens vil være raskere, men det er fare for å hoppe over løsningen, eller i tilfelle kompleks form feilflater går i feil retning, for eksempel ved å bevege seg langs en smal ravine med bratte bakker, og hoppe fra den ene siden til den andre. Tvert imot, med et lite skritt og riktig retning det vil ta mange iterasjoner. I praksis blir trinnstørrelsen tatt proporsjonalt med skråningens bratthet, slik at algoritmen bremser ned nær minimum. Riktig valg Læringshastigheten avhenger av den spesifikke oppgaven og gjøres vanligvis empirisk. Denne konstanten kan også avhenge av tid, og avta etter hvert som algoritmen utvikler seg.

Vanligvis er denne algoritmen modifisert for å inkludere et momentum (eller treghet) begrep. Dette fremmer bevegelse i en fast retning, så hvis flere trinn ble tatt i samme retning, øker algoritmen hastigheten, noe som noen ganger unngår lokalt minimum, samt gå raskere gjennom flate områder.

Ved hvert trinn i algoritmen mates alle treningseksempler etter tur til inngangen til nettverket, de reelle utgangsverdiene til nettverket sammenlignes med de nødvendige verdiene, og feilen beregnes. Verdien av feilen samt gradienten til feiloverflaten

brukes til å justere skalaene, hvoretter alle handlinger gjentas. Læringsprosessen stopper enten når et visst antall epoker er passert, eller når feilen når et visst lite nivå, eller når feilen slutter å avta.

La oss vurdere problemene med generalisering og omskolering av et nevralt nettverk mer detaljert. Generalisering er evnen til et nevralt nettverk til å gjøre en nøyaktig prediksjon på data som ikke tilhører det originale treningssettet. Overtilpasning, derimot, er overtilpasning som oppstår når læringsalgoritmen kjører for lenge og nettverket er for komplekst for oppgaven eller for mengden data som er tilgjengelig.

La oss demonstrere problemene med generalisering og omskolering ved å bruke eksemplet med å tilnærme en viss avhengighet ikke ved hjelp av et nevralt nettverk, men ved hjelp av polynomer, mens essensen av fenomenet vil være helt den samme.

Polynomgrafer kan ha annen form, og jo høyere grad og antall medlemmer, desto mer kompleks kan denne formen være. For de innledende dataene er det mulig å velge en polynomkurve (modell) og dermed få en forklaring på den eksisterende avhengigheten. Dataene kan være støyende, så det kan ikke antas at beste modellen passerer nøyaktig gjennom alle tilgjengelige poeng. Et lavordens polynom kan bedre forklare den eksisterende avhengigheten, men være ikke fleksibel nok til å passe til dataene, mens polynomet høy orden kan være for fleksibel, men vil følge dataene nøyaktig, samtidig som de antar en kronglete form som ikke har noe med den reelle avhengigheten å gjøre.

Nevrale nettverk møter de samme vanskelighetene. Nettverk med et stort antall vekter modell mer komplekse funksjoner og derfor utsatt for overtilpasning. Nettverk med et lite antall vekter er kanskje ikke fleksible nok til å modellere de eksisterende avhengighetene. For eksempel modellerer et nettverk uten skjulte lag bare en vanlig lineær funksjon.

Hvordan velge riktig grad av nettverkskompleksitet? Nesten alltid gir et mer komplekst nettverk en mindre feil, men dette er kanskje ikke en indikasjon på god kvalitet modell, men om omskolering av nettverket.

Veien ut er å bruke kontrollkryssvalidering. For å gjøre dette reserveres en del av treningsprøven, som brukes til ikke å trene nettverket i henhold tiln, men til uavhengig kontroll av resultatet under algoritmen. I begynnelsen av arbeidet, en nettverksfeil på trening og

kontrollsettene vil være de samme. Etter hvert som nettverket trenes, reduseres læringsfeilen, det samme gjør feilen på kontrollsettet. Hvis kontrollfeilen sluttet å avta eller til og med begynte å øke, indikerer dette at nettverket har begynt å tilnærme dataene for tett (omskolert) og trening bør stoppes. Hvis dette skjer, bør antallet skjulte elementer og/eller lag reduseres, fordi nettverket er for kraftig for denne oppgaven. Hvis begge feilene (trening og kryssvalidering) ikke når et tilstrekkelig lite nivå, skjedde selvfølgelig ikke omskolering, og nettverket er tvert imot ikke kraftig nok til å modellere den eksisterende avhengigheten.

De beskrevne problemene resulterer i praktisk jobb Med nevrale nettverk må du eksperimentere med et stort antall forskjellige nettverk, noen ganger trene hvert av dem flere ganger og sammenligne resultatene. Hovedindikatoren for kvaliteten på resultatet er kontrollfeilen. Samtidig, i henhold til det systemdekkende prinsippet, ut av to nettverk med ca like feil kontroll er det fornuftig å velge den som er enklere.

Behovet for flere eksperimenter fører til at kontrollsettet begynner å spille en nøkkelrolle i valg av modell og blir en del av læringsprosessen. Dette svekker dens rolle som et uavhengig kriterium for modellkvalitet. På store tall eksperimenter, er det stor sannsynlighet for å velge et vellykket nettverk som gir et godt resultat på kontrollsettet. Men for å gi den endelige modellen tilbørlig pålitelighet, fortsetter de ofte (når volumet av treningseksempler tillater det) som følger: et testsett med eksempler er reservert. Den endelige modellen testes på dataene fra dette settet for å sikre at resultatene som oppnås på trenings- og kontrollsettene med eksempler er reelle, og ikke artefakter fra treningsprosessen. Selvfølgelig, for å spille sin rolle godt, må testsettet bare brukes én gang: hvis det brukes gjentatte ganger for å korrigere læringsprosessen, vil det faktisk bli et kontrollsett.

For å fremskynde læringsprosessen til nettverket, foreslås en rekke modifikasjoner avn, assosiert med bruken av forskjellige feilfunksjoner, prosedyrer for å bestemme retningen og trinnstørrelser.

1) Feilfunksjoner:

Integrerte feilfunksjoner over hele settet med treningseksempler;

Feilfunksjoner av heltalls- og brøkpotenser

2) Prosedyrer for å bestemme trinnstørrelsen ved hver iterasjon

Dikotomi;

Treghetsforhold (se ovenfor);

3) Prosedyrer for trinnretningsbestemmelse.

Bruke en matrise av andreordens derivater (Newtons metode);

Bruke veibeskrivelse på flere trinn (partan-metoden).

Prudnikov Ivan Alekseevich
MIREA(MTU)

Emnet nevrale nettverk har allerede blitt dekket i mange tidsskrifter, men i dag vil jeg introdusere leserne til algoritmen for å trene et flerlags nevralt nettverk ved å bruke tilbakepropageringsmetoden og gi en implementering av denne metoden.

Jeg vil ta en reservasjon med en gang at jeg ikke er en ekspert innen nevrale nettverk, så jeg forventer av lesere konstruktiv kritikk, kommentarer og tillegg.

Teoretisk del

Dette materialet forutsetter en bekjentskap med det grunnleggende om nevrale nettverk, men jeg anser det som mulig å introdusere leseren til emnet uten unødvendige prøvelser på teorien om nevrale nettverk. Så, for de som hører uttrykket "nevralt nettverk" for første gang, foreslår jeg å oppfatte et nevralt nettverk som en vektet rettet graf, hvis noder (neuroner) er ordnet i lag. I tillegg har en node i ett lag lenker til alle noder i det forrige laget. I vårt tilfelle vil en slik graf ha input- og output-lag, hvis noder fungerer som henholdsvis innganger og utganger. Hver node (nevron) har en aktiveringsfunksjon - en funksjon som er ansvarlig for å beregne signalet ved utgangen til noden (nevron). Det er også konseptet forskyvning, som er en node, ved utgangen av hvilken en alltid vises. I denne artikkelen vil vi vurdere læringsprosessen til et nevralt nettverk som antar tilstedeværelsen av en "lærer", det vil si en læringsprosess der læring skjer ved å gi nettverket en sekvens av treningseksempler med korrekte svar.
Som med de fleste nevrale nettverk, er målet vårt å trene nettverket på en slik måte at det oppnås en balanse mellom nettverkets evne til å gi riktig respons på inputdata som brukes i læringsprosessen (memorisering) og evnen til å produsere de riktige resultatene som svar på inndataene, lignende, men ikke identiske med de som ble brukt i trening (generaliseringsprinsipp). Trening av nettverket ved hjelp av feiltilbakeforplantningsmetoden inkluderer tre trinn: tilførsel av data til inngangen, etterfulgt av datautbredelse i retning av utgangene, beregning og tilbakeføring av den tilsvarende feilen, og justering av vektene. Etter trening er det bare meningen å mate dataene til inngangen til nettverket og distribuere dem i retning av utgangene. På samme tid, hvis opplæringen av nettverket kan være en ganske langvarig prosess, er den direkte beregningen av resultatene av det trente nettverket veldig rask. I tillegg er det mange varianter av tilbakepropageringsmetoden designet for å øke hastigheten på læringsprosessen.
Det er også verdt å merke seg at et enkeltlags nevralt nettverk er betydelig begrenset i hvilke mønstre av inputdata det er gjenstand for læring, mens et flerlagsnettverk (med ett eller flere skjulte lag) ikke har en slik ulempe. Deretter vil det bli gitt en beskrivelse av et standard nevralt nettverk for tilbakepropagasjon.

Arkitektur

Figur 1 viser et flerlags nevralt nettverk med ett lag med skjulte nevroner (Z-elementer).

Nevronene som representerer utgangene til nettverket (angitt med Y) og de skjulte nevronene kan være partiske (som vist på bildet). Forskyvningen som tilsvarer utgangen Y k er betegnet med w ok , det skjulte elementet til Z j - V oj . Disse skjevhetene tjener som vekter på forbindelsene som kommer fra nevronene, hvis utgang alltid vises 1 (i figur 1 er de vist, men vanligvis ikke eksplisitt vist, underforstått). I tillegg viser piler i figur 1 bevegelsen av informasjon under dataspredningsfasen fra innganger til utganger. Under læringsprosessen forplanter signalene seg i motsatt retning.

Beskrivelse av algoritmen

Algoritmen som presenteres nedenfor, kan brukes på et nevralt nettverk med ett skjult lag, som er en gyldig og tilstrekkelig situasjon for de fleste applikasjoner. Som nevnt tidligere inkluderer nettverkstrening tre stadier: å levere treningsdata til inngangene til nettverket, tilbakespredning av feilen og justering av vektene. I løpet av det første trinnet mottar hvert inngangsnevron X i et signal og sender det til hver av de skjulte nevronene Z 1 , Z 2 ..., Z p . Hver skjult nevron beregner deretter resultatet av sin aktiveringsfunksjon (nettverksfunksjon) og sender signalet Z j til alle utgangsnevroner. Hvert utgangsnevron Yk beregner på sin side resultatet av sin aktiveringsfunksjon Yk, som ikke er noe mer enn utgangssignalet til dette nevronet for de tilsvarende inngangsdataene. I løpet av læringsprosessen sammenligner hvert nevron ved utgangen av nettverket den beregnede Yk-verdien med læreren levert tk (målverdi), og bestemmer den passende feilverdien for det gitte inngangsmønsteret. Basert på denne feilen beregnes σ k (k = 1,2,...m). σ k brukes når feilen spres fra Y k til alle nettverkselementer i det forrige laget (skjulte nevroner koblet til Y k), og også senere når du endrer vekten av forbindelser mellom utgangsneuroner og skjulte. Tilsvarende beregnes σj (j = 1,2,...p) for hver skjult nevron Z j . Selv om det ikke er behov for å spre feilen til inngangslaget, brukes σj til å endre vekten av forbindelser mellom nevroner i det skjulte laget og inngangsneuroner. Etter at alle σ er bestemt, justeres vektene til alle leddene samtidig.

Betegnelser:

Følgende notasjon brukes i nettverkslæringsalgoritmen:

X Input treningsdatavektor X = (X 1 , X 2 ,...,Xi ,...,X n).
t Vektor av lærerleverte målutganger t = (t 1 , t 2 ,...,t k ,...,t m)
σ k Komponent av justeringen av vekter av forbindelser w jk , tilsvarende feilen til utgangsneuronen Y k ; også informasjon om feilen til nevronet Y k , som er distribuert til de nevronene i det skjulte laget som er assosiert med Y k .
σ j Komponent av justeringen av vektene til forbindelsene v ij, tilsvarende feilinformasjonen som forplantes fra utgangslaget til det skjulte nevronet Zj.
en læringsrate.
X i Inndataneuron med indeks i. For inngangsneuroner er inngangs- og utgangssignalene de samme - X i.
v oj Offset av skjult nevron j.
Z j Skjult nevron j; Totalsum inngangen til det skjulte elementet Z j er betegnet med Z_in j: Z_in j = v oj +∑x i *v ij
Signalet på utgangen Z j (resultatet av å bruke aktiveringsfunksjonen til Z_in j) er betegnet med Z j: Z j = f (Z_in j)
w ok Output neuron offset.
Y k Utgangsnevron under indeks k; Den totale verdien som tilføres inngangen til utgangselementet Yk er betegnet med Y_in k: Y_in k = w ok + ∑ Z j *w jk. Utgangssignalet Y k (resultatet av å bruke aktiveringsfunksjonen til Y_in k) er betegnet med Y k:

Aktiveringsfunksjon

Aktiveringsfunksjonen i tilbakepropageringsalgoritmen må ha flere viktige egenskaper: kontinuitet, differensierbarhet, og være monotont ikke-avtagende. Av hensyn til beregningseffektiviteten er det dessuten ønskelig at dens deriverte er lett å finne. Ofte er aktiveringsfunksjonen også en metningsfunksjon. En av de mest brukte aktiveringsfunksjonene er den binære sigmoid-funksjonen med et område på (0, 1) og definert som:

En annen mye brukt aktiveringsfunksjon er den bipolare sigmoiden med rekkevidde (-1, 1) og definert som:


Læringsalgoritme

Læringsalgoritmen ser slik ut:

Initialisering av vekter (vekter av alle lenker initialiseres med tilfeldige små verdier).

Så lenge termineringsbetingelsen til algoritmen er falsk, utføres trinn 2 - 9.

For hvert par (data, målverdi) trinn 3 til 8 utføres.

Utbredelse av data fra innganger til utganger:

Trinn 3
Hvert inngangsnevron (X i, i = 1,2,...,n) sender det mottatte signalet X i til alle nevroner i det neste (skjulte) laget.

Hver skjult nevron (Z j , j = 1,2,...,p) summerer de vektede innkommende signalene: z_in j = v oj + ∑ x i *v ij og bruker aktiveringsfunksjonen: z j = f (z_in j) Deretter sender resultatet til alle elementene i neste lag (utdata).

Hvert utgangsnevron (Y k , k = 1,2,...m) summerer de vektede inngangssignalene: Y_in k = w ok + ∑ Z j *w jk og bruker en aktiveringsfunksjon, beregner utgangssignalet: Y k = f (Y_in k).

Tilbakepropagering:

Hvert utgangsnevron (Y k , k = 1,2,...m) mottar målverdien - utgangsverdien som er korrekt for det gitte inngangssignalet, og beregner feilen: σ k = (t k - y k)*f " ( y_in k) beregner også hvor mye vekten av forbindelsen w jk vil endres med: Δw jk = a * σ k * z j I tillegg beregner den offsetjusteringsverdien: Δw ok = a*σ k og sender σ k til nevroner i forrige lag.

Hver skjult nevron (z j , j = 1,2,...p) summerer de innkommende feilene (fra nevroner i neste lag) σ_in j = ∑ σ k * w jk og beregner feilverdien ved å multiplisere den resulterende verdien med avledet av aktiveringsfunksjonen: σ j = σ_in j * f "(z_in j), beregner også hvor mye lenkevekten vij vil endre seg med: Δv ij = a * σ j * x i. I tillegg beregner forskyvningsjusteringsbeløpet : v oj = a * σ j

Trinn 8. Endre vektene.

Hvert utgangsnevron (y k , k = 1,2,...,m) endrer vekten av dets forbindelser med bias-elementet og skjulte nevroner: w jk (ny) = w jk (gammel) + Δw jk
Hvert skjulte nevron (z j , j = 1,2,...p) endrer vekten av dets forbindelser med bias-elementet og utgangsneuroner: v ij (ny) = v ij (gammel) + Δv ij

Sjekker termineringstilstanden til algoritmen.
Betingelsen for å avslutte driften av algoritmen kan være både oppnåelsen av totalen kvadratisk feil resultatet ved utgangen av nettverket av et forhåndsbestemt minimum under læringsprosessen, og utførelsen av et visst antall iterasjoner av algoritmen. Algoritmen er basert på en metode som kalles gradient descent. Avhengig av tegnet, gradienten til funksjonen (i denne saken verdien av funksjonen er feilen, og parametrene er vekten av forbindelsene i nettverket) gir retningen som verdiene til funksjonen øker (eller reduseres) raskest.

Delta er en regel som brukes når man trener perceptronen, ved å bruke feilverdien til utgangslaget. Hvis nettverket har to eller flere lag, er det ingen eksplisitt feilverdi for mellomlag, og deltaregelen kan ikke brukes.

Hovedideen bak backpropagation er hvordan man får feilestimatet for skjulte lagneuroner. Legg merke til det berømt feil gjort av nevroner i utgangslaget oppstår pga ukjent feil av nevroner i skjulte lag. Hvordan mer verdi synaptisk forbindelse mellom nevronet til det skjulte laget og utgangsnevronet, jo sterkere feilen til den første påvirker feilen til den andre. Derfor kan estimatet av feilen til elementene i de skjulte lagene oppnås som en vektet sum av feilene til påfølgende lag.

Tilbake-propageringsalgoritmen (ABOR), som er en generalisering av delta-regelen, lar deg trene ANN PR med et hvilket som helst antall lag. Vi kan si at AOR faktisk bruker en slags gradientnedstigning, og omorganiserer vektene i retning av minimumsfeilen.

Ved bruk av AOR forutsettes det at en sigmoidfunksjon brukes som aktiveringsfunksjon. Denne funksjonen sparer beregningskostnader fordi den har en enkel derivativ:

Sigmoid-funksjonen begrenser sterke signaler til 1 og øker svake signaler.

Betydningen av fer at nettverket under trening først blir presentert med et bilde som utgangsfeilen beregnes for. Videre forplanter denne feilen seg gjennom nettverket i motsatt retning, og endrer vekten av interneuronale forbindelser.

Algoritmen inkluderer samme sekvens av handlinger som ved trening av perceptronen. Først innhentes vektene av interneuronale forbindelser tilfeldige verdier, så utføres følgende trinn:

1) Et treningspar er valgt ( X , Z*), X servert ved inngangen;

2) Beregn utgangen til nettverket Z = F(Y);

3) Utgangsfeil beregnes E;

4) Nettverksvektene justeres for å minimere feilen;

Trinn 1 og 2 er foroverforplantning over nettverket, mens trinn 3 og 4 er omvendt.

Før trening er det nødvendig å dele de eksisterende "input-output"-parene i to deler: trening og test.

Testpar brukes for å sjekke kvaliteten på treningen - NN er godt trent hvis den produserer en utgang nær test-en for input gitt av testparet.

Ved læring er en situasjon mulig når NN viser gode resultater for treningsdata, men dårlig for testdata. Det kan være to årsaker til dette:

1. Testdata er svært forskjellig fra treningsdata, dvs. treningsparene dekket ikke alle områder av inndatarommet.


2. Fenomenet "omskolering" har oppstått ( overmontering), når oppførselen til NN viser seg å være mer kompleks enn problemet som blir løst.

Siste sak for problemet med å tilnærme en funksjon ved punkter er illustrert i fig. 3.3, der hvite sirkler representerer testdata og mørke sirkler representerer treningsdata.

Strengt tatt er backpropagation en rask gradientberegningsmetode basert på funksjonene til nettverksomregningsfunksjonen, som kan redusere beregningskompleksiteten til gradientberegning. Metoden bruker feilen ved nettverksutgangen til å beregne partielle deriverte av vektene til det siste laget av trenede forbindelser, deretter bestemmes feilen ved utgangen av det nest siste laget fra vektene til det siste laget og nettverksfeilen, og prosessen gjentas.

Beskrivelse av algoritmen

Tilbakepropagering brukes på flerlagsnettverk hvis nevroner har ikke-lineariteter med en kontinuerlig derivativ, for eksempel:

Ikke-linearitet av denne typen er praktisk på grunn av enkelheten ved å beregne den deriverte:

For å trene nettverket brukes P-par med signalvektorer: inngangsvektoren I og vektoren som skal oppnås ved utgangen av nettverket D. Nettverket, i enkel sak, består av N lag, og hvert nevron i det neste laget er koblet til alle nevronene i det forrige laget med forbindelser, med vekter w [n].

Med forplantning fremover, for hvert lag, beregnes (og lagres) det totale signalet ved utgangen av laget (S [n]) og signalet ved utgangen av nevronet. Så, signalet ved inngangen til det i-te nevronet til det n-te laget:

Her er w (i, j) vektene til forbindelsene til det n-te laget. Signalet ved utgangen av nevronet beregnes ved å bruke nevronets ikke-linearitet på det totale signalet.

Utgangslagets signal x[N] anses å være utgangssignalet til nettverket O.

Basert på nettverksutgangssignalet O og signalet D, som skal oppnås ved nettverksutgangen for en gitt inngang, beregnes nettverksfeilen. Ofte brukt midtre firkant avvik for alle vektorer i treningsutvalget:

For å trene nettverket brukes gradienten til feilfunksjonen med vektene til nettverket. Tilbakepropageringsalgoritmen innebærer å beregne gradienten til feilfunksjonen ved å "tilbakepropagere" feilsignalet. Deretter beregnes den partielle deriverte av feilen med hensyn til obligasjonsvektene med formelen:

Her er q resten av nettverket, som for utgangslaget beregnes fra feilfunksjonen:

Og for skjulte lag - i henhold til resten av det forrige laget:

For tilfellet med sigmoid ikke-linearitet og gjennomsnittlig kvadratavvik som funksjon av feil:

Egentlig består nettverkstrening i å finne slike verdier av vekter som minimerer feilen ved nettverksutgangene. Det er mange metoder basert på eller ved hjelp av en gradient for å løse dette problemet. I det enkleste tilfellet utføres nettverkstrening ved å bruke små trinn med tilkoblingsvekter i retning motsatt av gradientvektoren:

Denne læringsmetoden kalles "gradient descent optimization" og, når det gjelder nevrale nettverk, blir den ofte ansett som en del av tilbakepropageringsmetoden.

Implementering av fved å bruke eksempelet på funksjonstilnærming

Oppgave: La det være en tabell med argumentverdier ( x Jeg ) og tilsvarende funksjonsverdier ( f(x Jeg )) ( denne tabellen kunne ha oppstått i beregningen av noen analytiske gitt funksjon når man utfører et eksperiment for å identifisere strømstyrkens avhengighet av motstand i et elektrisk nettverk, når man identifiserer en sammenheng mellom solaktivitet og antall samtaler til kardiologisk senter, mellom mengden tilskudd til bønder og volumet av landbruksproduksjon, etc.).

I Matlab-miljøet er det nødvendig å bygge og trene et nevralt nettverk for å tilnærme en tabellfunksjon, i=1, 20. Utvikle et program som implementerer nevrale nettverkstilnærmingsalgoritmen og viser tilnærmingsresultatene i form av grafer.

Tilnærmingen ligger i det faktum at vi ved å bruke den tilgjengelige informasjonen om f (x), kan vurdere en tilnærmingsfunksjon z (x) nær på en eller annen måte f (x), som lar oss utføre de riktige operasjonene på den og oppnå et estimat av feilen ved en slik utskifting.

Tilnærming betyr vanligvis beskrivelsen av noen, noen ganger ikke eksplisitt spesifisert, avhengighet eller settet med data som representerer den ved hjelp av en annen, vanligvis enklere eller mer enhetlig avhengighet. Ofte er dataene i form av individuelle hotspots, hvis koordinater er gitt av datatabellen. Tilnærmingsresultatet kan ikke passere gjennom knutepunktene. I motsetning til dette er oppgaven med interpolering å finne data i nærheten av knutepunktene. For dette brukes egnede funksjoner, hvis verdier i knutepunktene sammenfaller med koordinatene til disse punktene.

Oppgave. I Matlab-miljøet er det nødvendig å bygge og trene et nevralt nettverk for å tilnærme en gitt tabellfunksjon (se figur 5).

Figur 5. Tabell over funksjonsverdier I Matlabs matematiske miljø, i kommandovinduet, skriver vi koden til programmet for å lage og trene et nevralt nettverk.

For å løse bruker vi newff (.) funksjonen - opprettelsen av et "klassisk" flerlags NN med trening ved hjelp av tilbakepropageringsmetoden, dvs. endringen i vekten av synapser skjer under hensyntagen til feilfunksjonen, forskjellen mellom de reelle og korrekte responsene til det nevrale nettverket, bestemt på utgangslaget, forplanter seg i motsatt retning - mot strømmen av signaler. Nettverket vil ha to skjulte lag. Det er 5 nevroner i det første laget, 1 i det andre. Aktiveringsfunksjonen til det første laget er "tansig" (sigmoidfunksjon, returnerer utgangsvektorer med verdier i området fra - 1 til 1), den andre er "purelin" ( lineær funksjon aktivering, returnerer utgangsvektorene uendret). Det blir 100 treningsepoker. Treningsfunksjon "trainlm" - en funksjon som trener nettverket (brukes som standard, siden den gir mest rask læring, men krever mye minne).

Programkode:

P = null(1, 20);

for i = 1: 20 % matriseoppretting P (i) = i*0,1; %inndata (argument) end T= ; %input (funksjonsverdi) net = newff ([-1 2.09], ,("tansig" "purelin")); %opprette et nevralt nettverk. trainParam. epoker = 100; %sett antall treningsepoker net=train (netto,P,T); %nettverkstrening y = sim(net,P); %meningstrent nettverksfigur (1);

plot(P,T,P,y,"o"),rutenett; % tegning av grafen for de første dataene og funksjonen som dannes av det nevrale nettverket.

Resultatet av det nevrale nettverket.

Treningsresultat (se fig. 2): grafen viser treningstiden til det nevrale nettverket og treningsfeilen. I dette eksemplet gikk det nevrale nettverket gjennom alle 100 epoker, og lærte gradvis og reduserte feil, og nådde 10 -2,35 (0,00455531).

Figur 2. Resultatet av nevrale nettverkstrening

Graf over startdataene og funksjonen generert av det nevrale nettverket (se fig. 3): sirklene indikerer startdataene, og linjen er funksjonen generert av det nevrale nettverket. Videre, ved å bruke de oppnådde poengene, kan du bygge en regresjon og få en tilnærmingsligning (se figur 8). Vi brukte kubisk regresjon, siden grafen går mest nøyaktig gjennom de oppnådde punktene. Den resulterende ligningen ser slik ut:

y=0,049x 3 +0,88x 2 -0,006x+2,1.

Dermed ser vi at ved å bruke et nevralt nettverk, kan du raskt finne en funksjon, som bare kjenner koordinatene til punktene den passerer gjennom.

Figur 3. Graf over startdata og funksjonen som dannes av det nevrale nettverket


Figur 4. Graf over tilnærmingsfunksjonen

Tilbakepropageringsalgoritmen er en av metodene for å trene flerlags feedforward nevrale nettverk, også kalt flerlags perseptroner. Flerlags perseptroner brukes med hell for å løse mange komplekse problemer.

Trening med feinvolverer to passeringer gjennom alle lag i nettverket: fremover og bakover. I foroverpasset mates inngangsvektoren til inngangslaget til det nevrale nettverket, hvoretter den forplanter seg gjennom nettverket fra lag til lag. Som et resultat genereres et sett med utgangssignaler, som er den faktiske responsen til nettverket på et gitt inngangsbilde. Under foroverpasseringen er alle synaptiske vekter av nettverket faste. Under bakoverpasseringen justeres alle synaptiske vekter i henhold til feilkorrigeringsregelen, nemlig: den faktiske utgangen fra nettverket trekkes fra den ønskede, noe som resulterer i et feilsignal. Dette signalet forplanter seg deretter gjennom nettverket i retningen motsatt retning synaptiske forbindelser. Derav navnet - tilbakepropageringsalgoritme. Synaptiske vekter er innstilt for å gjøre nettverksutgangen så nært som mulig til ønsket.

La oss vurdere driften av algoritmen mer detaljert. La oss si at vi trenger å trene følgende nevrale nettverk ved å bruke tilbakepropageringsalgoritmen:

I figuren nedenfor er følgende konvensjoner brukt:

Som en aktiveringsfunksjon i flerlags perseptroner brukes som regel en sigmoidal aktiveringsfunksjon, spesielt en logistisk:

hvor er helningsparameteren til den sigmoideale funksjonen. Ved å endre denne parameteren er det mulig å konstruere funksjoner med ulik bratthet. La oss ta forbehold om at for alle påfølgende resonnementer, vil den bli brukt nøyaktig den logistiske aktiveringsfunksjonen, representert bare av formelen ovenfor.

Sigmoiden begrenser endringsområdet slik at verdien ligger mellom null og én. Flerlags nevrale nettverk har større representasjonskraft enn enkeltlags bare i nærvær av ikke-linearitet. Sammentrekningsfunksjonen gir den nødvendige ikke-lineariteten. Faktisk er det mange funksjoner som kan brukes. Tilbakepropageringsalgoritmen krever bare at funksjonen kan differensieres overalt. Sigmoiden tilfredsstiller dette kravet. Hans ekstra fordel består av automatisk forsterkningskontroll. For svake signaler (dvs. når de er nær null) har inngangs-utgangskurven en sterk helning, noe som gir en stor forsterkning. Når signalet blir større, synker forsterkningen. Dermed mottas store signaler av nettverket uten metning, og svake signaler passerer gjennom nettverket uten overdreven dempning.

Målet med nettverkstrening En er en slik justering av vektene at bruken av et visst sett med innganger fører til det nødvendige settet med utganger. For korthets skyld vil disse settene med innganger og utganger bli kalt vektorer. Under trening antas det at for hver inngangsvektor er det en paret målvektor som spesifiserer den nødvendige utgangen. Sammen kalles de treningsparet. Nettverket trenes på mange par.

Neste:

  1. Initialiser synaptiske vekter med små tilfeldige verdier.
  2. Velg neste treningspar fra treningssettet; mate inngangsvektoren til inngangen til nettverket.
  3. Beregn utgangen til nettverket.
  4. Beregn forskjellen mellom nettverksutgangen og ønsket utgang (treningsparmålvektor).
  5. Juster nettverksvektene for å minimere feil (som vist nedenfor).
  6. Gjenta trinn 2 til 5 for hver vektor i treningssettet til feilen på hele settet når et akseptabelt nivå.

Operasjonene utført av trinn 2 og 3 ligner på de som utføres under driften av et allerede trent nettverk, dvs. en inngangsvektor mates inn og den resulterende utgangen beregnes. Beregningene utføres i lag. På fig. 1, først beregnes utgangene til nevronene i laget (laget er input, noe som betyr at ingen beregninger finner sted i det), deretter brukes de som innganger til laget, utgangene fra nevronene i laget er beregnet, som danner utgangsvektoren til nettverket. Trinn 2 og 3 danner det som er kjent som et foroverpass når signalet går gjennom nettverket fra inngang til utgang.

Trinn 4 og 5 utgjør "tilbakepasseringen" hvor det beregnede feilsignalet forplanter seg tilbake gjennom nettverket og brukes til å justere vektene.

La oss se nærmere på trinn 5 – justering av nettverksvektene. Det er to tilfeller å skille her.

Tilfelle 1. Justering av utgangslags synaptiske vekter

For eksempel, for den nevrale nettverksmodellen i fig. 1, vil dette være vekter med følgende betegnelser: og . La oss definere at indeksen vil betegne nevronet som den synaptiske vekten kommer ut fra, og nevronet den kommer inn i:

La oss introdusere verdien , som er lik forskjellen mellom de nødvendige og reelle utgangene, multiplisert med den deriverte av den logistiske aktiveringsfunksjonen (se ovenfor for formelen for den logistiske aktiveringsfunksjonen):

Deretter vil vektene til utgangslaget etter korrigering være lik:

Her er et eksempel på beregninger for synaptisk vekt:

Tilfelle 2. Justering av de synaptiske vektene til det skjulte laget

For den nevrale nettverksmodellen i fig. 1, vil disse være vektene som tilsvarer lagene og . La oss definere at indeksen vil betegne nevronet som den synaptiske vekten kommer ut fra, og nevronet den kommer inn i (vær oppmerksom på utseendet til en ny variabel).