Garfield
YZF Admin
Adapter, dil modellerini yeni bir göreve uyarlamak için ana ağa eklenen küçük, eğitilebilir modüldür. Ana modelin ağırlıkları çoğunlukla dondurulur; görev için adapter parametreleri öğrenilir. Böylece her görevde bütün modelin ayrı bir kopyasını eğitmek yerine daha küçük bir uyarlama kaydı tutulabilir. Bu rehber, parametre verimli uyarlamadaki darboğaz adapter yaklaşımını anlatır.
Gizli temsilin son boyutu
Örneğin
Ana ağırlıkları dondurmak ile bütün ileri hesabı
Aşağıdaki kod yalnız şekil, residual bağlantı ve dondurma mekanizmasını gösterir. Rastgele oluşturulan doğrusal katman, önceden eğitilmiş dil modeli değildir; örnek dil anlama başarısı ölçmez ve model indirmez.
Gerçek uygulamada adapter'ın ana modelin hangi bloklarına yerleştirildiğini ve hangi modüllerin eğitildiğini kaydedin. Görev başarısını ayrı doğrulama verisinde ölçün; az parametre eğitmek, kötü veriyi veya yanlış hedef tanımını düzeltmez. Yaklaşımın birincil örneği Houlsby ve arkadaşlarının parametre verimli NLP uyarlama çalışmasıdır.
Hayır. Buradaki adapter, gizli temsile çalışan ek bir darboğaz modülüdür. LoRA ise seçilen ağırlık matrisleri için düşük rütbeli güncellemeler öğrenir. İkisi de parametre verimli uyarlama ailesindedir; aynı parametre dosyası veya yerleştirme biçimiyle birbirinin yerine kullanılmaz.
Darboğaz ve residual bağlantı nasıl çalışır?
Gizli temsilin son boyutu
d olsun. Adapter bu temsili daha küçük r boyutuna indirir, doğrusal olmayan bir dönüşüm uygular ve yeniden d boyutuna çıkarır. Yaygın akış h + up(activation(down(h))) biçimindedir. Toplama yapılabilmesi için yukarı projeksiyonun çıktısı ile h aynı şekle sahip olmalıdır.Örneğin
(batch, sequence, 8) giriş, r=2 ile içeride (batch, sequence, 2) olur ve çıkışta yeniden 8 özelliğe döner. Küçük r, daha az parametre demektir; daha iyi görev başarısını tek başına garanti etmez.Neyi dondurup neyi eğitirsiniz?
| Bileşen | Yaygın seçim | Kontrol |
|---|---|---|
| Ana model | Ağırlıklar dondurulur. | requires_grad=False ve optimizer dışında olmalıdır. |
| Adapter | Göreve göre eğitilir. | İndirgeme/yükseltme boyutları ve residual şekli eşleşmelidir. |
| Görev başlığı | Gerekiyorsa ayrıca eğitilir. | Çıkış sınıfları veya hedef şekliyle uyumlu olmalıdır. |
| Normalizasyon gibi ek parametreler | Seçilen yönteme göre açılabilir. | Hangi parametrelerin eğitildiğini açıkça kaydedin. |
Ana ağırlıkları dondurmak ile bütün ileri hesabı
no_grad() içine almak aynı şey değildir. Adapter'ın bulunduğu eğitim yolunda gradyan akışını keserseniz adapter da öğrenemeyebilir. Eğitilecek parametreleri seçin, optimizer'a bu parametreleri verin ve geri yayılım sonrası gradyanlarını kontrol edin.Küçük bir PyTorch örneği
Aşağıdaki kod yalnız şekil, residual bağlantı ve dondurma mekanizmasını gösterir. Rastgele oluşturulan doğrusal katman, önceden eğitilmiş dil modeli değildir; örnek dil anlama başarısı ölçmez ve model indirmez.
Python:
import torch
from torch import nn
class BottleneckAdapter(nn.Module):
def __init__(self, hidden_size=8, bottleneck_size=2):
super().__init__()
self.down = nn.Linear(hidden_size, bottleneck_size)
self.activation = nn.GELU()
self.up = nn.Linear(bottleneck_size, hidden_size)
def forward(self, h):
return h + self.up(self.activation(self.down(h)))
backbone = nn.Linear(8, 8)
for parameter in backbone.parameters():
parameter.requires_grad = False
model = nn.Sequential(backbone, BottleneckAdapter())
optimizer = torch.optim.AdamW(
(p for p in model.parameters() if p.requires_grad), lr=1e-3
)
x = torch.randn(3, 5, 8)
optimizer.zero_grad()
output = model(x)
loss = output.square().mean()
loss.backward()
optimizer.step()
print("Çıktı şekli:", tuple(output.shape)) # (3, 5, 8)
print("Eğitilebilir parametre:", sum(
p.numel() for p in model.parameters() if p.requires_grad
)) # 42
Gerçek uygulamada adapter'ın ana modelin hangi bloklarına yerleştirildiğini ve hangi modüllerin eğitildiğini kaydedin. Görev başarısını ayrı doğrulama verisinde ölçün; az parametre eğitmek, kötü veriyi veya yanlış hedef tanımını düzeltmez. Yaklaşımın birincil örneği Houlsby ve arkadaşlarının parametre verimli NLP uyarlama çalışmasıdır.
Adapter ile LoRA aynı mı?
Hayır. Buradaki adapter, gizli temsile çalışan ek bir darboğaz modülüdür. LoRA ise seçilen ağırlık matrisleri için düşük rütbeli güncellemeler öğrenir. İkisi de parametre verimli uyarlama ailesindedir; aynı parametre dosyası veya yerleştirme biçimiyle birbirinin yerine kullanılmaz.
Sık sorulan sorular
Son düzenleme: