برنامه نویسی شبکه های عصبی بازگشتی بلند مدت

آلفاجت شبکه های حافظه بلندمدت کوتاه مدت LSTM در هوش مصنوعی

بیایید یک اصطلاح انگلیسی را در نظر بگیریم، مثلا “feeling under the weather”. مثلا ممکن است بعد از چند روز مریضی بگویید “I was still feeling a bit under the weather.”. در حالی که شبکه عصبی بازگشتی، قادر است تمام کلمات قبلی را به خاطر بسپارد و بعد پیش‌بینی کند که چه کلمه‌ای قرار  است، نقش کلمه بعدی را ایفا کند. شبکه، خروجی را تولید می‌کند، آن را کپی می‌کند و بعد دوباره به حلقه شبکه برمی‌گرداند. شبکه‌های عصبی پیشخور و بازگشتی، مطابق با اسمشان با انتقال اطلاعات برخورد می‌کنند. در شبکه عصبی پیشخور، اطلاعات فقط در یک جهت، از لایه ورودی، در میان لایه‌های پنهان و به سمت لایه خروجی حرکت می‌کند.

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

قرار است کلمه بعد از “زبان” در متن را پیش بینی کنیم “من در فرانسه بزرگ شدم. من به زبان فرانسه روان صحبت می کنم.” اطلاعات اخیر نشان می دهد که کلمه بعدی احتمالاً نام یک زبان است، اما اگر بخواهیم درست نام زبان را پیش بینی کنیم، به جمله قبلی که به زندگی در  فرانسه اشاره دارد، نیاز داریم. این امکان وجود دارد که فاصله بین اطلاعات مربوطه و نقطه ای که لازم است پیش بینی شود بسیار بزرگ باشد. متأسفانه، با افزایش این فاصله ، RNN ها قادر به یادگیری اتصال اطلاعات نیستند. در پیاده سازی شبکه های عصبی بنا به کاربرد به گونه ای طراحی می شوند که به بهترین شکل بتوانند کار کنند.

مدلسازی زبان بصورت ساده به عمل پیش بینی کلمه بعدی در یک دنباله داده شده گفته میشود. کلمه بعدی که میتواند در ادامه بیایید میتواند  “نامه”، “جمله” یا “پست وبلاگ” و… باشد. بعبارت دیگر به ازای کلمات ارائه شده x(1) و x(2) و… x(t) مدلهای زبانی توزیع احتمالاتی کلمه بعدی (t+1)x را محاسبه میکنند. در این شبکه، داده‌های ورودی به صورت توالی به شبکه داده می‌شوند و خروجی برای هر گام زمانی، به عنوان ورودی برای گام بعدی استفاده می‌شود. مزیت این شبکه، سادگی طراحی و پیاده‌سازی آن است، اما از جمله مشکلاتی که در شبکه‌های RNN ممکن است به وجود آید، مشکل از بین رفتن اطلاعات در دنباله‌های طولانی است. به عبارت دیگر، اطلاعاتی که در دنباله‌های اولیه به دست آمده است، در دنباله‌های بعدی به صورت کامل حفظ نمی‌شوند و به تدریج از بین می‌روند.

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

در معادله تابع ضرر که در بالا نشان داده شده است، می توانید حاصل ضرب عظیمی از اعداد را مشاهده کنید. مقدار حاصله بسیار بزرگ یا بسیار کوچک شناخته می شود که باعث انفجار یا محو شدگی گرادیان می شود. شبکه بازگشتی با دو معادله زیر کاملاً توصیف می شود، که در آن b و’b به ترتیب نشان دهنده بایاس ها در نورون های خروجی و نورون های حالت هستند. در ریاضیات، نوع وابستگی مقدار فعلی ( رویداد یا کلمه) به رویداد های قبلی را بازگشت یا Recurrence می گویند و با استفاده از معادلات بازگشتی بیان می شود. کودک کارتی را برمی گرداند، سعی می کرد مکان کارت مشابهی را که قبلاً برگردانده بوده را به خاطر بیاورد و سپس تصمیم می گرفت که کدام کارت را بردارد تا برنده شود.

با ما همراه باشید تا در این سفر هیجان‌انگیز یاد بگیریم چگونه می‌توان از شبکه‌ عصبی بازگشتی با PyTorch برای پردازش و تحلیل داده‌های ترتیبی بهره برد. Long Short-Term Memory (LSTM) یک نوع معماری شبکه عصبی بازگشتی (RNN) است که در زمینه یادگیری عمیق (Deep Learning) توجه زیادی به خود جلب کرده است. LSTM به طور خاص برای رفع محدودیت‌های RNN های سنتی طراحی شده است که در تشخیص وابستگی‌های بلندمدت در داده‌های زمانی مشکل داشتند. با معرفی یک حافظه و چندین دروازه (Gate)، LSTM ها در کاربردهای مختلفی مانند پردازش زبان طبیعی، تشخیص گفتار و تحلیل سری زمانی بسیار کارآمد بوده‌اند. شبکه‌های عصبی بازگشتی یکی از مهم‌ترین دستاوردهای هوش مصنوعی هستند.

برای مطالعه درمورد مشکل محوشدگی گرادیان به مطلب محوشدگی گرادیان (Vanishing Gradient) چگونه رخ می‌دهد؟ مراجعه کنید. این خط بین  و  همیشه در LSTM وجود دارد، این خط همه بلوک‌های موجود در LSTM در بازه های زمانی مختلف را به یک دیگر متصل می‌کند. در گذر زمان، در حافظه بلند مدت اطلاعاتی ذخیره می شود ویا اطلاعاتی از آن حذف می‌شود. از یادگیری هب برای توضیح چگونگی شکل‌گیری و تقویت خاطرات در مغز استفاده می‌شود. پس به طور خلاصه، با پس‌ انتشار، سعی می‌کنیم وزن‌های مدل را در طول آموزش تنظیم کنیم. به طور مشابه می توان مشتق تابع ضرر را با توجه به وزن حالت U به شرح زیر محاسبه کرد.

در واقع، شبکه عصبی بازگشتی، می‌تواند نسبت به سایر الگوریتم‌ها، درک عمیق‌تری از توالی و دانش پس‌ زمینه (context) ورودی‌ها کسب کند. شبکه های عصبی بازگشتی در سال ۱۹۸۰ ایجاد شدند اما تنها در چند سال اخیر بوده است که این گونه از شبکه ها بطور گسترده مورد استفاده قرار گرفته اند. از دلایل عمده وقوع چنین رخدادی میتوان به پیشرفت های صورت گرفته در طراحی شبکه های عصبی بطور عام و بهبود چشمگیر قدرت محاسباتی و بطور ویژه بهره وری از قدرت واحدهای پردازش موازی کارتهای گرافیک اشاره نمود. این ویژگی بطور ویژه در کاربردهای مختلف مرتبط با داده های سری اهمیت اساسی پیدا میکند. بطور مثال در پردازش زبان طبیعی, جمله ای همانند “I had washed my car” معنای متفاوتی از جمله I had my car washed دارد.

به عبارت ساده‌تر، این شبکه‌ها از یک حالت پنهان به‌عنوان «حافظه» استفاده می‌کنند که اطلاعاتی در مورد عناصر قبلی در دنباله را نگه می‌دارند. در دنیای هوش مصنوعی و یادگیری ماشین، درک داده‌های متوالی اهمیت فراوانی دارد. داده‌های متوالی به نوعی از داده اطلاق می‌شود که در آن ترتیب یا توالی عناصر مهم است و رابطۀ بین این عناصر به موقعیت آنها در دنباله بستگی دارد. در بسیاری از حوزه‌ها، مانند تجزیه و تحلیل سری‌های زمانی، تشخیص گفتار و پردازش زبان طبیعی از داده‌های متوالی استفاده می‌شود. LSTMها به گونه‌ای طراحی شده‌اند که به شبکه‌ها اجازه می‌دهند اطلاعات مهم را برای مدت طولانی‌تری حفظ کنند. آن‌ها با استفاده از سه گیت اصلی (گیت ورودی، گیت خروجی و گیت فراموشی) می‌توانند تصمیم بگیرند که چه اطلاعاتی باید حفظ شود و چه اطلاعاتی باید نادیده گرفته شود.

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

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

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

شبکه‌های عصبی LSTM معماری‌های مختلفی دارند که هر کدام با تغییر کوچکی در ساختار بلوک ایجاد شده است. همچنین مشکل اصلی LSTMها، محاسبات سنگین در هنگام یادگیری و آزمایش است. در دروس بعدی شبکه‌هایی ارائه می‌کنیم که این مشکل را نیز حل می‌کنند. این بخش تصمیم می‌گیرد که چه اطلاعاتِ جدیدی باید به «وضعیت سول (c)» برای استفاده‌های بعدی اضافه شود. شبکه‌های LSTM در واقع نوعی از RNNها هستند که تغییری در بلوک (RNN Unit) آن‌ها ایجاد شده است. این تغییر باعث می‌شود که شبکه‌های عصبی بازگشتیِ LSTM بتوانند مدیریت حافظه‌ی بلند مدت را داشته باشند و مشکل محوشدگی یا انفجار گرادیان را نیز نداشته باشند.

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

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

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

در هوش مصنوعی و یادگیری ماشین، یادگیری هب به عنوان پایه‌ای برای الگوریتم‌های مختلف، به‌ویژه در شبکه‌های عصبی غیرنظارتی (Unsupervised Neural Networks) مورد استفاده قرار می‌گیرد. یک مثال ساده را در نظر بگیرید که در آن یک RNN برای پیش‌بینی کاراکتر بعدی در یک دنباله از متن استفاده می‌شود. RNN این دنباله را یک کاراکتر در یک زمان پردازش می کند و یک حالت پنهان را حفظ می کند که زمینه کاراکترهایی را که تا به حال دیده شده اند در بر می گیرد. برای رفع این مشکل از شبکه‌ حافظه طولانی کوتاه‌مدت (LSTM) استفاده می‌شود. LSTM‌ یک نوع ویژه از RNN است که در درک و به یاد سپردن اطلاعات مهم در دنباله‌های بلند عملکرد برجسته‌ای دارد. شبکه‌های روبه‌جلو داده‌هایی با اندازه ثابت را در ورودی می‌گیرند و فرض می‌کنند که داده‌های ورودی مستقل از هم هستند.

اولین کلمه هر کدام از این bigram ها یک لغت محتوایی است و یک مدل زبانی باید احتمال لغت بعدی را پیش بینی کند. برای آشنایی با نحوه دقیق کار LSTMها به مطلب شبکه عصبی LSTM چیست و چگونه کار می‌کند؟ مراجعه کنید. توجه کنید که مانند RNN ساده، در شبکه‌های LSTM نیز ورودیِ h و همچین ورودیِ c، یک بردار (vector) هستند که تعداد آن توسط پارامترِ کاربر ایجاد می‌شود. مثلاً ممکن است تعدادِ عناصرِ بردارِ h و c برابر ۶۴ باشد به این معنی که این دو وضعیت، هر کدام یک بردار ۶۴ عددی هستند. هر چقدر تعداد عناصر بردارهای h و c بزرگتر باشد، احتمال این الگوهای پیچیده‌تری کشف شود بالاتر می‌رود. یک مدل دیگر فراموشی ورودی در LSTM به این گونه است که به جای اینکه به طور جداگانه تصمیم بگیریم که چه چیزهایی را فراموش کنیم و به چه چیزهایی را اضافه کنیم، این تصمیمات را با هم می گیریم.

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

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

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

برای حل مشکلات RNNهای سنتی، ساختارهای پیشرفته‌تری مانند شبکه‌های عصبی بازگشتی طولانی کوتاه‌مدت (LSTM) و واحدهای بازگشتی دروازه‌دار (GRU) معرفی شده‌اند. این ساختارها با افزودن مکانیزم‌های کنترلی، مانند دروازه‌ها، این امکان را به RNNها می‌دهند که اطلاعات مهم را به‌مدت طولانی‌تری نگه دارند و مشکلات مربوط به ناپایداری گرادیان را کاهش دهند. شبکه‌های LSTM نوعی شبکه عصبی بازگشتی هستند که با اضافه کردن سلول‌های حافظه و مکانیسم‌های کنترلگر به هر واحد شبکه، امکان حفظ اطلاعات طولانی‌مدت و کوتاه‌مدت را فراهم می‌کنند. این مکانیسم‌ها شامل دروازه‌های ورودی (Input Gate)، خروجی (Output Gate)، و فراموشی (Forget Gate) هستند که هر یک نقش مهمی در تصمیم‌گیری در مورد نگه‌داشتن یا دور انداختن اطلاعات بازی می‌کنند. موفقیت LSTM در زمینه‌های مختلف، می‌تواند به قابلیت آنها در کنترل دنباله‌های ورودی با طول دلخواه و درک الگوهای پیچیده در بازه‌های زمانی بلند برگردد.


برنامه نویسی گرافیکی با c++