Sliding Window Attention
يحصر الانتباه بنافذة منزلقة كل رمز في نافذة ثابتة من الجيران الأحدث، لذا تزداد تكلفة الانتباه وذاكرة التخزين المؤقت للمفاتيح والقيم (KV) خطيًا مع الطول.
يقيّد الانتباه بالنافذة المنزلقة (SWA) انتباه كل رمز بعدد ثابت من الرموز المجاورة؛ وفي نموذج اللغة السببي، يقتصر على أحدث w رمزًا، بدلًا من التسلسل كله كما في الانتباه الذاتي الكامل. عندئذ يزداد حساب الانتباه خطيًا مع طول التسلسل بدلًا من نموه التربيعي، ولا يحتاج النموذج المُولِّد إلى الاحتفاظ إلا بمفاتيح وقيم آخر w من الرموز في ذاكرة KV المؤقتة. جعل Longformer النافذة المنزلقة أساس آلية الانتباه لديه في عام 2020، ثم أتاح Mistral 7B من Mistral AI هذه الآلية في نموذج لغة كبير (LLM) مفتوح واسع الاستخدام عام 2023، بنافذة تضم 4,096 رمزًا.
كيفية اتساع النافذة مع العمق#
لا ترى طبقة واحدة من SWA سوى w رمزًا، لكن طبقات المحوّل تتراكم. ففي الطبقة الثانية، يقرأ الرمز حالات مخفية تلخّص كل منها بالفعل w رمزًا من الطبقة الأولى، لذا تستطيع المعلومات الانتقال نحو w − 1 موضعًا إضافيًا تقريبًا مع كل طبقة، تمامًا كما توسّع الالتفافات المتراكمة المجال الاستقبالي في الشبكة العصبية الالتفافية (CNN). وفي PyTorch، تكون النافذة قناع انتباه منطقيًا، ويبيّن ضرب القناع في نفسه مدى انتقال المعلومات:
import torch
seq_len, window = 16, 4
pos = torch.arange(seq_len)
offset = pos[:, None] - pos[None, :]
# Causal sliding window: each token attends to itself and the window - 1 tokens before it
mask = (offset >= 0) & (offset < window)
print(f"Scores per layer: {mask.sum().item()} with the window, {(offset >= 0).sum().item()} with full causal attention")
# Stacking layers widens the reach: each layer adds window - 1 more tokens of history
reach = mask
for layer in range(1, 5):
print(f"Layer {layer}: last token draws on {reach[-1].sum().item()} tokens")
reach = (mask.int() @ reach.int()) > 0تحسب النافذة 58 درجة لكل طبقة على 16 رمزًا بدلًا من 136، ويزداد مدى وصول الرمز الأخير بمقدار 3 رموز لكل طبقة، من 4 إلى 7 ثم 10 و13. ويمكن تمرير القناع نفسه بصفته attn_mask إلى scaled_dot_product_attention في PyTorch. وبالنسبة إلى Mistral 7B، توفر 32 طبقة بنافذة من 4,096 رمزًا نطاق انتباه نظريًا يبلغ نحو 131K رمزًا، مع أن المعلومات الواردة من مواضع بعيدة يجب أن تصمد عبر خطوات عديدة لتصل.
يخزّن Mistral 7B مفاتيحه وقيمه أيضًا في مخزن دائري يضم w خانة، ويكتب الموضع i في الخانة i mod w مع استبدال أقدم مدخل. وعلى تسلسل من 32K رمزًا، خفّض ذلك ذاكرة التخزين المؤقت بمقدار ثمانية أضعاف من دون الإضرار بالجودة، كما يحافظ حجم الذاكرة الثابت على استقرار استخدامها مهما طال التوليد.
التناوب بين الطبقات المحلية والعالمية#
لا تستطيع النوافذ الخالصة نقل معلومة من موضع بعيد في خطوة واحدة، لذا تمزج النماذج الحديثة طبقات SWA بطبقات عالمية كاملة. وقد تناوبت Gemma 2 من Google بينهما بالتساوي باستخدام نافذة من 4,096 رمزًا، بينما تستخدم Gemma 3 خمس طبقات محلية لكل طبقة عالمية، مع نافذة لا يتجاوز حجمها 1,024 رمزًا، ما يُبقي ذاكرة التخزين المؤقت KV صغيرة ضمن نافذة سياق تصل إلى 128K رمزًا. ولا تخزن المفاتيح والقيم للسياق بأكمله سوى الطبقات العالمية، لذا لا تحتفظ إلا 1,024 رمزًا في كل طبقة من كل ست طبقات.
تستخدم محوّلات الرؤية المزيج نفسه للصور عالية الدقة، حيث تمثل كل رقعة رمزًا. ويجري SAM 3 من Meta، والمتاح ضمن حزمة Ultralytics لمهمة تجزئة الصور، الانتباه ضمن نوافذ غير متداخلة من الرقع بحجم 24 × 24 في 28 كتلة من أصل 32 في مُرمّز الصور، والانتباه عالميًا عبر شبكة الرقع الكاملة بحجم 72 × 72 لصورة مقاسها 1,008 بكسل في الكتل 7 و15 و23 و31.
SWA ومصطلحات ذات صلة#
- Swin Transformer: يقسم الصورة إلى نوافذ ثابتة غير متداخلة تتشارك جميع الرموز داخل كل نافذة، ويزيح الشبكة بين الطبقات لتبادل المعلومات بين النوافذ المتجاورة.
- الانتباه المتناثر: الفئة الأوسع من الأنماط الثابتة. يُعد SWA أبسط أفرادها، بينما تضيف الأنواع الأخرى نوافذ متباعدة أو رموزًا عالمية أو روابط عشوائية.
- مغاسل الانتباه: الرموز الأولى في التسلسل، التي تمتص أوزان الانتباه الفائضة. عند تطبيق نافذة وقت الاستدلال على نموذج دُرّب باستخدام الانتباه الكامل، يؤدي إخراج هذه الرموز إلى تعطيل التوليد، ولذلك يحتفظ بها StreamingLLM في ذاكرة التخزين المؤقت إلى جانب النافذة.
- الانتباه القابل للتشوه: ينتبه كل استعلام إلى بضع نقاط أخذ عينات يتعلم إزاحاتها، لذا تعتمد منطقة الجوار على المحتوى.
- انتباه Flash: نواة GPU للانتباه الدقيق. تقبل تطبيقاته حجم نافذة، لذا تتجاوز نماذج SWA الكتل الواقعة خارج النافذة تمامًا.










