|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| RNNPyTorch.ipynb | ||
| RNNTF.ipynb | ||
| assignment.md | ||
README.md
شبکههای عصبی بازگشتی
پیشزمینه: آزمون کوتاه
در بخشهای قبلی، ما از نمایشهای معنایی غنی متن و یک طبقهبند خطی ساده بر روی تعبیهها استفاده کردهایم. این معماری معنای کلی کلمات در یک جمله را ثبت میکند، اما ترتیب کلمات را در نظر نمیگیرد، زیرا عملیات تجمیع بر روی تعبیهها این اطلاعات را از متن اصلی حذف میکند. به دلیل اینکه این مدلها قادر به مدلسازی ترتیب کلمات نیستند، نمیتوانند وظایف پیچیدهتر یا مبهمتر مانند تولید متن یا پاسخ به سوالات را حل کنند.
برای ثبت معنای دنباله متن، باید از معماری دیگری از شبکههای عصبی استفاده کنیم که به آن شبکه عصبی بازگشتی یا RNN گفته میشود. در RNN، جمله را به صورت نماد به نماد از طریق شبکه عبور میدهیم و شبکه یک وضعیت تولید میکند که سپس با نماد بعدی دوباره به شبکه داده میشود.
تصویر توسط نویسنده
با توجه به دنباله ورودی توکنها X0,...,Xn، RNN یک دنباله از بلوکهای شبکه عصبی ایجاد میکند و این دنباله را به صورت انتها به انتها با استفاده از پسانتشار آموزش میدهد. هر بلوک شبکه یک جفت (Xi,Si) را به عنوان ورودی میگیرد و Si+1 را به عنوان نتیجه تولید میکند. وضعیت نهایی Sn یا (خروجی Yn) به یک طبقهبند خطی داده میشود تا نتیجه تولید شود. تمام بلوکهای شبکه وزنهای یکسانی دارند و به صورت انتها به انتها با یک پاس پسانتشار آموزش داده میشوند.
به دلیل اینکه بردارهای وضعیت S0,...,Sn از طریق شبکه عبور میکنند، شبکه قادر است وابستگیهای دنبالهای بین کلمات را یاد بگیرد. برای مثال، وقتی کلمه نه در جایی از دنباله ظاهر میشود، میتواند یاد بگیرد که برخی عناصر درون بردار وضعیت را نفی کند و نتیجه نفی را ایجاد کند.
✅ از آنجا که وزنهای تمام بلوکهای RNN در تصویر بالا مشترک هستند، همان تصویر میتواند به صورت یک بلوک (در سمت راست) با یک حلقه بازگشتی نمایش داده شود که وضعیت خروجی شبکه را به ورودی بازمیگرداند.
ساختار یک سلول RNN
بیایید ببینیم یک سلول ساده RNN چگونه سازماندهی شده است. این سلول وضعیت قبلی Si-1 و نماد فعلی Xi را به عنوان ورودی میپذیرد و باید وضعیت خروجی Si (و گاهی اوقات خروجی دیگری Yi، همانطور که در مورد شبکههای تولیدی وجود دارد) را تولید کند.
یک سلول ساده RNN دو ماتریس وزن داخلی دارد: یکی نماد ورودی را تبدیل میکند (آن را W مینامیم)، و دیگری وضعیت ورودی را تبدیل میکند (H). در این حالت خروجی شبکه به صورت σ(W×Xi+H×Si-1+b) محاسبه میشود، که در آن σ تابع فعالسازی و b بایاس اضافی است.
تصویر توسط نویسنده
در بسیاری از موارد، توکنهای ورودی قبل از ورود به RNN از لایه تعبیه عبور میکنند تا ابعاد کاهش یابد. در این حالت، اگر بعد بردارهای ورودی emb_size باشد و بردار وضعیت hid_size باشد - اندازه W برابر emb_size×hid_size و اندازه H برابر hid_size×hid_size خواهد بود.
حافظه بلندمدت کوتاه (LSTM)
یکی از مشکلات اصلی RNNهای کلاسیک مشکل گرادیانهای ناپدیدشونده است. به دلیل اینکه RNNها به صورت انتها به انتها در یک پاس پسانتشار آموزش داده میشوند، انتقال خطا به لایههای اولیه شبکه دشوار است و بنابراین شبکه نمیتواند روابط بین توکنهای دور را یاد بگیرد. یکی از راههای جلوگیری از این مشکل معرفی مدیریت وضعیت صریح با استفاده از دروازهها است. دو معماری معروف از این نوع وجود دارد: حافظه بلندمدت کوتاه (LSTM) و واحد انتقال دروازهای (GRU).
منبع تصویر TBD
شبکه LSTM به شکلی مشابه RNN سازماندهی شده است، اما دو وضعیت از لایهای به لایه دیگر منتقل میشوند: وضعیت واقعی C و بردار مخفی H. در هر واحد، بردار مخفی Hi با ورودی Xi ترکیب میشود و آنها کنترل میکنند که چه اتفاقی برای وضعیت C از طریق دروازهها بیفتد. هر دروازه یک شبکه عصبی با فعالسازی سیگموئید (خروجی در محدوده [0,1]) است که میتوان آن را به عنوان یک ماسک بیتی در نظر گرفت که وقتی با بردار وضعیت ضرب میشود، عمل میکند. دروازههای زیر وجود دارند (از چپ به راست در تصویر بالا):
- دروازه فراموشی بردار مخفی را میگیرد و تعیین میکند که کدام اجزای بردار C باید فراموش شوند و کدام باید عبور کنند.
- دروازه ورودی اطلاعاتی از ورودی و بردارهای مخفی میگیرد و آن را وارد وضعیت میکند.
- دروازه خروجی وضعیت را از طریق یک لایه خطی با فعالسازی tanh تبدیل میکند، سپس برخی از اجزای آن را با استفاده از بردار مخفی Hi انتخاب میکند تا وضعیت جدید Ci+1 تولید شود.
اجزای وضعیت C را میتوان به عنوان برخی پرچمها در نظر گرفت که میتوانند روشن و خاموش شوند. برای مثال، وقتی نام آلیس را در دنباله مشاهده میکنیم، ممکن است بخواهیم فرض کنیم که به یک شخصیت زن اشاره دارد و پرچم را در وضعیت بالا ببریم که یک اسم زنانه در جمله داریم. وقتی عبارت و تام را مشاهده میکنیم، پرچم را بالا میبریم که یک اسم جمع داریم. بنابراین با دستکاری وضعیت میتوانیم به طور فرضی ویژگیهای دستوری بخشهای جمله را پیگیری کنیم.
✅ یک منبع عالی برای درک جزئیات داخلی LSTM این مقاله فوقالعاده Understanding LSTM Networks نوشته کریستوفر اولا است.
RNNهای دوطرفه و چندلایه
ما شبکههای بازگشتی را که در یک جهت عمل میکنند، از ابتدای دنباله تا انتها، مورد بحث قرار دادهایم. این روش طبیعی به نظر میرسد، زیرا شبیه به نحوه خواندن و گوش دادن به گفتار است. با این حال، از آنجا که در بسیاری از موارد عملی به دنباله ورودی دسترسی تصادفی داریم، ممکن است منطقی باشد که محاسبات بازگشتی را در هر دو جهت اجرا کنیم. چنین شبکههایی RNNهای دوطرفه نامیده میشوند. هنگام کار با شبکه دوطرفه، به دو بردار وضعیت مخفی نیاز داریم، یکی برای هر جهت.
یک شبکه بازگشتی، چه یکطرفه و چه دوطرفه، الگوهای خاصی را در یک دنباله ثبت میکند و میتواند آنها را در یک بردار وضعیت ذخیره کند یا به خروجی منتقل کند. همانند شبکههای کانولوشنی، میتوانیم یک لایه بازگشتی دیگر بر روی لایه اول بسازیم تا الگوهای سطح بالاتر را ثبت کنیم و از الگوهای سطح پایین استخراجشده توسط لایه اول بسازیم. این ما را به مفهوم RNN چندلایه میرساند که شامل دو یا چند شبکه بازگشتی است، جایی که خروجی لایه قبلی به عنوان ورودی به لایه بعدی منتقل میشود.
تصویر از این پست فوقالعاده نوشته فرناندو لوپز
✍️ تمرینها: تعبیهها
یادگیری خود را در نوتبوکهای زیر ادامه دهید:
نتیجهگیری
در این واحد، دیدیم که RNNها میتوانند برای طبقهبندی دنباله استفاده شوند، اما در واقع، آنها میتوانند بسیاری از وظایف دیگر مانند تولید متن، ترجمه ماشینی و موارد دیگر را انجام دهند. ما این وظایف را در واحد بعدی بررسی خواهیم کرد.
🚀 چالش
برخی از مقالات درباره LSTMها را مطالعه کنید و کاربردهای آنها را بررسی کنید:
- Grid Long Short-Term Memory
- Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
آزمون پس از درس
مرور و مطالعه خودآموز
- Understanding LSTM Networks نوشته کریستوفر اولا.
تکلیف: نوتبوکها
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نادرستیهایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما هیچ مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.

