Model Soups
تحسب حساءات النماذج متوسط أوزان نماذج ضُبطت بدقة انطلاقًا من نموذج مدرّب مسبقًا واحد بمعلمات فائقة مختلفة، ما يرفع الدقة دون كلفة استدلال إضافية.
مزج النماذج نموذج واحد يُنشأ بحساب متوسط أوزان عدة نماذج خضعت لـالضبط الدقيق انطلاقًا من النموذج نفسه المدرّب مسبقًا، باستخدام معلمات فائقة مختلفة. ومن المعتاد بعد استكشاف المعلمات الفائقة الاحتفاظ بالتشغيل ذي أفضل نتيجة تحقق والتخلص من بقية التشغيلات. ويعيد المزج استخدام التشغيلات المستبعدة: فبما أن كل تشغيل بدأ من أوزان النموذج المدرب مسبقًا نفسه، تظل معلماته متطابقة المواضع، وغالبًا ما يحقق متوسطها نتيجة أعلى من أي منها، مع كلفة تشغيل لا تتجاوز كلفة نموذج واحد. وقدّم ميتشل وورتسمان وزملاؤه في جامعة واشنطن وGoogle وMeta AI وجامعة تل أبيب وجامعة كولومبيا هذه الطريقة في مزج النماذج: يؤدي حساب متوسط أوزان عدة نماذج مضبوطة بدقة إلى تحسين الدقة من دون زيادة زمن الاستدلال، المنشورة في ICML 2022. وحقق مزج جشع لـ58 نموذجًا من ViT-G/14 ضُبطت بدقة ودُربت مسبقًا على مجموعة بيانات JFT-3B من Google، دقة عليا بلغت 90.94% على ImageNet، وهي نتيجة متقدمة على أحدث النتائج آنذاك.
المزج المنتظم والمزج الجشع#
لا ينقل الضبط الدقيق شبكة كبيرة مدربة مسبقًا إلا مسافة قصيرة في فضاء الأوزان، لذا تميل النماذج المضبوطة بدقة انطلاقًا منها باستخدام معدلات تعلم أو زيادة بيانات أو تنعيم التسميات أو مدد تدريب مختلفة إلى الاستقرار في المنطقة الواسعة نفسها ذات الخسارة المنخفضة. ويقع متوسطها قرب وسط تلك المنطقة، ما يعمم على نحو أفضل من أطرافها. وتحدد الورقة وصفتين أساسيتين:
- المزج المنتظم: يحسب متوسط جميع النماذج المضبوطة بدقة. وينجح عندما تكون جميع المكونات جيدة، لكن التشغيل بمعدل تعلم مرتفع جدًا قد يخرج عن المنطقة المشتركة، ويؤدي إدراجه في المتوسط إلى خفض الدقة.
- المزج الجشع: يرتب النماذج حسب دقتها على بيانات تحقق محجوبة، ويبدأ بالأفضل، ثم يضيف كل نموذج تالٍ فقط إذا لم تنخفض دقة تحقق المزج بعد حساب المتوسط. وبما أنه يبدأ بأفضل نموذج، لا يكون المزج الجشع أسوأ من ذلك النموذج على مجموعة التحقق.
في نموذج CLIP ViT-B/32 المضبوط بدقة على ImageNet باستخدام 72 إعدادًا عشوائيًا للمعلمات الفائقة، حقق أفضل نموذج منفرد 80.38%. وحقق المزج المنتظم لجميع النماذج الـ72 نسبة 79.97%، لأن بعض التشغيلات خرجت عن المنطقة المشتركة منخفضة الخسارة، بينما احتفظ المزج الجشع بخمسة نماذج وحقق 81.03%. وعلى خمس مجموعات اختبار لانزياح التوزيع، مثل رسومات ImageNet وتصييراته، بلغ متوسط المزج الجشع 50.75% مقابل 47.83% لأفضل نموذج منفرد. وتذكر الورقة أيضًا مكاسب لنموذج ALIGN، ومكاسب أقل عند ضبط BERT وT5 بدقة لتصنيف النصوص.
يدرّب هذا المثال باستخدام PyTorch مصنفًا صغيرًا مسبقًا على أرقام مكتوبة بخط اليد بدقة 8x8، ثم يضبط تسع نسخ بدقة باستخدام معدلات تعلم وزيادات لضوضاء الإدخال مختلفة، ويقارن مزجها المنتظم بمجموعة تضم النماذج التسعة كلها:
import copy
import torch
from sklearn.datasets import load_digits
from torch import nn
torch.manual_seed(0)
X, y = load_digits(return_X_y=True)
order = torch.randperm(len(X))
X, y = torch.tensor(X / 16, dtype=torch.float32)[order], torch.tensor(y)[order]
def train(model, first, last, lr, noise, seed):
"""Train a copy of the model on random batches from rows first to last, adding input noise."""
model, generator = copy.deepcopy(model), torch.Generator().manual_seed(seed)
optimizer = torch.optim.SGD(model.parameters(), lr=lr, momentum=0.9)
for _ in range(300):
rows = torch.randint(first, last, (32,), generator=generator)
optimizer.zero_grad()
inputs = X[rows] + noise * torch.randn(32, 64, generator=generator)
nn.functional.cross_entropy(model(inputs), y[rows]).backward()
optimizer.step()
return model
def accuracy(logits):
"""Return the fraction of the 997 test digits classified correctly."""
return (logits.argmax(1) == y[800:]).float().mean().item()
base = train(nn.Sequential(nn.Linear(64, 256), nn.ReLU(), nn.Linear(256, 10)), 0, 300, 0.05, 0, 0) # pretrained
sweep = [(lr, noise) for lr in (0.01, 0.03, 0.1) for noise in (0, 0.2, 0.4)] # 9 hyperparameter settings
ingredients = [train(base, 300, 500, lr, noise, seed) for seed, (lr, noise) in enumerate(sweep)]
# Uniform soup: average every weight tensor of the nine fine-tuned models
soup = copy.deepcopy(base)
soup.load_state_dict({k: sum(m.state_dict()[k] for m in ingredients) / 9 for k in soup.state_dict()})
with torch.no_grad():
singles = [accuracy(m(X[800:])) for m in ingredients]
print(f"Fine-tuned models: {min(singles):.3f} to {max(singles):.3f}, mean {sum(singles) / 9:.3f}")
print(f"Uniform soup: {accuracy(soup(X[800:])):.3f}")
print(f"Ensemble of 9: {accuracy(sum(m(X[800:]).softmax(1) for m in ingredients)):.3f}")تتراوح نتائج النماذج التسعة المضبوطة بدقة بين 0.881 و0.936 على الأرقام الـ997 المحجوبة، بمتوسط 0.917. ويحقق مزجها المنتظم 0.934، قريبًا من أفضل تشغيل منفرد، وأعلى قليلًا من نتيجة المجموعة 0.930، التي تتطلب تسع تمريرات أمامية لكل صورة، بينما يحتاج المزج إلى تمريرة واحدة.
مزج النماذج في التطبيق العملي#
يكون المزج أنفع عندما يُجرى استكشاف للمعلمات أصلًا، مثلًا عند إجراء التعلم بالنقل على محول الرؤية (ViT) أو نموذج أساس آخر لمهمة تصنيف الصور جديدة. ويُعد ضبط المعلمات الفائقة في Ultralytics YOLO استكشافًا من هذا النوع: إذ يدرّب model.tune() نموذجًا واحدًا لكل مجموعة من المعلمات الفائقة المعدّلة، ويحذف التشغيلات التي لم تعد الأفضل حاليًا توفيرًا لمساحة التخزين، ولا يحتفظ إلا بتشغيل وأوزان التكرار الأفضل؛ وهي خطوة اختيار الأفضل التي يحل المزج محلها.
يجب أن تتشارك المكونات المعمارية ونقطة البداية المدربة مسبقًا، لأن الشبكات المدربة انطلاقًا من تهيئات عشوائية مختلفة تخزن السمات نفسها في وحدات مخفية مختلفة، ويؤدي حساب متوسطها إلى تدمير الدقة. ولا تكلف الأوزان النهائية شيئًا إضافيًا أثناء الاستدلال، لذا يحافظ المزج على زمن استدلال نموذج واحد وذاكرته.
مزج النماذج مقارنةً بالطرق ذات الصلة#
- مجموعة النماذج: تحسب متوسط تنبؤات عدة نماذج، لذا تزداد كلفة الاستدلال مع كل نموذج مضاف. وفي استكشاف CLIP ViT-B/32، حققت مجموعة لوغيتية 81.19% على ImageNet، متجاوزةً المزج الجشع البالغ 81.03% بقليل، مع تشغيل كل نموذج عضو لكل صورة.
- دمج النماذج: العائلة الأوسع من طرق جمع الأوزان. والمزج هو الحالة التي ضُبطت فيها جميع النماذج بدقة على المهمة نفسها، بينما تضيف حسابات المهام نماذج ضُبطت بدقة على مهام مختلفة.
- حساب متوسط الأوزان ضمن تشغيل واحد: يحسب متوسط الأوزان العشوائي (SWA) والمتوسط المتحرك الأسي (EMA) للأوزان متوسط نقاط التحقق على مسار تدريب واحد. أما المزج فيحسب متوسط تشغيلات مستقلة، وقد وجدت الورقة أن مزج النماذج التي تستخدم EMA أو SWA يرفع الدقة أيضًا، لذا تتراكم فوائد نوعي حساب المتوسط.
- WiSE-FT: يستوفي بين نموذج من دون تدريب على أمثلة مسبقة ونسخته المضبوطة بدقة، أي مزج من مكونين يحافظ على قدر أكبر من متانة النموذج المدرب مسبقًا في مواجهة انزياح التوزيع.










