شبکهی عصبی بازگشتی (RNN)
جواب کوتاه
شبکهی عصبی بازگشتی، یا RNN، کوتاهشدهی Recurrent Neural Network، شبکهایه برای دادهی پشت سر هم، مثل متن، گفتار یا قیمتهای روزانه. دنباله رو یکییکی میخونه و یه «حالت پنهان» نگه میداره، یه جور حافظه که هر قدم از روی ورودی تازه و حافظهی قبلی بهروز میشه. نکتهی اصلیش اینه که همون یه قدم، با همون وزنها، برای همهی کلمهها تکرار میشه؛ برای همین وقتی بازش میکنیم، شبیه چند لایهست، ولی در واقع قدمهای زمانه. شکل سادهش سال ۱۹۹۰ معرفی شد. مرزش هم همین یکییکی بودنشه: موازی نمیشه، و اثر کلمههای دور کمکم کمرنگ میشه.
یعنی چی
یه شبکه که یکییکی میخونه و یه یادداشت کوچیک رو دستبهدست میکنه.
مثلا فرض کنید یه داستان میخونید. هر جمله که میخونید، خلاصهی توی ذهنتون یه کم عوض میشه، و جملهی بعد رو با همون خلاصه میفهمید. شبکهی بازگشتی دقیقا همینه. یه شبکهی عصبی معمولی هر ورودی رو جدا میبینه؛ ولی این یکی برای دنباله ساخته شده و حافظه داره. اسم این حافظه «حالت پنهان»ه. ترنسفورمر اومد که جای این شبکهها رو بگیره؛ پس اول باید ببینیم اینها چطور کار میکردن.
یه قدم
هر قدم دو تا چیز میگیره: کلمهی الان، و حافظهی قدم قبل. هر کدوم رو در یه سری وزن ضرب میکنه، با هم جمع میکنه، و از یه تابع فعالسازی رد میکنه که عدد رو فشرده نگه داره. نتیجه میشه حافظهی تازه. اگه کار لازم داشته باشه، از روی همین حافظه یه خروجی هم میسازه. شکل سادهی همین قدم، سال ۱۹۹۰ معرفی شد و هنوز اسمش «شبکهی بازگشتی ساده»ست.
باز کردن حلقه
اسمش «بازگشتی»ه چون حافظهی هر قدم برمیگرده توی همون قدم. ولی فهمیدنش وقتی راحتتره که این حلقه رو باز کنیم.
جملهی «من نون خریدم» رو در نظر بگیرید. قدم اول «من» رو میخونه و یه یادداشت میسازه. قدم دوم «نون» و همون یادداشت رو میگیره و یادداشت رو بهروز میکنه. قدم سوم «خریدم» و یادداشت تازه رو. نکتهی مهم اینه که این سه تا یه جعبهان، با همون وزنها، فقط سه بار پشت سر هم. برای همین شبکه هر طول جملهای رو میتونه بخونه؛ ده کلمه، ده بار. وقتی بازش میکنیم، شبیه چند لایه میشه، ولی اینها لایه نیستن؛ قدمهای زمانن.
با عدد
یه بار با عدد ببینیم. فرض کنید حافظه فقط یه عدده، وزن ورودی ۰٫۵ و وزن حافظه ۰٫۸. اول یه ورودی ۱ میاد، بعد چهار تا ورودی صفر.
قدم اول، حافظه میشه ۰٫۴۶. بعد ورودی صفره، پس فقط حافظهی قبلی با وزن ۰٫۸ میمونه: ۰٫۳۵، بعد ۰٫۲۸، بعد ۰٫۲۲، بعد ۰٫۱۷. اون ۱ اول کمکم کمرنگ میشه، چون هر قدم در عددی کمتر از یک ضرب میشه. این عددها ساختگین، ولی همین کمرنگ شدن، توی شبکههای واقعی هم اتفاق میفته و درس بعد، مشکلهای RNN، کامل بازش میکنه.
چهار شکل
یه نوشتهی معروف ۲۰۱۵ دربارهی همین شبکهها، کارهاشون رو با شکل ورودی و خروجی دستهبندی کرد.
شکل اول یکی به چنده، یه ورودی و یه دنباله خروجی، مثل یه عکس که یه جمله توضیح ازش ساخته میشه. چند به یکی: یه دنباله ورودی، یه خروجی؛ مثل خوندن یه جمله و گفتن اینکه حسش مثبته یا منفی. شکل سوم چند به چنده، مثل ترجمه، که اول کل جمله خونده میشه و بعد ترجمه ساخته میشه. و آخری همقدمه، یعنی برای هر ورودی یه خروجی، مثل برچسب زدن به هر فریم یه ویدیو.
همون نوشته یه آزمایش بامزه هم داره: همهی نمایشنامههای شکسپیر، حدود ۴٫۴ مگابایت، رو حرف به حرف به یه شبکهی بازگشتی سهلایه داد تا حرف بعدی رو حدس بزنه. بعد از چند ساعت آموزش، شبکه متنهایی میساخت که شکل نمایشنامه رو داشت: اسم گوینده با حروف بزرگ، بعد چند خط شبیه شعر. معنیش بیشتر بیسر و ته بود، ولی شکلش رو خودش یاد گرفته بود؛ همون کاری که بعدها مدلهای زبانی خیلی بزرگتر و بهتر کردن.
آموزش در زمان
این جعبه وزنهاش رو چطور یاد میگیره؟ با همون پسانتشار، فقط روی حلقهی باز شده.
ویکیپدیا بهش میگه «پسانتشار در زمان». شبکه رو به تعداد قدمها باز میکنن، مثل یه شبکهی چندلایهی معمولی، و خطا رو از آخر به اول برمیگردونن. فقط یه فرق مهم داره: چون همهی قدمها یه جعبهان با همون وزنها، تغییری که هر قدم پیشنهاد میکنه با بقیه جمع میشه و یه تغییر واحد روی همون وزنها میشینه.
برای دنبالههای خیلی بلند، باز کردن کل دنباله گرون میشه؛ پس یه نسخهی کوتاهشده هم هست که فقط چند قدم آخر رو باز میکنه و پنجره رو جلو میبره. و همین راه برگشت طولانیه که توی درس بعد میبینیم چرا سیگنال خطا رو کمرنگ میکنه.
به چه کاری میاد
شبکهی بازگشتی برای هر دادهای که ترتیب داره ساخته شده: متن، گفتار، و سریهای زمانی مثل قیمت روزانه. میتونه هر قدم یه خروجی بده، مثلا حدس کلمهی بعد، یا فقط آخر کار یه جواب بده، مثلا اینکه کل جمله دربارهی چیه. سالها شکلهای پیشرفتهترش، مثل LSTM که سال ۱۹۹۷ اومد، برای ترجمه و تشخیص گفتار به کار میرفتن. هنوز هم جاهایی که سبکی و کار لحظهای مهمه، به کار میاد؛ چون هر قدم فقط یه حافظهی کوچیک لازم داره.
از دو طرف
شبکهی بازگشتی معمولی فقط گذشته رو میبینه. ولی گاهی برای فهمیدن یه کلمه، کلمهی بعدیش هم مهمه.
سال ۱۹۹۷ دو پژوهشگر شبکهی بازگشتی دوطرفه رو معرفی کردن: دو تا شبکه، یکی از اول به آخر و یکی از آخر به اول، که هر دو به همون خروجی وصلن. اینطوری خروجی هر قدم هم از کلمههای قبل خبر داره، هم از بعد. ویکیپدیا مثال تشخیص دستخط رو میزنه، که دونستن حرفهای قبل و بعد کمک میکنه، و کاربردهایی مثل تشخیص گفتار و ترجمه.
هزینهش اینه که باید کل دنباله رسیده باشه؛ پس برای ساختن متن تکهبهتکه، که آینده هنوز نیومده، به کار نمیاد. همین فرق، بعدا توی ترنسفورمر هم میبینیم: رمزگذار همهی جمله رو از دو طرف میبینه، رمزگشا فقط گذشته رو؛ درس ماسک نگاه نکردن به آینده همین رو باز میکنه.
مرزهاش
همون چیزی که شبکهی بازگشتی رو ساده میکنه، مرزش هم هست. اول، هر قدم منتظر قدم قبلیه؛ پس نمیشه کار یه جمله رو بین هستههای کارت گرافیک پخش کرد، و مقالهی ۲۰۱۷ گفت این توی جملههای بلند خیلی مهم میشه. دوم، همون کمرنگ شدن: اثر کلمههای دور قدمبهقدم ضعیف میشه و موقع آموزش هم سیگنال اشتباه به سختی به عقب میرسه؛ همون محو شدن گرادیان. ترنسفورمر دقیقا برای همین دو تا اومد: همه با هم، و فاصلهی هر دو کلمه یه قدم.
چند نکته
- حالت پنهان یعنی حافظه. یه یادداشت که هر قدم بهروز میشه.
- یه جعبه، چند بار. همون وزنها برای همهی قدمها.
- باز شدهش زمانه، نه لایه.
- دو مرز: یکییکی، و کمرنگ شدن دورها.
درس بعد همین دو مرز رو از نزدیک میبینه: مشکلهای شبکهی بازگشتی.
جمعبندی. آنچه از این درس با خودتان میبرید.
- یکییکی میخونه، با یه حافظهی کوچیک.
- حافظهی تازه از ورودی و حافظهی قبلی.
- همون وزنها، هر قدم.
- باز شدهش شبیه لایهست، ولی زمانه.
- موازی نمیشه؛ دورها کمرنگ میشن.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.