الشبكات التكرارية ونماذج التسلسل1997متقدم4 دقيقة قراءة
الذاكرة الطويلة قصيرة المدى
Long Short-Term Memory
Hochreiter, S. · Schmidhuber, J. — Neural Computation
المشكلة
تعاني الشبكات التكرارية التقليدية من مشكلة جوهرية أثناء التدريب: إشارة الخطأ تمر بسلسلة عمليات ضرب متتالية خلال الانتشار العكسي عبر الزمن. إذا كان كل عامل ضرب أصغر من 1 ولو بقليل، تتلاشى الإشارة أسّياً حتى تصل إلى الصفر. وإذا كان أكبر من 1، تنفجر. في الحالتين تعجز الشبكة عن ربط أحداث متباعدة زمنياً.
الإسهام
الفكرة المحورية هي دوّار الخطأ الثابت (CEC): خلية ذاكرة تُحدَّث بالجمع لا بالضرب، فتبقى مشتقة التدرج الداخلية تساوي 1.0 تماماً أثناء الانتشار العكسي. تتعلم بوابتا الإدخال والإخراج — عبر نزول التدرج — متى تُدخل معلومات جديدة ومتى تكشفها. في عام 2000 أُضيفت فاكتملت البنية الحديثة المعروفة اليوم.
الأثر
هيمنت LSTM على معالجة التسلسلات لعقدين كاملين، وكانت المحرك وراء أنظمة التعرف على الكلام والترجمة الآلية وتوليد الكلام تجارياً — من النسخ الأولى لـ Siri وGoogle Translate وAlexa — قبل ظهور المحوِّلات. نقطة ضعفها الجوهرية — المعالجة التسلسلية خطوة بخطوة — هي بالتحديد ما دفع الباحثين نحو آلية الانتباه ثم .
تخيّل أن تحاول الاحتفاظ بمعلومة مهمة أثناء معالجة نص طويل — الأمر يشبه السير في عاصفة رملية وأنت تحمل حفنة من الرمل الناعم: مع كل خطوة يتسرب جزء من بين أصابعك، وبعد خمسين خطوة لا يتبقى شيء في يدك. أما LSTM فتتعامل مع الأمر بطريقة مختلفة تماماً: تضع تلك المعلومة داخل حقيبة محكمة الإغلاق بقفل ذكي. تبقى الحقيبة مغلقة بإحكام. إذا ظهرت معلومة جوهرية في الخطوة الخامسة، تفتح بوابة الإدخال الحقيبة وتُدخل المعلومة ثم تُغلقها فوراً. تسافر المعلومة بأمان عبر مئة خطوة من البيانات غير المهمة، إلى أن تقرر بوابة الإخراج أن الوقت قد حان لفتح الحقيبة واستخدام ما بداخلها.
المشكلة: تدرّجات تتلاشى
في الشبكات التكرارية التقليدية، تُحسب عند الخطوة t كالتالي:
عند حساب بالانتشار العكسي من الخطوة T إلى خطوة مبكرة t، تفرض علينا ضرب سلسلة من مصفوفات جاكوبي:
إذا كانت للمصفوفة W أقل من 1 ولو بقليل، يتلاشى هذا الجداء أسّياً ليقارب الصفر خلال 10–20 خطوة فقط. وإذا كانت أكبر من 1 ينفجر نحو اللانهاية. في كلتا الحالتين تصبح الشبكة عمياء تاريخياً: عاجزة عن تعلّم أي شيء حدث في الماضي البعيد.
الحل: دوّار الخطأ الثابت
الفكرة المحورية التي طرحها هوشرايتر وشميدهوبر بسيطة وأنيقة: نصمم خلية ذاكرة تكون مشتقتها الداخلية تساوي 1 بالضبط. كيف؟ بدلاً من ضرب الحالة السابقة في مصفوفة أوزان — كما تفعل الشبكات التكرارية العادية — نحدّث Cₜ بشكل جمعي:
إضافة بوابة النسيان (غيرس وآخرون، 2000)
كانت LSTM الأصلية عام 1997 تفتقر إلى قدرة حيوية: لم يكن بإمكانها مسح ذاكرتها القديمة. تخيّل أنك تعالج تدفقاً مستمراً من النصوص — حالة الخلية تتراكم فيها المعلومات باستمرار دون أن يُحذف منها شيء، فتتشبّع في النهاية وتفقد قدرتها على استيعاب أي جديد. حلّ فيليكس غيرس وشميدهوبر وكامنز هذه المشكلة عام 2000 بتقديم بوابة النسيان (fₜ) — مُعامل ضربي يتحكم في مقدار ما نحتفظ به من حالة الخلية السابقة قبل إضافة المحتوى الجديد:
خلية LSTM الحديثة الكاملة
شاهد البوابات أثناء العمل
الفكرة نفسها في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def lstm_step(x_t, h_prev, C_prev, params):
"""
x_t: متجه المُدخل الحالي
h_prev: الحالة الخفية السابقة
C_prev: حالة الخلية السابقة (الذاكرة المحمية)
"""
combined = np.concatenate([h_prev, x_t])
# 1. بوابة النسيان — كم نُبقي من الذاكرة القديمة؟
f_t = sigmoid(params['W_f'] @ combined + params['b_f'])
# 2. بوابة الإدخال — كم نكتب من المُرشَّح الجديد؟
i_t = sigmoid(params['W_i'] @ combined + params['b_i'])
# 3. القيمة المُرشَّحة — ماذا نريد أن نكتب؟
C_tilde = np.tanh(params['W_c'] @ combined + params['b_c'])
# 4. تحديث الخلية — الورقة البحثية كلها في سطر واحد
C_t = f_t * C_prev + i_t * C_tilde # جمعي ← التدرج يبقى عند 1
# 5. بوابة الإخراج — كم نكشف الآن؟
o_t = sigmoid(params['W_o'] @ combined + params['b_o'])
# 6. الحالة الخفية
h_t = o_t * np.tanh(C_t)
return h_t, C_tالمسار التاريخي
1997
ولادة LSTM
قدّم هوشرايتر وشميدهوبر دوّار الخطأ الثابت مع بوابتَي الإدخال والإخراج، وحلّا بذلك مشكلة تلاشي التدرجات لأول مرة في بنية تكرارية قابلة للتطبيق العملي.
2000
بوابة النسيان
أضاف غيرس وشميدهوبر وكامنز بوابة النسيان، فأصبحت LSTM قادرة على مسح ذاكرتها عند حدود التسلسلات. بذلك اكتملت الخلية الحديثة بشكلها المعروف اليوم.
2006
LSTM + دالة CTC
دمج أليكس غريفز LSTM مع تصنيف CTC، فأصبح بالإمكان التعرف على الكلام دون الحاجة لتجزئته يدوياً — وهو الأساس الذي بُنيت عليه المساعدات الصوتية الحديثة.
2014
Seq2Seq والترجمة الآلية
استخدم سوتسكيفر وفريقه طبقات متعددة من LSTM في بنية مُرمِّز-فاكّ ترميز، فأحدثوا نقلة نوعية في الترجمة الآلية لدى جوجل. أصبحت LSTM العمود الفقري لتطبيقات معالجة اللغة الطبيعية التجارية.
2015
آلية الانتباه فوق LSTM
أضاف باهداناو وفريقه آلية محاذاة ديناميكية فوق الحالات الخفية لـ LSTM — وكانت هذه الخطوة الوسيطة الحاسمة التي ألهمت لاحقاً آلية الانتباه الذاتي في المحوِّلات.
2017
المحوِّلات تحل محل التكرارية
أثبتت ورقة «Attention Is All You Need» أن الانتباه الذاتي وحده — بدون أي تكرارية — يضاهي LSTM ثم يتفوق عليها في الترجمة، مع قابلية كاملة للتوازي. بذلك انتهت حقبة LSTM.
المرجعHochreiter, S., Schmidhuber, J.. Long Short-Term Memory. Neural Computation 9(8), 1997.
مصطلحات هذه الورقة
- شبكة الذاكرة الطويلة قصيرة المدىLSTM
- حالة الخلية الحسابيةCell State
- بوابة النسيانForget Gate
- آلية البواباتGating Mechanism
- اضمحلال متجهات الميلVanishing Gradient
- دولاب الخطأ الثابتConstant Error Carousel
- الاعتمادية البعيدة المدىLong-Term Dependency