Ada "makan siang gratis" untuk fine-tuning model besar, di mana satu baris kode dapat meningkatkan kinerja setidaknya 10%.
Bahkan ada dua kali lipat kinerja pada Llama 2 dengan parameter 7B, dan Mistral juga melihat peningkatan seperempat.
Meskipun metode ini digunakan selama fase fine-tuning yang diawasi, model RLHF juga dapat memperoleh manfaat darinya.
来自马里兰州大学、纽约大学等机构的研究人员提出了名为NEFT(une) Metode fine-tuning.
Ini adalah teknik regularisasi baru yang dapat digunakan untuk meningkatkan kinerja model fine-tuned supervised (SFT).
Metode ini telah dimasukkan dalam pustaka TRL oleh HuggingFace dan dapat dipanggil dengan menambahkan baris kode tambahan untuk diimpor.
NEFT tidak hanya mudah dioperasikan, tetapi juga tidak menambah biaya yang signifikan, dan penulis menyebutnya "makan siang gratis."
Beberapa netizen mencoba menyempurnakan Mistral-7B berdasarkan Guanaco (model keluarga alpaka) dengan cara ini, dan peningkatan kinerjanya jelas.
Jadi, bagaimana NEFTune "darah" sejumlah besar model besar dengan satu baris kode?
Tambahkan noise ke model
Nama lengkap NEFTune adalah Noisy Embedding Fine Tuning, yang merupakan singkatan dari "Embedded Tuning with Noise".
Pengembang percaya bahwa overfitting adalah faktor utama yang membatasi kinerja model besar, sehingga metode menambahkan noise ke lapisan embedding selama fase pelatihan diadopsi untuk menghindari terjadinya overfitting, sehingga meningkatkan kinerja.
Secara khusus, teks dalam database pelatihan pertama-tama diberi token dan diubah menjadi vektor penyematan.
Sistem kemudian secara acak menghasilkan vektor kebisingan dan menyesuaikan kebisingan ke intensitas yang ditetapkan dengan scaler.
Kebisingan berskala ditambahkan ke vektor penyematan sebagai input ke model, dan pelatihan dimulai.
Dengan setiap iterasi pelatihan, noise baru dihasilkan dan ditambahkan ke lapisan embedding.
dari torch.nn impor fungsional sebagai F
def NEFTune(model, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
jika model.training:
embed_init = orig_embed(x)
redup = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(redup)
mengembalikan embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
lain:
kembali orig_embed(x)
kembali new_func
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
model pengembalian
Dalam kode ini, parameter noise_alpha dalam fungsi NEFTune adalah intensitas noise (koefisien), dan mag_norm adalah rentang noise dalam proses aktual.
NEFT hanya menambahkan noise ke model selama proses pelatihan, dan tidak ada proses seperti itu dalam tahap inferensi, dan pernyataan if dalam kode memainkan peran ini.
Dalam mode pelatihan, nilai pengembalian fungsi new_func adalah lapisan penyematan setelah menambahkan noise.
Kode ini diposting untuk menjelaskan kebutuhan, jika Anda hanya ingin memanggil NEFT, Anda dapat memanggilnya langsung dari perpustakaan TRL tanpa menggunakan kode lengkap di atas.
Kode berikut adalah contoh penyempurnaan model OPT-350M:
dari himpunan data impor load_dataset
dari trl impor SFTTrainer
himpunan data = load_dataset("imdb", split="kereta")
Dalam hal dataset, pengembang telah menggunakan total empat dataset berbeda seperti Alpaca dan ShareGPT untuk menyempurnakannya.
Menurut penulis, alasan untuk memilih data ini termasuk bahwa mereka lebih terkenal, telah SOTA, dan sebagainya.
Selain itu, karena pertimbangan performa perangkat keras, himpunan data dialog satu putaran dipilih selama percobaan.
Jadi, bagaimana kinerja model besar setelah penyetelan dengan metode NEFT?
Performa hingga 1x lebih baik
Tim peneliti terutama menguji kualitas teks dan kemampuan dialog yang dihasilkan sebelum dan sesudah penyetelan model.
Kualitas Cina-nya terutama didasarkan pada dataset Aplaca, dinilai menggunakan ChatGPT dan GPT-4.
Model yang digunakan sebagai referensi adalah Text-Davinci-003, dan proporsi model terlatih yang mengungguli TD3 adalah indeks evaluasi.
Untuk menghemat sumber daya, tim peneliti pertama-tama menggunakan ChatGPT untuk menentukan apakah akan mengevaluasi atau memanggil GPT-4 sendiri, dan dalam beberapa kasus dinilai secara manual.
Hasil Dalam himpunan data pelatihan yang berbeda, Llama 2 memiliki peningkatan kinerja setidaknya 10% setelah penyesuaian, dan langsung digandakan pada himpunan data Alpaka.
Diluncurkan ke OPT dan Llama 1, pendekatan NEFT juga dapat membawa beberapa peningkatan kinerja.
Tugas yang digunakan untuk mengevaluasi kemampuan obrolan model adalah OpenLLM Leadorboard.
Ditemukan bahwa kemampuan obrolan model penyesuaian NEFT juga lebih ditingkatkan dibandingkan dengan Evol-Instruct.
Penulis juga menilai apakah meningkatkan kualitas teks dan kemampuan obrolan tanpa peningkatan biaya yang signifikan akan menyebabkan penurunan kemampuan lain.
Hasil penelitian menunjukkan bahwa metode NEFT tidak berpengaruh signifikan terhadap kemampuan model lainnya pada kumpulan data dan model yang berbeda.
Selama percobaan, penulis juga menemukan bahwa teks yang dihasilkan oleh model tidak menyalin data pelatihan, menunjukkan bahwa model memiliki kemampuan generalisasi tertentu.
Untuk mengonfirmasi hal ini, penulis mengevaluasi kehilangan model dan menemukan bahwa kehilangan himpunan data pengujian lebih rendah daripada data pelatihan, mengonfirmasi tampilan ini.
Selain itu, penulis menemukan bahwa setelah penyesuaian NEFT, teks yang dihasilkan oleh model tidak hanya meningkat dalam kualitas dan panjang, tetapi juga meningkatkan konten tanpa pengulangan.
Untuk memastikan bahwa peningkatan kualitas teks disebabkan oleh penambahan noise dan bukan oleh peningkatan panjang teks, para peneliti juga melakukan eksperimen ablasi.
Hasilnya menunjukkan bahwa hanya memaksa model untuk menghasilkan teks yang lebih panjang tidak dapat mencapai efek NEFT.
Alamat kertas:
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Satu baris kode meningkatkan kinerja model besar sebesar 10%, pengembang: makan siang gratis
Sumber asli: Qubits
Ada "makan siang gratis" untuk fine-tuning model besar, di mana satu baris kode dapat meningkatkan kinerja setidaknya 10%.
Bahkan ada dua kali lipat kinerja pada Llama 2 dengan parameter 7B, dan Mistral juga melihat peningkatan seperempat.
Meskipun metode ini digunakan selama fase fine-tuning yang diawasi, model RLHF juga dapat memperoleh manfaat darinya.
Ini adalah teknik regularisasi baru yang dapat digunakan untuk meningkatkan kinerja model fine-tuned supervised (SFT).
NEFT tidak hanya mudah dioperasikan, tetapi juga tidak menambah biaya yang signifikan, dan penulis menyebutnya "makan siang gratis."
Tambahkan noise ke model
Nama lengkap NEFTune adalah Noisy Embedding Fine Tuning, yang merupakan singkatan dari "Embedded Tuning with Noise".
Pengembang percaya bahwa overfitting adalah faktor utama yang membatasi kinerja model besar, sehingga metode menambahkan noise ke lapisan embedding selama fase pelatihan diadopsi untuk menghindari terjadinya overfitting, sehingga meningkatkan kinerja.
Sistem kemudian secara acak menghasilkan vektor kebisingan dan menyesuaikan kebisingan ke intensitas yang ditetapkan dengan scaler.
Kebisingan berskala ditambahkan ke vektor penyematan sebagai input ke model, dan pelatihan dimulai.
Dengan setiap iterasi pelatihan, noise baru dihasilkan dan ditambahkan ke lapisan embedding.
dari torch.nn impor fungsional sebagai F
def NEFTune(model, noise_alpha=5)
def noised_embed(orig_embed, noise_alpha):
def new_func(x):
jika model.training:
embed_init = orig_embed(x)
redup = torch.tensor(embed_init.size(1) * embed_init.size(2))
mag_norm = noise_alpha/torch.sqrt(redup)
mengembalikan embed_init + torch.zeros_like(embed_init).uniform_(-mag_norm, mag_norm)
lain:
kembali orig_embed(x)
kembali new_func
model.base_model.model.model.embed_tokens.forward = noised_embed(model.base_model.model.model.embed_tokens, noise_alpha)
model pengembalian
Dalam kode ini, parameter noise_alpha dalam fungsi NEFTune adalah intensitas noise (koefisien), dan mag_norm adalah rentang noise dalam proses aktual.
NEFT hanya menambahkan noise ke model selama proses pelatihan, dan tidak ada proses seperti itu dalam tahap inferensi, dan pernyataan if dalam kode memainkan peran ini.
Dalam mode pelatihan, nilai pengembalian fungsi new_func adalah lapisan penyematan setelah menambahkan noise.
Kode ini diposting untuk menjelaskan kebutuhan, jika Anda hanya ingin memanggil NEFT, Anda dapat memanggilnya langsung dari perpustakaan TRL tanpa menggunakan kode lengkap di atas.
Kode berikut adalah contoh penyempurnaan model OPT-350M:
dari himpunan data impor load_dataset
dari trl impor SFTTrainer
himpunan data = load_dataset("imdb", split="kereta")
pelatih = SFTTrainer(
"Facebook/OPT-350M",
train_dataset=himpunan data,
dataset_text_field="teks",
max_seq_length=512,
)
pelatih.kereta()
Dalam hal dataset, pengembang telah menggunakan total empat dataset berbeda seperti Alpaca dan ShareGPT untuk menyempurnakannya.
Menurut penulis, alasan untuk memilih data ini termasuk bahwa mereka lebih terkenal, telah SOTA, dan sebagainya.
Selain itu, karena pertimbangan performa perangkat keras, himpunan data dialog satu putaran dipilih selama percobaan.
Jadi, bagaimana kinerja model besar setelah penyetelan dengan metode NEFT?
Performa hingga 1x lebih baik
Tim peneliti terutama menguji kualitas teks dan kemampuan dialog yang dihasilkan sebelum dan sesudah penyetelan model.
Kualitas Cina-nya terutama didasarkan pada dataset Aplaca, dinilai menggunakan ChatGPT dan GPT-4.
Model yang digunakan sebagai referensi adalah Text-Davinci-003, dan proporsi model terlatih yang mengungguli TD3 adalah indeks evaluasi.
Untuk menghemat sumber daya, tim peneliti pertama-tama menggunakan ChatGPT untuk menentukan apakah akan mengevaluasi atau memanggil GPT-4 sendiri, dan dalam beberapa kasus dinilai secara manual.
Hasil Dalam himpunan data pelatihan yang berbeda, Llama 2 memiliki peningkatan kinerja setidaknya 10% setelah penyesuaian, dan langsung digandakan pada himpunan data Alpaka.
Ditemukan bahwa kemampuan obrolan model penyesuaian NEFT juga lebih ditingkatkan dibandingkan dengan Evol-Instruct.
Hasil penelitian menunjukkan bahwa metode NEFT tidak berpengaruh signifikan terhadap kemampuan model lainnya pada kumpulan data dan model yang berbeda.
Untuk mengonfirmasi hal ini, penulis mengevaluasi kehilangan model dan menemukan bahwa kehilangan himpunan data pengujian lebih rendah daripada data pelatihan, mengonfirmasi tampilan ini.
Untuk memastikan bahwa peningkatan kualitas teks disebabkan oleh penambahan noise dan bukan oleh peningkatan panjang teks, para peneliti juga melakukan eksperimen ablasi.
Hasilnya menunjukkan bahwa hanya memaksa model untuk menghasilkan teks yang lebih panjang tidak dapat mencapai efek NEFT.