07 Recurrent Neural Networks

Warning

🚧 Not finished. This chapter has not been taught yet, and the page below was drafted by Claude rather than written up from a delivered lecture. Treat it as a preview: expect gaps and mistakes until it has been reviewed.

Warning

🚧 Երկու դասախոսության սլայդերը պատրաստ են (L20, L21), գործնականը՝ նույնպես (առաջադրանք + լուծում)։ Տեսանյութերը դեռ չեն ձայնագրվել։

🎲 Random

TBD

📚 Նյութը

Երկու դասախոսություն (սլայդերը ml/ch7_rnn/ պանակում)։ Գլուխը կամուրջն է CNN-ից attention․ L16-L19 (CNN) → L20/L21 (RNN) → L24 (attention)։

  • L20 — RNN Foundations: ինչու՞ է տեքստը հրաժարվում տեղավորվել fixed-size input-ի մեջ։ Shuffle test-ը ցույց է տալիս, թե ինչ է կորչում, երբ հերթականությունն անտեսվում է, իսկ «shoehorn» հնարքները ցույց են տալիս, թե ինչու կիսատ լուծումները չեն աշխատում, ներառյալ ֆիքսված պատուհանը (L19-ի 1D conv-ը, ch11-ի name inventor-ը)։ Հետո՝ մեկ նոր սլաք (hidden state-ը վերադառնում է իր վրա), մեկ RNN քայլի անատոմիան, ամբողջական forward pass իրական թվերով, ինչու՞ tanh, unrolling, parameter sharing, և bidirectional RNN-ները։ Երկրորդ կեսը backprop through time-ն է և ճակատագրական թերությունը․ predict-first frame՝ մարող թվի մասին, ապա ամբողջական արտածում մինչև սեփական արժեքները, ինչու՞ է exploding-ը հեշտ կեսը, և empirical ապացույց, որ գրադիենտն իրոք մարում է։ PDF
  • L21 — The Road to Attention: LSTM-ը որպես գումարման (ոչ բազմապատկման) ուղղում — cell state-ը, մեկ քայլի անատոմիան, չորս հավասարումները, ինչու՞ է գումարումը պահում գրադիենտը (forget gate-ը՝ որպես հիշողության կարգավորիչ), և «աշխատու՞մ է» հարցի պատասխանը՝ չափված (և ինչու PyTorch-ի default init-ով LSTM-ը մոռանում է RNN-ի պես արագ)։ Հետո տեքստը դառնում է թվեր․ tokenization-ի եռաժանիքը, subword-երը իրական tokenizer-ի վրա, և հայերենի հարկը (նույն նախադասությունը հայերեն զգալիորեն ավելի շատ token է արժենում)։ One-hot-ի աղքատությունը → embeddings։ Ապա language modeling-ը քայլ առ քայլ, generation loop-ը (sample → feed back → repeat) և դեմո․ char-LSTM-ը սովորում է հայերեն գրել։ Վերջում՝ seq2seq, երկու պատ (bottleneck-ը և քայլ առ քայլ հաշվարկը), և cliffhanger-ը, որը բացվում է L24-ում։ PDF
TipԵրկու դասի կարմիր թելը

L20-ը ախտորոշում է հիվանդությունը (գրադիենտը մարում է, ուստի երկար կապերը չեն սովորվում), L21-ը տալիս է երկու դեղամիջոց՝ LSTM-ը, որը մեղմացնում է այն, և encoder-decoder-ի bottleneck-ը, որը նոր խնդիր է ստեղծում։ Հենց այդ երկրորդ խնդիրն է, որ attention-ը լուծում է — այնպես որ L24-ը պատահական հաջորդ քայլ չէ, այլ պատասխան կոնկրետ հարցի, որը դրվում է այստեղ։

📝 Թեմայի վերաբերյալ հարցաշար (Google Form): TBD

🧪 Գործնական — How far back can a network remember?

Դասախոսությունների չորս պնդումը, ամեն մեկը չափված՝ laptop-ի CPU-ի վրա, մի քանի րոպեում (GPU պետք չէ)։ LSTM-ը և GRU-ն այստեղ «սև արկղ» են, ինչպես դասախոսություններում։

  1. Մեկ RNN քայլ՝ ձեռքով 🧀 — գրում եք recurrence-ը numpy-ով և կրկնում L20-ի սլայդի թվերը (score 0.38), ապա ստուգում, որ nn.RNN-ը հաշվում է ճիշտ նույնը։ Հակառակ հերթականությամբ score-ը 0.82 է, իսկ bag-of-words-ը տարբերություն չի տեսնում։
  2. Գրադիենտը մարում է 🧀🧀 — autograd-ը մեքենայական ճշտությամբ հաստատում է \(\lambda^T\)-ն (\(0.8^{29}\) և \(1.25^{29}\)), իսկ իրական tanh RNN-ում 40 քայլ առաջվա input-ի ազդեցությունը մոտ \(10^{-10}\) է։
  3. Հիշողության մրցավազք 🧀🧀🧀 — «հիշիր առաջին token-ը» \(T = 10\) և \(T = 40\) քայլ հետո։ LSTM-ը, որի forget gate-ը սկսում է բաց, լուծում է \(T = 40\)-ը մոտ 100 քայլում, իսկ vanilla RNN-ը և կիսափակ gate-ով LSTM-ը մնում են պատահականի մակարդակում (25%)։
  4. Name inventor-ը՝ հիշողությամբ 🧀🧀🧀 — ch11-ի նույն 689 ազգանունը, նույն բաժանումը։ GRU-ն հասնում է 1.605-ի՝ 3 տառի պատուհանով MLP-ի 1.673-ի դիմաց։ Որտե՞ղ է օգնում հիշողությունը, և ինչու՞ են gate-երն այստեղ գրեթե անօգուտ։ Վերջում՝ generation loop-ը (sample → feed back → repeat) և նոր ազգանուններ։

Առաջադրանք: xx_rnn_memory.ipynb (download) · view on GitHub

Լուծում: xx_rnn_memory_solution.ipynb (download) · view on GitHub

🏡 Տնային

TBD

Flag Counter