Model Merging
Model birleştirme, tek bir temel modelden ince ayar yapılmış modellerin ağırlıklarını ek çıkarım maliyeti olmadan tek bir modelde bir araya getirir. Ortalama almayı ve görev aritmetiğini ele alır.
Model birleştirme, eğitilmiş iki veya daha fazla modelin ağırlıklarını genellikle parametrelerini ortalayarak veya toplayarak tek bir modelde birleştirir. Böylece birden fazla ağ çalıştırmaya veya tüm veriler üzerinde yeniden eğitim yapmaya gerek kalmadan sonuç her modelin yeteneklerini korur. Bu yöntem, modeller aynı mimariyi ve çoğu yöntemde ortak bir önceden eğitilmiş başlangıç modelini paylaştığında işe yarar: ince ayar her kopyayı ağırlık uzayında yalnızca kısa bir mesafe hareket ettirdiği için model ağırlıkları parametre parametre aynı hizadadır. Birleştirme, açık büyük dil modelleri (LLM'ler) oluşturmak ve LoRA adaptörlerini veya Stable Diffusion kontrol noktalarını bir araya getirmek için yaygın biçimde kullanılır. Meta'nın Llama 3 modeli, her aşamada farklı veriler veya hiperparametrelerle elde edilen modellerin eğitim sonrası ortalamasını aldı.
Model Birleştirme Nasıl Çalışır#
Birleştirme yöntemleri, neyi birleştirdikleri ve modeller arasındaki çelişkileri nasıl çözdükleri bakımından farklılık gösterir:
- Model çorbaları: Aynı temel modelden farklı hiperparametrelerle ince ayar yapılmış modellerin ağırlıklarını ortalar. İnce ayar yapılmış ViT-G modellerinden oluşturulan açgözlü bir çorba, ImageNet'te %90,94 top-1 doğruluğa ulaşarak o dönemde en iyi sonucu elde etti.
- Stokastik ağırlık ortalaması: Tek bir eğitim çalışmasının farklı noktalarında kaydedilen kontrol noktalarının ortalamasını alır; bu da kayıp yüzeyinin daha geniş ve daha düz bir bölgesine yerleşme eğilimindedir.
- Görev aritmetiği: Her ince ayarlı modelden temel modelin ağırlıklarını çıkararak bir görev vektörü elde eder; ardından becerileri birleştirmek için ölçeklenmiş görev vektörlerini temel modele ekler veya bir davranışı ortadan kaldırmak için vektörlerden birini çıkarır.
- TIES-Merging: Görev vektörleri arasındaki etkileşimi üç adımda azaltır: İnce ayar sırasında çok az değişen parametreleri sıfırlar, her parametre için bir işaret belirler ve yalnızca bu işaretle uyuşan değerleri birleştirir.
- DARE: Birleştirmeden önce her görev vektöründeki değerlerin çoğunu rastgele siler ve kalanları yeniden ölçeklendirir; böylece her görevin becerisini korurken gereksiz değişiklikleri ortadan kaldırır.
Tek bir eğitim çalışması boyunca ortalama alma, olağan eğitimin de bir parçasıdır. Ultralytics YOLO26 eğitimi, optimize edilen ağırlıkların yanında model ağırlıklarının üstel hareketli ortalamasını (EMA) tutar. Eğitim ilerledikçe bu ortalamanın azalma katsayısı 0.9999'a yaklaşır; kaydettiği last.pt ve best.pt kontrol noktaları bu ortalama modeli içerir.
Görev vektörü yöntemleri ortak bir yapı izler: Her ince ayarlı model, temel modelden farkı olarak ifade edilir; farklar arındırılıp birleştirilir ve sonuç temel modele eklenir:
mergekit gibi açık kaynaklı araçlar, iki model arasında küresel doğrusal enterpolasyon (SLERP) da dahil olmak üzere LLM'ler için bu tarifleri uygular.
Ortak Bir Başlangıç Noktası Neden Önemlidir#
Bir sinir ağının gizli birimleri, ağın hesapladığı sonucu değiştirmeden yeniden sıralanabilir. Bu nedenle farklı rastgele başlangıçlarla eğitilen iki ağ, aynı özelliği nadiren aynı konumda tutar ve bu ağların ortalamasını almak birbiriyle ilgisiz ağırlıkları karıştırır. Aynı temel modelden ince ayar yapılan modeller, temel modelin düzenini korur ve düşük kayıp bölgesinde kalır; dolayısıyla ortalamaları da çalışmaya devam eder. Bu örnek, el yazısı rakamlar üzerinde küçük bir PyTorch sınıflandırıcısı eğitir, kalan eğitim verilerinin farklı yarıları üzerinde iki kopyaya ince ayar yapar ve bu modellerin birleştirilmesini, farklı başlangıçlardan eğitilen iki modelin birleştirilmesiyle karşılaştırır:
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 mlp():
"""Return a small classifier for 8x8 digit images."""
return nn.Sequential(nn.Linear(64, 64), nn.ReLU(), nn.Linear(64, 64), nn.ReLU(), nn.Linear(64, 10))
def train(model, rows, steps):
"""Train a model with SGD on the given rows and return it."""
optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
for _ in range(steps):
optimizer.zero_grad()
nn.functional.cross_entropy(model(X[rows]), y[rows]).backward()
optimizer.step()
return model
base = train(mlp(), slice(0, 300), 400) # shared pretrained starting point
halves = (slice(300, 900), slice(900, 1500)) # two different fine-tuning datasets
for name, (a, b) in [
("fine-tuned from one base", [train(copy.deepcopy(base), rows, 100) for rows in halves]),
("trained from separate inits", [train(mlp(), rows, 400) for rows in halves]),
]:
# Merge: average every weight tensor of the two models
merged = copy.deepcopy(a)
merged.load_state_dict({k: (a.state_dict()[k] + b.state_dict()[k]) / 2 for k in a.state_dict()})
accuracy = [(m(X[1500:]).argmax(1) == y[1500:]).float().mean().item() for m in (a, b, merged)]
print(f"{name}: {accuracy[0]:.3f} and {accuracy[1]:.3f}, merged {accuracy[2]:.3f}")Eğitimde kullanılmayan 297 rakam üzerinde, aynı temel modelden ince ayar yapılan iki model 0.956 ve 0.946 puan alırken ortalamaları 0.970 puan alır; her iki modelden de yüksektir, çünkü her modelin verilerin kendi yarısından öğrendiklerini birleştirir. Farklı başlangıçlarla eğitilen iki model 0.946 ve 0.956 puan alır; ortalamalarıysa 0.808'e düşer. Git Re-Basin, bağımsız eğitilmiş modelleri birleştirmek için önce modellerden birinin gizli birimlerini diğerininkiyle eşleşecek şekilde permüte eder.
Model Birleştirme ve İlgili Kavramlar#
- Model topluluğu: Her modeli korur ve çıktıları birleştirir; bu nedenle bellek kullanımı ve çıkarım gecikmesi model sayısıyla birlikte artar. Birleştirilmiş model, tek bir modelin boyutuna ve hızına sahiptir.
- Bilgi damıtma: Bir veya daha fazla öğretmeni taklit etmesi için yeni bir öğrenci modeli eğitir; bu işlem eğitim verisi ve hesaplama gücü gerektirir. Birleştirme, mevcut ağırlıklar üzerinde doğrudan aritmetik işlem yapar.
- Çok görevli eğitim: Tek bir modeli tüm görevlerin verileriyle birlikte eğitir. Bu yaklaşım genellikle birleştirmenin, söz konusu verilere erişmeden ulaşmaya çalıştığı doğruluk düzeyini belirler.
- Federatif öğrenme: Her turda ayrı cihazlarda eğitilen modellerin ağırlıklarının ortalamasını alır. Her turda tüm istemciler aynı küresel modelden başlar; ortalama almayı mümkün kılan ortak başlangıç noktası budur.










