Hypernetworks
الشبكة الفائقة هي شبكة عصبية تنتج أوزان شبكة أخرى انطلاقًا من مُدخل مثل تضمين المهمة. ويتناول هذا المفهوم الاستخدامات ومثالًا باستخدام PyTorch.
الشبكة الفائقة هي شبكة عصبية تكون مخرجاتها أوزان شبكة أخرى تُسمى الشبكة الهدف أو الشبكة الرئيسية. وبدلًا من تعلم مجموعة ثابتة واحدة من أوزان النموذج، تتلقى الشبكة الهدف أوزانًا تحسبها الشبكة الفائقة من مدخل تكييف، مثل معرّف مهمة أو ملف مستخدم أو وصف نصي أو صورة مثال، بحيث تستطيع شبكة فائقة واحدة مدرّبة إنتاج نموذج متخصص مختلف لكل مدخل في تمريرة أمامية واحدة. وفي ورقة HyperNetworks الصادرة عن Google Brain عام 2016، استخدم David Ha وAndrew Dai وQuoc Le شبكات فائقة صغيرة لتوليد أوزان الشبكات العميقة الالتفافية والمتكررة، وتظهر الفكرة الآن في التعلّم المستمر، وتخصيص نماذج الانتشار، والبحث عن البنى العصبية.
آلية عمل الشبكات الفائقة#
أثناء التدريب، لا تُتعلم سوى معلمات الشبكة الفائقة نفسها. ويمر مدخل التكييف، الذي غالبًا ما يكون تضمينًا متعلّمًا لكل مهمة أو طبقة، عبر الشبكة الفائقة لإنتاج أوزان الشبكة الهدف؛ ثم تعالج الشبكة الهدف البيانات الفعلية بهذه الأوزان، وتنقل الانتشار العكسي تدرج الخسارة عبر الأوزان المولّدة إلى الشبكة الفائقة:
ميّز Ha وزملاؤه بين الشبكات الفائقة الثابتة، التي تولّد أوزان كل طبقة مرة واحدة من تضمين الطبقة، والشبكات الفائقة الديناميكية، التي تعيد حساب الأوزان لكل مدخل أو خطوة زمنية، كما فعلت HyperLSTM في كل خطوة من تسلسل. وتكون الأوزان المولّدة موترات عادية أثناء التشغيل، لذا يمكن أن تكون الشبكة الهدف بأي بنية، بما فيها طبقة Transformer تأتي إسقاطات الانتباه فيها من الشبكة الفائقة. وتتمثل المشكلة الهندسية الأساسية في حجم المخرجات: فالطبقة التي تضم ملايين الأوزان ستحتاج إلى شبكة فائقة تنتج ملايين المخرجات لكل طبقة. وتولّد التصاميم العملية الأوزان على دفعات، تُنتج كل منها من تضمين خاص بها، أو تولّد عوامل منخفضة الرتبة صغيرة فقط لكل تحديث وزن، أو تولّد مقياسًا وإزاحة لكل قناة فقط، كما في التعديل الخطي على مستوى السمات (FiLM).
مثال على الشبكات الفائقة باستخدام PyTorch#
يدرّب مثال PyTorch هذا شبكة فائقة على مجموعة من المهام، وهي موجات جيبية ذات سعات وأطوار مختلفة. وتولّد الشبكة جميع الأوزان الـ97 لشبكة هدف صغيرة لكل مهمة، بينما لا تُدرّب سوى الشبكة الفائقة:
import math
import torch
from torch import nn
torch.manual_seed(0)
x = torch.linspace(-math.pi, math.pi, 64)
# Hypernetwork: maps a task (amplitude, phase) to all 97 weights of a 1-32-1 target network
hyper = nn.Sequential(nn.Linear(2, 128), nn.ReLU(), nn.Linear(128, 97))
optimizer = torch.optim.Adam(hyper.parameters(), lr=1e-3)
def target(x, w):
"""Run the target network with weights w produced by the hypernetwork."""
return torch.relu(x[:, None] * w[:32] + w[32:64]) @ w[64:96] + w[96]
# Train only the hypernetwork, on a new random sine task at every step
for step in range(5000):
task = torch.rand(2) * torch.tensor([2.0, math.pi])
loss = ((target(x, hyper(task)) - task[0] * torch.sin(x + task[1])) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
# Unseen task: one forward pass of the hypernetwork produces the target network's weights
y = 1.5 * torch.sin(x + 1.0)
with torch.no_grad():
mse = ((target(x, hyper(torch.tensor([1.5, 1.0]))) - y) ** 2).mean()
print(f"Unseen task MSE: {mse:.3f} with generated weights, {(y**2).mean():.3f} predicting zero")يطبع Unseen task MSE: 0.010 with generated weights, 1.132 predicting zero. لم يسبق تدريب الشبكة الهدف ذات السعة 1.5 والطور 1.0؛ بل جاءت أوزانها من استدعاء واحد للشبكة الفائقة، التي تعلمت كيفية تغير الأوزان المناسبة عبر مجموعة المهام كلها.
التطبيقات#
- التعلّم المستمر: تخزّن الشبكة الفائقة المكيّفة بحسب المهمة تضمينًا صغيرًا واحدًا لكل مهمة، وتعيد توليد أوزان تلك المهمة عند الطلب. ويتضمن التدريب على مهمة جديدة عقوبةً تُبقي مخرجات الشبكة الفائقة للتضمينات الخاصة بالمهام السابقة دون تغيير، ما يحد من النسيان الكارثي.
- تخصيص النماذج التوليدية: تتنبأ HyperDreamBooth بمجموعة صغيرة من الأوزان المخصصة لنموذج انتشار يحوّل النص إلى صورة انطلاقًا من صورة واحدة لوجه، ثم تنقحها لفترة وجيزة، فتخصص النموذج في نحو 20 ثانية، أي أسرع 25 مرة من DreamBooth، مع أوزان مخصصة أصغر بعشرة آلاف مرة من نموذج DreamBooth.
- البحث عن البنى العصبية: تقرأ الشبكات الفائقة البيانية بنيةً مرشحةً على هيئة رسم بياني وتتنبأ بأوزانها، ما يتيح ترتيب البنى المرشحة بحسب دقتها على التحقق باستخدام الأوزان المتنبأ بها، بدلًا من تدريب كل بنية على حدة.
- التصنيف دون أمثلة: يصف مؤلفو CLIP مشفّر النصوص فيه بأنه شبكة فائقة تولّد أوزان مصنّف خطي انطلاقًا من أسماء الفئات، ما يتيح لـCLIP تصنيف الصور ضمن فئات لم تظهر قط في تسميات التدريب.
تطبق كواشف المفردات المفتوحة الفكرة نفسها على الكشف. يرمّز Ultralytics YOLOE-26، المبني على YOLO26، اسم كل فئة يُمرر إلى set_classes() مرة واحدة باستخدام MobileCLIP2، وهو مشفّر نصوص مدمج على غرار CLIP، ويستخدم التضمينات الناتجة أوزانًا لتقييم كل منطقة مرشحة مقارنةً بكل فئة. وعند التصدير، تُدمج هذه التضمينات في التفاف عادي بحجم 1x1 في رأس الكشف.
الشبكات الفائقة مقارنةً بالمصطلحات ذات الصلة#
- الضبط الدقيق: يكيّف مجموعة أوزان ثابتة واحدة مع مهمة جديدة عبر خطوات التدرج على بيانات تلك المهمة. أما الشبكة الفائقة المدرّبة فتنتج أوزانًا لمهمة جديدة في تمريرة أمامية واحدة، باستخدام مدخل التكييف الخاص بالمهمة فقط.
- التعلّم التلوي: الهدف الأوسع المتمثل في تعلم التكيّف السريع مع المهام الجديدة. والشبكات الفائقة إحدى طرق تطبيقه، إذ تحوّل وصف المهمة أو أمثلة قليلة مباشرةً إلى أوزان.
- مزيج الخبراء (MoE): يوجّه كل مدخل إلى عدد قليل من شبكات الخبراء الفرعية الثابتة العديدة. أما الشبكة الفائقة فتحسب أوزانًا جديدة لكل مدخل أو مهمة بدلًا من الاختيار من بين أوزان مخزنة.
- مبرمجو الأوزان السريعة: شبكات تكتب الأوزان قصيرة الأمد لشبكة أخرى أثناء معالجة تسلسل، وهي فكرة تعود إلى أوائل التسعينيات. ويكافئ الانتباه الذاتي الخطي في Transformers رسميًا مبرمج أوزان سريعة من هذا النوع.










