Articles

forståelse af neurale netværk 2: matematikken i neurale netværk i 3 ligninger

i den første del af denne serie diskuterede vi begrebet et neuralt netværk samt matematikken, der beskriver en enkelt neuron. Der er dog mange neuroner i et enkelt lag og mange lag i hele netværket, så vi er nødt til at komme med en generel ligning, der beskriver et neuralt netværk.

enkelt neuron

det første, vores netværk skal gøre, er at videregive information gennem lagene. Vi ved allerede, hvordan man gør dette for en enkelt neuron:

Output af neuronen er aktiveringsfunktionen af en vægtet sum af neuronens input

2 neuroner

nu kan vi anvende den samme logik, når vi har 2 neuroner i det andet lag.

i dette eksempel er hver neuron i det første lag forbundet til hver neuron i det andet lag, denne type netværk kaldes fuldt tilsluttet netværk. Neuron Y1 er forbundet med neuroner H1 og H2 med vægte H11 og H12 og neuron Y2 er forbundet med neuroner H1 og H2 med vægte H21 og H22. I denne notation angiver det første indeks for af vægten udgangsneuronen, og det andet indeks angiver indgangsneuronen, så for eksempel er V12 vægt på forbindelse fra H2 til Y1. Nu kan vi skrive ligningerne for Y1 og Y2:

nu kan denne ligning udtrykkes ved hjælp af matrice multiplikation.

visualisering af matricen multiplikation fra http://matrixmultiplication.xyz/

hvis du er ny til matrice multiplikation og lineær algebra, og det gør dig forvirret, anbefaler jeg stærkt 3blue1brun lineær algebra serie.

nu kan vi skrive output af første neuron som Y1 og output af anden neuron som Y2. Dette giver os følgende ligning:

hele lag

herfra kan vi abstrahere den generelle regel for lagets udgang:

nu i denne ligning er alle variabler matricer, og multiplikationstegnet repræsenterer matrice multiplikation.

anvendelse af matricen i ligningen giver os mulighed for at skrive det i en simpel form og gør det sandt for et hvilket som helst antal input og neuroner i output.

ved programmering af neurale netværk bruger vi også multiplikation af matricer, da dette giver os mulighed for at gøre computeren parallel og bruge effektivt udstyr til det, som grafikkort.

nu har vi ligning for et enkelt lag, men intet forhindrer os i at tage output fra dette lag og bruge det som input til det næste lag. Dette giver os den generiske ligning, der beskriver output fra hvert lag af neuralt netværk. En ting mere, vi skal tilføje, er aktiveringsfunktion, jeg vil forklare, hvorfor vi har brug for aktiveringsfunktioner i den næste del af serien, for nu kan du tænke på som en måde at skalere output på, så det ikke bliver for stort eller for ubetydeligt.

med denne ligning kan vi udbrede informationen gennem så mange lag af det neurale netværk, som vi ønsker. Men uden nogen læring, neurale netværk er blot et sæt af tilfældige matrice multiplikationer, der ikke betyder noget.

så hvordan lærer vi vores neurale netværk? For det første skal vi beregne fejlen i det neurale netværk og tænke på, hvordan vi overfører denne fejl til alle lagene.

2 : Passing the error — Back-formering

for at forstå fejludbredelsesalgoritmen er vi nødt til at gå tilbage til et eksempel med 2 neuroner i det første lag og 1 neuron i det andet lag.

lad os antage, at Y-laget er netværkets outputlag, og Y1 neuron skal returnere en vis værdi. Nu kan denne værdi være forskellig fra den forventede værdi med en hel del, så der er en vis fejl på Y1 neuronen. Vi kan tænke på denne fejl som forskellen mellem den returnerede værdi og den forventede værdi. Vi kender fejlen på Y1, men vi er nødt til at videregive denne fejl til de nederste lag i netværket, fordi vi ønsker, at alle lagene skal lære, ikke kun Y-lag. Så hvordan overføres denne fejl til H1 og H2? Nå, en naiv tilgang ville være at opdele Y1-fejlen jævnt, da der er 2 neuroner i laget, kan vi sige, at både 1 og 2 fejl er lig med Y1 fejl udtænkt af 2.

der er dog et stort problem med denne tilgang — neuronerne har forskellige vægte forbundet med dem. Hvis vægten, der er forbundet med H1-neuronen, er meget større end vægten, der er forbundet med H2-neuronen, er fejlen på Y1 meget mere påvirket af H1 siden Y1 = ( H1 * H11 + H2 * H12). Så hvis V11 er større end V12, skal vi overføre mere af Y1-fejlen til v1-neuronen, da dette er neuronen, der bidrager til det.

nu hvor vi har observeret det, kan vi opdatere vores algoritme for ikke at opdele fejlen jævnt, men for at opdele den i henhold til rationen af inputneuronvægten til alle vægte, der kommer til outputneuronen.

Opdater vægten

nu kan vi gå et skridt videre og analysere eksemplet, hvor der er mere end en neuron i outputlaget.

1 bidrager ikke kun til fejlen af Y1, men også til fejlen af Y2, og denne fejl er stadig proportional med dens vægte. Så i ligningen, der beskriver fejl i H1, har vi brug forat have begge fejl på Y1 multipliceret med forholdet mellem vægten og fejlen på Y2 multipliceret med forholdet mellem vægten, der kommer til Y2.

denne ligning kan også skrives i form af matrice multiplikation.

nu er der endnu et trick, vi kan gøre for at gøre dette citat enklere uden at miste en masse relevant information. Nævneren af vægtforholdet fungerer som en normaliserende faktor, så vi er ligeglad med det, delvis fordi den endelige ligning vi vil have andre midler til at regulere indlæringen af neurale netværk.

dette er også endnu en observation, vi kan gøre. Vi kan se, at matricen med vægt i denne ligning er meget lig matricen danner fremføringsalgoritmen. Forskellen er, at rækkerne og kolonnerne skiftes. I algebra kalder vi denne gennemførelse af matricen.

da der ikke er behov for at bruge 2 forskellige variabler, vi kan bare bruge den samme variabel fra foder fremad algoritme. Dette giver os den generelle ligning af back-formeringsalgoritmen

Bemærk, at vi i fremføringsalgoritmen skulle danne det første lag til det sidste, men i bagudbredelsen skal vi danne det sidste lag af netværket til det første, da vi har brug for information om fejl i det næste lag for at beregne fejlen i et givet lag.

Trending AI artikler:

1. Hvordan jeg brugte maskinlæring som inspiration til fysiske malerier

2. MS eller Startup Job-hvilken vej at gå for at opbygge en karriere inden for dyb læring?

3. TOP 100 mellemstore artikler relateret til kunstig intelligens

4. Artificial Intelligence Conference

nu hvor vi ved, hvordan vi videregiver informationen og videregiver fejlen bagud, kan vi bruge fejlen ved hvert lag til at opdatere vægten.

3 : Opdatering af vægtene

nu hvor vi ved, hvilke fejl der opstår neurale netværk ved hvert lag, kan vi endelig begynde at lære vores netværk at finde den bedste løsning på problemet.

men hvad er den bedste løsning?

fejlen informerer os om, hvor forkert vores løsninger er, så naturligvis ville den bedste løsning være den, hvor fejlfunktionen er minimal.

fejlfunktion afhænger af vægten af netværket, så vi ønsker at finde sådanne vægtværdier, der resulterer i det globale minimum i fejlfunktionen. Bemærk, at dette billede kun er til visualiseringsformål. I virkelige applikationer har vi mere end 1 vægt, så fejlfunktionen er højdimensionel funktion.

men hvordan finder vi minimum af denne funktion? En simpel ide her er at starte med tilfældige vægte, beregne fejlfunktionen for disse vægte og derefter kontrollere hældningen af denne funktion for at gå ned ad bakke.

men hvordan lærer vi funktionens hældning at kende?

vi kan bruge lineær algebra igen og udnytte det faktum, at derivat af en funktion på et givet punkt er lig med hældningen en funktion på dette tidspunkt. Vi kan skrive dette derivat på følgende måde:

hvor E er vores fejlfunktion og v repræsenterer vægtene. Denne notation informerer os om, at vi ønsker at finde derivatet af fejlfunktionen med hensyn til vægt. Vi bruger n + 1 i MED fejlen, da i vores notation output af neurale netværk efter vægtene VN er på+1.

vi kan derefter bruge dette derivat til at opdatere vægten:

dette repræsenterer “gå ned ad bakke” hver læring iteration (epoke) vi opdaterer vægten i henhold til hældningen af derivatet af fejlfunktionen.

der er endnu en ting, vi har brug for, før vi præsenterer den endelige ligning, og det er læringshastighed. Læringsfrekvens regulerer, hvor store skridt vi tager under ned ad bakke.

som du kan se med større læringshastighed, tager vi større skridt. Det betyder, at vi kan komme til den optimale af funktionen hurtigere, men der er også en rivejern chance vi vil savne det.

med den mindre læringshastighed tager vi mindre skridt, hvilket resulterer i behov for flere epoker for at nå minimumsfunktionen, men der er en mindre chance for, at vi savner det.

derfor bruger vi i praksis ofte læringshastighed, der er afhængig af de foregående trin, f.eks. hvis der er en stærk tendens til at gå i en retning, kan vi tage større skridt (større læringshastighed), men hvis retningen fortsætter med at ændre sig, bør vi tage mindre trin (mindre læringshastighed) for at søge efter det mindste bedre. I vores eksempel vil vi dog tage den enkle tilgang og bruge fast læringsfrekvensværdi. Dette giver os følgende ligning.

læringshastighed (LR) er et tal i rage 0 — 1. Jo mindre det er, desto mindre ændres vægten. Hvis læring er tæt på 1. vi bruger den fulde værdi af derivatet til at opdatere vægtene, og hvis det er tæt på 0, bruger vi kun en lille del af det. Dette betyder, at læringshastighed, som navnet antyder, regulerer, hvor meget netværket “lærer” i en enkelt iteration.

opdatering af vægtene var den endelige ligning, vi havde brug for i vores neurale netværk. Det er ligningerne, der er ansvarlige for den faktiske læring af netværket og for at lære det at give meningsfuldt output i stedet for tilfældige værdier.

sætter det hele sammen

fremføring

tilbage-formering

opdatering af vægtene

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.