Reformer
Reformer هو Transformer موفّر للذاكرة يستخدم الانتباه بالتجزئة الحساسة للموضع والطبقات القابلة للعكس لمعالجة تسلسلات طويلة جدًا.
Reformer هو Transformer موفّر للذاكرة، قدّمه نيكيتا كيتاييف ولوكاش كايزر وأنسلم ليفسكايا من جامعة كاليفورنيا في بيركلي وGoogle Research في Reformer: المحوّل الفعّال خلال ICLR 2020. ويعالج الكلفتين اللتين تحدّان من طول التسلسل. إذ يستبدل الانتباه القائم على التجزئة الحساسة للموقع (LSH) مصفوفة الانتباه الكاملة ذات الأبعاد n × n، وتبلغ كلفته نحو L log L لتسلسل طوله L؛ كما تخزّن الطبقات المتبقية القابلة للعكس التنشيطات اللازمة لـالانتشار العكسي مرة واحدة للشبكة كلها بدلًا من مرة لكل طبقة. وأفادت Google بأن Reformer يتعامل مع نوافذ السياق التي تصل إلى مليون كلمة على مسرّع واحد بذاكرة 16 GB، وعالج رواية الجريمة والعقاب كاملةً بوصفها مثال تدريب واحدًا.
الانتباه باستخدام LSH#
بعد تطبيق softmax، يهيمن عدد قليل من المفاتيح الأكثر تشابهًا مع كل استعلام على انتباهه، لذا يبحث Reformer عن هذه المفاتيح وحدها. ويستخدم إسقاطًا مشتركًا واحدًا للاستعلامات والمفاتيح، ويجزّئ كل متجه باستخدام التجزئة الحساسة للموقع الزاوية: يضرب المتجه في مصفوفة عشوائية R، ويأخذ موضع أكبر قيمة في [xR, −xR] بوصفه الحاوية، ولذلك تقع المتجهات المتجهة نحو اتجاهات متشابهة غالبًا في الحاوية نفسها. ثم تُرتَّب الرموز حسب الحاوية، ويُقسّم التسلسل المرتب إلى مقاطع متساوية، ولا ينتبه كل رمز إلا داخل مقطعه والمقطع السابق له. وتُشغَّل عدة جولات تجزئة بالتوازي لالتقاط الأزواج المتشابهة التي تفصل بينها جولة واحدة.
تُعد LSH طريقة كلاسيكية لـالبحث المتجهي عن أقرب الجيران تقريبيًا: فهي تعثر على معظم أقرب k جيران للاستعلام بجزء بسيط من كلفة البحث الدقيق. وخطوة التقسيم إلى حاويات قصيرة بما يكفي لتُشغَّل بمفردها:
import torch
torch.manual_seed(0)
dim, n_buckets, rounds = 64, 16, 1000
query = torch.randn(dim)
vectors = {"query": query, "near": query + 0.3 * torch.randn(dim), "far": torch.randn(dim)}
# Angular LSH as in Reformer: random projection R, then bucket = argmax over [xR, -xR]
R = torch.randn(rounds, dim, n_buckets // 2)
buckets = {}
for name, x in vectors.items():
proj = torch.einsum("d,rdb->rb", x, R)
buckets[name] = torch.cat([proj, -proj], dim=-1).argmax(dim=-1)
for name in ("near", "far"):
cosine = torch.cosine_similarity(query, vectors[name], dim=0)
shared = (buckets[name] == buckets["query"]).float().mean()
print(f"{name}: cosine similarity {cosine:.2f}, same bucket as the query in {shared:.0%} of rounds")يشترك المتجه القريب، الذي تبلغ مشابهته الجيبية للاستعلام 0.96، معه في الحاوية في 72% من أصل 1,000 جولة، بينما يفعل المتجه غير المرتبط، الذي تبلغ مشابهته 0.04، ذلك في 9% منها. لذلك يحافظ حصر الانتباه في الحاوية على معظم الأزواج المهمة.
الطبقات القابلة للعكس والتقسيم إلى مقاطع#
تحتفظ الشبكة العصبية التقليدية بتنشيطات كل طبقة لمرحلة الانتشار العكسي، لذا تزداد الذاكرة مع العمق والطول معًا. ويكيّف Reformer الشبكات المتبقية القابلة للعكس (RevNets): إذ يقسم التنشيطات إلى نصفين ويحدّث كل نصف بدالة تعتمد على النصف الآخر.
أثناء الانتشار العكسي، تستعيد كل طبقة مدخلاتها من مخرجاتها، x2 = y2 − FeedForward(y1) ثم x1 = y1 − Attention(x2)، ولذلك لا تُخزَّن إلا التنشيطات النهائية وتُعاد حوسبة كل طبقة مرة واحدة. يحقق تحديد نقاط فحص التدرج مقايضةً مماثلةً عبر تخزين التنشيطات عند نقاط فحص قليلة وإعادة حوسبة الطبقات الواقعة بينها. كما يشغّل Reformer طبقاته ذات التغذية الأمامية على مقاطع من المواضع، لأن طبقته المخفية أعرض بعدة مرات من النموذج. وتُعد ذاكرة التنشيطات العامل الذي يحدّ من حجم الدفعة عند تدريب Ultralytics YOLO26: باستخدام batch=-1، تقيس AutoBatch ذاكرة GPU عند أحجام دفعات متعددة، وتلائم خطًا مستقيمًا، ثم تختار حجم الدفعة المتوقع أن يشغل 60% من الذاكرة المتاحة.
النتائج والتطبيقات#
عادل Reformer المحوّلات القياسية في النصوص على مستوى المحارف من enwik8، وفي توليد الصور بكسلًا تلو الآخر على ImageNet-64، مع استخدام ذاكرة أقل بكثير وسرعة أعلى في التسلسلات الطويلة. وتطبّق مكتبة Transformers من Hugging Face النموذج باسم ReformerModel، مع نقاط تحقق منشورة مدرَّبة على enwik8 وعلى الجريمة والعقاب.
Reformer مقارنةً بالنماذج ذات الصلة#
- Longformer: يحدد نمط الانتباه مسبقًا: نافذة منزلقة حول كل رمز، إضافةً إلى بضعة رموز عامة.
- الانتباه المتناثر: عائلة من الطرق التي تقيّم بعض أزواج الرموز فقط. والانتباه باستخدام LSH أحد أساليب هذه العائلة المعتمدة على المحتوى.
- الانتباه الخطي: يستبدل softmax بخريطة سمات لنواة كي يمكن حساب الانتباه بزمن خطي.
- انتباه Flash: يحسب الانتباه الدقيق في بلاطات الذاكرة الموجودة على الشريحة في GPU دون تخزين مصفوفة الدرجات، فتزداد الذاكرة خطيًا بينما يظل عدد الدرجات تربيعيًا.










