#transformer-block — نماذج LLM وTransformers
كتلة المحوّل: الانتباه، الوصلات التجاوزية، التسوية، شبكة FFN.
ما ستُجرّبه
- مرحبًا بك في #transformer-block. على الشاشة، محوّل مصغَّر مرئي بمقطع طولي: في الأسفل، الصندوق الأصفر لـالتضمينات + المواضع؛ فوقه، L = 2 كتلتان متراكمتان، كلٌّ منهما مؤلَّفة من طبقة فرعية للـانتباه (زرقاء) وشبكة FFN (وردية)، محاطتين بشريط رمادي للتسوية ومن اليسار قوس أصفر: الوصلة التجاوزية (residual). في الأعلى، المخرَج الأخضر. الرموز الستّة (tokens) لجملة «القط يراقب الكلب و القط ينام» خرزات موضوعة عند الدخل: حجمها يتبع معيار متّجهها (البُعد d = 8)، ولونها يتبع اتّجاهه. نموذج GPT-2 هو بالضبط هذا المقطع مكرَّرًا 12 مرّة عند d = 768؛ وGPT-3، 96 مرّة عند d = 12,288. كلّ ذلك يتّسع داخل هذه الكتلة.
- ادفع الجملة عبر المكدَّس:
/forward. تصعد الخرزات طبقةً فرعيّةً تلو الأخرى؛ على اليمين، يظهر مخطّط المعيار مع مرورها. - اقطع الوصلة التجاوزية:
/residual off. الآن كلّ طبقة فرعية تستبدل المتّجه بدل تصحيحه. - أزل التسوية أيضًا:
/norm none. لا شرائط رمادية بعد الآن: لا شيء يُثبّت مقياس المتّجه. - أعِد وصل التجاوز دون استعادة التسوية:
/residual on. - أعد التسوية القبلية:
/norm pre. يعود الشريط الرمادي تحت كلّ طبقة فرعية: المتّجه المسوَّى هو الذي يدخل الانتباه وFFN، أمّا تدفّق التجاوز فيبقى سليمًا. - أسقط الترميز الموضعي:
/position none. تدخل التضمينات وحدها، دون أن تعرف موقعها. - كدِّس المزيد:
/layers 6. اثنتا عشرة طبقة فرعية، ويتضاعف عدّاد المعاملات في الأعلى ثلاث مرّات: العدد خطّي بـ L (وتربيعي بـ d). - دورك:
/paramsلتفصيل المعاملات (الصيغة والحدود)،/norm postلوصفة 2017،/position learnedلجدول مواضع متعلَّم كما في GPT-2،/ffn 64لتوسيع FFN،/dimension 16لمضاعفة d (الانتباه، تربيعي بـ d، × 4)،/sentence الكلب يراقب القط و الكلب يناملتغيير النصّ،/step 2لإيقاف الخرزات بعد FFN للكتلة 1،/resetللبدء من جديد. المحطّة التالية: قناة #generation-temperature، حيث يصبح رأس المخرَج توزيعًا احتماليًا على المفردات فتُختار الكلمة التالية.
أوامر القناة
/forward— إعادة سحب الأوزان وإعادة تشغيل الجملة طبقةً فرعيّةً تلو الأخرى./layers <1..6>— عدد L من الكتل المتراكمة./position <sine|learned|none>— الترميز الموضعي المُضاف إلى التضمينات: جيوب، جدول متعلَّم، أو بدون./residual <on|off>— تفعيل الوصلة التجاوزية حول كلّ طبقة فرعية أو تعطيلها./norm <pre|post|none>— وضع تسوية الطبقة قبل (pre)، بعد (post) أو لا شيء./ffn <8..64>— عرض w للطبقة المخفيّة للتغذية الأمامية./dimension <8|16>— البُعد d للمتّجهات (8 أو 16)./sentence <text>— استبدال الجملة المُنتشِرة (السطر كاملًا، من 2 إلى 8 كلمات)./step <n=0..13>— إيقاف الخرزات عند المستوى n: 0 = الدخل، 1..2L = الطبقات الفرعية، 2L+1 = المخرَج./params— تفصيل عدد المعاملات./reset— العودة إلى L = 2، d = 8، w = 32، مواضع جيبية، تجاوز مُفعَّل، تسوية قبلية.
المسرد
- كتلة المحوّل (transformer block)
- الوحدة التي تتكرّر L مرّة داخل المحوّل: طبقة فرعية للـانتباه متعدّد الرؤوس ثم شبكة تغذية أماميّة، كلٌّ منهما محاط بوصلة تجاوزية وتسوية طبقة. تدخل التضمينات من الأسفل، ويقرأ رأس المخرَج آخر كتلة.
- الترميز الموضعي (positional encoding)
- متّجه يُضاف إلى تضمين كلّ رمز ليخبره بموقعه: جيوب وجيوب تمام بترددات متناقصة (2017) أو جدول متعلَّم (GPT-2). بدونه، لا يرى الانتباه سوى كيس من الكلمات ويتقاسم الرمزان المتطابقان التمثيل نفسه.
- الوصلة التجاوزية (residual connection)
- اختصار يُضيف دخل الطبقة الفرعية إلى مخرَجها:
x + f(x). يحتفظ التدفّق بالمعلومة الأصليّة، ولا تتعلّم كلّ طبقة فرعية سوى تصحيح، ويتدفّق التدرّج للخلف دون أن ينكمش. بدونها، تنهار تمثيلات الرموز بعضها على بعض. - تسوية الطبقة (layer normalization)
- تُعيد توسيط وتحجيم متّجه كلّ رمز على مكوّناته الـ d (متوسّط 0، تباين 1، أي معيار sqrt(d))، مع كسب وتحيّز يُتعلَّمان. تُثبِّت مقياس الإشارة عند أيّ عمق وتُثبِّت التدريب.
- التسوية القبلية مقابل البعدية (pre-norm vs post-norm)
- أين تُوضع التسوية: القبلية
x + f(LN(x))تُسوّي دخل الطبقة الفرعية وتترك تدفّق التجاوز سليمًا (GPT-2 وLLaMA)؛ البعديةLN(x + f(x))تُسوّي بعد الجمع (محوّل 2017 وBERT)، أدقّ في التدريب على العمق. - شبكة التغذية الأماميّة (feed-forward network)
- بيرسبترون صغير يُطبَّق على كلّ رمز على حدة داخل كلّ كتلة:
W2 · GELU(W1 · x)، بطبقة مخفيّة عرضها w (غالبًا 4d). فيها يخزّن النموذج معظم معرفته، وتحمل ثلثَي معاملات الكتلة. - الانتباه متعدّد الرؤوس (multi-head attention)
- انتباه يُحسب h مرّات على التوازي في فضاءات فرعيّة ببُعد d/h، كلّ رأس بمصفوفاته Q وK وV الخاصّة، ثم تُدمج النتائج وتُسقَط عبر مصفوفة مخرَج. يمكن لكلّ رأس تتبّع علاقة مختلفة (تركيب، مرجع مشترك، موضع).
- المُشفِّر مقابل الفكّاك (encoder vs decoder)
- طريقتان لتكديس الكتل: المُشفِّر (BERT، هذه القناة) يسمح لكلّ رمز بالنظر إلى الجملة كاملة؛ الفكّاك (GPT) يُضيف قناعًا سببيًّا — لا يرى الرمز إلّا ما قبله — للتنبّؤ بالكلمة التالية. جمع محوّل 2017 بينهما للترجمة.
- العمق (depth)
- عدد L من الكتل المتراكمة: 12 في GPT-2 الصغير، 96 في GPT-3، 80 في LLaMA-2 70B. الوصلات التجاوزية والتسوية هي ما يجعل الذهاب إلى هذا العمق ممكنًا دون أن تنفجر الإشارة أو تخبو من كتلة إلى أخرى.
- عدد المعاملات (parameter count)
- حجم النموذج: لكلّ كتلة، تقريبًا
4d² + 2dw(انتباه + FFN، أي 12d² إذا كان w = 4d)، مضروبًا في L، مع V×d للتضمينات. خطّي بـ L، تربيعي بـ d: مضاعفة العرض تكلّف أربع مرّات ضعف مضاعفة العمق.
قنوات أخرى في نماذج LLM وTransformers
- #tokenization — التقطيع وBPE: كيف يُقطِّع نموذج LLM النص.
- #attention — الانتباه الذاتي: كل كلمة تنظر إلى الأخريات.
- #transformer-block — كتلة المحوّل: الانتباه، الوصلات التجاوزية، التسوية، شبكة FFN.
- #generation-temperature — التوليد: الحرارة وtop-k وtop-p.
- #rag — RAG: الإجابة انطلاقًا من وثائقك.
- #alignment-rlhf — المحاذاة وRLHF: تعلّم ما يفضّله البشر.