Model Editing
Model düzenleme, yeniden eğitim yapmadan ve ilgisiz çıktıları etkilemeden eğitilmiş bir modelin belirli bir bilgisini veya davranışını, örneğin tek bir LLM yanıtını değiştirir.
Model düzenleme, eğitilmiş bir modelde belirli bir olguyu veya davranışı yeniden eğitim yapmadan ve ilgisiz girdilerdeki çıktıları değiştirmeden hedefli biçimde değiştirmektir. Örneğin, bir büyük dil modelinin (LLM) "Space Needle'ın bulunduğu şehir" sorusuna verdiği yanıt değiştirilebilir. Bu yöntem çoğunlukla LLM'lerde olgusal bilgiyi düzeltmek, güncellemek veya eklemek için kullanılır; çünkü tam yeniden eğitim çok pahalıdır ve tek bir örnekle yapılan yalın ince ayar genellikle aşırı öğrenmeye veya diğer bilgilerin zarar görmesine neden olur. Bir düzenleyici ya model ağırlıklarında küçük, yerel bir değişiklik hesaplar ya da düzenlemeyi ağırlıkların dışında saklayıp ilgili girdileri bu değişikliğe yönlendirir. En bilinen yöntem olan Rank-One Model Editing (ROME), Kevin Meng, David Bau, Alex Andonian ve Yonatan Belinkov tarafından geliştirilmiş ve NeurIPS 2022'de sunulan GPT'de Olgusal İlişkileri Bulma ve Düzenleme çalışmasında tanıtılmıştır.
Model Düzenleme Nasıl Çalışır#
Bir düzenleme isteği, genellikle bir özne ve bir ilişkiden oluşan girdiyi ve yeni çıktıyı belirtir; örneğin Space Needle'ın şehrini Seattle'dan Paris'e değiştirmek. Düzenleyiciler birkaç aileye ayrılır:
- Önce bul, sonra düzenle: ROME, GPT modellerinin bir olguyu nerede hatırladığını bulmak için önce gizli durumları bozup geri yükleyen, yorumlanabilirlik tekniği olan nedensel izlemeyi kullanır. Belirleyici hesaplama, ağın ortasındaki ileri beslemeli (MLP) katmanlarda, öznenin son belirtecinde yer alır. ROME, bir MLP'nin çıktı izdüşümünü anahtar-değer belleği olarak ele alır ve kapalı biçimli rank-one ağırlık güncellemesiyle yeni olguyu ekler; GPT-2 XL'de 48 katmanın 18. katmanını düzenler. MEMIT, binlerce olguyu aynı anda eklemek için güncellemeyi birkaç katmana yayar.
- Öğrenilmiş düzenleyiciler: MEND, düzenleme örneğinin gradyanını düşük rank'lı bir ağırlık güncellemesine dönüştüren küçük bir hiper ağ eğitir; bu sayede milyarlarca parametreli modellerde düzenlemeler hızlı kalır.
- Bellek tabanlı düzenleyiciler: SERAC, düzenlemeleri açık bir bellekte saklar ve düzenlemeyle ilgili girdileri küçük bir karşıolgusal modele göndermek için kapsam sınıflandırıcısı kullanır; böylece temel ağırlıklar değişmeden kalır. GRACE, uzun düzenleme dizileri için bir katmana ayrık anahtar-değer adaptörlerinden oluşan bir kod kitabı ekler. Getirme destekli üretimin yaptığı gibi yeni olguyu isteme koymak, bu tür düzenleyicilerin en basitidir.
ROME'un güncellemesi, doğrusal katmanların bir özelliğine dayanır: W ağırlık matrisi depolanmış anahtarları değerlere eşler; yeni bir k* anahtarına yeni bir v* değeri vermek için rank-one matris eklenebilir. ROME, katmanın hâlihazırda gördüğü anahtarların ters kovaryansı C ile güncellemeyi ağırlıklandırır. Bu değer, Wikipedia metinlerinden alınan bir örnek üzerinden tahmin edilir ve değişikliği mevcut anahtarların kullandığı yönlerden uzağa taşır. Bu PyTorch örneği, 5.000 anahtar depolayan rastgele bir katmana bu güncellemeyi uygular ve kovaryansı göz ardı eden yalın rank-one güncellemesiyle karşılaştırır:
import torch
torch.manual_seed(0)
scales = torch.logspace(0, -2, 256) # key dimensions with very different variances, as in real activations
keys = torch.randn(5000, 256) * scales # keys of 5,000 facts the layer already stores
W = torch.randn(128, 256) # the layer maps each key to a value
C = keys.T @ keys / len(keys) # second-moment statistics of the stored keys
k_new = torch.randn(256) * scales # key of the subject to edit
v_new = W @ keys[0] # new value: one already stored for another subject, as in "Seattle" -> "Paris"
# Plain rank-one update vs. ROME's update, which steers the change away from directions stored keys use
plain = W + torch.outer(v_new - W @ k_new, k_new) / (k_new @ k_new)
c_inv_k = torch.linalg.solve(C, k_new)
rome = W + torch.outer(v_new - W @ k_new, c_inv_k) / (k_new @ c_inv_k)
for name, edited in [("Plain rank-one", plain), ("ROME", rome)]:
error = (edited @ k_new - v_new).norm() / v_new.norm()
drift = ((keys @ (edited - W).T).norm(dim=1) / (keys @ W.T).norm(dim=1)).median()
print(f"{name}: new-fact error {error:.4f}, median change on stored facts {drift:.2%}")Her iki güncelleme de yeni anahtarı tam olarak yeni değerine eşler; hata 0.0000 olur. Yalın güncelleme, depolanan 5.000 anahtarın medyan çıktısını 10.99% kadar, ROME'un kovaryans ağırlıklı güncellemesi ise 5.02% kadar değiştirir; dolayısıyla düzenleme, katmanın zaten bildiklerinin daha azını bozar.
Bir Düzenlemeyi Değerlendirme#
Düzenlemeler aynı anda birkaç özelliğe göre değerlendirilir. Güvenilirlik, düzenlenen girdinin artık yeni yanıtı verip vermediğini; genelleme, başka sözcüklerle ifade edilen girdilerin de verip vermediğini; özgüllük olarak da adlandırılan yerellik, ilgisiz girdilerin eski yanıtlarını koruyup korumadığını; taşınabilirlik ise olguya bağlı akıl yürütmenin bu olguyu izleyip izlemediğini sorgular. ROME'un yazarları, bunları birlikte ölçmek için 21.919 karşıolgusal düzenleme içeren CounterFact veri kümesini oluşturdu; çünkü önceki kıyaslamalar, yöntemlerin genellemeyi özgüllük karşılığında fark edilmeden takas etmesine olanak tanıyordu.
Düzenlemeler, daha zor testlerde sıklıkla başarısız olur. RippleEdits kıyaslamasındaki 5.000 düzenlemede önde gelen düzenleyiciler, düzenlenen olguyla mantıksal olarak bağlantılı olguları tutarlı biçimde değiştiremedi; basit bir bağlam içi düzenleme temel çizgisi en yüksek puanı aldı. Gupta ve arkadaşları, ROME ile MEMIT'i art arda uygulamanın modelin önceki düzenlemeleri ve sonraki becerileri unutmasına yol açtığını; bunun önce aşamalı, sonra ani biçimde gerçekleştiğini ve modelin özümseyebileceği düzenleme sayısını sınırladığını buldu.
Görme Modellerini Düzenleme#
Aynı rank-one mekanizması görüntülere de uygulanır. Santurkar ve arkadaşları, yeni eğitim verisi toplamadan, bir katmanın görsel bir kavrama uyguladığı kuralı yeniden yazarak görüntü sınıflandırıcılarını düzenledi. Örneğin, kar temsilini yol temsiline eşleyerek modelin karlı yollardaki araçları tanımasını sağladılar. Ultralytics YOLOE, dışa aktarma sırasında kendi tespit başlığında gradyansız bir düzenleme yapar: set_classes() ile yapılandırılan sınıflar, her sınıflandırma dalının son evrişimine çarpan olarak uygulanır; böylece dışa aktarılan model, eğitim ve metin kodlayıcısı olmadan yeni sözcük dağarcığını algılar.
Model Düzenleme ve İlgili Kavramlar#
- İnce ayar: Genel davranışı değiştirmek için bir veri kümesinden birçok ağırlığı günceller. Düzenleme tek bir girdi-çıktı çiftini hedefler ve diğer her şeyi korumaya çalışır.
- Getirme destekli üretim (RAG): Her istekte güncel olguları isteme ekler ve modeli değiştirmeden bırakır; böylece değişikliği geri almak kolaylaşır ve çok sayıda olgu desteklenebilir.
- Makineyle unutma: Belirli eğitim verilerinin etkisini ortadan kaldırır. Düzenleme bir olguyu değiştirir veya ekler; bir olguyu silen düzenleme, unutma yöntemlerinden biridir.
- Görev aritmetiği: İnce ayarı yapılmış tüm görevlerin ağırlık değişikliklerini ekler veya çıkarır. Model düzenleme tek bir olgu düzeyinde çalışır.
- Mekanik yorumlanabilirlik: Bir modelin hesaplamayı nasıl yaptığını açıklar. ROME'un nedensel izleme yöntemi bu alandan gelir ve düzenlemenin hangi katmanı hedefleyeceğine karar verir.










