Bu, ince ayarlı denetimli (SFT) modellerin performansını artırmak için kullanılabilecek yeni bir düzenleme tekniğidir.
Bu yöntem HuggingFace tarafından TRL kütüphanesine dahil edilmiştir ve içe aktarılacak ek bir kod satırı eklenerek çağrılabilir.
NEFT'in kullanımı kolay olmakla kalmaz, aynı zamanda önemli maliyetler de getirmez ve yazarlar buna "bedava öğle yemeği" derler.
Bazı netizenler, Guanaco'ya (alpaka ailesinin bir modeli) dayalı Mistral-7B'ye bu şekilde ince ayar yapmaya çalıştı ve performans artışı açıktı.
Peki, NEFTune tek bir kod satırıyla çok sayıda büyük modeli nasıl "kanlandırır"?
Modele gürültü ekleyin
NEFTune'un tam adı, "Gürültülü Gömülü Ayar" anlamına gelen Gürültülü Gömme İnce Ayar'dır.
Geliştiriciler, aşırı öğrenmenin büyük modellerin performansını sınırlayan önemli bir faktör olduğuna inanmaktadır, bu nedenle aşırı öğrenmenin oluşmasını önlemek ve böylece performansı artırmak için eğitim aşamasında gömme katmanına gürültü ekleme yöntemi benimsenmiştir.
Özellikle, eğitim veritabanındaki metin önce belirteç haline getirilir ve bir ekleme vektörüne dönüştürülür.
Sistem daha sonra rastgele bir gürültü vektörü oluşturur ve gürültüyü bir ölçekleyici ile ayarlanan bir yoğunluğa ayarlar.
Ölçeklendirilmiş gürültü, modele girdi olarak gömme vektörüne eklenir ve eğitim başlar.
Her eğitim yinelemesinde yeni gürültü oluşturulur ve gömme katmanına eklenir.
torch.nn'den F olarak içe aktarma işlevi
def NEFTune(model, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
Def new_func(x):
eğer model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(karartma)
dönüş embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
başka:
Dönüş orig_embed(x)
new_func dönüş
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Dönüş modeli
Bu kodda, NEFTune işlevindeki noise_alpha parametresi gürültü yoğunluğudur (katsayı) ve mag_norm gerçek işlemdeki gürültü aralığıdır.
NEFT, modele yalnızca eğitim işlemi sırasında gürültü ekler ve çıkarım aşamasında böyle bir işlem yoktur ve koddaki if ifadesi bu rolü oynar.
Eğitim modunda, new_func işlevinin döndürülen değeri, gürültü eklendikten sonra gömme katmanıdır.
Bu kod, ihtiyacı açıklamak için gönderilmiştir, sadece NEFT'i aramak istiyorsanız, yukarıdaki kodun tamamını kullanmadan doğrudan TRL kütüphanesinden arayabilirsiniz.
Aşağıdaki kod, OPT-350M modelinin ince ayarına bir örnektir:
Veri kümelerinden içeri aktarma load_dataset
trl'den SFTTrainer'ı içe aktar
Veri kümeleri açısından geliştiriciler, ince ayar yapmak için Alpaca ve ShareGPT gibi toplam dört farklı veri kümesi kullandılar.
Yazarlara göre, bu verilerin seçilmesinin nedenleri arasında daha ünlü olmaları, SOTA olmaları vb.
Ek olarak, donanım performansı hususları nedeniyle, deney sırasında tek turlu diyalog veri kümeleri seçilmiştir.
Peki, büyük model NEFT yöntemi ile ayarlandıktan sonra nasıl bir performans sergiliyor?
1 kata kadar daha iyi performans
Araştırma ekibi esas olarak model ayarlamadan önce ve sonra oluşturulan metin kalitesini ve diyalog yeteneğini test etti.
Çince kalitesi, öncelikle ChatGPT ve GPT-4 kullanılarak değerlendirilen Aplaca veri kümesine dayanmaktadır.
Referans olarak kullanılan model Text-Davinci-003'tür ve TD3'ten daha iyi performans gösteren eğitilmiş modelin oranı değerlendirme indeksidir.
Araştırma ekibi, kaynaklardan tasarruf etmek için önce ChatGPT'yi GPT-4'ü değerlendirip değerlendirmeyeceklerini belirlemek için kullandı ve bazı durumlarda manuel olarak karar verdi.
Sonuçlar Farklı eğitim veri setlerinde, Llama 2, ayarlamadan sonra en az %10'luk bir performans artışına sahiptir ve Alpaca veri setinde doğrudan iki katına çıkar.
OPT ve Llama 1'e sunulan NEFT yaklaşımı, bazı performans iyileştirmeleri de getirebilir.
Modelin sohbet yeteneğini değerlendirmek için kullanılan görev OpenLLM Leadorboard'dur.
NEFT ayarlı modelin sohbet yeteneğinin de Evol-Instruct ile karşılaştırıldığında daha da geliştirildiği bulunmuştur.
Yazarlar ayrıca, maliyette önemli bir artış olmadan metin kalitesini ve sohbet yeteneklerini iyileştirmenin diğer yeteneklerde bir düşüşe yol açıp açmayacağını da değerlendiriyor.
Sonuçlar, NEFT yönteminin modelin farklı veri kümeleri ve modeller üzerindeki diğer yetenekleri üzerinde önemli bir etkisi olmadığını göstermektedir.
Deney sırasında yazarlar, model tarafından oluşturulan metnin eğitim verilerini kopyalamadığını ve modelin belirli genelleme yeteneklerine sahip olduğunu öne sürdüler.
Bunu doğrulamak için yazarlar model kaybını değerlendirdiler ve test veri kümesi kaybının eğitim verilerinden daha düşük olduğunu bularak bu görüşü doğruladılar.
Ek olarak, yazarlar NEFT ayarlamalarından sonra, model tarafından oluşturulan metnin yalnızca kalite ve uzunluk açısından artmakla kalmayıp, aynı zamanda içeriği tekrar etmeden artırdığını bulmuşlardır.
Metin kalitesindeki iyileşmenin, metin uzunluğundaki artıştan değil, gürültünün eklenmesinden kaynaklandığını doğrulamak için, araştırmacılar ayrıca ablasyon deneyleri yaptılar.
Sonuçlar, modeli daha uzun metin oluşturmaya zorlamanın NEFT'in etkisini sağlayamayacağını göstermektedir.
Bildiri Adresi:
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Bir satır kod, büyük model performansını %10 artırır, geliştirici: ücretsiz öğle yemeği
Orijinal kaynak: Qubits
Tek bir kod satırının performansı en az %10 artırabileceği büyük model ince ayarı için "ücretsiz öğle yemeği" vardır.
Llama 2'de 7B parametreleriyle performans iki katına çıktı ve Mistral de çeyreklik bir artış gördü.
Bu yöntem denetimli ince ayar aşamasında kullanılsa da, RLHF modelleri de bundan yararlanabilir.
Bu, ince ayarlı denetimli (SFT) modellerin performansını artırmak için kullanılabilecek yeni bir düzenleme tekniğidir.
NEFT'in kullanımı kolay olmakla kalmaz, aynı zamanda önemli maliyetler de getirmez ve yazarlar buna "bedava öğle yemeği" derler.
Modele gürültü ekleyin
NEFTune'un tam adı, "Gürültülü Gömülü Ayar" anlamına gelen Gürültülü Gömme İnce Ayar'dır.
Geliştiriciler, aşırı öğrenmenin büyük modellerin performansını sınırlayan önemli bir faktör olduğuna inanmaktadır, bu nedenle aşırı öğrenmenin oluşmasını önlemek ve böylece performansı artırmak için eğitim aşamasında gömme katmanına gürültü ekleme yöntemi benimsenmiştir.
Sistem daha sonra rastgele bir gürültü vektörü oluşturur ve gürültüyü bir ölçekleyici ile ayarlanan bir yoğunluğa ayarlar.
Ölçeklendirilmiş gürültü, modele girdi olarak gömme vektörüne eklenir ve eğitim başlar.
Her eğitim yinelemesinde yeni gürültü oluşturulur ve gömme katmanına eklenir.
torch.nn'den F olarak içe aktarma işlevi
def NEFTune(model, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
Def new_func(x):
eğer model.training:
embed_init = orig_embed(x)
dims = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(karartma)
dönüş embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
başka:
Dönüş orig_embed(x)
new_func dönüş
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
Dönüş modeli
Bu kodda, NEFTune işlevindeki noise_alpha parametresi gürültü yoğunluğudur (katsayı) ve mag_norm gerçek işlemdeki gürültü aralığıdır.
NEFT, modele yalnızca eğitim işlemi sırasında gürültü ekler ve çıkarım aşamasında böyle bir işlem yoktur ve koddaki if ifadesi bu rolü oynar.
Eğitim modunda, new_func işlevinin döndürülen değeri, gürültü eklendikten sonra gömme katmanıdır.
Bu kod, ihtiyacı açıklamak için gönderilmiştir, sadece NEFT'i aramak istiyorsanız, yukarıdaki kodun tamamını kullanmadan doğrudan TRL kütüphanesinden arayabilirsiniz.
Aşağıdaki kod, OPT-350M modelinin ince ayarına bir örnektir:
Veri kümelerinden içeri aktarma load_dataset
trl'den SFTTrainer'ı içe aktar
dataset = load_dataset("imdb", split="train")
eğitmen = SFTTrainer(
"Facebook/opt-350M",
train_dataset=veri kümesi,
dataset_text_field="metin",
max_seq_length=512,
)
eğitmen.eğit()
Veri kümeleri açısından geliştiriciler, ince ayar yapmak için Alpaca ve ShareGPT gibi toplam dört farklı veri kümesi kullandılar.
Yazarlara göre, bu verilerin seçilmesinin nedenleri arasında daha ünlü olmaları, SOTA olmaları vb.
Ek olarak, donanım performansı hususları nedeniyle, deney sırasında tek turlu diyalog veri kümeleri seçilmiştir.
Peki, büyük model NEFT yöntemi ile ayarlandıktan sonra nasıl bir performans sergiliyor?
1 kata kadar daha iyi performans
Araştırma ekibi esas olarak model ayarlamadan önce ve sonra oluşturulan metin kalitesini ve diyalog yeteneğini test etti.
Çince kalitesi, öncelikle ChatGPT ve GPT-4 kullanılarak değerlendirilen Aplaca veri kümesine dayanmaktadır.
Referans olarak kullanılan model Text-Davinci-003'tür ve TD3'ten daha iyi performans gösteren eğitilmiş modelin oranı değerlendirme indeksidir.
Araştırma ekibi, kaynaklardan tasarruf etmek için önce ChatGPT'yi GPT-4'ü değerlendirip değerlendirmeyeceklerini belirlemek için kullandı ve bazı durumlarda manuel olarak karar verdi.
Sonuçlar Farklı eğitim veri setlerinde, Llama 2, ayarlamadan sonra en az %10'luk bir performans artışına sahiptir ve Alpaca veri setinde doğrudan iki katına çıkar.
NEFT ayarlı modelin sohbet yeteneğinin de Evol-Instruct ile karşılaştırıldığında daha da geliştirildiği bulunmuştur.
Sonuçlar, NEFT yönteminin modelin farklı veri kümeleri ve modeller üzerindeki diğer yetenekleri üzerinde önemli bir etkisi olmadığını göstermektedir.
Bunu doğrulamak için yazarlar model kaybını değerlendirdiler ve test veri kümesi kaybının eğitim verilerinden daha düşük olduğunu bularak bu görüşü doğruladılar.
Metin kalitesindeki iyileşmenin, metin uzunluğundaki artıştan değil, gürültünün eklenmesinden kaynaklandığını doğrulamak için, araştırmacılar ayrıca ablasyon deneyleri yaptılar.
Sonuçlar, modeli daha uzun metin oluşturmaya zorlamanın NEFT'in etkisini sağlayamayacağını göstermektedir.