Training Techniques2016متوسط9 دقيقة قراءة

تسوية الطبقة

Layer Normalization

Ba, J. L. · Kiros, J. R. · Hinton, G. E. — arXiv

المشكلة

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

الإسهام

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

الأثر

تسوية الطبقة أصبحت عنصراً لا غنى عنه في بنية . كل نموذج من عائلات GPT وBERT وClaude يعتمد عليها بعد (أو قبل) كل طبقة فرعية للانتباه والتغذية الأمامية. هي التي أتاحت تدريباً مستقراً لنماذج تسلسلية عميقة جداً كانت تسوية الدفعة عاجزة عن التعامل معها، وفتحت الباب لأساليب لاحقة مثل تسوية المجموعات وRMSNorm.

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

تعمل بمنطق مختلف تماماً: كل طالب يُعاير ورقته بنفسه، يقارن درجاته في كل الأسئلة ببعضها. إذا كان يميل لدرجات مرتفعة عموماً، يُطرح هذا المستوى الشخصي تلقائياً. لا حاجة لأي طالب آخر — كل ورقة تُعاير ذاتها.

وهذا بالضبط ما يجعل تسوية الطبقة مناسبة لـ التي تعالج جملة واحدة في كل مرة: لا تحتاج أبداً أن تنظر إلى أمثلة أخرى في الدفعة.

المشكلة: تسوية الدفعة تحتاج دفعة

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

لكنّ تسوية الدفعة تحمل مشكلة بنيوية: هي بطبيعتها تحتاج عدة أمثلة لتحسب إحصاءات موثوقة. وهذا يولّد ثلاث مشكلات عملية:

  • الدفعات الصغيرة تُفسد التقديرات. حين تكون ذاكرة GPU محدودة وينخفض حجم الدفعة إلى 2 أو 4، يصبح المتوسط والتباين مشوّشين ويفقد التدريب استقراره.

  • الشبكات التكرارية لا تتوافق معها. في الشبكة التكرارية، كل خطوة زمنية تُنتج تنشيطات من توزيعات مختلفة. تسوية الدفعة ستحتاج إلى حساب وتخزين إحصاءات منفصلة لكل خطوة زمنية، والتسلسلات تختلف في أطوالها — فأيّ إحصاءات تستخدم عند الخطوة 100 إذا انتهت معظم التسلسلات عند الخطوة 50؟

  • التدريب ≠ الاستدلال. أثناء التدريب تستخدم تسوية الدفعة إحصاءات الدفعة الحالية، وأثناء الاستدلال تستخدم متوسطات تراكمية مُخزّنة. هذا الفرق يمكن أن يُضعف الأداء، خاصةً مع مجموعات البيانات الصغيرة.

افتح في المختبر
بدّل بين الأسلوبين لترى الفرق: تسوية الدفعة تحسب عمودياً عبر الأمثلة، بينما تسوية الطبقة تحسب أفقياً داخل مثال واحد.
تستيقظ التجربة عند وصولك…

الفكرة: التسوية عبر الخصائص لا عبر الأمثلة

الفكرة في جوهرها تبديل محور واحد. بدلاً من حساب الإحصاءات عبر أمثلة تدريبية مختلفة (بُعد الدفعة)، نحسبها عبر جميع الخلايا العصبية داخل الطبقة نفسها على مثال واحد (بُعد الخصائص).

تخيّل جدولاً: كل صفّ مثال تدريبي، وكل عمود خلية عصبية. تسوية الدفعة تُعاير كل عمود — تنظر إلى الأسفل عبر الأمثلة. تسوية الطبقة تُعاير كل صفّ — تنظر عَرضاً عبر الخلايا. وبما أنّ كل صفّ مثال واحد بذاته، لا حاجة لأي مثال آخر.

بعد التسوية، يُطبَّق معامل قياس مُتعلَّم (γ\gamma) وإزاحة مُتعلَّمة (β\beta) لكل خلية عصبية، ما يتيح للشبكة أن تُعيد تشكيل التوزيع بالشكل الذي يناسب المهمة. التسوية تُزيل التذبذب غير المرغوب، و المُتعلَّم يُعيد فقط التغيّر المفيد.

الصياغة الرياضية: متوسط، تباين، تسوية، تحويل

تسوية الطبقة تمرّ بأربع خطوات مباشرة. لنأخذ مثالاً تدريبياً واحداً تنشيطاته في طبقة ما تشكّل متجهاً x=(x1,x2,,xH)\mathbf{x} = (x_1, x_2, \ldots, x_H) حيث HH عدد الخلايا العصبية. نحسب المتوسط والتباين على كامل المتجه، ثم نُسوّي، ثم نُطبّق تحويلاً خطياً مُتعلَّماً.

قبل أن نرى الرموز، الهدف واضح: نريد أن تقع جميع الخلايا العصبية في الطبقة على مقياس موحّد (متوسط صفري وتباين وحدوي)، ثم نترك الشبكة تختار القياس والإزاحة الأنسب للمهمة. الخطوات الأربع كالتالي.

μ=1Hi=1Hxi\mu = \frac{1}{H} \sum_{i=1}^{H} x_i
الخطوة 1 — المتوسط: متوسط تنشيط الطبقةنجمع تنشيطات الخلايا العصبية جميعها (عددها H) في الطبقة لهذا المثال الواحد، ونقسم على H. الناتج يعطينا «المستوى المرجعي» الذي تدور حوله مخرجات الطبقة.
σ2=1Hi=1H(xiμ)2\sigma^2 = \frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2
الخطوة 2 — التباين: مقدار انتشار التنشيطاتيقيس مدى تشتّت الخلايا العصبية حول المتوسط. تباين مرتفع يعني أنّ بعض الخلايا تنشط بقوة بينما أخرى تبقى خامدة؛ التسوية ستُقرّب هذه القيم من بعضها.
x^i=xiμσ2+ϵ\hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}
الخطوة 3 — التسوية: متوسط صفري وتباين وحدوينطرح المتوسط لتوسيط القيم حول الصفر، ونقسم على الانحراف المعياري لتوحيد مقياسها. الثابت الصغير ε (مثلاً 1e−5) يحمي من القسمة على صفر حين تتساوى جميع التنشيطات.
yi=γix^i+βiy_i = \gamma_i \, \hat{x}_i + \beta_i
الخطوة 4 — التحويل الخطي: قياس وإزاحة مُتعلَّمانالمعاملان γ وβ يتعلّمهما النموذج لكل خلية عصبية على حدة. وظيفتهما أن يمنحا الشبكة حرية التراجع عن التسوية إن لزم، أو إعادة تشكيل التوزيع بالطريقة التي تخدم المهمة. بدونهما تبقى الشبكة محبوسة في متوسط صفري وتباين وحدوي لا تستطيع الإفلات منهما.
افتح في المختبر
تابع خطوات تسوية الطبقة الأربع على متجه حقيقي. جرّب تعديل القيم وراقب كيف يتغيّر المخرج.
تستيقظ التجربة عند وصولك…

لماذا تنجح مع الشبكات التكرارية

الشبكات التكرارية تعالج التسلسلات رمزاً برمز. في كل خطوة زمنية tt، تعتمد ht\mathbf{h}^t على المدخل الحالي والحالة المخفية السابقة. المشكلة أنّ توزيع ht\mathbf{h}^t قد ينحرف بشدة كلما تقدّم التسلسل — وهذا مرتبط مباشرة بما يُعرف بـ الذي كان الدافع الأصلي لابتكار تسوية الدفعة.

لو حاولنا تطبيق تسوية الدفعة على شبكة تكرارية، سنحتاج إلى حساب إحصاءات عبر الدفعة عند كل خطوة زمنية، وتخزين متوسطات تراكمية منفصلة للخطوات 1 و2 و3 وهكذا. عملياً هذا غير ممكن: التسلسلات تتفاوت في أطوالها، والخطوة الزمنية 100 قد لا تجد إلا حفنة من الأمثلة فتكون إحصاءاتها بلا قيمة.

تسوية الطبقة تتجاوز هذه المشكلة كلياً. عند كل خطوة زمنية، تُسوّي ht\mathbf{h}^t عبر أبعادها الـHH مستخدمةً ذلك المتجه الواحد فقط. لا إحصاءات دفعة، ولا تخزين مرتبط بالخطوة الزمنية. الصيغة واحدة في الخطوة 1 والخطوة 1000، أثناء التدريب وأثناء الاستدلال. لذلك كانت الخيار الطبيعي لشبكات LSTM وGRU، ثم لاحقاً لـالمحوِّل.

افتح في المختبر
راقب كيف تنفجر تنشيطات الحالة المخفية مع الخطوات الزمنية بدون تسوية، وكيف تبقى مستقرة مع تسوية الطبقة، بينما تتأرجح مع تسوية الدفعة عند دفعات صغيرة.
تستيقظ التجربة عند وصولك…

تسوية الطبقة في المحوِّل

حين ظهر المحوِّل عام 2017، اختار تسوية الطبقة وسيلةً للاستقرار — لا تسوية الدفعة. في البنية الأصلية، كل كتلة و تتبع هذا النمط: طبقة فرعية ← جمع ← تسوية الطبقة. يُعرف هذا الترتيب بـ.

لاحقاً، نقل GPT-2 ونماذج كثيرة بعده التسوية إلى قبل الطبقة الفرعية: تسوية طبقة ← طبقة فرعية ← جمع الاتصال التخطّي. هذا الترتيب يجعل التدريب أكثر استقراراً في الأعماق الكبيرة، لأنّ مسار الاتصال التخطّي يظلّ نظيفاً — تتدفق عبر عملية الجمع مباشرةً دون أن تمرّ بالتسوية أولاً.

في كلا الترتيبين، الوظيفة واحدة: تسوية الطبقة تُعيد توسيط وتقييس تمثيل كل كي تتلقّى الطبقة الفرعية التالية مدخلات مُكيَّفة. بدونها تتراكم القيم عبر الاتصالات التخطّية مع العمق، ويصبح التدريب هشاً.

افتح في المختبر
قارن بين ترتيب Pre-LN وPost-LN. انقر على كل كتلة لترى موضع التسوية بالنسبة لـالانتباه والاتصال التخطّي.
تستيقظ التجربة عند وصولك…

عائلة أساليب التسوية

تسوية الطبقة واحدة من عائلة أساليب تختلف بحسب الأبعاد التي نحسب عليها المتوسط والتباين. لنتخيّل رباعي الأبعاد من التنشيطات (دفعة × قنوات × ارتفاع × عرض) — كل أسلوب يقطع شريحة مختلفة منه:

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

الاختيار يعتمد على طبيعة المهمة. تسوية الدفعة تتألّق في ذات الدفعات الكبيرة. تسوية الطبقة هي السائدة في المحوِّلات والشبكات التكرارية. تسوية المجموعات تُفضَّل حين تكون الدفعات صغيرة لكنّ البنية المكانية مهمة (كاكتشاف الأجسام). المفتاح هو فهم المحور الذي تُسوّي عليه.

افتح في المختبر
انقر على كل أسلوب تسوية لترى أيّ خلايا من المُوتّر تُجمع معاً لحساب المتوسط والتباين.
تستيقظ التجربة عند وصولك…

الفكرة ذاتها في شيفرة برمجية

تسوية الطبقة من الصفرpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import numpy as np

def layer_norm(x, gamma, beta, eps=1e-5):
    """
    x:     (دفعة, خصائص) — تنشيطات طبقة واحدة
    gamma: (خصائص,) — مُعامل قياس مُتعلَّم، يبدأ بـ 1
    beta:  (خصائص,) — مُعامل إزاحة مُتعلَّم، يبدأ بـ 0
    """
    # الخطوة 1: المتوسط عبر الخصائص (كل مثال مستقل)
    mu = x.mean(axis=-1, keepdims=True)        # (دفعة, 1)

    # الخطوة 2: التباين عبر الخصائص
    var = x.var(axis=-1, keepdims=True)         # (دفعة, 1)

    # الخطوة 3: التسوية إلى متوسط صفري وتباين وحدوي
    x_hat = (x - mu) / np.sqrt(var + eps)      # (دفعة, خصائص)

    # الخطوة 4: التحويل الخطي المُتعلَّم
    return gamma * x_hat + beta                 # (دفعة, خصائص)

# قارن مع تسوية الدفعة:
# تسوية الدفعة تحسب المتوسط والتباين عبر axis=0 (الدفعة).
# تسوية الطبقة تحسبهما عبر axis=-1 (الخصائص).
# تغيير المحور هذا هو كل الفرق بينهما.

لماذا غيَّرت هذه الورقة المشهد

  1. 2015

    تسوية الدفعة

    قدّم يوفي وسزيغيدي تسوية الدفعة، فسرّعت تدريب الشبكات الأمامية بشكل ملحوظ عبر ضبط التنشيطات على مستوى الدفعة المصغّرة.

  2. 2016

    تسوية الطبقة

    اقترح با وكيروس وهينتون فكرة تسوية الطبقة — أي التسوية عبر خصائص المثال الواحد بدلاً من أمثلة الدفعة، ما أتاح استخدام الشبكات التكرارية وحرّر التدريب من الارتباط بحجم الدفعة.

  3. 2017

    المحوِّل يتبنّى تسوية الطبقة

    في ورقة «Attention Is All You Need»، اعتمد فاسواني وزملاؤه تسوية الطبقة في كل كتلة ترميز وفك ترميز، فأصبحت المعيار الثابت في بنية المحوِّل.

  4. 2018

    تسوية المجموعات

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

  5. 2019

    المحوِّل بتسوية مسبقة (Pre-LN)

    في GPT-2 والنماذج التي تلته، نُقلت تسوية الطبقة إلى ما قبل الطبقة الفرعية بدلاً من بعدها، فتحسّن استقرار التدريب بشكل واضح في النماذج شديدة العمق.

  6. 2021

    RMSNorm

    بسّط زانغ وسِنريتش تسوية الطبقة بإلغاء خطوة طرح المتوسط والاكتفاء بالقسمة على الجذر التربيعي لمتوسط المربعات. اعتمدتها LLaMA ونماذج لغوية كبيرة كثيرة لأنها أسرع حسابياً.

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

المرجعBa, Kiros, Hinton. Layer Normalization. arXiv, 2016.

مصطلحات هذه الورقة