شبکه عصبی LSTM
با یک پست دیگر از پستهای سریالی آموزش یادگیری عمیق رایگان هوسم در خدمت شما هستم. در این پست میخواهم توضیح دهم که شبکه عصبی LSTM چیست. شبکه عصبی LSTM یک شبکه بازگشتی است که اگرچه جدید نیست، اما از بهترین شبکههای بازگشتی محسوب میشود. با آکادمی هوش مصنوعی هوسم همراه باشید…
شبکه عصبی LSTM چیست
شبکه عصبی LSTM یک نوع معماری شبکه عصبی بازگشتی (RNN) است. این شبکه مشکل محو گرادیان موجود در شبکه RNN را حل میکند. شبکه LSTM یکی از پرکاربردترین معماریهای خانواده بازگشتی برای مدلسازی دادههای دنبالهای مانند متن، سری زمانی و صوت است.
ترجمه فارسی Long Short-Term Memory چه میشود؟ حافظه بلند و کوتاه مدت! یعنی ما با شبکهای سروکار داریم که هم حافظه کوتاه مدت و هم حافظه بلندمدت دارد. اما یک ویژگی مهم دیگر شبکه LSTM، فراموشی است. این شبکه، میتواند در هرلحظه تعیین کند که چه مقدار از اطلاعات گذشته فراموش یا حفظ شود.
پس بهصورت خلاصه، شبکه مهم LSTM شامل ویژگیهای مهم زیر است:
• حافظه کوتاهمدت دارد.
• حافظه بلندمدت دارد.
• قابلیت فراموشی اطلاعات گذشته را دارد.
این پاسخ کوتاهی به سوال “شبکه عصبی LSTM چیست” است. در ادامه به تشریح این شبکه خواهیم پرداخت.
آشنایی با شبکه عصبی LSTM
شبکه عصبی LSTM اولین بار توسط Hochreiter و Schmidhuber در سال 1997 معرفی شد. البته، در سالهای بعد این کار توسط بسیاری از افراد بهبود داده شد. شبکه LSTM یک شبکه نسبتا قدیمی است. اما در طیف وسیعی از مسائل استفاده میشود و هنوز از محبوبیت بالایی برخودار است. به این نمودار که از سایت paperswithcode برداشتم، نگاه کنید؛ میبینید که با گذشت زمان، میزان استفاده از LSTM بهشدت رشد داشته است.
-

شکل 1: میزان رشد شبکه LSTM در گذر زمان.
میزان استفاده از شبکه LSTM در تسکهای مختلف
همچنین، بازهم از سایت paperswithcode، نمودار زیر را آوردم که به میزان استفاده LSTM در کاربردهای مختلف اشاره دارد. Other اشاره به تسکهای مختلف و کمتر شناختهشده دارد. Other را کنار بگذاریم، میبینیم که بیشترین میزان استفاده از LSTM در دادههای سری زمانی است.
-

شکل 2: میزان استفاده از شبکه عصبی LSTM در تسکهای مختلف
ساختار کلی شبکه عصبی LSTM
شبکه عصبی LSTM هم مانند شبکه RNN به صورت زنجیرهای پشت سرهم قرار میگیرد. شکل زیر این ساختار زنجیرهای را نشان میدهد. درادامه این ساختار را بیشتر بررسی میکنیم.
-

شکل 3: ساختار زنجیرهای در شبکه LSTM
یک داستان جالب از شبکه عصبی LSTM
شبکه LSTM در سال 1995 توسط آقای Schmidhuber و همکارش برای کنفرانس NIPS ارسال شد. اما مقاله ریجکت شد. مقاله جلوتر از زمان خودش بود! یک شبکه پیچیده که به راحتی نمیشود به عملکرد آن پی برد. در زیر، توئیتی از آقای Schmidhuber مشاهده میکنید که گفته 25 سال از ریجکت مقاله LSTM در کنفرانس NIPS میگذرد. نگران ریجکت شدن مقالات نباشید…
-

شکل 4: جشن تولد 25 سالگی ریجکت شدن مقاله LSTM!
چند نکته ساده هم بگویم:
- کنفرانس NIPS همچنان یکی از معتبرترین کنفرانسهای هوش مصنوعی دنیاست. چند سال پیش نامش اندکی تغییر پیدا کرد و الان با NeuroIPS شناخته میشود. بخوانید نوریپس…
- داستان ردن شدن مقاله LSTM، برای بسیاری از افراد الهامبخش هست. چون به این فکر میکنند که ریجکت شدن مقاله پایان راه نیست و نباید ناامید شد. البته، بهنظرم بعضیها زیادهروی میکنند. بعد از اینکه نتیجه داوری مقالات در یک کنفرانس میآید، باید نگاهی به توئیتر بیندازید!
- طبق این صفحه، آقای Schmidhuber چندان میانه خوبی با LBH (Lecun Bengio Hinton) ندارد! او میگوید این افراد جامعه هوش مصنوعی را گمراه کردهاند! توضیحات کامل را خودتان بخوانید…
اهمیت شبکه عصبی LSTM
در جلسه قبل درباره شبکه عصبی بازگشتی RNN صحبت کردیم. لزوم وجود شبکه بازگشتی را توضیح دادیم و سپس شبکه RNN ساده را بررسی کردیم. آیا شبکه عصبی LSTM نقطه قوتی نسبت به شبکه RNN دارد یا اینکه صرفا یک نوع شبکه بازگشتی است؟ واقعیت این است که شبکه RNN ضعفهایی دارد و LSTM برای حل ضعف RNN پیشنهاد شده است. ضعفهای قابل توجهی که نمیتوان آنها را نادیده گرفت. بیایید یک مورد از این ضعفها را بررسی کنیم.
شبکه عصبی RNN و وابستگی بلندمدت
شبکه عصبی RNN مشکل وابستگی بلندمدت یا Long Term Dependency دارد. یعنی اینکه، نمیتواند در جملهها، پاراگرافها و تمامی دنبالههای طولانی از دادهها عملکرد خوبی از خود نشان دهد. بگذارید یک مثال برای شما بزنم. به این جمله دقت کنید:
من در ایران به دنیا آمدم، کم و بیش بلد هستم که … صحبت کنم.
در چنین جملهای اگر به ما بگویند جای خالی را پر کن، چه میکنیم؟ طبیعتا، نیازی نداریم که همه دادههای قبل از جای خالی را بررسی کنیم. به کلمه “ایران” و “صحبت” نگاه میکنیم و سپس میگوییم جای خالی کلمه “فارسی” است. برای پی بردن به کلمه جای خالی نیازی نبود که به کلمات همسایه قبل از جاخالی نگاه کنیم. کلماتی مثل: که، هستم، کم و بیش، آمدم و غیره. اتفاقا نگاه کردیم فایدهای هم نداشت! پس آنقدر عقب رفتیم تا به مقصود رسیدیم. این مساله چندان عجیب نیست که در یک جمله، فاصله زیادی بین کلمات مرتبط وجود داشته باشد.
متاسفانه، شبکه RNN ساده نمیتواند چنین ارتباط فاصلهداری را یاد بگیرد. این یک نقطه ضعف بزرگ است. اگرچه به ساختار شبکه RNN که نگاه میکنیم، به نظر میرسد که میتواند حتی اطلاعات اولین کلمات را هم به آخرین کلمات انتقال دهد. اما در عمل چنین اتفاقی نمیافتد و شبکه RNN ضعف وابستگی بلندمدت دارد.
آیا درست است بگوییم که شبکه RNN حافظه بلندمدتش خوب کار نمیکند؟ بله، ایکاش شبکه RNN یک سبد حافظه داشت. همینطور که کلمه به کلمه در متن جلو میرویم، بعضی از کلمات خیلی مهم و کلیدی را در آن سبد بگذاریم. بعدا، هرجایی که خواستیم از آنها استفاده میکنیم. مثلا، شبیه شکل زیر، ایران و دنیا را درون سبد حافظه بلندمدت میگذاشتیم تا در قسمت ? استفاده کنیم.
-

شکل 5: یک شبکه RNN با یک سبد حافظه بلندمدت
شبکه LSTM آن سبد بالا را دارد. یعنی میتواند یکسری از اطلاعات مهم در هرلحظه در را حافظه بلندمدتش بریزد. برویم بیشتر با LSTM آشنا شویم…
شبکه عصبی LSTM و وابستگی بلندمدت
شبکه LSTM مخفف عبارت Long Short Term Memory است. احتمالا حالا برای شما معنی Long Term Memory مشخص شده است. یعنی حافظه بلندمدت دارد و دقیقا نقطه مقابل شبکه RNN است که از این مشکل رنج میبرد.
شبکه LSTM قادر به یادگیری وابستگی بلندمدت هست.
اما چگونه وابستگی بلندمدت را یاد میگیرد؟ باید وارد معماری و جزئیات شبکه عصبی LSTM شویم تا بتوانیم به جواب این سوال برسیم. پس دیگر مقدمات کافی است، برویم سراغ بحث اصلی یعنی، معماری شبکه عصبی LSTM…
معماری شبکه LSTM
شبکه عصبی RNN را به یاد دارید؟ این شبکه یک ورودی و خروجی داشت (شکل زیر سمت چپ). درواقع یک مسیر بین ورودی و خروجی شبکه RNN شکل میگیرد. اما شبکه LSTM متفاوت است. این شبکه دو ورودی و خروجی دارد (شکل زیر سمت راست).
-

شکل 6: مقایسه تعداد ورودی و خروجی در شبکه RNN و LSTM
بین این ورودی و خروجیها، یکی از ورودیها مستقیم به خروجی متصل شده است! به شکل زیر نگاه کنید؛ ورودی Ct-1 مستقیما به خروجی Ct متصل شده است. این اتصال همینطور ساده از اول تا آخر دنباله ادامه دارد. C مخفف Cell State هست و یک مولفه کلیدی در LSTM است. به Cell State، حافظه بلندمدت یا Long Term Memory هم گفته میشود. بله، عملکردی شبیه همان سبد شکل 5 دارد.
-

شکل 7: نگاهی به خط Cell State. به المان و بخشهای کمرنگ توجه نکنید. رفتهرفته در طول آموزش درموردشون توضیح میدم و در شکل روشنشون میکنم.
این خط ورودی-خروجی از ازل تا ابد، همه بلوکهای LSTM در استپهای زمانی مختلف را بههم متصل میکند. در گذر زمان، در این حافظه بلندمدت ما (C) اطلاعاتی ذخیره یا از آن حذف میشود. این حافظه بلندمدت دو خاصیت مهم و جالب دارد:
- میتوانیم اطلاعات در آن را پاک کنیم. یعنی، همان فراموش کردن.
- میتوانیم به آن اطلاعاتی اضافه کنیم. یعنی، همان بهخاطر سپردن.
آن علامتهای x و + را روی خط Ct-1Ct میبینید؟ آنها به ترتیب مربوط به فراموش کردن و بهخاطرسپردن هستند. درادامه، میخواهم در دو بخش جداگانه به شما بگویم که چگونه این فراموشی/بهخاطرسپردن اتفاق میافتد.
فراموشی در شبکه LSTM
به علامت × روی خط حافظه بلندمدت در شکل زیر نگاه کنید. این عملگر دو ورودی دارد که یکی همان Ct-1 است. دومی هم یک ورودی است که نمیدانیم از کجا آمده است. ولی طبق شکل زیر ورودی قبل از اعمال از یک تابع سیگموید میگذرد. این تابع سیگموید باعث میشود که خروجی عددی بین 0 تا 1 شود.
توجه توجه داشته باشید که هر دو ورودی از جنس بردار با طول یکسان هستند که بهصورت درایه به درایه درهم ضرب میشوند و به عنوان خروجی یک بردار ایجاد میکنند.
حالا به نظر شما خروجی عملگر x چه خاصیتی دارد؟ قبول دارید خروجی همان Ct-1 است با اندک تغییراتی که ورودی ft روی آن ایجاد میکند؟ این تغییرات ممکن است به شکل زیر باشد:
- هر درایهای از ft اگر 0 باشد، یعنی به درایه متناظرش در Ct-1 اجازه نمیدهد به خروجی برود. یعنی میگوید بریز دور!
- هر درایهای از ft اگر 1 باشد، یعنی تمام ورودی Ct-1 به خروجی میرود و دستنخورده باقی میماند.
- اگر هم عددی بین 0 تا 1 باشد، طبیعتا تا حدی روی ورودی تاثیر میگذارد. پس اینگونه میتوانیم اطلاعاتی را از داخل Ct-1 حذف کنیم!
اما ورودی ft چگونه تشکیل میشود؟ مطابق شکل زیر، این ورودی را یک شبکه عصبی کوچک با دو ورودی xt و ht-1 تشکیل میدهد. این شبکه عصبی کوچک، وظیفه فراموشی بخشی از اطلاعات موجود در حافظه بلندمدت را دارد. به این شبکه عصبی گیت فراموشی (forget gate) گفته میشود.
-

شکل 9: گیت فراموشی یک شبکه عصبی کوچک هست که کمی جلوتر ساختار داخلیش رو توضیح میدم. فعلا همین اندازه بگم که شبیه به شبکه عصبی RNN هست.
احتمالا با کلمه فراموشی مشکلی ندارید، چون وظیفهاش همین است. اما چرا گفته شده گیت؟ منظور از گیت، یک دریچه یا پیچ قابل تنظیم هست که به ما امکان کنترل میدهد. به شکل زیر نگاه کنید؛ این شکل، یک ورودی و خروجی دارد. اما یک پیچ یا تنظیمکننده هم وجود دارد که میزان جریان ورودی به خروجی را میتواند کنترل کند (کم/زیاد کند). منظور ما از گیت فراموشی هم همین است؛ گیتی که به شبکه LSTM این قابلیت را میدهد که بعضی از مولفههای موجود در Ct-1 فراموش شوند.
-

شکل 10: گیت فراموشی شبیه به یک شیر کنترلکننده جربان آب هست. با گیت فراموشی، شبکه LSTM میتونه تنظیم کنه که چه چیزی رو فراموش کنه. البته، چه چیزی رو هم همچنان در حافظه نگه داره.
گیت فراموشی یکی از ارکان مهم شبکه LSTM هست. بیایید دقیقتر آنرا بررسی کنیم.
گیت فراموشی در شبکه LSTM
ساختار گیت فراموشی به ساختار داخلی شبکه عصبی بازگشتی خیلی شبیه هست. آنهایی که پست آموزش شبکه عصبی بازگشتی را خواندهاند، درادامه این تشابه را خواهند دید. این شبکه دو ورودی xt و ht-1 دارد. این دو ورودی با هم ترکیب میشوند و سپس از یک لایه سیگموید میگذرند. لایه سیگموید عددی بین 0 تا 1 ایجاد میکند که در بردار ورودی Ct-1 ضرب درایه به درایه میشود. تکرار میکنم، ft یک بردار است نه یک عدد اسکالر تنها. این بردار به اندازه Ct-1 است. تعیین میکند که هر درایه Ct-1 باید در چه عددی از 0 تا 1 ضرب شود. هر درایه از ft اگر به عدد 1 نزدیک باشد، معنایش اینست که این درایه از Ct-1 باید حفظ شود. اگر به 0 نزدیک باشد، یعنی این درایه از Ct-1 را دور بریز.
اما دو بردار ورودی xt و ht-1 چگونه باهم ترکیب میشوند؟ بسیار ساده و با بهره گیری از شبکه عصبی mlp. همانطور که در شبکه بازگشتی گفتم، کافی است این دو بردار را به دو لایه فولیکانکتد بدهیم. سپس این دو را باهم جمع کنیم. فرمول و شکل گیت فراموشی به صورت زیر هست:
-

شکل 11: فرمول و شکل گیت فراموشی.
در شکل بالا، دو لایه فولیکانکتد با وزنهای whf و wif داریم. این دولایه بهترتیب برای ورودی ht-1 و xt هستند. اندیس hf مخفف عبارت hidden و forget هست. اندیس if مخفف عبارت input و forget هست. چرا درباره اندیسها توضیح میدهم؟ جلوتر این اندیسها زیاد میشوند. این را یادتان باشد که دومین اندیس به نام گیت اشاره میکند.
بسیارخب؛ بیایید بخش مربوط به فراموشی را در شبکه LSTM روشن کنیم:
-

شکل 12: گیت فراموشی در شبکه عصبی LSTM. دو وزن wh و wi وزنهای مربوط به مسیر ht-1 و xt هستند. اندیس f را در دو وزن حذف کردم. کمی جلوتر دلیلش را متوجه میشوید.
در شکل بالا، دو ورودی ft و Ct-1 بهصورت زیر باهم ترکیب شدهاند. علامت بین دو متغیر در شکل زیر، اشاره به ضرب درایه به درایه دو بردار ورودی دارد.

گیت فراموشی در کارش بسیار سختگیر است و به درایههای Ct-1 بهراحتی اجازه عبور نمیدهد. گیت فراموشی، یک نگهبان امنیتی ویژه است!
درمورد گیت فراموشی و وظیفه آن در حفظ یا پاک کردن اطلاعات موجود در Ct-1 صحبت کردیم. احتمالا انتظار دارید که درمورد نحوه ذخیره اطلاعات در Ct-1 (همان به خاطر سپردن) صحبت کنیم.
به خاطر سپردن در شبکه عصبی LSTM
بعد از گذر از عملگر x، به عملگر + روی مسیر Ct-1Ct میرسیم (شکل 7). اینجا قرار است با ورودی C چیزی جمع شود. یعنی اطلاعات جدیدی به آن اضافه خواهد شد. همان به خاطر سپردن اتفاق میافتد. دو ورودی داریم که یکی Ct است. ورودی دوم را فعلا نمیدانیم چیست. اما هرچه هست، برداری هماندازه ورودی C است. ببینید، در استپ زمانی جاری (t) پردازشهایی انجام دادهایم و حالا میخواهیم اینها را به سلول حافظه بسپاریم که برای ما نگه دارد.
میخواهیم چه اطلاعاتی از حال حاضر (t) را در حافظه بلندمدت ذخیره کنیم؟ به شکل زیر نگاه کنید؛ این اطلاعات با استفاده از یک شبکه عصبی محاسبه میشود. این شبکه عصبی همانند گیت ورودی شامل دو ورودی xt و ht-1 است. بازهم این ورودیها باید از دو لایه فولیکانکتد (wig و whg) عبور کنند و بعد باهم جمع شوند. حالا این ورودی از یک تابع تانژانت هایپربولیک باید عبور داده شود. خروجی gt بین 1- تا 1 خواهد بود. چرا بین 1- تا 1 نیاز داریم؟ ساده هست، برای اینکه ممکن است بخواهیم اثر تعدادی از درایهها یا مولفههای موجود در C را کاهش دهیم. یعنی با مقادیر بین 1- تا 1 میتوانیم اثر بعضی مولفهها را زیاد یا کم کنیم. این هم فرمول تشکیل خروجی:

-

شکل 14: خروجی gt که اطلاعات استپ زمانی جاری را در دارد. این خروجی هم با یک شبکه عصبی بدست آمده است.
اما یک مشکل وجود دارد؛ ما در خروجی gt یک مقداری اطلاعات داریم. اما شاید این ورودی آنقدر ارزش نداشته باشد که بخواهیم Ct-1 را آپدیت کنیم. بله، میدانیم که این ورودی هم شامل اطلاعاتی است، اما شاید آنقدر ارزش نداشته باشد که بخواهیم به حافظه بلندمدت بسپاریم! فرض کنید الان در لحظه t در موقعیت کلمه “را” در جمله زیر هستیم:
دو تیم رئال مادرید و بارسلونا برای جلوگیری از همهگیری کرونا، درخواست تعویق بازی را دارند.
این کلمه هم برای خودش اطلاعاتی دارد و یک خروجی برای gt تولید کرده است. اما واقعا به خاطر سپردن این کلمه چقدر برای کلمات بعدی مفید است؟ بسیار کم! پس بهتر است همین جا در لحظه قیدش را بزنیم و به حافظه بلندمدت انتقال ندهیم. ما انسانها هم در لحظه گاهی اتفاقی برایمان میافتد که تلاش زیادی میکنیم که آنرا فراموش کنیم. ارزشش را ندارد بایتهای ذهنمان را اشغال کنیم!
بسیار خب، چطور میتوانیم این خروجی را بررسی کنیم که ارزش دارد یا نه؟ کافی است نگاهی به گیت فراموشی بیندازیم. اگر از یک گیتی مشابه با ساختار گیت فراموشی استفاده کنیم و آنرا بر سر راه خروجی gt قرار دهیم، میتوانیم به راحتی تنظیم کنیم که این خروجی چقدر ارزش دارد. پس بازهم یک گیت یا دریچه مشابه شکل 11 نیاز داریم. به این گیت جدید، گیت ورودی (input gate) گفته میشود. برویم با گیت ورودی بیشتر آشنا شویم.
گیت ورودی در شبکه عصبی LSTM
گیت ورودی، ارزیاب میزان ارزش اطلاعات موجود در gt است. ساده بگویم، گیت ورودی، ورود یکسری اطلاعات جدید به حافظه بلندمدت را بررسی میکند. بههمین خاطر نامش را گیت ورودی گذاشتهاند. مشابه گیت فراموشی، ممکن است مقادیر موجود در بردار it نزدیک به صفر باشد، بنابراین اثر gt را کم میکند.
برعکس، ممکن است مقادیر بردار it نزدیک به 1 باشد، دراینصورت gt میرود تا در حافظه بلندمدت ذخیره شود. اما ساختار این گیت به شکلی است؟ دقیقا مشابه با گیت فراموشی… به شکل زیر دقت کنید؛ گیت ورودی، دو ورودی xt و ht-1 را وارد دو لایه فولیکانکتد میکند و سپس اینها را باهم جمع میکند و درنهایت از تابع سیگموید عبور میدهد. این هم رابطه گیت ورودی، رابطه نحوه تشکیل خروجی نهایی (g’t) و البته آپدیت Ct:



-

شکل 15: اضافه شدن گیت ورودی به ساختار داخلی شبکه LSTM. دقت کنید، بازهم چون بخشی از فرآیند این گیت مشابه قبل بوده، در شکل خلاصه شده.
یک فرآیند موثر بهنام گیت با ساختاری کاملا شبیه به RNN بارها در LSTM تکرار شده است.
این هم از بخش ذخیره اطلاعات که با استفاده از گیت ورودی انجام شد. تا الان به این پرداختیم که چگونه اطلاعاتی از گذشته را فراموش کنیم و چگونه اطلاعاتی در Ct-1 ذخیره کنیم. اما هنوز کار داریم! هنوز هیچ مسیری بین ht-1 و ht نساختهایم. بالاخره چه اطلاعاتی را به عنوان خروجی این استپ زمانی خواهیم داشت؟ برویم سراغ ادامه کار… خسته شدید؟ طاقت بیار رفیق ما داریم میرسیم!
ساخت خروجی ht در شبکه LSTM
شبکه بازگشتی LSTM برای ساختن خروجی ht به چه چیزی نیاز دارد؟ چطور است که همان Ct که تازه آپدیت شده را به خروجی متصل کنیم؟ چه چیزی بهتر از حافظه بلندمدت با اینهمه زحمتی که برایش کشیدیم! پس خروجی Ct را از یک تانژانت هایپربولیک عبور میدهیم، سپس آماده میشویم که آنرا به خروجی ht متصل کنیم. در شکل زیر نشان داده شده است.
-

شکل 16: گرفتن یک انشعاب از حافظه بلندمدت Ct برای اتصال به ht.
اما یک سوال! تصور کنید، از فردی میپرسید تا حالا دو تیم استقلال و پرسپولیس چندبار باهم بازی کردند؟ بعد مخاطب بگوید: “سلام، دو تیم استقلال و پرسپولیس اولین بار در سال فلان باهم بازی کردند که حاصل آن مساوی بود. در بازی دوم، … در بازی سوم و …” همینطور بگوید و بگوید تا اینکه برسد به آخرین بازی و درنهایت بگوید بنابراین، تابحال 80 بار باهم بازی کردهاند. درحالیکه، جواب این سوال یک کلمه بود، آنهم 80! حالا اگر ما اینهمه اطلاعات موجود در Ct را به ht منتقل کنیم، دقیقا مشابه با همان جواب طولانی است. بهتر است آنقدری که نیاز است را برداریم و به خروجی ht منتقل کنیم. این کار چگونه انجام میشود؟ ساده هست، حدس بزنید! یک گیت دیگر بهنام گیت خروجی (output gate). بازهم گیت؟؟
گیت خروجی در شبکه LSTM
گیت خروجی تعیین میکند چقدر از حافظه بلندمدت باید به خروجی منتقل شود. در دل گیت خروجی چه میگذرد؟ ساده هست و تکراری، همه باهم یکصدا:
گیت خروجی، دو ورودی xt و ht-1 را وارد دو لایه فولیکانکتد میکند(1)
و اینها را باهم جمع میکند(2)
و درنهایت از تابع سیگموید عبور میدهد(3).
درنهایت، خروجی تولیدشده از گیت خروجی ot باید در خروجی تابع سیگموید ضرب میشود تا آنقدری که نیاز است به خروجی ht منتقل شود. این هم از فرمولها و شکلهای این بخش:


-

شکل 17: اضافه شدن گیت خروجی به شبکه LSTM
اما، این پایان کار نیست، دو گیت دیگر هم داریم! نه شوخی کردم 😃 معماری شبکه LSTM تمام شد. در شکل زیر، یک نسخه کامل از شبکه عصبی LSTM همراه با تمامی فرمولها را گذاشتم:
-

شکل 18: شبکه عصبی LSTM.
بسیارخب، بیایید مروری کنیم که چه المانهایی دیدیم.
شبکه LSTM در یک نگاه
دیدید که شبکه LSTM با این ظاهر پیچیده، شامل چند ایده جذاب و ساده هست. بیایید مباحث این جلسه را مرور کنیم:
- حافظه بلندمدت داریم و هم اطلاعاتی را فراموش میکنیم و هم به خاطر میسپاریم.
- گیتهایی داریم که شبیه شیر قابل تنظیم، جریان ورودی به خروجی را کنترل میکنند.
- سه گیت با نامهای گیت فراموشی، گیت ورودی و گیت خروجی داشتیم.
- گیت فراموشی برای این بود که اطلاعات غیرضروری گذشته را فراموش کنیم.
- گیت ورودی برای این بود که بررسی کنیم اطلاعات بهدست آمده از لحظه جاری (t) ارزش ذخیره در حافظه بلندمدت را دارند یا خیر.
- گیت خروجی برای این بود که همه اطلاعات موجود در Ct را به خروجی ht منتقل نکنیم. آنقدری را که نیاز داریم به خروجی ht ببریم.
- گیتها همواره خروجیشان بین 0 و 1 هست.
- گیتها همیشه در یک ورودی دیگر درایه به درایه ضرب میشوند.
- هر گیت دو ورودی دارد: xt و ht-1. دو ورودی در دو لایه فولیکانکتد ضرب میشوند و بعد باهم جمع میشوند و درنهایت از تابع سیگموید عبور میکنند.
- با استفاده از تانژانت هایپربولیک، اطلاعات همواره بین بازه 1- و 1 قرار دارند.
- شبکه LSTM، چهار برابر شبکه RNN پارامتر و هزینه محاسبات دارد. سه تا گیت دارد و یک شبکه هم برای محاسبه ورودی حافظه (C’t) دارد.
- شبکه LSTM یک شبکه بازگشتی مبتنی بر گیت هست.
- نسخههای مختلفی از شبکه LSTM در بازار وجود دارد! 😃 حواستان باشد که با شکلها و فرمولهای مختلف گمراه نشوید. همه آنها شامل ایده گیتهای (فراموشی، ورودی و خروجی) میشوند.
- یک شکل معروف برای شبکه LSTM وجود دارد که در زیر نشان دادم. این شکل خلاصه نشان داده شده و هیچیک از لایههای فولیکانکتد را نشان نداده. همان شکل خودمان هست، فقط خلاصهاش کردند.
-

شکل 19: نمایش رایج شبکه LSTM.
تمام شد! با یک عالمه حرف ناگفته، شبکه عصبی LSTM هم تمام شد. برای شروع همین اندازه کافی است. بعدا برمیگردم و شبکه LSTM را از ابعاد مختلف مورد بررسی قرار میدهم. فعلا میخواهم شبکه عصبی GRU را شروع کنم. این کار بهصورت تیمی انجام شده و امیدواریم که رضایت شما عزیزان را جلب کند. نظرهایتان را میخوانیم و برایمان مهم هست. لطفا هوسم را در Cell State مغزتان قراردهید! یا علی…
مطالب زیر را حتما مطالعه کنید
LLM Research یا LLM Engineering؟ راهنمای یادگیری مدلهای زبانی بزرگ
یادگیری انتقالی
شبکه VGG
مهندسی پرامپت
مدل nanoGPT
شگفتانگیزترین ایده هوش مصنوعی از نظر Andrej Karpathy
165 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.



درود بیکران
واقعاً عالی توضیح دادین. چند وقته پیگیر هستم. هوش مصنوعی پیچیده ست ولی اینگونه اگر آموزش داده بشه خیلی جذابتر میشه.
سپاس
سلام، خیلی عالی بود
زبان طنزتون عالیترش کرد، یعنی در کنار فهم خوب لبخندی بابت طنزتون روی لب ضاهر میشه، خلاصه که عالی بود دستتون درد نکنه، به خصوص آخرش :
“اما، این پایان کار نیست، دو گیت دیگر هم داریم! نه شوخی کردم 😃 ”
اولش گفتم ای وااای، 😃😃😃
سلام و وقت بخیر
بسیار ممنون بابت توضیح شیواتون
فقط ای کاش درمرد کدنویسی و اجرای برنامه در متلب هم مطالبی قرار بدید. اکثرا با پایتون مطالب هست ولی متلب هیچی نیست
اگر سایت یا منبع مناسب میشناسید معرفی کنید شدیدا بهش نیاز دارم برای پایان نامم
ممنونم ازتون
سلام
تمرکز آکادمی هوسم در حوزه هوش مصنوعی، روی متلب نیست. جامعه فعال هوش مصنوعی سالهاست که از متلب گذر کرده و از پایتون و فریمورکهاش استفاده میکنه. ما هم در هوسم، همین مسیر رو دنبال میکنیم و برنامهای برای متلب نداریم. منبع مناسبی در این زمینه نمیشناسیم.
چنانچه به آموزش جامعی در حوزه یادگیری عمیق، شبکه بازگشتی و کدنویسی اونها نیاز داشتید، میتونید دوره یادگیری عمیق 2022 هوسم رو مشاهده بفرمایید:
http://howsam.org/downloads/deep-learning-2022/
همچنین، چنانچه تصمیم گرفتید با پایتون کار کنید، دوره زیر رو به شما پیشنهاد میکنیم:
http://howsam.org/downloads/python-for-ai/
موفق باشید
عالی بود
سلام و خسته نباشید. منابع مختلفی دنبال می کنم اما همانند یه سری قسمت های دیگه . این قسمت بسیار دقیق تر و ساده تر از منابع دیگر نوشته شده بود . تشکر از زحمات نویسندگان این مطلب. صرفا جهت پیشنهاد عرض میکنم. به دلیل اینکه کامنت ها معمولا خیلی زیاد هستند پیشنهاد می کنم در صفحه کامنت ها را به صورت جداگانه در باکسی قرار دهید که scroll bar مجزای خودش را داشته باشد و به اسکرول بار محتوای صفحه کاری نداشته باشد. وقتی خواستم مطلب را شروع کنم اسکرول خوفناک بود یهو دیدم سریع تموم شد و بقیه اش کامنت هست !
مجدد سلام
یه سوال داشتم خدمتتون
“حالا این ورودی از یک تابع تانژانت هایپربولیک باید عبور داده شود. خروجی gt بین 1- تا 1 خواهد بود. چرا بین 1- تا 1 نیاز داریم؟ ساده هست، برای اینکه ممکن است بخواهیم اثر تعدادی از درایهها یا مولفههای موجود در C را کاهش دهیم”
وقتی میخواهیم اثر تعدادی از درایهها یا مولفههای موجود در C را کاهش دهیم، چرا از تابع سیگمویید استفاده نکردیم. چرا برای ما اهمیت داره که خروجی gt عددی بین 1 و -1 باشه نه عددی بین 0 تا 1؟
سلام. گاهی میخوایم اثر تعدادی از درایه ها رو از بین ببریم اما گاهی میخوایم اثر برخی رو کاهشی کنیم. این دو با هم متفاوت اند. اگر بخوایم اثر درایه ها رو صفر کنیم از سیگمویید و اگر بخوایم اثر درایه ها رو کاهشی کنیم از تانژانت هایپربولیک استفاده میکنیم.
سلام
وقت بخیر
خیلی عالی و آموزنده بود. فقط جسارتا فرمول بالای تصویر 14 نیاز به اصلاح داره.
به جای تابع سیگموید از تابع تانژانت هایپربولیک باید استفاده میشد
سلام خیلی ممنون از بیان شفافتون:)
سلام، عالی،
اگر شما سال 1995 بودید، مقاله به دلیل پیچیدگی رد نمیشد😁
عالی👌
سلام. سال نو رو به همه گردانندگان سایت تبریک میگم. در تعریف فرمول گیت g به جای تابع tanh از تابع sigmoid استفاده شده. این مورد سهوی هست یا فرمول این طور نوشته میشه؟
سلام خیلی عالی بود. یه سوال گفتید شکلها و فرمولهای مختلف یکسانن. میشه این مقاله (https://doi.org/10.48550/arXiv.1801.01078) Recent Advances in Recurrent Neural Networks رو ببینید من هر کاری کردم نتونستم با فرمولها تطبیق بدم.
تو گیت فراموشی، ورودی و خروجی مقدار c(t-1) رو هم جمع کرده
علاوه بر این تو محاسبه c(t) علاوه برا مقدار c(t-1) مقدار گیت فراموشی رو هم ضرب میکنه
شکلش رو هم اگر نگاه کنید از cell به گیت خروجی ورودی مستقیم داره
لطف میکنید اگر توضیح بدید
سلام
یک دنیا سپاس برای توضیحات زیباتون
سوالی دارم. داخل یک مقاله برای گیت ها دو تا بایاس نگذاشته فقط یکی گذاشته it = σ (Wihht−1 +Wixxt + bi ). معماری این گیتها بازم هم دو لایه فولی کانکتد هست؟ بایاس را توضیح میدید لطفا؟ من دفاع از پایان نامه دارم و برام سواله خیلی خیلی ممنون