Fine-tuning چیه و کِی واقعاً لازمه؟

قسمت ۱ ۱۵ دقیقه

Fine-tuning دقیقاً چیه؟

فرض کن یه آشپز حرفه‌ای داری که غذاهای مختلف بلده بپزه. حالا می‌خوای این آشپز رو ببری یه رستوران ژاپنی و فقط روی سوشی متخصصش کنی. نه اینکه از صفر بهش آشپزی یاد بدی — فقط می‌خوای مهارت خاصی رو توش تقویت کنی. Fine-tuning دقیقاً همین کاره.

وقتی یه مدل زبانی بزرگ مثل LLaMA یا Qwen رو Fine-tune می‌کنی، داری دانش عمومی‌اش رو نگه می‌داری ولی رفتارش رو توی یه حوزه خاص تغییر می‌دی. مدل از قبل زبان رو می‌فهمه، استدلال بلده، و اطلاعات عمومی داره. تو فقط داری بهش یاد می‌دی که توی حوزه تو چطور حرف بزنه و جواب بده.

تعریف فنی

Fine-tuning یعنی گرفتن یه مدل از پیش آموزش‌دیده (pre-trained) و ادامه دادن آموزشش روی یه دیتاست کوچک‌تر و تخصصی‌تر. این کار باعث می‌شه وزن‌های شبکه عصبی تغییر کنن و مدل رفتار جدیدی یاد بگیره — بدون اینکه لازم باشه از صفر آموزش ببینه.

# ساده‌ترین شکل Fine-tuning — مفهومی
base_model = load_model("meta-llama/Llama-3.1-8B")
dataset = load_dataset("my_custom_data.jsonl")

# ادامه آموزش روی دیتای تخصصی
trainer = Trainer(model=base_model, train_dataset=dataset)
trainer.train()

# حالا مدل رفتار جدید یاد گرفته
fine_tuned_model = trainer.model

شش سناریو: کِی Fine-tuning لازمه؟

۱. وقتی لحن و سبک خاصی می‌خوای

فرض کن می‌خوای مدل مثل یه دکتر متخصص قلب جواب بده — نه خیلی رسمی، نه خیلی ساده. Prompt engineering ممکنه تا حدی کمک کنه، ولی اگه هزاران بار مدل باید این سبک رو رعایت کنه، Fine-tuning خیلی بهتر جواب می‌ده.

۲. وقتی فرمت خروجی خاصی لازم داری

مثلاً می‌خوای مدل همیشه خروجیش یه JSON خاص باشه با فیلدهای مشخص. یا می‌خوای خروجی همیشه یه قالب Markdown خاص داشته باشه. Fine-tuning می‌تونه این الگو رو توی ذات مدل بکاره.

۳. وقتی دانش تخصصی حوزه‌ات توی مدل نیست

مثلاً توی حوزه حقوق ایران کار می‌کنی و مدل با قوانین خاص آشنا نیست. یا توی پزشکی روی بیماری‌های نادر کار می‌کنی. Fine-tuning می‌تونه این دانش رو وارد مدل کنه.

۴. وقتی سرعت و هزینه مهمه

اگه الان داری از یه مدل بزرگ مثل GPT-4 استفاده می‌کنی و هر بار یه prompt طولانی می‌فرستی، شاید بتونی یه مدل کوچک‌تر رو Fine-tune کنی که بدون prompt طولانی همون کیفیت رو بده. اینجوری هم سریع‌تره هم ارزون‌تر.

۵. وقتی حریم خصوصی داده مهمه

اگه داده‌هات حساسن و نمی‌تونی به API‌های ابری بفرستی، می‌تونی یه مدل open-source رو Fine-tune کنی و روی سرور خودت اجراش کنی.

۶. وقتی Prompt Engineering به سقفش رسیده

گاهی هرچقدر prompt رو بهتر می‌نویسی، مدل بازم اون کاری که می‌خوای رو نمی‌کنه. اینجاست که Fine-tuning وارد می‌شه و رفتار مدل رو از ریشه تغییر می‌ده.

سه سناریو: کِی Fine-tuning لازم نیست

۱. وقتی Prompt Engineering کافیه

خیلی وقت‌ها فقط با نوشتن یه system prompt خوب و چند مثال (few-shot)، مدل دقیقاً همون کاری که می‌خوای رو انجام می‌ده. قبل از Fine-tuning حتماً این رو امتحان کن.

۲. وقتی RAG بهتر جواب می‌ده

اگه مشکلت اینه که مدل اطلاعات به‌روز یا اطلاعات خاصی نداره، RAG (Retrieval-Augmented Generation) معمولاً بهتر از Fine-tuning جواب می‌ده. چون می‌تونی اطلاعات رو آپدیت کنی بدون اینکه مدل رو دوباره آموزش بدی.

۳. وقتی داده کافی نداری

Fine-tuning بدون داده خوب و کافی، نه تنها کمکی نمی‌کنه بلکه مدل رو خراب‌تر هم می‌کنه. اگه کمتر از چند صد نمونه باکیفیت داری، اول روی جمع‌آوری داده تمرکز کن.

قانون طلایی: اول ساده‌ترین روش رو امتحان کن

قانون طلایی: همیشه از ساده‌ترین روش شروع کن و فقط وقتی به Fine-tuning برو که روش‌های ساده‌تر جواب ندادن.

ترتیب پیشنهادی:

  • مرحله ۱: Prompt Engineering — بهتر نوشتن prompt، اضافه کردن مثال
  • مرحله ۲: RAG — اتصال مدل به پایگاه دانش
  • مرحله ۳: Fine-tuning — آموزش مدل روی داده تخصصی

درخت تصمیم: Fine-tuning vs RAG vs Prompt Engineering

بیا یه درخت تصمیم ساده بسازیم:

# درخت تصمیم برای انتخاب روش
def choose_method(problem):
    # سوال ۱: آیا prompt بهتر مشکل رو حل می‌کنه؟
    if better_prompt_works(problem):
        return "Prompt Engineering"
    
    # سوال ۲: آیا مشکل کمبود اطلاعاته؟
    if problem.type == "lack_of_knowledge":
        if data_changes_frequently(problem):
            return "RAG"
        if have_enough_training_data(problem):
            return "Fine-tuning"
        return "RAG"
    
    # سوال ۳: آیا مشکل سبک/فرمت خروجیه؟
    if problem.type == "style_or_format":
        if have_enough_training_data(problem):
            return "Fine-tuning"
        return "Prompt Engineering + Few-shot"
    
    # سوال ۴: آیا هزینه/سرعت مهمه؟
    if problem.type == "cost_or_latency":
        return "Fine-tune a smaller model"
    
    return "Start with Prompt Engineering"

مقایسه سریع

  • Prompt Engineering: سریع‌ترین، ارزان‌ترین، اولین چیزی که باید امتحان کنی
  • RAG: وقتی اطلاعات باید به‌روز باشن یا حجم دانش زیاده
  • Fine-tuning: وقتی رفتار و سبک مدل باید تغییر کنه

یه نکته مهم: این روش‌ها رقیب هم نیستن — می‌تونی ترکیبشون کنی. مثلاً یه مدل Fine-tune شده که از RAG هم استفاده می‌کنه. ولی اول مطمئن شو که واقعاً به Fine-tuning نیاز داری.

هزینه واقعی Fine-tuning

قبل از شروع، بدون هزینه‌ها چیه:

  • زمان: جمع‌آوری و آماده‌سازی داده ممکنه هفته‌ها طول بکشه
  • محاسباتی: نیاز به GPU داری (حداقل یه کارت با ۱۶GB VRAM)
  • تخصص: باید بفهمی چی داری انجام می‌دی — Fine-tuning بد، مدل رو خراب می‌کنه
  • نگهداری: مدل Fine-tune شده نیاز به نگهداری و آپدیت داره

یه مثال واقعی

فرض کن می‌خوای یه مدل داشته باشی که متن‌های حقوقی فارسی رو خلاصه کنه. بیا ببینیم هر روش چطور کار می‌کنه:

# روش ۱: Prompt Engineering
prompt = """
تو یه متخصص حقوقی هستی. متن زیر رو در ۳ جمله خلاصه کن.
خلاصه باید شامل موارد کلیدی، تاریخ‌ها و طرفین دعوا باشه.

متن: {legal_text}
"""

# روش ۲: RAG
# متن حقوقی + قوانین مرتبط از پایگاه داده
context = retrieve_relevant_laws(legal_text)
prompt = f"با توجه به قوانین مرتبط: {context}\n خلاصه کن: {legal_text}"

# روش ۳: Fine-tuning
# آموزش مدل روی هزاران جفت (متن حقوقی، خلاصه حقوقی)
# بعد از Fine-tuning:
summary = fine_tuned_model.generate(legal_text)
# مدل خودش می‌دونه چطور خلاصه حقوقی بنویسه

جمع‌بندی

Fine-tuning یه ابزار قدرتمنده ولی همیشه اولین انتخاب نیست. قبل از شروع:

  • مطمئن شو که Prompt Engineering و RAG جواب ندادن
  • داده کافی و باکیفیت داشته باش
  • هدفت مشخص باشه — دقیقاً چه رفتاری از مدل می‌خوای
  • منابع محاسباتی (GPU) رو در نظر بگیر

توی اپیزود بعدی، سه مرحله اصلی آموزش مدل‌های زبانی رو بررسی می‌کنیم: Pre-training، SFT و RLHF. می‌فهمی Fine-tuning دقیقاً کجای این فرآیند قرار می‌گیره.

نظرات

هنوز نظری ثبت نشده. اولین نفر باشید!

نظر خود را بنویسید