|
|
||
|---|---|---|
| .. | ||
| 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Ä embeddingarna. 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Ä embeddingarna tar bort denna information frÄn den ursprungliga texten. Eftersom dessa modeller inte kan modellera ordningen av ord, kan de inte lösa mer komplexa eller tvetydiga uppgifter som textgenerering eller frÄgehantering.
För att fÄnga betydelsen av en textsekvens behöver vi anvÀnda en annan neural nÀtverksarkitektur, som kallas för ett rekurrent neuralt nÀtverk, eller RNN. I 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 inmatning och producerar Si+1 som resultat. Det slutliga tillstÄndet Sn eller (utgÄng Yn) gÄr in i 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 de sekventiella beroendena mellan ord. Till exempel, nÀr ordet inte dyker upp nÄgonstans i sekvensen, kan det lÀra sig att förneka 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 enda block (till höger) med en rekurrent Ă„terkopplingsslinga, som skickar nĂ€tverkets utgĂ„ngstillstĂ„nd tillbaka till inmatningen.
Anatomi av en RNN-cell
LÄt oss se hur en enkel RNN-cell Àr organiserad. Den tar emot det tidigare tillstÄndet Si-1 och den aktuella symbolen Xi som inmatningar och mÄste producera utgÄngstillstÄndet Si (och ibland Àr vi ocksÄ intresserade av nÄgon annan utgÄng Yi, som i fallet med generativa nÀtverk).
En enkel RNN-cell har tvĂ„ viktmatriser inuti: en som transformerar en inmatningssymbol (vi kallar den W), och en annan som transformerar ett inmatningstillstĂ„nd (H). I detta fall berĂ€knas nĂ€tverkets utgĂ„ng 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 inmatningstoken genom ett embedding-lager innan de gĂ„r in i RNN för att minska dimensionen. I detta fall, om dimensionen för inmatningsvektorerna Ă€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 kombineras den dolda vektorn Hi med inmatningen Xi, och de styr vad som hÀnder med tillstÄndet C via grindar. Varje grind Àr ett neuralt nÀtverk med sigmoid-aktivering (utgÄng i intervallet [0,1]), som kan betraktas som en bitvis mask nÀr den multipliceras med tillstÄndsvektorn. Följande grindar finns (frÄn vÀnster till höger pÄ 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 skicka vidare.
- Inmatningsgrinden tar viss information frÄn inmatnings- 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 nÄgra av dess komponenter med hjÀlp av en dold vektor Hi för att producera ett nytt tillstÄnd Ci+1.
Komponenter i tillstÄndet C kan betraktas 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, kommer vi att höja flaggan att vi har ett plural substantiv. Genom att manipulera tillstÄndet kan vi alltsÄ hÄlla reda pÄ de grammatiska egenskaperna hos meningens delar.
â 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 flerskiktade 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 sÀttet 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 utgÄngen. 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ÄgnivÄmönster som extraherats av det första lagret. Detta leder oss till begreppet flerskiktat RNN, som bestÄr av tvÄ eller fler rekurrenta nÀtverk, dÀr utgÄngen frÄn det föregÄende lagret skickas till nÀsta lager som inmatning.
Bild frÄn detta fantastiska inlÀgg av Fernando López
âïž Ăvningar: Embeddingar
FortsÀtt ditt lÀrande i följande notebooks:
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 behandla 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.

