تخطّي إلى المحتوى
Kudos AI
Read in English
بناء نموذج لغة

معمارية المحوّل

تركيب GPT من الانتباه: إسقاطات متعدّدة الرؤوس، وتسوية الطبقة محلولةً يدوياً، ولماذا تنقذ وصلات الاختصار التدرّج، وتوسّع شبكة التغذية الأمامية أربع مرات، وعدّ بارامترات يعيد إنتاج GPT-2 الصغير عند 124 مليوناً بالضبط.

قراءة 7 دقيقةKudos AI

المتطلبات المسبقة: الانتباه والانتباه الذاتي, التقطيع إلى وحدات والتضمينات

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

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

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

أ. ما يجب أن تحويه الكتلة

يعدّد راشكا القطع اللازمة لبناء معمارية GPT: هيكل GPT، وتسوية الطبقة، ودالة التنشيط GELU، وشبكة التغذية الأمامية، ووصلات الاختصار، وكتلة المحوّل التي تجمعها، ثم المعمارية النهائية. فالانتباه هو الآلية داخل الكتلة؛ والبقية هي ما يجعل كومةً عميقة منها قابلة للتدريب.

ب. الانتباه متعدّد الرؤوس

عملية الانتباه الواحدة تنتج ترجيحاً واحداً على المواضع، يعبّر عن مفهوم واحد للصلة. أما الانتباه متعدّد الرؤوس فيشغّل عدة عمليات بالتوازي، لكلٍّ منها Wq,Wk,WvW_q, W_k, W_v خاصة بها، ثم يسلسل النتائج ويُسقطها.

ولا تنال كل رأس العرض كاملاً. ففي GPT-2 الصغير بُعد التضمين 768 والرؤوس 12، فتعمل كل رأس في

dhead=76812=64d_{\text{head}} = \frac{768}{12} = 64

بُعداً. واثنتا عشرة رأساً ذات 64 بُعداً تتسلسل لتعود 768. فالكلفة إذاً كلفة رأس واحدة بـ768 بُعداً، بينما يكسب النموذج اثني عشر نمط صلة مستقلاً بدل واحد - إذ تستطيع الرؤوس المختلفة الالتفات إلى علاقات مختلفة دون تنازع على ترجيح واحد.

ج. تسوية الطبقة

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

x^i=xi−μσ2+ϵ,μ=1n∑ixi,σ2=1n∑i(xi−μ)2,\hat{x}_i = \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}}, \qquad \mu = \frac{1}{n}\sum_i x_i, \qquad \sigma^2 = \frac{1}{n}\sum_i (x_i - \mu)^2 ,

مع ϵ\epsilon صغيرة تحرس من القسمة على صفر. ويتبع ذلك بارامترا قياس وإزاحة مُتعلَّمان، فتستطيع الطبقة نقض التسوية إن تبيّن نفع ذلك.

محلولةً، على متجه بثمانية أبعاد. خذ

x=[24445579].\mathbf{x} = \begin{bmatrix}2 & 4 & 4 & 4 & 5 & 5 & 7 & 9\end{bmatrix} .

المجموع 4040، فـμ=40/8=5\mu = 40/8 = 5. والانحرافات المربّعة 9,1,1,1,0,0,4,169, 1, 1, 1, 0, 0, 4, 16، ومجموعها 3232، فـσ2=32/8=4\sigma^2 = 32/8 = 4 وσ=2\sigma = 2. وبطرح المتوسط والقسمة على الانحراف المعياري:

x^=[−1.5−0.5−0.5−0.50012].\hat{\mathbf{x}} = \begin{bmatrix}-1.5 & -0.5 & -0.5 & -0.5 & 0 & 0 & 1 & 2\end{bmatrix} .

وللناتج متوسط 00 وتباين 11، كما هو مطلوب.

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

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

د. وصلات الاختصار

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

y=x+F(x)\mathbf{y} = \mathbf{x} + F(\mathbf{x})

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

الطبقةبلا اختصاراتمع اختصارات
10.00020.22
20.00130.20
30.00070.32
40.00010.26
50.00501.32

فبلا اختصارات يبلغ التدرّج الواصل إلى الطبقة 1 نحو 0.00020.0002 - أصغر بثلاث مراتب عشرية منه عند الطبقة 5، فلا تكاد الطبقات الأولى تتعلّم. ومع الاختصارات تبقى التدرّجات متقاربة في كل مكان. والسبب ظاهر في المشتقّة: فاشتقاق y=x+F(x)\mathbf{y} = \mathbf{x} + F(\mathbf{x}) يعطي 1+F′(x)1 + F'(\mathbf{x})، وذلك الـ11 مسارٌ يتدفّق عبره التدرّج بلا نقصان مهما صغر F′F'.

هـ. شبكة التغذية الأمامية

بعد أن يخلط الانتباه المعلومات عبر المواضع، تحوّل شبكة التغذية الأمامية كل موضع على حدة. وشكلها مميّز: يصف راشكا المدخلات تتوسّع بمعامل أربعة، من 768 إلى 3,072 قيمة، مع طبقة ثانية تضغط الـ3,072 عائدةً إلى 768.

768  →  expand    3072  →  GELU    3072  →  contract    768768 \;\xrightarrow{\;\text{expand}\;}\; 3072 \;\xrightarrow{\;\text{GELU}\;}\; 3072 \;\xrightarrow{\;\text{contract}\;}\; 768

والتنشيط بينهما GELU لا ReLU الواردة في ما هي الشبكة العصبية؟. ويقابل راشكا بينهما ملاحظاً أن ReLU دالة خطية بالقطع، بينما GELU ملساء - فلها تدرّج غير صفري للمدخلات السالبة بدل صفر ReLU المسطّح، ما يتجنّب نمط إخفاق الوحدات الميتة.

ولاحظ عدم تماثل البارامترات الناتج: إذ تحوي شبكة التغذية الأمامية نحو ضعف بارامترات الانتباه الذي تليه، وهو ما يفاجئ من يظنّ الانتباه هو «المحوّل».

و. عدّ GPT-2 الصغير

يتوسّع راشكا إلى أصغر GPT-2، بـ124 مليون بارامتر، ويضيف تصحيحاً ببليوغرافياً مفيداً: فمع أن التقرير الأصلي ذكر 117 مليوناً، صُحّح ذلك لاحقاً. ويعطي جدول التهيئة العائلةَ كاملة:

النموذجemb_dimn_layersn_heads
gpt2-small (124M)7681212
gpt2-medium (355M)10242416
gpt2-large (774M)12803620
gpt2-xl (1558M)16004825

مع vocab_size 50,257 وcontext_length 1,024.

ويمكننا التحقّق من الرقم الرئيسي. لكل كتلة، مع d=768d = 768:

  • الانتباه - أربعة إسقاطات (Wq,Wk,WvW_q, W_k, W_v، والخرج)، كلٌّ منها 768×768768\times768 زائد انحياز: 4(7682+768)=2,362,3684(768^2 + 768) = 2{,}362{,}368.
  • التغذية الأمامية - 768×3072+3072768 \times 3072 + 3072 للتوسّع، و 3072×768+7683072 \times 768 + 768 للانكماش: 4,722,4324{,}722{,}432.
  • تسويتا طبقة - قياس وإزاحة، 768768 لكلٍّ: 4×768=3,0724 \times 768 = 3{,}072.

أي 7,087,8727{,}087{,}872 لكل كتلة، و×12\times 12 كتلة تعطي 85,054,46485{,}054{,}464. وبعد الكتلة الأخيرة تأتي تسوية طبقة أخرى، هي التسوية النهائية في القسم ز، بقياسها وإزاحتها الخاصّين: 2×768=1,5362 \times 768 = 1{,}536. وبإضافة التضمينات من التقطيع إلى وحدات والتضمينات - تضمين الوحدات 50,257×768=38,597,37650{,}257 \times 768 = 38{,}597{,}376 والموضعي 1,024×768=786,4321{,}024 \times 768 = 786{,}432:

85,054,464+1,536+38,597,376+786,432=124,439,808.85{,}054{,}464 + 1{,}536 + 38{,}597{,}376 + 786{,}432 = 124{,}439{,}808 .

124.4 مليون - وهو الرقم المنشور، ويطابق بارامتراً ببارامتر عدد نقطة التفتيش المنشورة لـGPT-2 الصغير. ولا تضيف طبقة الخرج شيئاً، لأن GPT-2 يعيد استخدام أوزان تضمين الوحدات فيها.

Python

يعمل في متصفحك. تُنزّل عملية التشغيل الأولى بيئة بايثون (~10 ميغابايت)، ثم تُخزّن مؤقتًا.

أين تسكن البارامترات فعلاً. التضمينات 39.4 مليوناً من الـ124 مليوناً - قرابة الثلث - وهي جدول استرجاع لا حساب. في حين تحوي الكتل الاثنتا عشرة التي تؤدّي العمل كله 85 مليوناً. وتنزاح هذه النسبة انزياحاً حاداً مع المقياس: إذ ينمو emb_dim وn_layers معاً في النماذج الأكبر، فتنمو بارامترات الكتل نمواً تربيعياً تقريباً بينما ينمو تضمين الوحدات نمواً خطياً فقط.

تفاعلي: أين تسكن المعاملات

الانحيازات محسوبة، وتطبيعان لكل كتلة وتطبيع نهائي، وطبقة الخرج مربوطة بتضمين الرموز.

التضمينات 31.6%الكتل كلها 68.4%تضمين الرموز 31.0%تضمين المواضع 0.6%الانتباه 22.8%الشبكة الأمامية 45.5%التطبيع 0.0%
عرض الرأس d_head
64
الانتباه، كتلة واحدة
2,362,368
الشبكة الأمامية، كتلة واحدة
4,722,432
كتلة كاملة
7,087,872
حصة التضمينات
31.6%
مجموع المعاملات
124,439,808

يعمل كلٌّ من الرؤوس الـ12 في 64 بُعدًا، وتكلّف مجتمعةً ما يكلّفه رأس واحد بعرض 768 تمامًا: حرّك مؤشر الرؤوس فلا يتغيّر أي عدد، لأن التقسيم إلى رؤوس إعادةُ تشكيل للإسقاطات الأربعة نفسها. وتحمل الشبكة الأمامية 2.00 ضعف الانتباه المجاور لها في كل كتلة. أما التضمينات، وهي جدول بحث لا حساب، فتبلغ هنا 31.6% من المجموع؛ تنقّل بين الإعدادات المسبقة وراقب هذه الحصة تتراجع كلما طغت الكتل، التي تنمو مع مربع العرض. ولا تضيف طبقة الخرج شيئًا لأنها تعيد استعمال تضمين الرموز.

ز. الكتلة مركّبة

بوضع القطع بترتيب Pre-LayerNorm، تكون كل كتلة طبقتين فرعيتين، كلٌّ منهما مسوّاة أولاً وملفوفة في اختصار:

x←x+MultiHeadAttention⁡(LayerNorm⁡(x))\mathbf{x} \leftarrow \mathbf{x} + \operatorname{MultiHeadAttention}(\operatorname{LayerNorm}(\mathbf{x})) x←x+FeedForward⁡(LayerNorm⁡(x))\mathbf{x} \leftarrow \mathbf{x} + \operatorname{FeedForward}(\operatorname{LayerNorm}(\mathbf{x}))

ولا يتغيّر الشكل أبداً: فالكتلة تحوّل تنسوراً بالشكل (batch, sequence, 768)(\text{batch},\ \text{sequence},\ 768) إلى آخر بالشكل نفسه تماماً. وهذا الثبات هو ما يتيح للكتل أن تُكدَّس - اثنتا عشرة منها لـGPT-2 الصغير، وثمانٍ وأربعون لـGPT-2 XL، بلا أي تغيير بنيوي آخر. والنموذج الكامل هو التضمينات، ثم NN كتلة متطابقة، ثم تسوية نهائية وإسقاط إلى حجم المفردات، فيعطي درجة واحدة لكل وحدة للموضع التالي.

ولأن الانتباه في الداخل مُقنَع سببياً، لا يستطيع الموضع ii الالتفات إلا إلى المواضع ≤i\le i، فيُنتج مرور أمامي واحد تنبّؤاً بالوحدة التالية عند كل موضع دفعةً واحدة - وهو بالضبط ما يجعل هدف التدريب في المقالة التالية كفوءاً.

الخلاصات الأساسية

  • الانتباه متعدّد الرؤوس يقسّم التضمين على الرؤوس - 768/12=64768/12 = 64 لكل رأس في GPT-2 الصغير - فتُتعلَّم أنماط صلة عدة بكلفة رأس واحدة.
  • تسوية الطبقة تعيد قياس كل متجه إلى متوسط صفري وتباين واحد عبر بُعد السمات، خلافاً لبُعد الدفعة في تسوية الدفعة.
  • استخدم المحوّل الأصلي Post-LayerNorm؛ ويستخدم GPT-2 وما بعده Pre-LayerNorm لتدريب أكثر استقراراً.
  • وصلات الاختصار تضيف دخل الطبقة إلى خرجها؛ والمشتقّة الناتجة 1+F′1 + F' تُبقي التدرّجات حيّة - 0.0002 مقابل 0.22 عند الطبقة 1 في قياس راشكا.
  • شبكة التغذية الأمامية توسّع 768→3072→768768 \to 3072 \to 768 وتحوي نحو ضعف بارامترات الانتباه المجاور لها.
  • يعطي عدّ الكتل والتسوية النهائية والتضمينات 124,439,808 بارامتراً لـGPT-2 الصغير، مطابقاً الـ124 مليوناً المنشورة (وقد صُحّحت لاحقاً الـ117 مليوناً في التقرير الأصلي).
  • الكتلة تحفظ شكل دخلها، وهذا بالضبط سبب توسّع المعمارية بالتكديس.

ما التالي

لدينا معمارية بـ124 مليون بارامتر مهيّأة عشوائياً، ولا تتنبّأ بشيء. وتحويلها إلى نموذج يكتب نصاً سلساً، ثم إلى نموذج يتّبع التعليمات، هو موضوع التدريب المسبق والضبط الدقيق.

المراجع والقراءات الإضافية

  • Sebastian Raschka, Build a Large Language Model (From Scratch), Manning, 2025· مكتبة مراجع Kudos AI

تُذكر الأعمال المحمية بحقوق النشر للمرجعية فقط ولا تُستضاف هنا؛ يرجى الرجوع إلى الناشر للوصول إليها.

قراءات ذات صلة

قراءة 6 دقيقةبناء نموذج لغة

الانتباه والانتباه الذاتي

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

الذكاء الاصطناعي التوليديالتعلّم العميقمعالجة اللغات الطبيعية
قراءة 6 دقيقةبناء نموذج لغة

التقطيع إلى وحدات والتضمينات

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

الذكاء الاصطناعي التوليديمعالجة اللغات الطبيعيةالتعلّم العميق
قراءة 6 دقيقةبناء نموذج لغة

التدريب المسبق والضبط الدقيق

كيف يحوّل التنبّؤ بالكلمة التالية نصاً غير موسوم إلى إشراف، ولماذا الإنتروبيا المتقاطعة ليست إلا سالب متوسط لوغاريتم الاحتمال، وماذا تقيس الحيرة فعلاً، ولماذا يظلّ نموذج يُكمل النص بطلاقة عاجزاً عن اتّباع تعليمة.

الذكاء الاصطناعي التوليديالتعلّم العميق
← العودة إلى كل المقالات