اغلب ما وقتی سراغ Fine-tuning مدلهای Transformer-based میریم، یا روش Full Fine-tuning رو انتخاب میکنیم که هزینه محاسباتی سنگینی داره، یا میریم سراغ متدهای PEFT مثل LoRA و Adapter. مشکل اینجاست که اکثر این روشها یه فرض غلط دارن: "تاثیر تمام لایهها (Transformer Blocks) در یادگیری تسک جدید یکسانه." در صورتی که در عمل، لایههای پایینتر فیچرهای عمومی زبان رو نگه میدارن و لایههای بالاتر مسئول درک معنایی خاص اون تسک هستن.
معماری Progtuning دقیقا دست میذاره روی همین عدم تعادل. این فریمورک یه روش Progressive Learning رو وارد پروسه فاینتیون میکنه تا منابع محاسباتی رو هوشمندتر خرج کنه. ایده اصلی اینه: به جای اینکه در تمام Epochها همه لایهها رو آپدیت کنیم، بیایم به مرور زمان لایههای پایین رو از چرخه آپدیت خارج کنیم و تمرکز رو بذاریم روی لایههای بالا.
ساختار Progtuning به این صورته که کل پروسه آموزش رو به چند Stage تقسیم میکنه. در استیجهای اول، لایههای بیشتری (از جمله لایههای پایین) درگیر Backward Propagation میشن تا مدل بتونه تغییرات بنیادی رو یاد بگیره. اما هرچی جلوتر میریم، لایههای پایین فریز میشن و فقط لایههای High-level آپدیت میشن. این یعنی ما عملاً داریم تعداد Updated Parameters رو در طول زمان کاهش میدیم (Shrinking Stages).
نکته فنی مهم اینجاست که Progtuning خودش یه الگوریتم لرنینگ جدید نیست، بلکه یه متدولوژی زمانبندی (Scheduling) برای آپدیت وزنهاست. به همین خاطر به شدت Adaptable هست و میشه اون رو با LoRA یا BitFit ترکیب کرد. مثلا وقتی LoRA + Progtuning میزنید، ماتریسهای LoRA در لایههای پایین زودتر فریز میشن و فقط ماتریسهای لایههای آخر تا انتهای ترینینگ آپدیت میشن.
طبق بنچمارکهای GLUE و SQuAD، این روش تونسته حدود ۲۵ درصد تعداد پارامترهای آپدیتشونده رو کاهش بده (در مقایسه با فاینتیون استاندارد) و جالب اینجاست که پرفورمنس نه تنها افت نکرده، بلکه در مواردی مثل BERT-Large بهتر هم شده. دلیلش احتمالا کاهش Overfitting روی لایههای پایینه که معمولاً نیازی به تغییر زیاد برای Downstream Task ندارن.
به نظر من، این پیپر یه اثبات خوب برای بحث قدیمی "Layer Freezing" هست. توی Ablation Study نشون میده که اگر از اول لایههای پایین رو کامل فریز کنیم (Without Low Blocks)، پرفورمنس به شدت افت میکنه. پس لایههای پایین "باید" ترین بشن، اما نه به اندازه لایههای بالا. Progtuning عملاً این Decay رو اتوماتیک کرده. برای کسایی که GPU محدود دارن یا روی Edge Device میخوان مدل رو آپدیت کنن، ترکیب این روش با QLoRA میتونه خروجی خیلی بهینهای بده.
📃 عنوان مقاله: Progtuning: Progressive Fine-tuning Framework for Transformer-based Language Models
https://openreview.net/pdf?id=0g0Xj5qiGg
🛠 Join @LLMEngineers Community
Post #258
1.13K
- 👍 8
- ❤ 3