خب بچهها، امروز میخوایم یه تکنیک خیلی کاربردی رو کالبدشکافی کنیم. فرض کنین یه system prompt خیلی خفن و طولانی دارین که مدل رو وادار به یه رفتار خاص میکنه، مثلاً استدلال قدمبهقدم. مشکل اینجاست که هر بار باید این پرامپت طولانی رو به مدل بدین که هم هزینه توکن داره و هم ممکنه مدل تو متنهای طولانی یادش بره. راه حل، پختن این پرامپت توی وزنهای خود مدله.
ایده اصلی اینه که رفتار یه مدل بزرگ و هوشمند (معلم) که با system prompt بهینه شده رو به یه مدل کوچیکتر و بهینهتر (دانشآموز) منتقل کنیم. این کار ترکیبی از دو تا تکنیک معروفه: Prompt Baking و Knowledge Distillation. نتیجه اینه که مدل کوچیکتر بدون نیاز به اون پرامپت طولانی، همون رفتار رو از خودش نشون میده.
این تکنیک چیز جدیدی نیست، فقط اسمش عوض شده. قبلاً بهش میگفتن Context Distillation و شرکتهایی مثل Anthropic از سال ۲۰۲۱ برای تزریق اصول اخلاقی (HHH) به مدلهاشون ازش استفاده میکردن. پس این یه روش تستشده و قابل اعتماده، نه یه هایپ جدید.
پروسه کار به این شکله:
۱. تولید داده با مدل معلم:
اول یه مدل بزرگ و قوی مثل DeepSeek-V2 رو برمیداریم و system prompt مورد نظرمون رو بهش میدیم. بعد یه مجموعه داده متنوع از سوالات (مثلاً از دیتاست SQuAD) بهش میدیم تا جواب تولید کنه. این جوابها که بهشون trajectories میگن، باید با temperature بالا تولید بشن تا تنوع داشته باشن و مدل دانشآموز overfit نشه. نکته کلیدی اینجاست که برای هر توکنی که مدل معلم تولید میکنه، ما logits (خروجی خام قبل از softmax) رو هم ذخیره میکنیم. این logits در واقع توزیع احتمال کامل روی تمام توکنهای ممکنه و کل دانش مدل معلم توش نهفتهست.
۲. آموزش مدل دانشآموز:
حالا یه مدل کوچیکتر، مثلاً یه مدل ۲۰ میلیاردی، رو انتخاب میکنیم. یه آداپتور LoRA روی لایههای attention این مدل سوار میکنیم تا فقط بخش کوچیکی از وزنها آپدیت بشن و دانش پایهی مدل از بین نره. بعد مدل دانشآموز رو با دادههایی که تولید کردیم آموزش میدیم. مدل دانشآموز اینجا دیگه system prompt رو نمیبینه. وظیفهش اینه که یاد بگیره logits خروجی خودش رو به logits مدل معلم شبیه کنه. تابع زیان یا loss function برای این کار Kullback-Leibler (KL) divergence هست که تفاوت بین دو توزیع احتمال رو اندازه میگیره.
۳. استفاده از مدل پختهشده:
بعد از اینکه آموزش تموم شد، وزنهای LoRA رو با وزنهای اصلی مدل دانشآموز ادغام (merge) میکنیم. حالا ما یه مدل کوچیک داریم که رفتار دیکتهشده توسط اون system prompt پیچیده رو به صورت دائمی در خودش داره، بدون اینکه نیاز به ارسال مجدد پرامپت باشه. این یعنی صرفهجویی در هزینه توکن و پایداری رفتار در مکالمات طولانی.
به نظر من، این روش یه نمونهی عالی از مهندسی هوش مصنوعیه. به جای تئوریپردازی، یه مشکل واقعی یعنی هزینه و ناپایداری پرامپتهای طولانی رو به شکل بهینه حل میکنه. با استفاده از logits به جای متن خالی (hard labels)، دانش خیلی عمیقتری از مدل معلم به دانشآموز منتقل میشه. البته ریسکهایی هم داره؛ اگه پرامپت شما بایاس یا مشکلی داشته باشه، اون بایاس برای همیشه توی مدل جدید پخته میشه.
این روش در عمل توسط تیمهای بزرگی مثل گوگل برای آموزش مدلهای Gemma با استفاده از مدلهای Gemini به عنوان معلم هم استفاده شده و نتایج خوبی روی بنچمارکها گرفته. پس اگه دنبال یه راه بهینه برای سفارشی کردن رفتار مدلهاتون هستین، این مسیر رو حتماً بررسی کنین.
🛠 Join @LLMEngineers Community
Post #253
1.66K
AI Engineers یه تکنیک جدید و خیلی کاربردی معرفی شده به اسم Prompt Baking که فاصلهی بین prompt engineering و fine-tuning رو پر میکنه. کاربرد اصلی اینه که به جای اینکه هر بار یه پرامپت سیستمی یا چندتا مثال few-shot رو به مدل بدیم، میایم و اثر اون پرامپت رو مستقیماً توی…
- 👍 23
- ❤ 7
- 🖕 3