خطوات الاستخدام
أدخل عدد الرؤوس (heads): هذا هو عدد رؤوس الانتباه المستخدمة في النموذج. عادةً ما يكون 8 أو 16 في النماذج الحديثة مثل BERT أو GPT. كل رأس يتعامل مع جزء من البعد الكلي للنموذج، حيث يكون بُعد كل رأس (d_k) مساوياً لـ dModel مقسومًا على عدد الرؤوس. تذكر أن زيادة عدد الرؤوس قد يحسن تمثيل الأنماط المختلفة في البيانات، لكنه يزيد من التعقيد الحسابي.
أدخل بُعد النموذج (dModel): هذا هو حجم التمثيل (embedding dimension) لكل رمز في التسلسل. في المحولات (Transformers)، يكون عادةً 512 أو 768 أو 1024. هذا البعد يحدد سعة النموذج وقدرته على تعلم الميزات المعقدة.
أدخل طول التسلسل (seqLen): عدد الرموز في التسلسل المدخل (مثل عدد الكلمات في جملة). كلما زاد الطول، زادت العمليات الحسابية بشكل تربيعي في جزء الانتباه (أي مربع طول التسلسل)، وهذا هو السبب في أن التعامل مع التسلسلات الطويلة صعب من الناحية الحسابية.
ستقوم الآلة بحساب إجمالي عدد العمليات الحسابية (FLOPs) لطبقة الانتباه متعدد الرؤوس كاملة. تتضمن هذه العمليات ثلاثة توقعات خطية للمفاتيح والاستعلامات والقيم (QKV projections) بمصفوفات وزن أبعادها (dModel × dModel)، ثم حساب الانتباه بمصفوفات (seqLen × seqLen) لكل رأس، ثم التوقع الخطي النهائي لإخراج الانتباه. القانون المستخدم هو: FLOPs = 8 × seqLen × dModel² + 4 × seqLen² × dModel. يتم تحويل النتيجة إلى ميجا فلوب (MFLOPS) بقسمتها على 1,000,000.
أمثلة محلولة
تطبيقات عملية على عمليات الانتباه متعدد الرؤوس بخطوات الحل كاملة.
الحل
لدينا heads=12, dModel=768, seqLen=512. نطبق القانون: FLOPs = 8 × 512 × 768² + 4 × 512² × 768. أولاً نحسب الجزء الأول: 8 × 512 = 4096، و 768² = 589,824، لذا 4096 × 589,824 = 2,415,919,104. الجزء الثاني: 4 × 512² = 4 × 262,144 = 1,048,576، ثم × 768 = 805,306,368. المجموع = 2,415,919,104 + 805,306,368 = 3,221,225,472 فلوب. بالقسمة على 1,000,000 نحصل على 3,221.23 ميجا فلوب. هذا لكل طبقة انتباه، وفي BERT-base هناك 12 طبقة، لذا الإجمالي هو 38,654.7 ميجا فلوب للمرور الأمامي (forward pass) عبر جميع طبقات الانتباه. يوضح هذا المثال مدى كثافة الحسابات في المحولات، خاصةً مع زيادة طول التسلسل.
الحل
لدينا heads=96, dModel=12288, seqLen=2048. نطبق القانون: الجزء الأول: 8 × 2048 × 12288² = 8 × 2048 = 16,384، و 12288² = 150,994,944، لذا 16,384 × 150,994,944 = 2,473,901,162,496 (أي 2.47 تريليون فلوب). الجزء الثاني: 4 × 2048² × 12288 = 4 × 4,194,304 = 16,777,216، ثم × 12288 = 206,158,430,208. المجموع = 2,473,901,162,496 + 206,158,430,208 = 2,680,059,592,704 فلوب. بالقسمة على 1,000,000 نحصل على 2,680,059.59 ميجا فلوب. هذا أكبر بـ 832 مرة بالضبط من حساب BERT السابق (3221.23 ميجا فلوب)، مما يبرز التحدي الضخم في تدريب واستنتاج النماذج الضخمة. لاحظ أن جزء المصفوفات الخطية (الجزء الأول) يهيمن على الحسابات هنا بسبب مربع dModel (12288²)، بينما في BERT بلغ جزء الانتباه 805,306,368 ÷ 3,221,225,472 = 25% بالضبط من الإجمالي مقابل 206,158,430,208 ÷ 2,680,059,592,704 = 7.69% هنا؛ فالجزء الخطي يهيمن في الحالتين بسبب dModel² لكن نصيب الانتباه ينخفض كلما كبر البعد. هذه المقارنة تظهر أهمية فهم توزيع الحسابات عند تحسين النماذج.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة عمليات الانتباه متعدد الرؤوس.
BERT-base: طبقة انتباه واحدة = 3221.225472 ميجا فلوب
- عدد الرؤوس
- 12
- بعد النموذج
- 768
- طول التسلسل
- 512
GPT-3 صغير: 2,680,059.59 ميجا فلوب للطبقة = 832× مثال BERT
- عدد الرؤوس
- 96
- بعد النموذج
- 12,288
- طول التسلسل
- 2,048
إعداد Vaswani الأساسي (8 رؤوس، 512 بعد): 1610.61 ميجا فلوب
- عدد الرؤوس
- 8
- بعد النموذج
- 512
- طول التسلسل
- 512
تسلسل بطول 1: الانتباه ينهار إلى 0.0976% من العمل
- عدد الرؤوس
- 8
- بعد النموذج
- 512
- طول التسلسل
- 1