حافظه طولانی کوتاه مدت

بندانگشتی|300x300پیکسل|یک بلوک حافظه طولانی کوتاه-مدت
**حافظه طولانی کوتاه مدت** (Long short-term memory یا به اختصار LSTM) یک معماری شبکه عصبی بازگشتی است که در سال ۱۹۹۷ میلادی توسط سپ هوخرایتر و یورگن اشمیدهوبر ارائه شد، و بعداً در سال ۲۰۰۰ میلادی توسط فیلیکس ژرس *و دیگران* بهبود داده شد.

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

یک بلوک LSTM به‌طور کلی از وزن‌های **محتوای سلول**(c_t)، **دروازه ورودی**(i_t)، **دروازه خروجی**(o_t) و **دروازه فراموشی**(f_t) تشکیل شده است. محتوای سلول می‌تواند در بازه زمانی طولانی محتوای خود راه حفظ کند و در واقع اطلاعات پیشین را به خاطر بسپارد. دروازه‌ها نیز بردارهایی با مقادیر بین ۰ و ۱ هستند که چگونگی پیشروی اطلاعات قدیمی و اضافه شدن اطلاعات جدید را مشخص می‌کنند. به‌طور کلی ۱ به معنای عبور و ۰ به معنای حذف اطلاعات است. دروازه ورودی مشخص می‌کند چه بخش‌هایی از داده ورودی و به چه مقدار به محتوای سلول اضافه شوند. دروازه فراموشی مشخص می‌کند که چه بخش‌هایی از محتوای سلول از آن حذف شوند. دروازه خروجی نیز مشخص می‌کند محتوای وضعیت مخفی(h_t) حاوی چه بخشی از محتوای سلول باشد.

## ایده
یکی از مشکلات اصلی شبکه‌های عصبی بازگشتی، مشتق ناپدیدشونده یا vanishing gradient problem و مشتق انفجاری یا exploding gradient است. در بلوک LSTM به منظور حل این دو مشکل، راه‌هایی برای انتقال اطلاعات مهم پیشین در هنگام پیشروی ایجاد شده است. این مهم به‌طور کلی از طریق ضرب بردارهایی تحت عنوان **دروازه**، در ورودی‌های بلوک صورت می‌پذیرد.

## انواع
### معماری پایه
معادلات مربوط به پیشروی (forward pass) در یک بلوک LSTM عبارتند از:


\begin{align}
f_t &= \sigma_g(W_{f} x_t + U_{f} h_{t-1} + b_f) \\
i_t &= \sigma_g(W_{i} x_t + U_{i} h_{t-1} + b_i) \\
o_t &= \sigma_g(W_{o} x_t + U_{o} h_{t-1} + b_o) \\
c_t &= f_t \circ c_{t-1} + i_t \circ \sigma_c(W_{c} x_t + U_{c} h_{t-1} + b_c) \\
h_t &= o_t \circ \sigma_h(c_t)
\end{align}

* c_0 = 0
* h_0 = 0
* عملگر \circ نشان دهنده ضرب هادامارد است.

#### متغیرها
* x_t \in \mathbb{R}^{d}: بردار ورودی
* f_t \in {(0,1)}^{h}: بردار دروازهٔ
* c_t\in\R^h: بردار سلول
* h_t \in {(-1,1)}^{h}: بردار مخفی سلول (با عنوان خروجی سلول نیز شناخته می‌شود)
* W \in \mathbb{R}^{h \times d}، U \in \mathbb{R}^{h \times h} و b\in \R^h: وزن‌ها و بایاس‌های مدل که در پروسهٔ یادگیری، بهینه می‌شوند.
* f_t,i_t,o_t\in {(0,1)}^{h}: بردارهای دروازه
** f_t: بردار دروازه فراموشی. وزن به یادداری اطلاعات قدیمی.
** i_t: بردار دروازه ورودی. وزن اندوختن اطلاعات جدید.
** o_t: بردار دروازه خروجی. کاندید خروجی.
بالانویس‌های d و h به ترتیب نشان‌دهنده بعد بردار ورودی و بعد بردار مخفی سلول هستند.

#### توابع فعال‌سازی
* \sigma_g: تابع فعال‌سازی دروازه‌ها (در LSTM پایه تابع سیگموئید است)
* \sigma_c: تابع فعال‌سازی وضعیت سلول (در LSTM پایه تانژانت هذلولی است)
* \sigma_h: تابع فعال‌سازی تابع اصلی یک تانژانت هذلولی است اما ال‌اس‌تی‌ام روزنه‌ای \sigma_h(x) = x.

### معماری روزنه‌ای
بندانگشتی|بلوک معماری روزنه‌ای
بلوک LSTM با اتصالات روزنه‌ای. h_{t-1} استفاده نمی‌شود، در عوض از c_{t-1} در بیش تر جاها استفاده می‌شود.
:
\begin{align}
f_t &= \sigma_g(W_{f} x_t + U_{f} c_{t-1} + b_f) \\
i_t &= \sigma_g(W_{i} x_t + U_{i} c_{t-1} + b_i) \\
o_t &= \sigma_g(W_{o} x_t + U_{o} c_{t-1} + b_o) \\
c_t &= f_t \circ c_{t-1} + i_t \circ \sigma_c(W_{c} x_t + b_c) \\
h_t &= o_t \circ \sigma_h(c_t)
\end{align}


### معماری پیچشی
در مسایل حاوی spatial data همچون تصویر به عنوان ورودی، معماری‌های کاملاً متصل(Fully Connected) عملکرد خوبی دارند، اما از لحاظ محاسباتی نابهینه هستند. معماری پیچشی با جایگزینی عملگر پیچش به جای ضرب ماتریسی، سعی در حذف این نابهینگی دارد.


\begin{align}
f_t &= \sigma_g(W_{f} * x_t + U_{f} * h_{t-1} + V_{f} \circ c_{t-1} + b_f) \\
i_t &= \sigma_g(W_{i} * x_t + U_{i} * h_{t-1} + V_{i} \circ c_{t-1} + b_i) \\
o_t &= \sigma_g(W_{o} * x_t + U_{o} * h_{t-1} + V_{o} \circ c_{t-1} + b_o) \\
c_t &= f_t \circ c_{t-1} + i_t \circ \sigma_c(W_{c} * x_t + U_{c} * h_{t-1} + b_c) \\
h_t &= o_t \circ \sigma_h(c_t)
\end{align}

* ***** نشان‌دهندهٔ عملگر پیچش(Convolution) است.

## یادگیری مدل
یادگیری در مدل LSTM را می‌تواند همچون دیگر مدل‌های شبکه عصبی بازگشتی، با استفاده از الگوریتم گرادیان کاهشی و برگشت در زمان یا Backpropagation through time انجام شود.

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

## جستارهای وابسته
* کامپیوترهای عصبی مشتق‌پذیر
* شبکه عصبی مصنوعی
* Prefrontal Cortex Basal Ganglia Working Memory (PBWM)
* شبکه‌های عصبی بازگشتی
* Gated recurrent unit
* سری‌های زمانی
* توان‌بخشی طولانی-مدت
* واحد بازگشتی دروازه‌ای

## منابع

## پیوند به بیرون
* Recurrent Neural Network با بیش از ۳۰ مقاله ال‌اس‌تی‌ام توسط گروه یورگن اشمیدهوبر در IDSIA
* تز دکترای ژرس در مورد شبکه‌های ال‌اس‌تی‌ام.
* مقاله تشخیص تقلب با دو فصل اختصاص داده شده به توضیح شبکه‌های عصبی بازگشتی، به خصوص ال‌اس‌تی‌ام.
* مقاله ای در مورد توسعه با کارایی بالای ال‌اس‌تی‌ام‌ها که به یک تک گره ساده‌سازی شده و می‌تواند معماری من درآوردی ای را آموزش دهد.
* خودآموز: چگونه در پایتون با ثینو (theano) ال‌اس‌تی‌ام را پیاده‌سازی کنیم

رده:شبکه‌های عصبی مصنوعی
رده:معماری شبکه‌های عصبی