Er det å legge tilfeldig støy til skjulte lag ansett som en regularisering? Hva er forskjellen mellom å gjøre det og legge til frafall og batchnormalisering?


Svar 1:

Ja, å legge tilfeldig støy til skjulte lag er en regularisering på nøyaktig samme måte som frafall. Den sentrale intuisjonen her er at hvis den nevrale responsen i hvert lag er støyende, må trening tilpasse vektene til separate kategorier med en klaring som er større enn støyen. Så på testtid, når støyen er fraværende, bør klassifiseringen være mer stabil. Dette ligner veldig på hvordan maks-margin-klassifisering fungerer, og vi vet alle hvor vellykkede maks-margin-teknikker har vært (f.eks. Support Vector Machines). Du må imidlertid være forsiktig med å forsikre deg om at støyen ikke overvelder signalet.

Frafall anses som en regulariseringsmetode fordi den utfører modellgjennomsnitt. Det vil si at under trening er modellen på et bestemt tidspunkt faktisk en sannsynlighetsfordeling over en klasse av nevrale nettverksmodeller der vektene er faste, men en av nevronene i modellen kan mangle. Den totale sannsynligheten for hvert nevrale nettverk bestemmes av den individuelle sannsynligheten for at en bestemt nevron er til stede eller fraværende. Dette er regularisering fordi det er gjennomsnitt over skjevhetene i hvert tilfelle, og jevner ut kostnadsfunksjonen.

Å legge tilfeldig støy til skjult lag fungerer på samme måte, men med en annen sannsynlighetsfordeling. I stedet for å ha faste vekter, har du en fast topologi, og sannsynlighetsfordelingen velger vekter tilfeldig i henhold til en Gaussisk distribusjon sentrert om de "sanne" vektene, dvs. vektene du lagrer på harddisken. Igjen er dette modellgjennomsnitt, og det bør ha en regulerende innflytelse, med forbehold om at støyen (variansen) ikke skal overvelde signalet. Så hvis du for eksempel bruker BatchNorm, vil du ha en tilnærmet normal normal utgangsprofil (enheter sentrert til null med varians en), og du kan deretter bruke støy med varians på, for eksempel, 0.1. Du kan leke med variansen for å se hva som fungerer.

EDIT: Siden spørsmålet nevnte BatchNorm, ønsket jeg å påpeke at BatchNorm ikke egentlig brukes til regularisering. Det vil si at BatchNorm ikke jevner ut kostnadene. I stedet blir BatchNorm lagt til for å forbedre ytelsen til backpropagation. I hovedsak forhindrer det at den bakre forplantningsgradienten blir for stor eller liten ved å omskalere og legge inn igjen; som en teknikk har den dypere forbindelser til andreordens optimaliseringsmetoder som prøver å modellere krumningen av kostnadsoverflaten. Som jeg nevnte ovenfor, kan BatchNorm også brukes til å garantere at den relative skaleringen er riktig hvis du skal legge tilfeldig støy til nevrale aktiviteter.


Svar 2:

Jeg vil betrakte det som et optimaliseringstriks mer enn regularisering.

Effekten skal være ekvivalent med effekten av stokastisitet i SGD.

SGD, og ​​dens inspirasjon Monte Carlo-metoder unngår å bli sittende fast i dårlige lokale minima ved å ta et tilfeldig skritt av og til i stedet for strengt å følge retningen om bratteste avstamning; eller å gjøre noe tilsvarende i sine forskjellige inkarnasjoner, for eksempel å legge til en tilfeldig komponent til hvert trinn i stedet for med jevne mellomrom å ta et tilfeldig trinn.

Å legge svak tilfeldig støy til vekten vil oppnå nøyaktig det samme. [Hint: Gradient nedstigning legger også noe til vektene i hver iterasjon!]


Svar 3:

REDIGERE:

Hvis du legger gaussisk fordelt, tilfeldig støy til inngangsdataene for hvert lag, kan modellen bli mer robust mot små endringer i dataene, slik at nettverket ditt bedre kan skille støy fra signal. Som Zeeshan Zia sa, ville dette i hovedsak være stokastisk gradient anstendig. Jeg vil fremdeles ikke vurdere denne regulariseringen. Det er mer en teknikk for å hjelpe modellen din å lære mønstre for å skille støy fra signal.

Frafall deaktiverer tilfeldig en viss andel av nodene i et skjult lag på hver passering. Dette forbedrer nettverket fordi det tvinger det til å lære å gjenkjenne de samme mønstrene på flere måter, noe som fører til en bedre modell.

Batchnormalisering er der du tar innspillene til et lag og sørger for at alle er normalisert mellom 0 og 1. Dette hjelper nettverket til å lære bedre fordi det holder gradienten anstendig mer jevn og jevn. På denne måten unngår du å hoppe rundt minima fordi gradienten din er for stor.