Är det att lägga till slumpmässigt brus till dolda lager som en regularisering? Vad är skillnaden mellan att göra det och lägga till bortfall och batchnormalisering?


Svar 1:

Ja, att lägga till slumpmässigt brus till dolda lager är en regularisering på exakt samma sätt som bortfall. Den viktigaste intuitionen här är att om det neurala svaret i varje lager är bullrigt måste träningen justera vikterna till separata kategorier med ett spel som är större än bullret. Vid testtiden, när bruset saknas, bör klassificeringen således vara mer stabil. Detta liknar mycket hur max-margin-klassificering fungerar, och vi vet alla hur framgångsrika max-margin-tekniker har varit (t.ex. Support Vector Machines). Du måste dock vara noga med att se till att bruset inte överväger signalen.

Dropout anses vara en normaliseringsmetod eftersom den utför genomsnittsmodell. Det vill säga, under träning är modellen vid en viss tidpunkt faktiskt en sannolikhetsfördelning över en klass av neurala nätverksmodeller där vikterna är fixerade men någon av nervcellerna i modellen kan saknas. Den totala sannolikheten för varje nervnätverk bestäms av den individuella sannolikheten för att en viss neuron är närvarande eller frånvarande. Detta är regularisering eftersom det är i genomsnitt över förspänningen i varje instans, vilket utjämnar kostnadsfunktionen.

Att lägga till slumpmässigt brus till dolda lager fungerar på samma sätt, men med en annan sannolikhetsfördelning. Istället för att ha fasta vikter, har du en fast topologi, och sannolikhetsfördelningen väljer vikter slumpmässigt enligt en Gaussisk fördelning centrerad vid de "sanna" vikterna, dvs vikterna du lagrar på din hårddisk. Återigen är detta modellgenomsnitt, och det bör ha ett reguljärt inflytande, med förbehållet att bruset (variansen) inte bör överväldiga signalen. Så, till exempel, om du tillämpar BatchNorm först, kommer du att ha en ungefär standard normal utgångsprofil (enheter centrerade vid noll med varians en), och du kan sedan tillämpa brus med varians av, säga, 0.1. Du kan spela med variansen för att se vad som fungerar.

EDIT: Eftersom frågan nämnde BatchNorm, ville jag påpeka att BatchNorm inte riktigt används för reglering. Det vill säga, BatchNorm släpper inte ut kostnaderna. Istället läggs BatchNorm till för att förbättra prestandan för backpropagation. I huvudsak förhindrar det att den bakåtutbredda gradienten blir alltför stor eller liten genom att omskalera och återuppta; som en teknik har den djupare anslutningar till andra ordning optimeringsmetoder som försöker modellera kostnadsytans krökning. Som jag nämnde ovan kan BatchNorm också användas för att garantera att den relativa skalningen är korrekt om du ska lägga till slumpmässigt brus till de neurala aktiviteterna.


Svar 2:

Jag skulle betrakta det som ett optimerings trick mer än normalisering.

Effekten bör motsvara effekten av stokastisitet i SGD.

SGD och dess inspiration Monte Carlo-metoder undviker att fastna i dåliga lokala minima genom att ta ett slumpmässigt steg då och då istället för att strikt följa riktningen med brantaste härkomst; eller göra något motsvarande i sina olika inkarnationer, t.ex. lägga till en slumpmässig komponent till varje steg istället för att periodvis ta ett slumpmässigt steg.

Att lägga till svagt slumpmässigt brus till vikterna kommer att uppnå exakt samma. [Tips: Gradient nedstigning lägger också till vikterna i varje iteration!]


Svar 3:

REDIGERA:

Att lägga till gaussisk-distribuerat, slumpmässigt brus till ingångsdata för varje lager kan göra din modell mer robust mot små förändringar i data som gör att ditt nätverk bättre kan skilja brus från signal. Som Zeeshan Zia sa, skulle detta i huvudsak vara anständigt stokastisk lutning. Jag skulle fortfarande inte överväga den här regleringen. Det är mer en teknik som hjälper din modell att lära mönster för att skilja brus från signal.

Dropout inaktiverar slumpmässigt en viss del av noderna i ett doldt lager på varje pass. Detta förbättrar nätverket eftersom det tvingar det att lära sig att känna igen samma mönster på flera sätt, vilket leder till en bättre modell.

Batchnormalisering är där du tar ingångarna till ett lager och ser till att alla normaliseras mellan 0 och 1. Detta hjälper nätverket att lära sig bättre eftersom det håller lutningen anständig mer konsekvent och smidig. På detta sätt undviker du att hoppa runt minima eftersom din lutning är för stor.