FatemeHeidari
FatemeHeidari
خواندن ۷ دقیقه·۳ سال پیش

LSTM & GRU

RNN

انسان ها هر ثانیه فکر خود را از صفر شروع نمی کنند. با خواندن این مقاله، هر کلمه را بر اساس درک خود از کلمات قبلی درک می کنید. همه چیز را دور نمی اندازید و دوباره از صفر شروع به فکر کردن می کنید. افکار شما ماندگار هستند.

شبکه‌های عصبی سنتی نمی‌توانند این کار را انجام دهند، و به نظر یک نقص بزرگ است. به عنوان مثال، تصور کنید که می خواهید طبقه بندی کنید که چه نوع رویدادی در هر نقطه از یک فیلم اتفاق می افتد. مشخص نیست که چگونه یک شبکه عصبی سنتی می تواند از استدلال خود در مورد رویدادهای قبلی در فیلم برای اطلاع رسانی به رویدادهای بعدی استفاده کند.

اما RNN این مشکل را حل می کنند. آنها شبکه‌هایی هستند که حلقه‌هایی در آنها وجود دارد و به اطلاعات اجازه می‌دهند که باقی بمانند.

Neural Networks have loops.
Neural Networks have loops.

به حلقه اجازه می دهد تا اطلاعات از یک مرحله از شبکه به مرحله بعدی منتقل شود.

مشکل وابستگی های طولانی مدت

فاصله کوچکی بین اطلاعات مربوطه و مکانی که به آن نیاز است.

مثال: آخرین کلمه را در« the clouds are in the sky » پیش بینی کنید.

در چنین مواردی، جایی که فاصله بین اطلاعات مربوطه و مکانی که به آن نیاز است کم است، RNN ها می توانند یاد بگیرند که از اطلاعات گذشته استفاده کنند.


RNN ها می توانند اطلاعات قبلی را به حال متصل کنند

فاصله زیاد بین اطلاعات مربوطه و مکانی که به آن نیاز است.

مثال: کلمه آخر را پیش بینی کنید “I grew up in France… I speak fluent French


Long short-term memory (LSTM): نوع خاصی از شبکه عصبی بازگشتی (RNN) است که قادر به یادگیری وابستگی‌های بلندمدت هستند. LSTM میتواند مدلی برای حافظه کوتاه مدت بسازد که برای مدت طولانی دوام بیاورد.

LSTM ها به صراحت برای جلوگیری از مشکل وابستگی طولانی مدت طراحی شده اند. به خاطر سپردن اطلاعات برای مدت زمان طولانی عملاً رفتار پیش فرض آنهاست، نه چیزی که برای یادگیری آن تلاش می کنند!

تفاوت بین RNN و LSTM

همه شبکه های عصبی بازگشتی به شکل زنجیره ای از ماژول های تکرار شونده شبکه عصبی هستند. در RNN های استاندارد، این ماژول تکرار شونده ساختار بسیار ساده ای مانند یک لایه tanh دارد.

ماژول تکرار شونده در یک RNN استاندارد شامل یک لایه است.
ماژول تکرار شونده در یک RNN استاندارد شامل یک لایه است.


ماژول تکراری در یک RNN استاندارد شامل یک لایه است.

LSTMها نیز دارای این ساختار زنجیره مانند هستند، اما ماژول تکرارشونده ساختار متفاوتی دارد. به جای داشتن یک لایه شبکه عصبی واحد، چهار لایه وجود دارد که به روشی بسیار خاص با هم تعامل دارند.

ماژول تکرار شونده در یک LSTM شامل چهار لایه تعاملی است.
ماژول تکرار شونده در یک LSTM شامل چهار لایه تعاملی است.


ماژول تکرار شونده در یک LSTM شامل چهار لایه تعاملی است.

نمادها


در نمودار بالا، هر خط یک بردار کامل را از خروجی یک گره تا ورودی های دیگر را حمل می کند. دایره های صورتی عملکردهای نقطه ای مانند جمع برداری را نشان می دهند، در حالی که جعبه های زرد لایه های شبکه عصبی آموخته شده هستند. ادغام خطوط نشان دهنده الحاق است، در حالی که یک انشعاب خط نشان دهنده کپی شدن محتوای آن و رفتن کپی ها به مکان های مختلف است.

ایده اصلی LSTM ها

کلید LSTM ها وضعیت سلولی، خط افقی است که از بالای نمودار عبور می کند.

حالت سلولی شبیه یک تسمه نقاله است. تنها با برخی از فعل و انفعالات خطی جزئی مستقیماً در کل زنجیره اجرا می شود. بسیار آسان است که اطلاعات بدون تغییر در امتداد آن جریان یابد.

LSTM توانایی حذف یا اضافه کردن اطلاعات به وضعیت سلولی را دارد که به دقت توسط ساختارهایی به نام گیت تنظیم می شود.

گیت ها راهی هستند که به صورت اختیاری اطلاعات را از خود عبور می دهند. آنها از یک لایه شبکه عصبی سیگموئید و یک عملیات ضرب نقطه ای تشکیل شده اند.

لایه سیگموئید اعدادی بین صفر و یک را خروجی می دهد و توضیح می دهد که چه مقدار از هر جزء باید عبور کند. مقدار صفر به معنای "نگذارید هیچ چیز عبور کند"(حذف اطلاعات)، در حالی که مقدار یک به معنای " بگذار همه چیز بگذرد!"(بخاطر سپردن اطلاعات)

یک LSTM دارای سه مورد از این دروازه ها برای محافظت و کنترل وضعیت سلول است.

قدم به قدم LSTM Walk Through

اولین قدم در LSTM این است که تصمیم بگیریم چه اطلاعاتی را از حالت سلول دور بریزیم. این تصمیم توسط یک لایه سیگموئید به نام "لایه دروازه فراموش" گرفته می شود. به ht_1و xt نگاه می کند و برای هر عدد در حالت سلولی Ct_1 عددی بین 0 و 1 خروجی می دهد. عدد 1 نشان دهنده "کاملاً این را نگه دارید" در حالی که 0 نشان دهنده "به طور کامل از شر این خلاص شوید".

بیایید به مثال خود از یک مدل زبان برگردیم که سعی می کند کلمه بعدی را بر اساس تمام موارد قبلی پیش بینی کند. در چنین مشکلی، حالت سلول ممکن است شامل جنسیت موضوع فعلی باشد تا بتوان از ضمایر صحیح استفاده کرد. وقتی موضوع جدیدی را می بینیم، می خواهیم جنسیت موضوع قدیمی را فراموش کنیم.


گام بعدی این است که تصمیم بگیریم چه اطلاعات جدیدی را در حالت سلول ذخیره کنیم. این دو بخش دارد. ابتدا، یک لایه سیگموئید به نام "لایه دروازه ورودی" تصمیم می گیرد که کدام مقادیر را به روز کنیم. سپس، یک لایه tanh یک بردار از مقادیر کاندید جدید، C~t ایجاد می کند که می تواند به حالت اضافه شود. در مرحله بعدی، این دو را با هم ترکیب می‌کنیم تا یک به‌روزرسانی برای حالت ایجاد کنیم.

در مثال مدل زبان خود، می‌خواهیم جنسیت موضوع جدید را به حالت سلول اضافه کنیم تا جایگزین مورد قبلی که فراموش کرده‌ایم شود.

اکنون زمان آن رسیده است که حالت سلولی قدیمی، Ct_1، به حالت سلولی جدید ct به‌روزرسانی شود. مراحل قبلی قبلاً تصمیم گرفته بودند که چه کاری انجام دهیم، فقط باید واقعاً آن را انجام دهیم.

حالت قدیمی را در ft ضرب می کنیم و چیزهایی را که زودتر تصمیم گرفته بودیم فراموش کنیم را فراموش می کنیم. سپس آن را اضافه می کنیمit * c~t . این مقادیر کاندیدای جدید است که بر اساس میزان تصمیم ما برای به روز رسانی هر مقدار حالت مقیاس بندی شده است.

در مورد مدل زبان، این جایی است که ما در واقع اطلاعات مربوط به جنسیت موضوع قدیمی را حذف می کنیم و اطلاعات جدید را همانطور که در مراحل قبلی تصمیم گرفتیم اضافه می کنیم.

در نهایت، ما باید تصمیم بگیریم که چه چیزی را خروجی خواهیم داشت. این خروجی بر اساس وضعیت سلولی ما خواهد بود، اما یک نسخه فیلتر شده خواهد بود. ابتدا یک لایه سیگموئید اجرا می کنیم که تصمیم می گیرد چه قسمت هایی از حالت سلول را خروجی بگیریم. سپس، حالت سلول را از طریق tanh قرار می دهیم (برای فشرده سازی مقادیر بین 1- و 1) ، به طوری که فقط قسمت هایی را که تصمیم گرفتیم خروجی بگیریم را در خروجی دروازه سیگموئید ضرب می کنیم.

برای مثال مدل زبان، از آنجایی که به تازگی موضوعی را مشاهده کرده است، ممکن است بخواهد اطلاعات مربوط به یک فعل را خروجی بگیرد، در صورتی که این مورد بعدی باشد. به عنوان مثال، ممکن است مفرد یا جمع بودن فاعل را خروجی دهد، به طوری که ما بدانیم اگر فعل بعدی به چه شکلی باشد، باید ترکیب شود.

انواع حافظه کوتاه مدت

آنچه من تا اینجا توضیح دادم یک LSTM کاملا معمولی است. اما همه LSTM ها مانند موارد بالا نیستند. در واقع، به نظر می رسد که تقریباً هر مقاله ای که شامل LSTM می شود از نسخه کمی متفاوت استفاده می کند. تفاوت ها جزئی هستند، اما ذکر برخی از آنها خالی از لطف نیست.

یکی از انواع محبوب LSTM که توسط Gers & Schmidhuber (2000) معرفی شد، "اتصالات چشمی"(peephole connections) را اضافه می کند. این به این معنی است که اجازه می دهیم لایه های دروازه به وضعیت سلول نگاه کنند.

در نمودار بالا، سوراخ‌هایی را به تمام دروازه‌ها اضافه می‌کند، اما بسیاری از کاغذها برخی از سوراخ‌ها را نشان می‌دهند و برخی دیگر را خیر.

تغییر دیگر استفاده از گیت های فراموشی و ورودی جفت شده است. به جای اینکه جداگانه تصمیم بگیریم چه چیزی را فراموش کنیم و چه اطلاعات جدیدی را به آن اضافه کنیم، آن تصمیمات را با هم می گیریم. فقط زمانی فراموش می کنیم که بخواهیم چیزی را در جای خود وارد کنیم. ما فقط زمانی مقادیر جدیدی را به حالت وارد می کنیم که چیز قدیمی تر را فراموش کنیم.

یک تغییر کمی چشمگیرتر در LSTM واحد بازگشتی دردار(Gated Recurrent Unit) یا GRU است که توسط Cho و همکارانش معرفی شده است. این دروازه‌های فراموشی و ورودی را در یک «دروازه به‌روزرسانی» ترکیب می‌کند. همچنین حالت سلول و حالت پنهان را ادغام می کند و تغییرات دیگری را ایجاد می کند. مدل به دست آمده ساده تر از مدل های استاندارد LSTM است و به طور فزاینده ای محبوب شده است.

اینها تنها تعدادی قابل توجهی از انواع LSTMها هستند.



امیدوارم مفید بوده باشه!

موفق باشید.





منابع http://colah.github.io/posts/2015-08-Understanding-LSTMs

rnnnlpai
شاید از این پست‌ها خوشتان بیاید