خطوات الاستخدام
1. فهم الانتباه المتقاطع (Cross-Attention): في نموذج المحول (Transformer)، يحدث الانتباه المتقاطع بين المشفر (Encoder) وفك التشفير (Decoder). يقوم فك التشفير باستخدام تمثيلات المشفر كقيم (Values) ومفاتيح (Keys)، بينما يستخدم استعلامات (Queries) من حالته المخفية. الهدف هو السماح لفك التشفير بالتركيز على أجزاء مختلفة من تسلسل الإدخال. يتم حساب مصفوفة الانتباه عبر: Attention(Q, K, V) = softmax(QK^T / √d_k) V، حيث d_k هو بُعد المفاتيح (عادةً dModel).
2. حساب عدد عمليات الفاصلة العائمة (FLOPs) لحساب QK^T: هذه هي الخطوة الأكثر تكلفة. حجم كل من Q و K: decSeqLen × dModel و encSeqLen × dModel على التوالي. ضرب المصفوفات ينتج مصفوفة بحجم decSeqLen × encSeqLen. عدد عمليات الضرب والجمع لكل عنصر: dModel ضرب و (dModel-1) جمع، ولكن في FLOPs نعد كل عملية ضرب وجمع كعملية واحدة. العدد التقريبي: 2 * decSeqLen * encSeqLen * dModel (لأن كل عنصر يتطلب dModel ضرب و dModel جمع).
3. حساب FLOPs لعملية softmax وتطبيقها على V: عملية softmax تحتوي على أسس وجمع وتقسيم، ولكن عملياتها صغيرة نسبيًا. بعد softmax، لدينا مصفوفة attention weights بحجم decSeqLen × encSeqLen. ثم ضرب هذه المصفوفة مع V (حجم encSeqLen × dModel) ينتج مخرجات بحجم decSeqLen × dModel. عدد FLOPs لهذه الضرب: 2 * decSeqLen * encSeqLen * dModel (مماثل للخطوة السابقة).
4. إجمالي FLOPs: نجمع FLOPs من الخطوتين 2 و 3. مع تجاهل softmax (لأنها عمليات غير خطية صغيرة)، إجمالي FLOPs ≈ 4 * decSeqLen * encSeqLen * dModel. لاحظ أن بعض المراجع تضيف عوامل إضافية (مثل عمليات البث أو العنصر الصغير)، لكن هذا التقريب هو المعيار لـ cross-attention.
5. أمثلة رقمية مع التوحيد: إذا كان encSeqLen=1024, decSeqLen=512, dModel=768، فإن FLOPs = 4 * 512 * 1024 * 768 = 4 * 402,653,184 = 1,610,612,736 ≈ 1.61 جيجا FLOPs. هذا الرقم ضروري لتقدير وقت التدريب والذاكرة.
أمثلة محلولة
تطبيقات عملية على عمليات الانتباه المتقاطع بخطوات الحل كاملة.
الحل
نستخدم المعادلة: FLOPs = 4 × decSeqLen × encSeqLen × dModel = 4 × 256 × 512 × 512 = 4 × 67,108,864 = 268,435,456 FLOPs. هذا يعادل حوالي 268.4 مليون عملية فاصلة عائمة. هذا الحساب مهم لأنه يبين أن معظم عمليات الانتباه تتركز في ضرب المصفوفات. في الممارسة، قد نضيف بنودًا إضافية مثل عمليات softmax والبث، لكن هذا التقريب كافٍ للمقارنة.
الحل
للانتباه المتقاطع: FLOPs = 4 × 1024 × 2048 × 1024 = 4 × 2,147,483,648 = 8,589,934,592 ≈ 8.59 جيجا FLOPs. للانتباه الذاتي في فك التشفير: FLOPs = 4 × (decSeqLen)^2 × dModel = 4 × (1024)^2 × 1024 = 4 × 1,073,741,824 = 4,294,967,296 ≈ 4.29 جيجا FLOPs. نلاحظ أن الانتباه المتقاطع يتطلب ضعف العمليات لأن encSeqLen أكبر من decSeqLen. هذا يوضح لماذا يكون الانتباه المتقاطع أكثر تكلفة عندما يكون تسلسل الإدخال طويلاً.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة عمليات الانتباه المتقاطع.
enc 1024 و dec 512 و d 768: 1.61 مليار عملية
- طول تسلسل المشفر
- 1,024
- طول تسلسل فاكك التشفير
- 512
- بعد النموذج
- 768
محول أساسي 512 في كل الاتجاهات: 0.54 جيجا
- طول تسلسل المشفر
- 512
- طول تسلسل فاكك التشفير
- 512
- بعد النموذج
- 512
شكل CLIP بنص 77 رمزًا: 15.1 مليون عملية
- طول تسلسل المشفر
- 77
- طول تسلسل فاكك التشفير
- 64
- بعد النموذج
- 768