|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| RNNPyTorch.ipynb | ||
| RNNTF.ipynb | ||
| assignment.md | ||
README.md
Rekurrenta neurala nÀtverk
Quiz före förelÀsning
I tidigare avsnitt har vi anvÀnt rika semantiska representationer av text och en enkel linjÀr klassificerare ovanpÄ inbÀddningarna. Vad denna arkitektur gör Àr att fÄnga den aggregerade betydelsen av ord i en mening, men den tar inte hÀnsyn till ordningen av orden, eftersom aggregeringsoperationen ovanpÄ inbÀddningarna tog bort denna information frÄn den ursprungliga texten. Eftersom dessa modeller inte kan modellera ordordning, kan de inte lösa mer komplexa eller tvetydiga uppgifter som textgenerering eller frÄgehantering.
För att fÄnga betydelsen av textsekvenser behöver vi anvÀnda en annan neural nÀtverksarkitektur, som kallas ett rekurrent neuralt nÀtverk, eller RNN. I ett RNN skickar vi vÄr mening genom nÀtverket en symbol i taget, och nÀtverket producerar ett tillstÄnd, som vi sedan skickar tillbaka till nÀtverket tillsammans med nÀsta symbol.
Bild av författaren
Givet en inmatningssekvens av token X0,...,Xn, skapar RNN en sekvens av neurala nÀtverksblock och trÀnar denna sekvens frÄn början till slut med hjÀlp av backpropagation. Varje nÀtverksblock tar ett par (Xi,Si) som indata och producerar Si+1 som resultat. Det slutliga tillstÄndet Sn eller (utdata Yn) skickas till en linjÀr klassificerare för att producera resultatet. Alla nÀtverksblock delar samma vikter och trÀnas frÄn början till slut med en enda backpropagation-pass.
Eftersom tillstÄndsvektorerna S0,...,Sn skickas genom nÀtverket, kan det lÀra sig sekventiella beroenden mellan ord. Till exempel, nÀr ordet inte dyker upp nÄgonstans i sekvensen, kan det lÀra sig att negera vissa element inom tillstÄndsvektorn, vilket resulterar i negation.
â Eftersom vikterna för alla RNN-block i bilden ovan Ă€r delade, kan samma bild representeras som ett block (till höger) med en rekurrent Ă„terkopplingsslinga, som skickar nĂ€tverkets utgĂ„ngstillstĂ„nd tillbaka till indata.
Anatomi av en RNN-cell
LÄt oss se hur en enkel RNN-cell Àr organiserad. Den tar emot det föregÄende tillstÄndet Si-1 och den aktuella symbolen Xi som indata och mÄste producera utgÄngstillstÄndet Si (och ibland Àr vi ocksÄ intresserade av nÄgon annan utdata Yi, som i fallet med generativa nÀtverk).
En enkel RNN-cell har tvĂ„ viktmatriser inuti: en som transformerar en indatasymbol (vi kallar den W) och en annan som transformerar ett indatatillstĂ„nd (H). I detta fall berĂ€knas nĂ€tverkets utdata som Ï(WĂXi+HĂSi-1+b), dĂ€r Ï Ă€r aktiveringsfunktionen och b Ă€r en ytterligare bias.
Bild av författaren
I mĂ„nga fall skickas indatatoken genom inbĂ€ddningslagret innan de gĂ„r in i RNN för att minska dimensionen. I detta fall, om dimensionen av indatavektorerna Ă€r emb_size och tillstĂ„ndsvektorn Ă€r hid_size - Ă€r storleken pĂ„ W emb_sizeĂhid_size, och storleken pĂ„ H Ă€r hid_sizeĂhid_size.
Long Short Term Memory (LSTM)
Ett av de största problemen med klassiska RNN Àr det sÄ kallade försvinnande gradienter-problemet. Eftersom RNN trÀnas frÄn början till slut i en enda backpropagation-pass, har det svÄrt att sprida fel till de första lagren i nÀtverket, och dÀrmed kan nÀtverket inte lÀra sig relationer mellan avlÀgsna token. Ett sÀtt att undvika detta problem Àr att införa explicit tillstÄndshantering genom att anvÀnda sÄ kallade grindar. Det finns tvÄ vÀlkÀnda arkitekturer av detta slag: Long Short Term Memory (LSTM) och Gated Relay Unit (GRU).
BildkÀlla TBD
LSTM-nÀtverket Àr organiserat pÄ ett sÀtt som liknar RNN, men det finns tvÄ tillstÄnd som skickas frÄn lager till lager: det faktiska tillstÄndet C och den dolda vektorn H. Vid varje enhet sammanfogas den dolda vektorn Hi med indata Xi, och de styr vad som hÀnder med tillstÄndet C via grindar. Varje grind Àr ett neuralt nÀtverk med sigmoidaktivering (utdata i intervallet [0,1]), som kan ses som en bitmask nÀr den multipliceras med tillstÄndsvektorn. Följande grindar finns (frÄn vÀnster till höger i bilden ovan):
- Glömskegrinden tar en dold vektor och avgör vilka komponenter i vektorn C vi behöver glömma och vilka vi ska slÀppa igenom.
- Indatagrinden tar viss information frÄn indata- och dolda vektorer och inför den i tillstÄndet.
- UtgÄngsgrinden transformerar tillstÄndet via ett linjÀrt lager med tanh-aktivering och vÀljer sedan vissa av dess komponenter med hjÀlp av den dolda vektorn Hi för att producera ett nytt tillstÄnd Ci+1.
Komponenter i tillstÄndet C kan ses som flaggor som kan slÄs pÄ och av. Till exempel, nÀr vi stöter pÄ namnet Alice i sekvensen, kanske vi vill anta att det hÀnvisar till en kvinnlig karaktÀr och höja flaggan i tillstÄndet att vi har ett kvinnligt substantiv i meningen. NÀr vi senare stöter pÄ frasen och Tom, höjer vi flaggan att vi har ett plural substantiv. Genom att manipulera tillstÄndet kan vi alltsÄ hÄlla reda pÄ de grammatiska egenskaperna hos meningsdelar.
â En utmĂ€rkt resurs för att förstĂ„ LSTM:s interna funktioner Ă€r denna fantastiska artikel Understanding LSTM Networks av Christopher Olah.
Bidirektionella och flerskikts-RNN
Vi har diskuterat rekurrenta nÀtverk som arbetar i en riktning, frÄn början av en sekvens till slutet. Det verkar naturligt, eftersom det liknar hur vi lÀser och lyssnar pÄ tal. Men eftersom vi i mÄnga praktiska fall har slumpmÀssig Ätkomst till inmatningssekvensen, kan det vara vettigt att köra rekurrent berÀkning i bÄda riktningarna. SÄdana nÀtverk kallas bidirektionella RNN. NÀr vi arbetar med ett bidirektionellt nÀtverk behöver vi tvÄ dolda tillstÄndsvektorer, en för varje riktning.
Ett rekurrent nÀtverk, antingen enkelriktat eller bidirektionellt, fÄngar vissa mönster inom en sekvens och kan lagra dem i en tillstÄndsvektor eller skicka dem till utdata. Precis som med konvolutionella nÀtverk kan vi bygga ett annat rekurrent lager ovanpÄ det första för att fÄnga högre nivÄmönster och bygga frÄn lÄg-nivÄmönster som extraherats av det första lagret. Detta leder oss till begreppet ett flerskikts-RNN, som bestÄr av tvÄ eller fler rekurrenta nÀtverk, dÀr utdata frÄn det föregÄende lagret skickas till nÀsta lager som indata.
Bild frÄn detta fantastiska inlÀgg av Fernando López
âïž Ăvningar: InbĂ€ddningar
FortsÀtt ditt lÀrande i följande anteckningsböcker:
Slutsats
I denna enhet har vi sett att RNN kan anvÀndas för sekvensklassificering, men de kan faktiskt hantera mÄnga fler uppgifter, sÄsom textgenerering, maskinöversÀttning och mer. Vi kommer att titta pÄ dessa uppgifter i nÀsta enhet.
đ Utmaning
LÀs igenom lite litteratur om LSTM och fundera över deras tillÀmpningar:
- Grid Long Short-Term Memory
- Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
Quiz efter förelÀsning
Granskning & SjÀlvstudier
- Understanding LSTM Networks av Christopher Olah.
Uppgift: Anteckningsböcker
Ansvarsfriskrivning:
Detta dokument har översatts med hjĂ€lp av AI-översĂ€ttningstjĂ€nsten Co-op Translator. Ăven om vi strĂ€var efter noggrannhet, bör du vara medveten om att automatiserade översĂ€ttningar kan innehĂ„lla fel eller felaktigheter. Det ursprungliga dokumentet pĂ„ dess originalsprĂ„k bör betraktas som den auktoritativa kĂ€llan. För kritisk information rekommenderas professionell mĂ€nsklig översĂ€ttning. Vi ansvarar inte för eventuella missförstĂ„nd eller feltolkningar som uppstĂ„r vid anvĂ€ndning av denna översĂ€ttning.

