فاینتیون کردن مدلهای زبانی با LoRA استاندارد صنعتی شده، ولی همیشه یه گپی با Full Fine-tuning وجود داره که پر نمیشه. تکنیک DoRA یا Weight-Decomposed Low-Rank Adaptation دقیقاً برای پر کردن همین فاصله طراحی شده؛ یه متد PEFT که یادگیری Magnitude و Direction وزنها رو از هم جدا میکنه تا رفتار Full FT رو دقیقتر شبیهسازی کنه.
تحلیلهای ریاضی روی پروسه Full Fine-tuning نشون میده که مدلها بیشتر تمایل دارن "جهت" (Direction) بردار وزنها رو تغییر بدن و "اندازه" (Magnitude) رو نسبتا ثابت نگه میدارن. مشکل LoRA اینه که با تزریق ماتریسهای Low-Rank، تغییرات مگنیتود و دایرکشن رو با هم کوپل میکنه و دست مدل رو برای تنظیم دقیق جهتها میبنده.
راهکار DoRA اینه که ماتریس وزن Pretrained رو اول تجزیه میکنه:
۱. یک بردار Magnitude قابل آموزش (𝑚).
۲. یک ماتریس Direction نرمالایز شده (𝑉).
بعدش پروسه استاندارد LoRA رو فقط روی بخش Direction اعمال میکنه و بردار 𝑚 رو جداگانه آموزش میده. نتیجه اینه که همگرایی مدل سریعتر و پایدارتر میشه و بدون اضافه کردن سربار محاسباتی خاصی (حدود ۰.۰۱ درصد پارامتر بیشتر نسبت به LoRA)، ظرفیت یادگیری مدل رو بالا میبره.
پیادهسازی این متد الان توی اکوسیستم Hugging Face کاملاً ساده شده. اگر از کتابخونه peft استفاده میکنید، کافیه توی LoraConfig پارامتر use_dora=True رو ست کنید. نکته حیاتی برای پروداکشن اینه که مثل LoRA، وزنهای DoRA هم کاملاً قابلیت Merge شدن دارن و موقع Inference هیچ Latency اضافهای تحمیل نمیکنن.
به نظر من اگر روی تسکهای پیچیده مثل Reasoning یا Vision-Language کار میکنید، سوییچ کردن به DoRA منطقیه. بنچمارکها نشون میدن DoRA حتی با Rank نصف نسبت به LoRA، خروجی بهتری میده. این یعنی میتونید پارامترهای کمتری آموزش بدید ولی کیفیت نزدیک به Full Fine-tuning بگیرید. تنها نکته منفی شاید مصرف جزئی حافظه بیشتر موقع Training باشه که ناشی از عملیات Decomposition هست، ولی ارزش پرفورمنس نهایی رو داره.
📃 پیپر اصلی DoRA:
https://arxiv.org/abs/2402.09353
🛠 Join @LLMEngineers Community
Post #254
1.29K
- ❤ 6
- 👍 3