Articles

förstå neurala nätverk 2: matematiken för neurala nätverk i 3 ekvationer

i den första delen av denna serie diskuterade vi begreppet neuralt nätverk, liksom matematiken som beskriver en enda neuron. Det finns dock många neuroner i ett enda lager och många lager i hela nätverket, så vi måste komma med en allmän ekvation som beskriver ett neuralt nätverk.

enkel neuron

det första vårt nätverk behöver göra är att skicka information framåt genom lagren. Vi vet redan hur man gör detta för en enda neuron:

utsignalen från neuronen är aktiveringsfunktionen för en viktad summa av neuronens ingång

2 neuroner

nu kan vi tillämpa samma logik när vi har 2 neuroner i det andra lagret.

i detta exempel är varje neuron i det första lagret anslutet till varje neuron i det andra lagret, denna typ av nätverk kallas helt anslutet nätverk. Neuron Y1 är ansluten till neuroner X1 och X2 med vikter W11 och W12 och neuron Y2 är ansluten till neuroner X1 och X2 med vikter W21 och W22. I denna notation indikerar det första indexet för av vikten utgångsneuron och det andra indexet indikerar ingångsneuron, så till exempel är W12 vikt vid anslutning från X2 till Y1. Nu kan vi skriva ekvationerna för Y1 och Y2:

nu kan denna ekvation uttryckas med matrismultiplikation.

visualisering av matrismultiplikation från http://matrixmultiplication.xyz/

om du är ny på matrismultiplikation och linjär algebra och det gör dig förvirrad rekommenderar jag starkt 3blue1brown linjär algebra serie.

nu kan vi skriva utmatning av första neuron som Y1 och utmatning av andra neuron som Y2. Detta ger oss följande ekvation:

hela lagret

från detta kan vi abstrahera den allmänna regeln för lagrets utgång:

nu i denna ekvation är alla variabler matriser och multiplikationstecknet representerar matrismultiplikation.

användning av matris i ekvationen gör att vi kan skriva den i en enkel form och gör det sant för valfritt antal ingångar och neuroner i utgången.

vid programmering av neurala nätverk använder vi också matrismultiplikation eftersom det gör att vi kan göra datorn parallell och använda effektiv hårdvara för den, som grafikkort.

nu har vi ekvation för ett enda lager men ingenting hindrar oss från att ta utmatningen av detta lager och använda det som en ingång till nästa lager. Detta ger oss den generiska ekvationen som beskriver utgången från varje lager av neuralt nätverk. En sak till, Vi måste lägga till, är aktiveringsfunktionen, jag kommer att förklara varför vi behöver aktiveringsfunktioner i nästa del av serien, för nu kan du tänka på som ett sätt att skala utmatningen, så det blir inte för stort eller för obetydligt.

med denna ekvation kan vi sprida informationen genom så många lager i det neurala nätverket som vi vill. Men utan något lärande är neuralt nätverk bara en uppsättning slumpmässiga matrismultiplikationer som inte betyder någonting.

så hur lär man vårt neurala nätverk? För det första måste vi beräkna felet i det neurala nätverket och tänka på hur man skickar detta fel till alla lager.

2: passerar fel — Back-förökning

för att förstå felutbredningsalgoritmen måste vi gå tillbaka till ett exempel med 2 neuroner i det första lagret och 1 neuron i det andra lagret.

Låt oss anta att Y-skiktet är utgångsskiktet i nätverket och Y1-neuron bör returnera något värde. Nu kan detta värde skilja sig från det förväntade värdet med en hel del, så det finns något fel på Y1-neuronen. Vi kan tänka på detta fel som skillnaden mellan det returnerade värdet och det förväntade värdet. Vi känner till felet på Y1 men vi måste skicka detta fel till de nedre lagren i nätverket eftersom vi vill att alla lager ska lära sig, inte bara y-lager. Så Hur skickar du detta fel till X1 och X2? Tja, ett naivt tillvägagångssätt skulle vara att dela Y1-felet jämnt, eftersom det finns 2 neuroner i X-skiktet, kan vi säga att både X1 och X2-felet är lika med Y1-felet utformat av 2.

det finns dock ett stort problem med detta tillvägagångssätt — neuronerna har olika vikter kopplade till dem. Om vikten som är ansluten till X1-neuronen är mycket större än vikten som är ansluten till X2-neuronen påverkas felet på Y1 mycket mer av X1 eftersom Y1 = ( X1 * W11 + X2 * X12). Så om W11 är större än W12 borde vi överföra mer av Y1-felet till X1-neuronen eftersom detta är neuronen som bidrar till den.

nu när vi har observerat det kan vi uppdatera vår algoritm för att inte dela felet jämnt utan att dela upp det enligt rationen av ingångsneuronvikten till alla vikter som kommer till utgångsneuronen.

uppdatera vikten

nu kan vi gå ett steg längre och analysera exemplet där det finns mer än en neuron i utgångsskiktet.

neuron X1 bidrar inte bara till felet på Y1 utan också till felet på Y2 och detta fel är fortfarande proportionellt mot dess vikter. Så, i ekvationen som beskriver fel på X1 behöver viatt ha både fel på Y1 multiplicerat med förhållandet mellan vikterna och felet på Y2 multiplicerat med förhållandet mellan vikterna som kommer till Y2.

denna ekvation kan också skrivas i form av matrismultiplikation.

nu finns det ytterligare ett knep vi kan göra för att göra denna offert enklare utan att förlora mycket relevant information. Nämnaren för viktförhållandet fungerar som en normaliserande faktor, så vi bryr oss inte så mycket om det, delvis för att den slutliga ekvationen vi kommer att ha andra sätt att reglera lärandet av neurala nätverk.

Detta är också ytterligare en observation vi kan göra. Vi kan se att matrisen med vikt i denna ekvation är ganska lik matrisformen feed forward-algoritmen. Skillnaden är raderna och kolumnerna växlas. I algebra kallar vi detta införlivande av matrisen.

eftersom det inte finns något behov av att använda 2 olika variabler, vi kan bara använda samma variabel från feed framåt algoritm. Detta ger oss den allmänna ekvationen för bakutbredningsalgoritmen

Observera att I feed-forward-algoritmen skulle vi bilda det första lagret till det sista men i bakutbredningen kommer vi att bilda det sista lagret i nätverket till det första eftersom vi för att beräkna felet i ett givet lager behöver information om fel i nästa lager.

Trending ai-artiklar:

1. Hur jag använde maskininlärning som inspiration för fysiska målningar

2. MS eller Startup Job-vilken väg att gå för att bygga en karriär inom djupt lärande?

3. Topp 100 medium artiklar relaterade till artificiell intelligens

4. Artificial Intelligence Conference

nu när vi vet hur vi skickar informationen framåt och skickar felet bakåt kan vi använda felet vid varje lager för att uppdatera vikten.

3: uppdatering av vikterna

nu när vi vet vilka fel gör det neurala nätverket i varje lager kan vi äntligen börja lära vårt nätverk för att hitta den bästa lösningen på problemet.

men vad är den bästa lösningen?

felet informerar oss om hur fel våra lösningar är, så naturligtvis skulle den bästa lösningen vara den där felfunktionen är minimal.

felfunktionen beror på nätets vikter, så vi vill hitta sådana vikter värden som resulterar i det globala minimumet i felfunktionen. Observera att den här bilden bara är för visualiseringsändamål. I verkliga applikationer har vi mer än 1 vikt, så felfunktionen är högdimensionell funktion.

men hur hittar vi det minsta av denna funktion? En enkel ide här är att börja med slumpmässiga vikter, beräkna felfunktionen för dessa vikter och sedan kontrollera lutningen på denna funktion för att gå nedförsbacke.

men hur får vi veta funktionens lutning?

vi kan använda linjär algebra igen och utnyttja det faktum att derivat av en funktion vid en given punkt är lika med lutningen en funktion vid denna punkt. Vi kan skriva detta derivat på följande sätt:

där E är vår felfunktion och W representerar vikterna. Denna notation informerar oss om att vi vill hitta derivatet av felfunktionen med avseende på vikt. Vi använder n + 1 in med felet, eftersom i vår notationsutgång av neuralt nätverk efter vikterna Wn är på+1.

vi kan sedan använda detta derivat för att uppdatera vikten:

detta representerar” går nedförsbacke ” varje lärande iteration (epok) vi uppdaterar vikten enligt lutningen på derivatet av felfunktionen.

det finns ytterligare en sak vi behöver innan vi presenterar den slutliga ekvationen och det är inlärningshastighet. Learning-rate reglerar hur stora steg vi tar under nedförsbacke.

som du kan se med större inlärningsfrekvens tar vi större steg. Detta innebär att vi kan komma till optimal funktion snabbare men det finns också en rivjärn chans att vi kommer att sakna det.

med den mindre inlärningshastigheten tar vi mindre steg, vilket resulterar i behov av fler epoker för att nå minsta funktion men det finns en mindre chans att vi saknar det.

det är därför vi i praktiken ofta använder inlärningshastighet som är beroende av tidigare steg, t.ex. om det finns en stark trend att gå i en riktning kan vi ta större steg (större inlärningsfrekvens), men om riktningen fortsätter att förändras bör vi ta mindre steg (mindre inlärningsfrekvens) för att söka efter det minsta bättre. I vårt exempel kommer vi dock att ta det enkla tillvägagångssättet och använda fast inlärningshastighetsvärde. Detta ger oss följande ekvation.

Learning rate (LR) är ett tal i rage 0 — 1. Ju mindre det är desto mindre ändras vikterna. Om lärande är nära 1. vi använder derivatets fulla värde för att uppdatera vikterna och om det är nära 0 använder vi bara en liten del av det. Detta innebär att inlärningshastigheten, som namnet antyder, reglerar hur mycket nätverket ”lär sig” i en enda iteration.

uppdatering av vikterna var den slutliga ekvationen vi behövde i vårt neurala nätverk. Det är ekvationerna som är ansvariga för det faktiska lärandet av nätverket och för att lära det att ge meningsfull produktion istället för slumpmässiga värden.

att sätta ihop allt

Feed-forward

tillbaka-förökning

uppdatera vikterna

Lämna ett svar

Din e-postadress kommer inte publiceras.