قراءة
وضع القصص

LSTM و GRU

~22 دقيقة قراءة الدرس 2 من 3 في الوحدة 8

مشكلة الذاكرة البعيدة

تعاني شبكات RNN البسيطة التي تناولناها في الدرس السابق من عيب جوهري: تتلاشى التدرجات بصورة أسية كلما سافرت للخلف عبر الزمن، مما يجعل تعلم التبعيات الممتدة عبر أكثر من بضعة عشرات من الخطوات شبه مستحيل. لا يستطيع نموذج اللغة أن يربط ضميرًا في السطر العاشر بالاسم الذي يشير إليه في السطر الأول. ولا يستطيع نموذج السلاسل الزمنية أن يتذكر حدثًا وقع قبل 500 خطوة ويؤثر في الخطوة الحالية.

جاءت شبكات الذاكرة طويلة-قصيرة الأمد (LSTM) التي قدّمها هوكريتر وشميدهوبر عام 1997 لحل هذه المشكلة بإضافة معمارية بالغة الأناقة: حالة الخلية التي تتدفق عبر الشبكة بأدنى قدر من التعديل في كل خطوة، محمية بمجموعة من البوابات المُتعلَّمة. تحدد البوابات ما يجب نسيانه، وما يجب تخزينه من معلومات جديدة، وأي جزء من الذاكرة يُكشف كمخرج. يخلق هذا التصميم “طرقًا سريعة للتدرج” تمر عبر الزمن دون تراجع أسي.

حالة الخلية: طريق سريع للذاكرة

الابتكار الجوهري في LSTM هو الفصل بين نوعين من الحالات: حالة الخلية ct والحالة المخفية ht. حالة الخلية هي الذاكرة طويلة الأمد؛ تسير عبر قمة خلية LSTM مع تعديلات طفيفة فقط عبر بعض البوابات التضريبية، دون التحويل اللاخطي الكامل الذي يُفسد التدرجات في RNN البسيطة. أما الحالة المخفية فهي المخرج القصير الأمد، المحسوب من حالة الخلية عبر ضغط tanh وبوابة مخرج.

رياضيًا، تُحدَّث حالة الخلية بعملية جمع: ct = ft ⊙ ct−1 + it ⊙ gt. هنا ⊙ يمثل الضرب عنصرًا بعنصر، وft هي بوابة النسيان التي تُقلص حالة الخلية السابقة، وit هي بوابة الإدخال التي تتحكم في كمية المعلومات الجديدة الداخلة، وgt هي الذاكرة المرشحة. لأن التحديث جمعي لا تضريبي-لاخطي، يمكن للتدرجات أن تتدفق عكسيًا دون تقلص — مشتق ct بالنسبة لـ ct−1 هو ft فحسب، وهي قيمة متعلَّمة قريبة من 1 للمحتوى المراد الاحتفاظ به.

البوابات الثلاث

جميع البوابات الثلاث تشترك في نفس البنية: تركيب خطي مُفعَّل بسيجمويد من الإدخال الحالي xt والحالة المخفية السابقة ht−1. تضغط السيجمويد المخرجات إلى (0, 1)، حيث 0 تعني “حجب تام” و1 تعني “تمرير كامل.”

تحدد بوابة النسيان الكسر الذي يُحتفظ به من حالة الخلية السابقة. بالنسبة لنموذج لغة يتتبع عدد المفرد والجمع، قد تعيد بوابة النسيان ضبط سجل العدد عند بداية جملة اسمية جديدة. تحدد بوابة الإدخال مقدار الذاكرة المرشحة الجديدة gt المراد كتابتها في حالة الخلية. أما بوابة المخرج فتتحكم في جزء حالة الخلية المُكشوف كحالة مخفية ht.

معادلات بوابات LSTM
\begin{aligned}f_t &= \sigma(W_f[h_{t-1},x_t]+b_f)\\ i_t &= \sigma(W_i[h_{t-1},x_t]+b_i)\\ o_t &= \sigma(W_o[h_{t-1},x_t]+b_o)\\ g_t &= \tanh(W_g[h_{t-1},x_t]+b_g)\end{aligned}
تُحسب جميع البوابات من نفس المدخلات (xt، ht−1) مع مصفوفات أوزان مُتعلَّمة منفصلة. Wf وWi وWo هي أوزان بوابات النسيان والإدخال والمخرج؛ وWg هو وزن المرشح.
تحديث حالة الخلية والحالة المخفية
\begin{aligned}c_t &= f_t \odot c_{t-1} + i_t \odot g_t\\ h_t &= o_t \odot \tanh(c_t)\end{aligned}
تُحدَّث حالة الخلية ct بصورة جمعية: تُقيَّس الذاكرة القديمة ببوابة النسيان، وتُضاف الذاكرة المرشحة الجديدة مُقيَّسة ببوابة الإدخال. الحالة المخفية ht هي حالة الخلية المضغوطة بـ tanh، مُرشَّحة إضافيًا ببوابة المخرج.

تمتلك خلية LSTM الواحدة نحو أربعة أضعاف معاملات RNN البسيطة بنفس حجم الحالة المخفية (أربع مصفوفات أوزان منفصلة لـ f وi وo وg). التكلفة الحسابية حقيقية، لكن القدرة على التدريب على تسلسلات ذات تبعيات بعيدة المدى تبرر هذه التكلفة في كل تطبيق عملي تقريبًا.

لماذا تحل التحديثات الجمعية مشكلة التدرج المتلاشي؟

في RNN البسيطة، يتدفق التدرج عبر اللاخطية tanh ومصفوفة الأوزان التكرارية Wh في كل خطوة — سلسلة تضريبية تتقلص أو تنفجر أسيًا. في LSTM، يُضرب تدرج الخسارة بالنسبة لـ ct−1 فقط ببوابة النسيان ft، وهي قيمة تتعلم الشبكة إبقاءها قريبة من 1 للذكريات المهمة. هذا دوّار الخطأ الثابت (كما سماه هوكريتر) يتيح للتدرجات أن تتدفق عبر مئات الخطوات الزمنية دون تراجع.

GRU: بديل مبسَّط

اقترح تشو وآخرون عام 2014 الوحدة التكرارية ذات البوابة (GRU)، وهي متغير مبسَّط يدمج حالة الخلية والحالة المخفية في متجه حالة واحد، ويستبدل البوابات الثلاث في LSTM ببوابتين فقط: بوابة إعادة الضبط rt وبوابة التحديث zt.

تؤدي بوابة التحديث zt الدور المشترك لبوابتي النسيان والإدخال في LSTM: تتحكم في مقدار الحالة المخفية السابقة المحفوظة مقابل المحتوى الجديد المكتوب. تتحكم بوابة إعادة الضبط rt في مقدار تأثير الحالة المخفية السابقة على التنشيط المرشح ˜ht. حين تقترب rt من الصفر، تنسى GRU الحالة السابقة تمامًا وتتصرف كشبكة متقدمة في تلك الخطوة — مفيد لإعادة ضبط السياق عند حدود الجمل.

معادلات تحديث GRU
\begin{aligned}r_t &= \sigma(W_r[h_{t-1},x_t])\\ z_t &= \sigma(W_z[h_{t-1},x_t])\\ \tilde{h}_t &= \tanh(W_h[r_t\odot h_{t-1},x_t])\\ h_t &= (1-z_t)\odot h_{t-1}+z_t\odot\tilde{h}_t\end{aligned}
الحالة المخفية ht في GRU هي مزيج محدب من الحالة السابقة ht−1 والتنشيط المرشح ˜ht، مُرجَّح ببوابة التحديث zt. حين zt = 1 تُحفظ الحالة كاملةً؛ وحين zt = 0 تُستبدل كليًا.

في كثير من مهام المقارنة — نمذجة اللغة والترجمة الآلية والتعرف على الكلام — تتقاوى أداءات GRU وLSTM دون أن تتفوق إحداهما على الأخرى باستمرار. تمتلك GRU معاملات أقل وتعمل بسرعة أكبر، مما يجعلها جذابة حين تكون الموارد الحسابية محدودة أو أطوال التسلسلات معتدلة. قد تتفوق LSTM بفضل حالة الخلية الصريحة على المهام التي تستلزم ذاكرة بعيدة المدى جدًا. عمليًا، كلا المعماريتين أفضل بكثير من RNN البسيطة والاختيار بينهما يُعدّ معاملًا فائقًا للضبط.

الشبكات التكرارية ثنائية الاتجاه

تعالج RNN القياسية التسلسلات من اليسار إلى اليمين: في الخطوة الزمنية t، لا ترى سوى x1 حتى xt. لكن كثيرًا من المهام تستفيد من معرفة السياق الكامل في الاتجاهين. في الجملة “فاضت العين بالماء العذب”، فإن معرفة كلمة “الماء” الواقعة بعد “العين” تحدّد ما إذا كانت “العين” تعني عضو الإبصار أم نبع الماء.

تشغّل RNN ثنائية الاتجاه (BiRNN) شبكتي RNN منفصلتين على نفس التسلسل: واحدة بالاتجاه الأمامي (من اليسار إلى اليمين) وأخرى بالاتجاه الخلفي (من اليمين إلى اليسار). في كل موضع t، يُدمج الحالتان المخفيتان: ht = [&overrightarrow;ht ; &overleftarrow;ht]. يُشفِّر هذا التمثيل المضاعف العرض كلًا من السياق الماضي والمستقبلي، مما يحسّن الأداء جذريًا على مهام من قبيل التعرف على الكيانات المسماة والترجمة الآلية وفهم اللغة على غرار BERT.

قيود الاتجاهين

تتطلب الشبكات التكرارية ثنائية الاتجاه توافر التسلسل الكامل قبل بدء المعالجة — لا يمكن استخدامها للاستدلال الفوري حين لا تتوفر الرموز المستقبلية. لنمذجة اللغة التوليدية والتعرف على الكلام في الوقت الفعلي، يُستخدم فقط مسار RNN الأمامي. تُعدّ النماذج ثنائية الاتجاه معيارًا في مهام الترميز (استخراج الميزات والتصنيف ومشفِّرات الترجمة) لكن ليس في فك التشفير أو التوليد.

الشبكات التكرارية العميقة: تكديس الطبقات

تمامًا كما تكدّس CNNs طبقات تلافيفية متعددة لبناء تمثيلات هرمية، يمكن تكديس الشبكات التكرارية عموديًا. في RNN العميقة، تُغذَّى الحالة المخفية للطبقة l في الخطوة الزمنية t، وهي ht(l)، كمدخل إلى الطبقة l+1. تعمل كل طبقة بنفس دقة التوقيت الزمني، فتعالج التسلسل كاملًا، لذا تمتلك LSTM ذات ثلاث طبقات ثلاثة مجموعات مستقلة من الأوزان التكرارية، تتعلم كل منها مستويات مختلفة من التجريد الزمني.

عمليًا، 2–4 طبقات هو المعتاد لمهام معالجة اللغة الطبيعية؛ التعمق أكثر نادرًا ما يفيد لنماذج التسلسلات وقد يُعسّر التدريب. بين طبقات RNN المكدَّسة، يُطبَّق الإسقاط العشوائي (Dropout) على الاتصالات غير التكرارية (المسارات الرأسية من ht(l) إلى مدخل الطبقة التالية) لتنظيم النموذج. تطبيق الإسقاط العشوائي على الاتصالات التكرارية سيعطل تدفق التدرج الذي يجعل الـ LSTMs فعّالة؛ ومتغير متخصص يسمى الإسقاط العشوائي المتغير يطبق نفس قناع الإسقاط في كل خطوة زمنية وهو النهج الموصى به حين يكون الإسقاط التكراري ضروريًا.

بحلول منتصف العقد الثاني من الألفية الثالثة، أصبحت LSTMs ثنائية الاتجاه العميقة المعمارية السائدة لنمذجة التسلسلات، محققةً نتائج متقدمة في الترجمة والتعرف على الكلام ومعالجة اللغة الطبيعية. ظلت المعيار حتى تجاوزتها معمارية المحوّل (Transformer التي ندرسها في الوحدة 9) عام 2017 باستبدال التكرار بالانتباه الذاتي — آلية تصل أي موضعين في التسلسل في خطوة حسابية واحدة بصرف النظر عن المسافة بينهما.

LSTM مقابل GRU مقابل المحوّل

تحل LSTM وGRU مشكلة التدرج المتلاشي، لكنهما لا تزالان بطبيعتهما تسلسليتين — لا يمكن حساب الخطوة t حتى تكتمل الخطوة t−1. هذا يحدّ من التوازي أثناء التدريب. يكسر المحوّل هذا القيد بحساب جميع المواضع في آنٍ واحد بالانتباه الذاتي، مما يتيح توازيًا هائلًا على وحدات معالجة الرسوميات الحديثة. لمعظم المهام التي يتوفر فيها التسلسل كاملًا (معالجة اللغة وتحليل السلاسل الزمنية)، تجاوزت المحوّلات LSTMs إلى حد بعيد. لكن للبيانات المتدفقة (الكلام الفوري وأجهزة إنترنت الأشياء) والمهام ذات قيود الكمون الصارمة، تظل LSTM وGRU خيارات عملية لأنهما تعالجان خطوة واحدة في كل مرة بحسابات محدودة.

النقاط الرئيسية
  • تحل LSTM مشكلة التدرج المتلاشي بإدخال حالة خلية ct تتدفق عبر الشبكة بتحديثات جمعية، محمية بثلاث بوابات متعلَّمة (النسيان والإدخال والمخرج). يتيح التحديث الجمعي طرقًا سريعة للتدرج تمكّن التعلم عبر مئات الخطوات.
  • تُقيِّس بوابة النسيان محتوى حالة الخلية القديمة؛ وتتحكم بوابة الإدخال في مقدار الذاكرة المرشحة الجديدة المكتوبة؛ وتُرشّح بوابة المخرج حالة الخلية لإنتاج الحالة المخفية. جميع البوابات تركيبات خطية مُفعَّلة بسيجمويد من xt وht−1.
  • تبسّط GRU LSTM إلى بوابتين (إعادة الضبط والتحديث)، وتدمج حالتي الخلية والحالة المخفية في حالة واحدة. معاملاتها أقل وتدريبها أسرع وأداؤها مقارب لـ LSTM في معظم المعايير. الاختيار بين LSTM وGRU معاملٌ فائق للضبط.
  • تُشغِّل الشبكات التكرارية ثنائية الاتجاه مسارين — أماميًا وخلفيًا — وتدمج الحالتين المخفيتين، مانحةً كل موضع إطلاعًا على السياقين الماضي والمستقبلي. تستلزم التسلسل الكامل مسبقًا، لذا لا تصلح للتوليد الفوري.
  • تكدّس الشبكات التكرارية العميقة من 2 إلى 4 طبقات تكرارية لبناء تمثيلات زمنية هرمية. يُنظِّم الإسقاط العشوائي بين الطبقات (لا على الاتصالات التكرارية) هذه النماذج. تجاوزت معمارية المحوّل BiLSTM العميق للمهام غير الفورية بتوازٍ حسابي كامل عبر جميع المواضع.
السابق نمذجة التسلسلات نظرة عامة التالي تطبيقات التسلسلات