هر چه می خوانم می فهمم بیشتر نمی دانم - دانش آموخته برق و کامپیوتر سابق
به ساده ترین شکل با شبکه عصبی LSTM آشنا بشیم
داشتم در مورد انواع شبکه های عصبی می خوندم که به یک مقاله جذاب با عنوان "Understanding LSTM Networks" برخورد کردم. مقاله را کامل خوندم و تصمیم گرفتم ترجمه این مقاله را در صفحه شخصی ام قرار دهم. مقداری از آن را ترجمه کرده بودم که گفتم بزار سرچی کنم اگر مطلب جالب دیگری بود در این مقاله به پیوست اضافه کنم. وقتی سرچ کردم دیدم بخشی از این مقاله با یک ترجمه روان موجود است. بنابراین تصمیم گرفتم ترجمه این مقاله را کامل کرده و در اینجا قرار دهم.
شبکههای عصبی بازگشتی (RNN)
در مورد نحوه فکر کردن انسانها میشه گفت اینجوری نیست که هر ثانیه ریست بشن و روند فکر کردن از اول شروع بشه. در همین لحظه که دارید این مطلب رو میخونید شما معنی هر کلمه رو با توجه به دانشی که از خوندن کلمههای قبلی کسب کردید متوجه میشید. به عبارتی شما موقع خوندن یک متن، درک و فهمی رو که در مورد اون متن با توجه به خوندن کلمات قبل کسب کردید دور نمیریزید بلکه به صورت پیوسته با خوندن هر کلمه جدید، نسبت به اون متنی که دارید میخونید درک و فهم پیدا میکنید و به عبارتی معنی اون متن رو متوجه میشید.
شبکههای عصبی متداولی که تاکنون متخصصان یادگیری ماشین از اونها استفاده میکردن نمیتونستن به این صورت شبیه انسان عمل کنند و این یک نقصان بزرگ برای این شبکهها محسوب میشه. برای مثال فرض کنید مدلی که شما ساختید قرار است مشخص کند در هر لحظه از فیلم چه اتفاقی در حال افتادن است. مشخص نیست شبکههای عصبی قدیمی چطور میتوانند از اطلاعاتی که در صحنههای قبلی فیلم به دست آوردهاند برای تشخیص نوع اتفاق در صحنههای بعدی فیلم استفاده کنند.
شبکههای عصبی بازگشتی (Recurrent Neural Network) برای برطرف کردن این مشکل طراحی شدند. در حقیقت شبکههای عصبی بازگشتی تو خودشون شامل یه حلقه بازگشتی هستند که منجر میشه اطلاعاتی که از لحظات قبلی بدست آوردیم از بین نرن و تو شبکه باقی بمونن.
در شکل بالا، بخش A، به عنوان ورودی مقدار xt را دریافت و مقدار ht را به خروجی میبرد. حلقه باعث میشود که اطلاعات از یک مرحله به مرحله بعد ارسال شوند.
این حلقهها احتمالا باعث شدن که شبکههای عصبی بازگشتی براتون مبهم به نظر بیان. اگر چه اگه بیشتر جلو بریم متوجه میشید که این شبکهها عملاً تفاوت خاصی با شبکههای عصبی معمولی ندارن. شبکههای عصبی بازگشتی رو میشه به صورت چندین کپیِ یکسان از یک شبکه عصبی در نظر گرفت که هر کدام اطلاعاتش را به شبکه بعدی منتقل میکند. در شکل زیر وضعیت شبکه عصبی بازگشتی در صورت باز کردن حلقه نمایش داده شده است:
با توجه به ذات زنجیرهمانند شبکههای عصبی بازگشتی، میتوان تشخیص داد که این شبکهها به مقدار زیادی به دنبالهها و لیستها مرتبط هستند. در حقیقت شبکههای عصبی بازگشتی اولین انتخاب برای کار با چنین دادههایی هستند.
در حقیقت در سالهای گذشته مکرراً از این شبکهها استفاده شده که منجر به موفقیتهای بسیار چشمگیری در حوزههای مختلف از جمله تشخیص صدا، مدل کردن زبان، ترجمه، درج خودکار توضیح برای تصویر و ... شده است. برای مشاهده نتایج و آزمایشات خارقالعادهای که با اساتفاده از شبکههای عصبی بازگشتی انجام شده، میتوانید نوشتهِ جذاب و عالی Andrej Karpathy با عنوانعملکرد عالی ولی بیدلیل شبکههای عصبی بازگشتی رو مطالعه کنید که قدرت خارقالعاده شبکههای عصبی بازگشتی شرح داده شده.
بیشتر این موفقیتها مدیون استفاده از شبکههای "LSTM" است. نوع خاصی از شبکههای عصبی بازگشتی که در بیشتر موارد عملکرد بهتری از شبکههای عصبی بازگشتی استاندارد دارد. تقریباً میشه گفت اکثر موفقیتهای شبکههای عصبی بازگشتی وقتی بدست آمده که از LSTMها استفاده شده است. تو این نوشته ما شبکههای LSTM رو به تفسیر توضیح میدیم.
مشکلی به نام وابستگیهای بلندمدت
یکی از جذابیتهای شبکههای عصبی بازگشتی این است که آنها ممکن است بتوانند اطلاعات که قبلاً مشاهده شده را به کاری که در حال حاضر در حال انجام است مرتبط سازد، برای مثال استفاده از فریمهای قبلی یک ویدئو میتواند در فهمیدن فریم کنونی کمککننده باشد. اگر شبکههای عصبی بازگشتی بتوانند واقعاً این کار را انجام دهند، میتوان آنها را بسیار مفید دانست. ولی آیا واقعاً میتونن؟ جواب اینه که بستگی داره.
بعضی مواقع ما فقط نیاز داریم فقط به اطلاعات گذشته نزدیک نگاه کنیم تا متوجه اطلاعات حال حاضر بشیم. برای مثال، فرض کنید ما مدلِ زبانیای ساختهایم که تلاش میکند کلمه بعدی را با توجه به کلمات قبلیای که در اختیارش قرار دادیم پیشبینی کند. اگه ما میخوایم آخرین کلمه تو جمله «ابرها هستند در آسمان» رو پیشبینی کنیم، ما به اطلاعات اضافیِ دیگهای نیاز نداریم و تقریباً میشه گفت واضحه که کلمه بعدی «آسمان» است. در موارد مشابه این مثال، که فاصله بین اطلاعات مرتبط و جایی که به این اطلاعات نیاز داریم خیلی کمه، شبکههای عصبی بازگشتی میتونن یاد بگیرن که از این اطلاعات استفاده کنند.
ولی ممکن است مواردی وجود داشته باشد که ما به اطلاعات بیشتری نیاز داشته باشیم. فرض کنید قصد داریم کلمه بعدی در جمله «من زبان فرانسه را خیلی راحت صحبت میکنم... من به دنیا آمدم در فرانسه.» با توجه به اطلاعات اخیر (یعنی چهار پنج کلمه قبل از آخرین کلمه)، میتوان گفت که کلمه آخر احتمالا اسم یک کشور است، ولی اگر بخواهیم دقیقاً متوجه بشیم چه کشوری است، ما نیاز داریم به اطلاعات دورتر (یعنی تا ده یا بیست کلمه قبل از آخرین کلمه) دسترسی داشته باشیم. به صورت کلی ممکن است فاصله بین اطلاعات مرتبط و جایی که به این اطلاعات نیاز داریم زیاد باشد.
متأسفانه، هر چه این فاصله افزایش پیدا میکند، شبکههای عصبی بازگشتی قدرتشان را در به یادآوردن و استفاده از اطلاعاتی که در گذشته دورتر یاد گرفتهاند کاهش پیدا میکند و به عبارتی توانائی استفاده از اطلاعات گذشته دورتر را ندارند.
از نظر تئوری، شبکههای عصبی بازگشتی توانائی مدیریت وابستگیهای بلندمدت رو باید داشته باشند. یک فرد متخصص میتونه با دقت پارامترهای شبکه رو طوری تعیین کنه که مسائل کوچیکِ این شکلی را حل کنه. متأسفانه در عمل شبکههای عصبی بازگشتی توانائی یادگیری وابستگی بلندمدت رو ندارن. این مشکل به صورت دقیقتر تو این دو تا مقاله یعنی Hochreiter 1991و Bengio, et al. 1994 شرح داده شدن.
شبکههای LSTM
شبکههای LSTM که خلاصه شده عبارت "Long Short Term Memory" هستند، نوع خاصی از شبکههای عصبی بازگشتی هستند که توانائی یادگیری وابستگیهای بلندمدت را دارند. این شبکهها برای اولین بار توسط Hochreiter و Schmidhuber در سال ۱۹۹۷ در این مقاله معرفی شدند. البته تعداد زیادی از محققان در بهبود این شبکهها نقش داشتند که در متن اصلی به آنها اشاره شده است.
در حقیقت هدف از طراحی شبکههای LSTM، حل کردن مشکل وابستگی بلندمدت بود. به این نکته مهم توجه کنید که به یاد سپاری اطلاعات برای بازههای زمانی بلند مدت، رفتار پیشفرض و عادی شبکههای LSTM است و ساختار آنها به صورتی است که اطلاعات خیلی دور را به خوبی یاد میگیرند که این ویژگی در ساختار آنها نهفته است.
همه شبکههای عصبی بازگشتی به شکل دنبالهای (زنجیرهای) تکرار شونده از ماژولهای (واحدهای) شبکههای عصبی هستند. در شبکههای عصبی بازگشتی استاندارد، این ماژولهای تکرار شونده ساختار سادهای دارند، برای مثال تنها شامل یک لایه تانژانتِ هایپربولیک (tanh) هستند.
شبکههای LSTM نیز چنین ساختار دنباله یا زنجیرهمانندی دارند ولی ماژولِ تکرار شونده ساختار متفاوتی دارد. به جای داشتن تنها یک لایه شبکه عصبی، ۴ لایه دارند که طبق ساختار ویژهای با یکدیگر در تعامل و ارتباط هستند.
نگران جزئیات تصویر نباشید، جلوتر قدم یه قدم ساختار شبکههای LSTM را توضیح خواهیم داد. ابتدا معنی هر کدام از شکل و علامتهایی را که از آنها استفاده خواهیم کرد توضیح می دهیم.
در شکل بالا، هر خط یک بردار را به صورت کامل از خروجی یک گره به ورودی گره دیگر انتقال میدهد. دایرههای صورتی نمایش دهنده عملیاتهای نقطه به نقطه مانند «جمع کردن دو بردار» هستند. مستطیلهای زرد، لایههای شبکههای عصبی هستند که شبکه پارامترهای آنها را یاد میگیرد. خطهایی که با هم ادغام میشوند نشاندهنده الحاق (concatenation) و خطهایی که چند شاخه میشوند نشان دهندهای این موضوع است که محتوای آنها کپی و به بخشهای مختلف ارسال میشود
ایده اصلیِ پشت LSTMها
عنصر اصلی LSTMها سلول حالت (cell state) است که در حقیقت یک خط افقی است که در بالای شکل قرار دارد.
سلول حالت را میتوان به صورت یک تسمه نقاله تصور کرد که از اول تا آخر دنباله یا همان زنجیره با تعاملات خطیِ جزئی در حرکت است (یعنی ساختار آن بسیار ساده است و تغییرات کمی در آن اتفاق میافتد).
شبکه LSTM این توانائی را دارد که اطلاعات جدیدی را به سلول حالت اضافه یا اطلاعات آن را حذف کنید. این کار توسط ساختارهای دقیقی به نام دروازهها (gates) انجام میشود.
دروازهها راهی هستند برای ورود اختیاری اطلاعات. آنها از یک لایه شبکه عصبیِ سیگموید (sigmoid) به همراه یک عملگر ضرب نقطه به نقطه تشکلیل شدهاند.
خروجی لایه سیگموید عددی بین صفر و یک است، که نشان میدهد چه مقدار از وروی باید به خروجی ارسال شود. مقدار صفر یعنی هیچ اطلاعاتی نباید به خروجی ارسال شود در حالی که مقدار یک یعنی تمام ورودی به خروجی ارسال شود!
شبکه LSTM دارای ۳ دروازه مشابه برای کنترل مقدار سلول حالت است.
بررسی قدم به قدمِ ورود و خروج اطلاعات به LSTM
قدم اول در LSTM تصمیم در مورد اطلاعاتی است که میخواهیم آنها را از سلول حالت پاک کنیم. این تصمیم توسط یک لایه سیگموید به نام «دروازه فراموشی» (forget gate) انجام میشود. این دروازه با توجه به مقادیر ht-1 و xt ، برای هر عدد، مقدار صفر یا یک را در سلول حالتِ Ct-1 به خروجی میبرد. مقدار یک یعنی به صورت کامل مقدار حال حاضرِ سلول حالت (Ct-1) را به Ct ببر و مقدار صفر یعنی به صورت کامل اطلاعات سلول حالت کنونی (Ct-1) را پاک کن و هیچ مقداری از آن را به Ct نبر.
بیاید به مثال قبلیمان که یک مدل زبانیای بود که در آن تلاش داشتیم کلمه بعدی را بر اساس همه کلمههای قبلی حدس بزنیم، برگردیم. در چنین مسألهای، سلول حالت ممکن است دربردارنده جنسیت فاعل کنونی باشد، که با توجه به آن میتوانیم تشخیص دهیم از چه ضمیری باید استفاده کنیم. زمانی که یک فاعل جدید در جمله ظاهر میشود، میبایست جنسیت فاعل قبلی حذف شود.
قدم بعدی این است که تصمیم بگیریم چه اطلاعات جدیدی را میخواهیم در سلول حالت ذخیره کنیم. این تصمیم دو بخشی است. ابتدا یک لایه سیگموید به نام دروازه ورودی (input gate) داریم که تصمیم میگیرد چه مقادیری بهروز خواهند شد. مرحله بعدی یک لایه تانژانت هایپربولیک است که برداری از مقادیر به نام Ct~ میسارد که میتوان آنها را به سلول حالت اضافه کرد. در مرحله بعد، ما این دو مرحله را با هم ترکیب میکنیم تا مقدار سلول حالت را بهروز کنیم.
در مثال مدل زبانیای که پیشتر داشتیم، قصد داریم جنسیت فاعل جدید را به سلول حالت اضافه کنیم تا جایگزین جنسیت فاعل قبلی شود که در مرحله قبلی تصمیم گرفتیم آن را فراموش کنیم.
حال زمان آن فرا رسیده است که سلول حالت قدیمی یعنی Ct-1 را سلول حالت جدید یعنی Ct بهروز کنیم. در مراحل قبلی تصمیم گرفته شد که چه کنیم و در حال حاضر تنها لازم است تصمیماتی را که گرفته شد عملی کنیم.
ما مقدار قبلی سلول حالت را در ft ضرب میکنیم که یعنی فراموش کردن اطلاعاتی که پیشتر تصمیم گرفتیم آنها را فراموش کنیم. سپس it * ~Ct را به آن اضافه میکنیم. در حال حاضر مقادیر جدید سلول حالت با توجه به تصمیماتی که پیشتر گرفته شده بود بدست آمدهاند.
در مثال مدل زبانی، اینجا دقیقاً جائی است که اطلاعاتی که در مورد جنسیت قبلی داشتیم را دور میریزیم و اطلاعات جدید را اضافه میکنیم.
در نهایت باید تصمیم بگیریم قرار است چه اطلاعاتی را به خروجی ببریم. این خروجی با در نظر گرفتن مقدار سلول حالت خواهد بود، ولی از فیلتر مشخصی عبور خواهد کرد. در ابتدا، یک لایه سیگموید داریم که تصمیم میگیرد چه بخشی از سلول حالت قرار است به خروجی برده شود. سپس مقدار سلول حالت (پس از بهروز شدن در مراحل قبلی) را به یک لایه تانژانت هایپر بولیک (تا مقادیر بین ۱- و ۱+ باشند) میدهیم و مقدار آن را در خروجی لایه سیگموید قبلی ضرب میکنیم تا تنها بخشهایی که مد نظرمان است به خروجی برود.
در مثال مدل زبانی، با توجه به اینکه تنها فاعل را دیده، در صورتی که مخواهیم کلمه بعدی را حدس بزنیم، ممکن است بخواهد اطلاعاتی در ارتباط با فعل را به خروجی ببرد. برای مثال ممکن است اینکه فاعل مفرد یا جمع است را به خروجی ببرد، که ما با توجه به آن بدانیم فعل به چه فُرمی خواهد بود.
انواع LSTM ها
آنچه تاکنون توصیف کرده ام یک LSTM کاملا معمولی است. اما همه LSTM ها همانند موارد فوق نیستند. در واقع، به نظر می رسد تقریبا در هر مقاله ای که LSTM در آن قرار دارد، از یک نسخه متفاوت استفاده می شود؛ تفاوت ها جزئی هستند، اما بهتر است که به آنها اشاره ای شود.
یکی از مدل های محبوب LSTM که توسط Gers و Schmidhuberدر سال 2000، معرفی شده است، اضافه کردن اتصالات روزنه ای است؛ بدین معنی که است که ما اجازه می دهیم که لایه های گیت به وضعیت سلول نگاه کنند.
یکی دیگر از تغییرات صورت گرفته در LSTM، واحد GRU است که توسط Cho و همکارانش، در سال 2014، معرفی شده است. این روش، گیتهای فراموش شده و گیتهای ورودی را ترکیب کرده و به صورت یک «گیت به روزرسانی شده» درمی آورد. همچنین، وضعیت سلول و وضعیت پنهان را ادغام کرده و علاوه بر اینها، تغییرات دیگری نیز، ایجاد می کند. مدل حاصل، از مدل های استاندارد LSTM، ساده تر است و به همین دلیل، به شدت محبوب شده است.
این مدلها، تنها چند مدل از انواع LSTM هستند. روشهای بسیار زیاد دیگری، مانند روش پیشنهادی Yao و همکارانش وجود دارد. همچنین رویکردهای متفاوتی برای مهار وابستگی های بلند مدت، مانند RNNهای منظم، که توسط Koutnik و همکارانش، پیشنهاد شده، وجود دارد.
کدام یک از این روشها، بهترین روش است؟ آیا تفاوتهای میان آنها، مهم است؟ Greff و همکارانش، در سال 2015، مقایسه خوبی بین روشهای متفاوت، انجام دادند و دریافتند که همه این روشها، یکسان هستند. Jozefowicz و همکارانش، در سال 2015، بیش از 10 هزار معماری RNN متفاوت را بررسی و آزمایش کردند و دریافتند که بعضی از این مدلها، در انجام وظایف خاص، بهتر از مدلهای LSTM، عمل می کنند.
نتیجه گیری:
پیش از این، نتایج قابل توجهی را که با استفاده از RNN ها، به دست آمده است، ذکر کردم. اساسا همه این نتایج، با استفاده از LSTM ها به دست می آید. آنها واقعا بسیاری از وظایف را، بهتر انجام می دهند.
مواجه شدن با LSTMها، به عنوان مجموعه ای از معادلات، آنها را بسیار ترسناک نشان می دهد. خوشبختانه، بررسی مرحله به مرحله آنها، در این مقاله، سبب شده است که کمی دست یافتنی تر شوند.
شبکه LSTMها یک گام بزرگ، درجهت به نتیجه رسیدن با RNNها، می باشند. طبیعی است که تعجب کنید و بپرسید که آیا گام بزرگ دیگری وجود دارد؟ یک نظر مشترک در میان محققان این است: «بله! گام دیگری نیز وجود دارد و آن، Attention است!» ایده این است که اجازه داده شود که هر مرحله از RNN اطلاعاتی را انتخاب کرده و بردارد تا از طریق مجموعه بزرگتری از اطلاعات، مشاهده شوند. به عنوان مثال، اگر از یک RNN برای ایجاد یک عنوان، برای توصیف یک تصویر استفاده می کنید، ممکن است بخشی از تصویر را انتخاب کنید تا هر کلمه ای را که به عنوان خروجی می دهد، مشاهده کنید. در واقع، Xu و همکارانش، دقیقا این کار را انجام داده اند. این کار، ممکن است یک نقطه شروع جالب باشد اگر میخواهید Attention را جستجو کنید. بعضی از نتایج حاصل از Attention ، واقعا هیجان انگیز هستند و به نظر می رسد که به دست آوردن نتایج بیشتر نیز، بسیار نزدیک است.
توجه، تنها موضوع هیجان انگیز در تحقیقات RNNها نیست. برای مثال، LSTMهای شبکه ای که توسط Kalchbrenner و همکارانش، استفاده شده است، بسیار امیدوارکننده هستند. کار با RNN ها در مدل های مولد، مانند Gregorو همکاران، Chung و همکاران و یا Bayer و Osendorfer نیز، بسیار جالب توجه است. چند سال گذشته، یک زمان هیجان انگیز برای شبکه های عصبی برگشتی بوده است و در آینده، کارهای بیشتری نیز، صورت خواهد گرفت.
منبع انگلیسی مقاله : Understanding LSTM Networks
منبع فارسی مقاله : یادگیری شبکه عصبی LSTM
مطلبی دیگر از این انتشارات
اولین پروژه یادگیری ماشین
مطلبی دیگر از این انتشارات
دیتا ساینس، اینبار خوشگلتر!
مطلبی دیگر از این انتشارات
پایتون کلید ورود به دنیای هوش مصنوعی! (گام دوم- قسمت سیزدهم: تاپل ها)