فاینتیون (Fine-tuning) چیست
جواب کوتاه
فاینتیون یعنی یه مدل آماده، که از قبل کلی چیز یاد گرفته، با دادهی کم و هدفمند خودتون یه کم بیشتر آموزش ببینه، تا سبک، قالب یا کار خاص شما رو بهتر انجام بده. نوعی یادگیری انتقالیه: دانش قبلی میمونه و روش ساخته میشه. میشه کل مدل رو تنظیم کرد، یا فقط چند لایه، یا یه «آداپتور» کوچیک کنارش. ولی یه هزینه هم داره: چیزهایی که مدل قبلا خوب بلد بود، ممکنه کمرنگ بشن.
فاینتیون یعنی چی
یه مدل آماده داری که از همهچیز یه کم بلده. میخوای مثل کار خودت حرف بزنه. چند تا نمونهی خودت رو بهش میدی و یه کم دیگه آموزشش میدی. به این میگن فاینتیون.
ویکیپدیا فاینتیون رو اینطوری تعریف میکنه: تطبیق مدلی که برای یه کار آموزش دیده، با یه کار دیگه که معمولا خاصتره. و میگه نوعی یادگیری انتقالی حساب میشه، چون دانشی که مدل از آموزش اولش یاد گرفته، دوباره به کار میره.
کار اصلی سادهست: پارامترهای همون مدل آموزشدیده، با دادهی تازه، یه کم بیشتر آموزش میبینن. در واقع شما همین الان چند تا فاینتیون رو توی این مسیر دیدید: تنظیم با دستور و RLHF هر دو فاینتیون یه مدل پایه بودن.
نونوایی ما
بیاید با مدل کوچیک خودمون امتحانش کنیم. فرض کنید یه نونوایی چهار تا جملهی خودش رو داره، مثل «صبح نون سنگک تازه داریم» و «عصر نون تافتون تازه داریم». اینها رو به ۱۲ جملهی مدل اضافه کردیم و دوباره شمردیم.
توی مدل پایه، بعد از «صبح» شانس «نون» ۲۵ درصد بود و «چای» ۵۰ درصد. با یه بار اضافه کردن جملههای نونوایی، «نون» شد ۵۰ درصد. وقتی جملههای نونوایی رو پنج برابر وزن دادیم، که شبیه آموزش بیشتر یا قویتره، «نون» رسید به ۷۹ درصد.
یه چیز دیگه هم یاد گرفت: بعد از «نون»، توی مدل پایه همیشه «و» میومد (نون و پنیر). حالا بیشتر «سنگک»، «بربری» و «تافتون» میاد. یعنی مدل کلمههای کار خاص این نونوایی رو هم یاد گرفت.
چند جور فاینتیون
«فاینتیون» اسم یه کار نیست؛ اسم یه خانوادهست. فرقشون بیشتر توی دادهایه که میدید.
یه جورش ادامهی پیشآموزشه: مدل روی کلی متن بیبرچسب از یه حوزه، مثلا مقالههای پزشکی، باز همون بازی کلمهی بعد رو میکنه. یه پژوهش ۲۰۲۰ روی چهار حوزه و هشت کار نشون داد این کار، و حتی ادامهی پیشآموزش روی متن بیبرچسب خود همون کار، نتیجه رو همیشه بهتر کرد. جور دوم تنظیم با دستوره، با نمونههای دستور و جواب. جور سوم تنظیم با ترجیحه، مثل DPO، با جفتهای «این بهتر از اون». و جور چهارم یاد دادن یه کار مشخص، مثلا تشخیص اینکه یه نظر مثبته یا منفی. روش آموزش همهشون تقریبا یکیه؛ فقط داده و هدف فرق میکنه.
کجای مدل عوض میشه
مدل ما فقط یه جدول شمارش بود. ولی یه مدل زبانی واقعی میلیاردها پارامتر داره. کدومشون آموزش ببینن؟ ویکیپدیا سه راه میگه:
کل شبکه: همهی پارامترها کمی تنظیم میشن. بخشی از لایهها: بقیه «یخزده» میمونن، یعنی موقع آموزش عوض نمیشن. آداپتور: یه بخش کوچیک تازه کنار لایهها اضافه میشه و فقط همون آموزش میبینه؛ پارامترهاش خیلی کمتر از خود مدله. معروفترین روش آداپتور رو توی درس LoRA میبینیم.
هزینه
فاینتیون کل مدل رایجه و طبق ویکیپدیا اغلب نتیجهی بهتری میده، ولی محاسبهی بیشتری میخواد؛ یادتونه از درس پارامتر که فقط نگه داشتن عددهای یه مدل بزرگ چقدر جا میگیره؟ تنظیم همهی اونها، حافظهی خیلی بیشتری لازم داره.
راههای سبک، مثل آداپتور، این رو خیلی ارزونتر میکنن: همون صفحهی ویکیپدیا میگه یه مدل چند میلیارد پارامتری رو میشه با آموزش فقط چند میلیون پارامتر فاینتیون کرد، با نتیجهای که به فاینتیون کامل نزدیکه.
چیزی که کمرنگ شد
حالا برگردیم سراغ نونوایی، ولی این بار ببینیم چی از دست رفت:
با دادهی نونوایی پنج برابر، «چای» بعد از «صبح» از ۵۰ به ۱۴ درصد افتاد. «نون و پنیر» که قبلا تنها ادامهی «نون» بود، به کمتر از ۵ درصد رسید. حتی «عصر» که قبلا همیشه به «چای» میرسید، حالا بیشتر به «نون» میرسه. مدل کار تازه رو یاد گرفت، ولی بخشی از چیزهای قبلی رو کمرنگ کرد.
ویکیپدیا هم میگه فاینتیون ممکنه مدل رو برای دادهای که شبیه دادهی فاینتیون نیست، ضعیفتر کنه، و یه راهحل ساده هم معرفی میکنه: میانگین گرفتن از وزنهای مدل تنظیمشده و مدل اصلی. حالت شدیدش اسم داره: فراموشی فاجعهبار، که یه درس جدا داره.
فاینتیون میتونه ایمنی رو هم پاک کنه
یه هزینهی دیگهی فاینتیون هم هست که کمتر بهش فکر میشه.
یه پژوهش ۲۰۲۳ نشون داد یه مدل دستیار که آموزش ایمنی دیده بود، با فاینتیون روی فقط ۱۰ نمونهی عمدا طراحیشده، که کمتر از ۲۰ سنت خرج داشت، تقریبا به هر درخواست آسیبزایی جواب داد. نگرانکنندهتر اینکه فاینتیون روی دادههای معمولی و بیخطر هم، کمتر ولی واقعا، ایمنی مدل رو کم کرد. پس اگه یه مدل رو برای کار خودتون فاینتیون میکنید، بعدش رفتار ایمنیش رو هم دوباره بسنجید؛ همون چیزی که توی درس فراموشی فاجعهبار دربارهی کمرنگ شدن تواناییها میبینیم، اینجا دربارهی ایمنی هم هست.
دور و بر شما
مستندات Claude میگه Claude یه مدل زبانی خام نیست؛ از قبل برای اینکه دستیار مفیدی باشه تنظیم شده. و هشدار میده که مدل، الگوها و ویژگیهای دادهی فاینتیون رو یاد میگیره؛ پس باید به داده و اثرش روی کارایی و سوگیری مدل دقت کرد.
همین مستندات میگه رابط برنامهنویسی Claude فعلا فاینتیون ارائه نمیده. یعنی برای خیلی از کارها، اول باید سراغ راههای دیگه رفت؛ درس بعد، فاینتیون، RAG یا پرامپت، همین انتخاب رو باز میکنه.
چند نکته
- از یه مدل آماده شروع کنید. دانشش رو دوباره نسازید.
- دادهی کم ولی هدفمند. مدل دقیقا همون رو یاد میگیره.
- راه سبک رو امتحان کنید. آداپتور، بهجای کل مدل.
- بعدش، کارهای قبلی رو هم بسنجید. ممکنه کمرنگ شده باشن.
- به سوگیری داده دقت کنید. مدل همون رو تقلید میکنه.
درس بعد: کی واقعا فاینتیون لازمه؟ فاینتیون، RAG یا پرامپت: کدام.
جمعبندی. آنچه از این درس با خودتان میبرید.
- مدل آماده + دادهی شما = مدل شما.
- نوعی یادگیری انتقالی.
- کل مدل، چند لایه، یا یه آداپتور کوچیک.
- دادهی بیشتر، جابهجایی بیشتر.
- چیزهای قبلی ممکنه کمرنگ بشن.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.