PEFT documentation
MonteCLoRA (Monte Carlo Low-Rank Adaptation)
MonteCLoRA (Monte Carlo Low-Rank Adaptation)
Ini adalah varian dari LoRA, sehingga semua yang mungkin dilakukan dengan LoRA berlaku untuk metode ini kecuali dinyatakan lain di halaman ini.
MonteCLoRA membungkus adapter LoRA standar dengan modul variational kecil yang mengambil sampel Monte Carlo dari gangguan stokastik di atas matriks A LoRA selama pelatihan. Secara konkret, metode ini mempelajari parameter variational (kovarians berbasis Wishart, istilah noise multivariate-normal per sampel, dan penimbangan Dirichlet di atas sampel-sampel tersebut) dan menambahkan gangguan rata-rata yang dihasilkan ke lora_A pada setiap forward pass. Istilah KL-divergence + entropy ditambahkan ke loss pelatihan untuk menjaga parameter variational ini tetap terikat pada prior yang masuk akal. Pada saat inferensi, sampler dinonaktifkan dan MonteCLoRA berperilaku persis seperti adapter LoRA biasa, sehingga tidak ada biaya inferensi tambahan atau parameter tambahan untuk digabungkan. Untuk metode lengkapnya, lihat https://huggingface.co/papers/2411.04358.
Anda mungkin perlu mempertimbangkan MonteCLoRA ketika:
- Anda melakukan fine-tuning pada dataset kecil atau berisik dan menginginkan regularisasi yang lebih kuat daripada LoRA biasa. Rata-rata Monte Carlo dan suku KL bersama-sama bertindak sebagai regularizer bergaya Bayesian.
- Anda ingin kalibrasi ketidakpastian / ketangguhan yang lebih baik dari adapter Anda tanpa membayar biaya tambahan pada waktu inferensi (mekanisme variational hanya digunakan saat pelatihan).
- LoRA vanilla mengalami overfitting dan menurunkan
ratau meningkatkanlora_dropouttidak cukup.
Anda kemungkinan tidak perlu MonteCLoRA ketika Anda memiliki dataset besar dan bersih serta LoRA vanilla sudah melatih dengan stabil — dalam kondisi tersebut, parameter variational tambahan sebagian besar hanya menambah overhead pelatihan tanpa banyak manfaat.
Untuk mengaktifkan MonteCLoRA, berikan MontecloraConfig ke LoraConfig:
from peft import LoraConfig, MontecloraConfig
monteclora_config = MontecloraConfig(
num_samples=8, # number of Monte Carlo samples per forward pass
sample_scaler=1e-4, # magnitude of the variational perturbation
kl_loss_weight=1e-5, # weight of the KL term added to the training loss
)
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
monteclora_config=monteclora_config,
)Selama pelatihan, Anda harus menambahkan kerugian regularisasi variasional ke kerugian tugas. Cara termudah adalah dengan memanggil LoraModel._get_monteclora_loss() pada LoraModel yang mendasarinya:
task_loss = ... # standard loss returned by your model
monteclora_loss = model._get_monteclora_loss() # 0.0 if MonteCLoRA is not used
total_loss = task_loss + monteclora_loss
total_loss.backward()Jika Anda melatih dengan Trainer HF, Anda cukup mencampurkan peft.helpers.MontecloraTrainerMixin yang melakukan hal ini untuk Anda di compute_loss:
from transformers import Trainer
from peft.helpers import MontecloraTrainerMixin
class MontecloraTrainer(MontecloraTrainerMixin, Trainer):
passContoh kerja lengkap tersedia di examples/monteclora_finetuning.
API
MonteCloraConfig
kelas peft.MontecloraConfig
< source >( num_samples: int = 8use_entropy: bool = Falsedirichlet_prior: float = 0.1sample_scaler: float = 0.0001kl_loss_weight: float = 1e-05buffer_size: int = 150 )
Parameter
- num_samples (
int) — Jumlah sampel Monte Carlo yang diambil per forward pass. Nilai yang lebih tinggi biasanya menghasilkan pelatihan yang lebih halus dan estimasi ketidakpastian yang lebih baik, tetapi meningkatkan penggunaan komputasi dan memori. Turunkan nilai ini jika pelatihan terlalu lambat atau terbatas oleh memori; naikkan jika pelatihan stabil dan Anda menginginkan rata-rata Monte Carlo yang lebih kuat. - use_entropy (
bool) — Apakah akan menambahkan istilah regularisasi entropi yang mencegah bobot Monte Carlo runtuh ke satu sampel. Aktifkan ini jika Anda mengamati sampler menjadi sangat tajam atau menginginkan regularisasi yang lebih kuat; biarkan nonaktif untuk meniru standar LoRA dengan lebih dekat. - dirichlet_prior (
float) — Parameter konsentrasi untuk prior Dirichlet atas bobot sampel/ahli. Nilai yang lebih besar mendorong bobot menjadi lebih seragam (regularisasi lebih kuat, sparsity lebih rendah), sedangkan nilai positif yang lebih kecil mendorong bobot yang lebih spars dan lebih tajam. Tingkatkan jika sampler mengalami overfitting; turunkan (tetapi pertahankan > 0) jika terlalu konservatif. - sample_scaler (
float) — Faktor penskalaan keseluruhan untuk perturbasi yang disampelkan dan diterapkan pada bobot LoRA. Meningkatkan nilai ini membuat noise Monte Carlo lebih kuat (regularisasi dan eksplorasi lebih banyak, tetapi juga ketidakstabilan pelatihan lebih tinggi); menurunkannya membuat perilaku lebih mendekati LoRA deterministik standar. Mengaturnya sangat dekat ke 0 sebagian besar menonaktifkan efek Monteclora. - kl_loss_weight (
float) — Bobot dari suku divergensi KL antara distribusi variasional dan priornya. Nilai yang lebih besar memberikan penekanan lebih pada pencocokan prior (regularisasi yang lebih kuat, berpotensi underfitting); nilai yang lebih kecil lebih mengandalkan likelihood data (regularisasi yang lebih lemah, berpotensi overfitting). Sesuaikan parameter ini jika Anda menemukan bahwa Monteclora melakukan regularisasi adapter secara berlebihan atau kurang. - buffer_size (
int) — Ukuran buffer internal yang digunakan oleh sampler Monte Carlo (misalnya untuk menyimpan statistik terbaru). Nilai yang lebih besar dapat menstabilkan parameter variational yang diperkirakan dengan biaya memori tambahan; kurangi nilai ini jika Anda memiliki keterbatasan memori.
Ini adalah kelas sub-konfigurasi untuk menyimpan konfigurasi Monteclora (Monte Carlo Low-Rank Adaptation). Monteclora memperkenalkan inferensi variasional ke dalam LoRA dengan menambahkan pengambilan sampel Monte Carlo ke bobot adapter.
Dalam praktiknya, Anda dapat menganggap Monteclora sebagai penambahan perturbasi stokastik yang dipelajari di atas bobot LoRA untuk mendapatkan adapter yang lebih terkalibrasi dan teregularisasi dengan baik. Argumen di bawah ini memungkinkan Anda untuk menyeimbangkan stabilitas, kekuatan regularisasi, dan biaya komputasi.