آشنایی با شبکه عصبی بازگشتی

شبکه‌ عصبی بازگشتی (RNN) در تشخیص گفتار، ترجمه‌ی زبان، پیش‌بینی، پردازش تصویر و غیره کاربرد دارند. در این مقاله به بررسی این شبکه همراه با مثال‌ نوشتاری می‌پردازیم و از پرداختن به ریاضیات این شبکه دوری می‌کنیم.

داده‌های متوالی

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

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

 

حافظه‌ی متوالی

تا اینجا متوجه شدیم شبکه‌ عصبی بازگشتی در پردازش داده‌های متوالی خوب عمل می‌کند. اما چگونه این اتفاق می‌افتد؟ آن‌ها این کار را با استفاده از مفهومی به نام حافظه‌ی متوالی انجام می‌دهند.

اکنون از شما می‌خواهم حروف الفبا را از ابتدا به انتها در ذهن خود بگویید. بسیار خوب! خیلی راحت بود! اما اکنون می‌خواهم که حروف الفبا را از انتها به ابتدا در ذهن خود بگویید! قطعا برای شما سخت خواهد بود مگر اینکه قبلا گفتن سلسله‌ی حروف را از انتها به ابتدا تمرین کرده باشید.

اکنون بیاید حروف الفبا را از F شروع کنید و در ذهن خود بگویید! در ابتدا ذهن شما درگیر چالشی می‌شود و با چند حرف اول مبارزه می‌کند اما پس از اینکه مغز شما الگوی خود را انتخاب کرد؛ بقیه‌ی حروف به صورت خودکار در ذهن شما گفته می‌شود. دلیل منطقی سختی این کار این است که حافظه‌ی شما حروف الفبا را به صورت دنباله‌وار یاد می‌گیرد. حافظه‌ی متوالی مکانیزمی است که شناخت الگوهای متوالی را برای مغز شما آسان‌تر می‌سازد.

شبکه عصبی بازگشتی (RNN) یک مفهوم انتزاعی از حافظه‌ی متوالی دارد. اما RNN چگونه این مفهوم را تکرار می‌کند؟ بیایید به شبکه‌ی عصبی سنتی نگاهی بیندازیم که به عنوان شبکه‌ی عصبی پیشخور (Feedforward Neural Network) شناخته می‌شود. این شبکه دارای لایه‌ی ورودی ، لایه‌ی خروجی و لایه‌ی پنهان می‌باشد.

شبکه عصبی پیشخور
شبکه عصبی پیشخوز

چه می‌شود اگر یک حلقه به شبکه‌ی عصبی اضافه کنیم تا اطلاعات قبلی را به جلو منتقل کند؟ این در واقع همان کاری است که یک شبکه‌ عصبی بازگشتی انجام می‌دهد. RNN یک مکانسیم حلقوی دارد که جریان اطلاعات را از یک جا به جای دیگری منتقل می‌کند. این اطلاعات که نمایانگر ورودی‌های قبلی می‌باشند در لایه‌ی پنهان جابه جا می‌شوند.

ارسال بازخورد

مثالی از حافظه متوالی

فرض کنید می‌خواهیم یک چت بات درست کنیم. این چت بات می‌تواند منظور کاربران را از متن ورودی متوجه شود.

رباتی که صحبت انسان‌ها را متوجه می‌شود.

 برای حل این مسئله دنباله‌ی متن را با استفاده از RNN کدگذاری می‌کنیم. سپس خروجی شبکه‌ عصبی بازگشتی را به یک شبکه‌ی عصبی پیشخور وصل می‌کنیم که منظور و اهداف کاربران را طبقه بندی کند. کاربری جمله‌ی ” what time is it?” را به چت بات می‌فرستد. برای شروع جمله را به کلمات مستقل تقسیم می‌کنیم. RNN به صورت متوالی کار می‌کند بنابراین در یک لحظه فقط یک کلمه به آن می‌فرستیم.

قدم اول ارسال “what” به RNN می‌باشد. RNN کلمه‌ی “what” را کدگذاری می‌کند و خروجی مربوط به آن را تولید می‌کند. برای قدم بعد کلمه‌ی “time”  و حالت پنهان مرحله‌ی قبل را به RNN می‌فرستیم. اکنون RNN اطلاعات مربوط به دو کلمه‌ی “what” و “time” را دارد. این فرآیند را تا آخرین مرحله ادامه می‌دهیم.

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

نحوه‌ی عملکرد شبکه عصبی بازگشتی در درک و دریافت جملات
نحوه‌ی عملکرد RNN در درک و دریافت جملات و سپس ارسال به شبکه پیشخور

ناپدید شدن گرادیان

شما ممکن است متوجه توزیع عجیب رنگ‌ها در حالت‌های پنهان شده باشید.  این امر برای نشان دادن مسئله‌ای مربوط به RNNهای معروف به حافظه‌ی کوتاه مدت می‌باشد. حافظه‌ی کوتاه مدت ناشی از ناپدید شدن گرادیان می‌باشد که در سایر معماری‌های شبکه‌های عصبی رواج دارد. از آنجا که RNN مراحل بیشتری را پردازش می‌کند، در حفظ اطلاعات از مراحل قبلی با مشکل روبه‌رو می‌شود. همانطور که مشاهده می‌کنید، اطلاعات حاصل از کلمه “what” و “time” در مرحله نهایی تقریباً وجود ندارد.

حافظه کوتاه مدت و گرادیان ناپدید شده به دلیل ماهیت  back-propagation می‌باشد. به دلیل ناپدید شدن گرادیان ، RNN وابستگی‌های دراز مدت را در طی مراحل زمانی نمی‌آموزد. این بدان معنی است که احتمال دارد هنگام تلاش برای پیش‌بینی قصد کاربر ، کلمه “what” و “time” در نظر گرفته نشود؛ سپس شبکه باید با “is it?” بهترین حدس را بزند. این بسیار مبهم است و حتی برای یک انسان دشوار خواهد بود. بنابراین عدم توانایی یادگیری در مراحل زمانی قبلی باعث می‌شود شبکه دارای حافظه کوتاه مدت باشد.

 

LSTM GRU

RNN از حافظه کوتاه مدت رنج می‌برد. چگونه می‌توانیم با آن مقابله کنیم؟ به منظور کاهش حافظه کوتاه مدت ، دو شبکه‌ی عصبی بازگشتی تخصصی ایجاد شده است. یکی از آن‌ها حافظه کوتاه مدت طولانی یا LSTM  مخفف عبارت Long Short-Term Memory و مورد دیگر واحدهای بازگشتی دروازه‌دار یاGRU  مخفف عبارت Gated Recurrent Units  است (در مورد LSTM در این مقاله بیشتر بخوانید).

LSTM و GRU اساساً مانند RNN عمل می‌کنند ، اما آنها می‌توانند با استفاده از مکانیزم‌هایی به نام “Gate” یا دروازه ، وابستگی‌های طولانی مدت را بیاموزند. این دروازه‌ها عملیات تنسوری مختلفی هستند که می‌توانند بیاموزند چه اطلاعاتی را به حالت پنهان اضافه یا حذف کنند. به دلیل این توانایی ، حافظه کوتاه مدت برای آنها مشکلی ایجاد نمی‌کند.

به طور خلاصه ، RNN برای پردازش داده‌های متوالی و پیش‌بینی‌ها خوب است اما از حافظه کوتاه مدت رنج می‌برد. مسئله حافظه کوتاه مدت RNN به معنای کنار گذاشتن آن‌ها و استفاده از نسخه‌های تکامل یافته مانند LSTM یا GRU نیست. RNN از مزیت آموزش سریع‌تر برخوردار است و از منابع محاسباتی کمتری استفاده می‌کند.
این به این دلیل است که عملیات تنسور کمتری برای محاسبه وجود دارد. وقتی انتظار دارید مدل‌های دنباله‌دار طولانی‌تری با وابستگی‌های طولانی مدت داشته باشید ، باید از LSTM یا GRU استفاده کنید.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.