PEFT documentation

KaSA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

KaSA

Ini adalah varian dari LoRA, sehingga semua yang mungkin dilakukan dengan LoRA berlaku untuk metode ini kecuali dinyatakan lain di halaman ini.

KaSA (Knowledge-aware Singular-value Adaptation) adalah varian LoRA yang menggunakan dekomposisi nilai singular dari bobot dasar untuk menyaring pengetahuan yang tidak relevan dengan tugas dan memparametrisasi pembaruan dengan nilai singular yang dapat dipelajari. Ini mengubah LoRA vanilla dalam dua cara:

  1. Truncasi SVD berbasis pengetahuan pada bobot dasar yang dibekukan. Saat inisialisasi, bobot dasar W difaktorkan dengan SVD dan r komponen singular terkecil (“berisik”/ekor panjang) dibuang, menyisakan aproksimasi rank-(k - r) sebagai dasar baru yang dibekukan (k = min(in_features, out_features)). Cabang yang dapat dilatih kemudian mempelajari ulang pada subruas residual yang dibuang.
  2. Adaptasi nilai singular yang sadar pengetahuan. Pembaruan yang dapat dilatih diparametrisasi dalam bentuk SVD dengan diagonal nilai singular yang dapat dipelajari disisipkan di antara faktor LoRA: ΔW = scaling * B @ diag(ΔΣ) @ A, di mana ΔΣ (lora_diag) adalah vektor r yang dapat dipelajari dan merupakan satu-satunya parameter baru per lapisan.

Di PEFT, KaSA dikonfigurasi sebagai varian LoRA melalui argumen kasa_config pada LoraConfig:

from peft import KasaConfig, LoraConfig

config = LoraConfig(
    target_modules=["q_proj", "v_proj"],
    kasa_config=KasaConfig(beta=1e-4, gamma=1e-3),
)

Paper tersebut juga melatih dengan dua regularizer tambahan: penalti L2 pada nilai singular yang dapat dipelajari (diberi bobot beta) dan regularisasi ortogonal pada faktor adapter (diberi bobot gamma), yang secara lembut menegakkan semi-ortogonalitas yang diasumsikan oleh parametrisasi SVD. Hal ini tidak dapat disuntikkan secara otomatis oleh PEFT, sehingga selama pelatihan Anda harus menambahkannya ke loss tugas dengan memanggil LoraModel._get_kasa_loss() pada LoraModel yang mendasarinya:

task_loss = ...  # standard loss returned by your model
kasa_loss = model._get_kasa_loss()  # 0.0 if KaSA is not used
total_loss = task_loss + kasa_loss

Untuk penggunaan yang lebih rinci, lihat instruksi ini.

Catatan

  • KaSA saat ini hanya didukung pada lapisan linear LoRA standar, dan tidak pada lapisan dengan fan_in_fan_out=True (misalnya Conv1D di transformers).
  • Adaptor KaSA tidak dapat digabungkan dengan adaptor non-KaSA pada model yang sama, karena pemotongan bobot dasar akan mengubah bobot dasar di bawah adaptor lainnya. Beberapa adaptor KaSA diizinkan.
  • convert_to_lora tidak didukung: pembaruan KaSA bergantung pada lora_diag dan pada bobot dasar yang dipangkas, yang keduanya tidak dapat direpresentasikan dalam adapter LoRA biasa.
  • Truncasi SVD pada bobot dasar bersifat destruktif: menambahkan adapter KaSA secara permanen mengubah bobot beku dari layer tersebut. Menonaktifkan atau memuat ulang adapter tidak akan mengembalikan bobot dasar asli, dan merge yang diikuti unmerge akan menghasilkan bobot yang telah dipangkas, bukan bobot aslinya. Hal ini merupakan sifat bawaan dari metode ini. Simpan checkpoint asli jika Anda perlu memulihkan model dasar yang tidak dimodifikasi.
  • Memuat adapter KaSA yang telah dilatih dengan PeftModel.from_pretrained menerapkan kembali truncation yang sama pada bobot dasar yang baru dimuat, sehingga proses menyimpan dan memuat ulang tetap konsisten.
Update on GitHub