Articles

Forstå nevrale nettverk 2: matematikken til nevrale nettverk i 3 ligninger

i første del av denne serien diskuterte vi konseptet med et nevralt nettverk, samt matematikken som beskriver en enkelt neuron. Det er imidlertid mange nevroner i et enkelt lag og mange lag i hele nettverket, så vi må komme opp med en generell ligning som beskriver et nevralt nettverk.

Enkelt neuron

det første nettverket vårt trenger å gjøre er å sende informasjon fremover gjennom lagene. Vi vet allerede hvordan du gjør dette for en enkelt neuron:

Utgangen av nevronet er aktiveringsfunksjonen til en vektet sum av nevronets inngang

2 neuroner

Nå kan Vi bruke samme logikk når vi har 2 nevroner i det andre laget.

i dette eksemplet er hver nevron i det første laget koblet til hver nevron i det andre laget, denne typen nettverk kalles fullt tilkoblet nettverk. Neuron Y1 er koblet Til nevroner X1 Og X2 med vekter W11 Og W12 og neuron Y2 er koblet Til nevroner X1 og X2 med vekter W21 Og W22. I denne notasjonen indikerer den første indeksen for av vekten utgangsneuronen og den andre indeksen indikerer inngangsneuronen, så For Eksempel Er W12 vekt på tilkobling Fra X2 Til Y1. Nå kan vi skrive ligningene For Y1 Og Y2:

nå kan denne ligningen uttrykkes ved hjelp av matrisemultiplikasjon.

visualisering av matrisemultiplikasjon fra http://matrixmultiplication.xyz/

Hvis du er ny på matrisemultiplikasjon og lineær algebra, og dette gjør deg forvirret, anbefaler jeg 3blue1brown lineær algebra serie.

Nå kan vi skrive utgang av første neuron Som Y1 og utgang av andre neuron Som Y2. Dette gir oss følgende ligning:

Hele laget

Fra dette kan vi abstrahere den generelle regelen for lagets utgang:

nå i denne ligningen er alle variabler matriser og multiplikasjonstegnet representerer matrisemultiplikasjon.

Bruk av matrise i ligningen tillater oss å skrive det i en enkel form og gjør det sant for et hvilket som helst antall inngang og nevroner i utgangen.

i programmering av nevrale nettverk bruker vi også matrisemultiplikasjon, da dette gjør at vi kan gjøre databehandlingen parallell og bruke effektiv maskinvare for det, som grafikkort.

Nå har vi ligning for et enkelt lag, men ingenting stopper oss fra å ta ut av dette laget og bruke det som en inngang til neste lag. Dette gir oss den generiske ligningen som beskriver utgangen av hvert lag av nevrale nettverk. Jeg vil forklare hvorfor vi trenger aktiveringsfunksjoner i neste del av serien, for nå kan du tenke på som en måte å skalere utgangen på, slik at den ikke blir for stor eller for ubetydelig.

med denne ligningen kan vi forplante informasjonen gjennom så mange lag av det nevrale nettverket som vi vil. Men uten læring er nevrale nettverk bare et sett med tilfeldige matrisemultiplikasjoner som ikke betyr noe.

Så hvordan lærer vi vårt nevrale nettverk? For det første må vi beregne feilen i det nevrale nettverket og tenke hvordan du sender denne feilen til alle lagene.

2: Passerer feil-Back-forplantning

for å forstå feilutbredelsesalgoritmen må vi gå tilbake til et eksempel med 2 nevroner i det første laget og 1 nevron i det andre laget.

La Oss anta At Y-laget er utgangslaget av nettverket, Og Y1-neuron skal returnere noen verdi. Nå kan denne verdien være forskjellig fra forventet verdi med ganske mye, så Det er noen feil På Y1-nevronen. Vi kan tenke på denne feilen som forskjellen mellom den returnerte verdien og forventet verdi. Vi kjenner feilen På Y1, men vi må passere denne feilen til de nedre lagene i nettverket fordi vi vil at alle lagene skal lære, ikke Bare Y-laget. Så hvordan sender du denne feilen Til X1 Og X2? Vel, en naiv tilnærming ville være å dele Y1-feilen jevnt, siden det er 2 nevroner i x-laget, kan vi si at Både X1 og X2-feilen er lik Y1-feilen utviklet av 2.

det er imidlertid et stort problem med denne tilnærmingen — nevronene har forskjellige vekter knyttet til dem. Hvis vekten koblet Til X1 neuron er mye større enn vekten koblet Til X2 neuron feilen På Y1 er mye mer påvirket Av X1 Siden Y1 = (X1 * W11 + X2 * X12). Så Hvis W11 er større Enn W12, bør vi passere Mer Av Y1-feilen Til X1-nevronen, siden dette er nevronen som bidrar til det.

Nå som vi har observert det, kan vi oppdatere vår algoritme for ikke å dele feilen jevnt, men å dele den i henhold til rasjonen av inngangsneuronvekten til alle vekter som kommer til utgangsneuronen.

oppdater vekten

nå kan Vi gå et skritt videre og analysere eksemplet der det er mer enn en neuron i utgangslaget.

neuron X1 bidrar ikke bare Til feilen Til Y1, men også Til feilen Til Y2, og denne feilen er fortsatt proporsjonal med dens vekter. Så, i ligningen som beskriver feil På X1, trenger viå ha Både feil På Y1 multiplisert med forholdet mellom vekter Og feil På Y2 multiplisert med forholdet mellom vekter som kommer Til Y2.

denne ligningen kan også skrives i form av matrisemultiplikasjon.

Nå er det enda et triks vi kan gjøre for å gjøre dette sitatet enklere uten å miste mye relevant informasjon. Nevneren av vektforholdet, fungerer som en normaliserende faktor, så vi bryr oss ikke så mye om det, delvis fordi den endelige ligningen vil vi ha andre måter å regulere læring av nevrale nettverk.

Dette er også en observasjon vi kan gjøre. Vi kan se at matrisen med vekt i denne ligningen er ganske lik matriseformen feed forward-algoritmen. Forskjellen er at radene og kolonnene er byttet. I algebra kaller vi denne transposisjonen av matrisen.

Siden det ikke er behov for å bruke 2 forskjellige variabler, kan vi bare bruke samme variabel fra feed forward-algoritmen. Dette gir oss den generelle ligningen til back-forplantningsalgoritmen

Merk at i feed-forward algoritmen vi skulle danne det første laget til sist, men i back-forplantning vi skal danne det siste laget av nettverket til den første siden å beregne feilen i et gitt lag vi trenger informasjon om feil i neste lag.

Trending AI Artikler:

1. Hvordan jeg brukte maskinlæring som inspirasjon til fysiske malerier

2. MS Eller Oppstart Jobb-Hvilken vei å gå for å bygge en karriere I Dyp Læring?

3. TOPP 100 middels artikler relatert Med Kunstig Intelligens

4. Artificial Intelligence Conference

Nå som vi vet hvordan vi skal sende informasjonen fremover og passere feilen bakover, kan vi bruke feilen på hvert lag for å oppdatere vekten.

3: Oppdatering av vektene

Nå som vi vet hvilke feil som gjør nevrale nettverk på hvert lag, kan vi endelig begynne å lære vårt nettverk for å finne den beste løsningen på problemet.

men hva er den beste løsningen?

feilen informerer oss om hvor feil våre løsninger er, så selvfølgelig vil den beste løsningen være den der feilfunksjonen er minimal.

Feilfunksjonen avhenger av vektene i nettverket, så vi vil finne slike vektverdier som resulterer i det globale minimumet i feilfunksjonen. Merk at dette bildet er bare for visualisering formål. I virkelige applikasjoner har vi mer enn 1 vekt, så feilfunksjonen er høydimensjonal funksjon.

men hvordan finner vi minimumet av denne funksjonen? En enkel ide her er å starte med tilfeldige vekter, beregne feilfunksjonen for disse vekter og deretter sjekke hellingen til denne funksjonen for å gå nedoverbakke.

Men hvordan blir vi kjent med funksjonens helling?

vi kan bruke lineær algebra igjen og utnytte det faktum at derivat av en funksjon på gitt punkt er lik skråningen a-funksjonen på dette punktet. Vi kan skrive dette derivatet på følgende måte:

Hvor E er vår feilfunksjon Og W representerer vektene. Denne notasjonen informerer oss om at vi vil finne derivatet av feilfunksjonen med hensyn til vekt. Vi bruker n + 1 i med feilen, siden i vår notasjon utgang av nevrale nettverk etter vektene Wn Er på+1.

Vi kan da bruke dette derivatet til å oppdatere vekten:

Dette representerer» gå nedoverbakke » hver læring iterasjon (epoke) vi oppdaterer vekten i henhold til skråningen av derivatet av feilfunksjonen.

Det er en ting vi trenger før vi presenterer den endelige ligningen, og det er læringsrate. Learning-rate regulerer hvor store skritt vi tar under å gå nedoverbakke.

Som du kan se med større læringsrate, tar vi større skritt. Dette betyr at vi kan komme til optimal funksjon raskere, men det er også en grater sjanse vi vil savne det.

med mindre læringsrate tar vi mindre skritt, noe som resulterer i behov for flere epoker for å nå minimum av funksjonen, men det er en mindre sjanse for at vi savner det.

derfor bruker vi i praksis ofte læringsrate som er avhengig av de forrige trinnene, f.eks. hvis det er en sterk trend med å gå i en retning, kan vi ta større skritt( større læringsrate), men hvis retningen fortsetter å endre seg, bør vi ta mindre skritt (mindre læringsrate) for å søke etter minimum bedre. I vårt eksempel skal vi imidlertid ta den enkle tilnærmingen og bruke fast læringsverdi. Dette gir oss følgende ligning.

Learning rate (Lr) er et tall i rage 0 — 1. Jo mindre det er, desto mindre endres vektene. Hvis læring er nær 1. vi bruker full verdi av derivatet for å oppdatere vektene, og hvis den er nær 0, bruker vi bare en liten del av den. Dette betyr at læringsfrekvensen, som navnet antyder, regulerer hvor mye nettverket «lærer» i en enkelt iterasjon.

Oppdatering av vekter var den endelige ligningen vi trengte i vårt nevrale nettverk. Det er ligningene som er ansvarlig for den faktiske læringen av nettverket og for å lære det å gi meningsfylt utgang i stedet for tilfeldige verdier.

Setter det hele sammen

Feed-forward

Tilbake-forplantning

Oppdatere vekter

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.