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