1. مقدمه‌ای بر Feine-tuning

۱.۱. تعریف و مزایای Feine-tuning مدل

Feine-tuning مفهومی در یادگیری عمیق است که به فرآیند ادامه دادن آموزش بر اساس یک مدل پیش‌آموز برای سازگاری با وظایف یا مجموعه‌داده‌های خاص اشاره دارد. مدل‌های پیش‌آموز بر روی مقادیر داده‌های زیادی آموزش دیده‌اند و برنامه‌های ویژگی‌های غنی را یاد گرفته‌اند. از طریق فاین-تیونینگ، اجرای مدل برای وظایف خاص براساس این اساس می‌تواند بهبود یابد.

مزایای فاین-تیونینگ نسبت به آموزش مدل‌ها از صفر، به طور عمده شامل:

  1. صرفه‌جویی در زمان و منابع: مدل‌های پیش‌آموز نیاز زمانی و منابع محاسباتی مورد نیاز برای آموزش مدل‌ها از صفر را از بین می‌برند، به خصوص در مدل‌های بزرگ و وظایف پیچیده.
  2. کارآیی داده: به طور معمول، فاین-تیونینگ نیاز کمتری به داده‌های حاوی برچسب برای رسیدن به نتایج خوب دارد، به ویژه در زمینه‌هایی با داده‌های محدود.
  3. یادگیری انتقالی: مدل‌های پیش‌آموز از داده‌های متنوع یاد می‌گیرند و فاین-تیونینگ می‌تواند این دانش را به وظایف خاص انتقال دهد و توانایی عمومی‌سازی را افزایش دهد.
  4. بهبود عملکرد: فاین-تیونینگ اجازه می‌دهد تا مدل بهتر با الزامات وظایف خاص سازگار شود و به بهبود کیفیت مدل و کاهش نرخ خطا کمک کند.

به عنوان مثال، با استفاده از رابط برنامه‌نویسی OpenAI، کاربران می‌توانند از طریق فاین-تیونینگ مدل GPT را سفارشی کنند تا نتایج با کیفیت‌تری بدست آورند و همچنین هزینه‌های مرتبط با توضیحات طولانی را کاهش داده و برداشت‌ها را کاهش دهند.

۱.۲. موارد کاربرد عملی

Feine-tuning در موارد عملی مختلف به عنوان یک روش بسیار موثر ثابت شده است. به عنوان مثال:

  • تنظیم سبک‌ها و گرایش‌ها: از طریق فاین-تیونینگ، پاسخ‌های چت‌بات‌ها می‌تواند به سبک‌ها یا گرایش‌های خاص، مانند رسمی، شوخی‌گون یا همسان با زبان یک صنعت خاص تنظیم شود.
  • افزایش قابلیت اعتماد: در برنامه‌های حساس مانند مشاوره‌های پزشکی یا مشاوره‌های حقوقی، فاین-تیونینگ می‌تواند سبب کاهش سوءتفاهم‌ها یا پاسخ‌های نادرست شود و از این راه قابلیت اعتماد کلی را افزایش دهد.
  • رفع مشکلات پیچیده ورودی: برخی وظایف نیازمند پردازش ورودی‌های پیچیده کاربر هستند و فاین-تیونینگ می‌تواند به مدل کمک کند تا بهتر وضعیت‌های پیچیده را درک کند و پاسخ‌های دقیق ارائه کند.
  • بهبود عملکرد برای وظایف خاص: برای وظایفی که از طریق یک توضیح یکتا توصیف شدنی نیستند، مانند انتقال سبک در تولید متن یا تولید متن در موضوعات خاص، فاین-تیونینگ می‌تواند به طور قابل‌توجهی عملکرد مدل را بهبود بخشد.

از طریق این موارد می‌توان دید که فاین-تیونینگ به مدل‌ها اجازه می‌دهد که به بهترین شکل به سناریوهای کاربردی خاص سازگار شوند و خدمات دقیق‌تر و شخصی‌تری ارائه دهند.

۲. زمان استفاده از Feine-tuning

۲.۱. تحلیل نیازهای وظیفه

Feine-tuning یک استراتژی است که به کار گرفته می‌شود زمانی که تصمیم می‌شود که مدل‌های عمومی موجود نمی‌توانند نیازهای خاص را برآورده سازند. Feine-tuning ممکن است ضروری باشد زمانی که وظیفه شامل ویژگی‌های زیر باشد:

  • نیازهای ویژه از نظر سبک، گرایش، فرمت یا دیگر جنبه‌های کیفی
  • نیاز به بهبود قابلیت اعتماد در تولید خروجی‌های مطلوب
  • رویکردهای خاص مورد نیاز در برخورد با موارد جزییات زیاد
  • مهارت‌ها یا وظایفی که دشوار است به صورت روشن در توضیحات مشخص شوند

مراحل تعیین نیاز به فاین-تیونینگ معمولا شامل:

  1. تلاش برای "مهندسی توضیحات"، تنظیم روش‌هایی برای ارائه بهینه تر ورودی‌های توضیحی.
  2. تحلیل کارایی مدل‌های موجود برای تعیین ضرورت فاین-تیونینگ.
  3. اگر تصمیم به فاین-تیونینگ گرفته شود، آماده‌سازی مجموعه‌داده‌های مربوط برای آموزش بیشتر.

۲.۲. مقایسه بین فاین-تیونینگ و مهندسی توضیحات

Feine-tuning و مهندسی توضیحات دو راه‌کار مختلف برای بهبود عملکرد مدل‌ها هستند. مهندسی توضیحات به معنای هدایت مدل برای تولید پاسخ مورد انتظار با استفاده از توضیحات طراحی شده به دقت، بدون اصلاح خود مدل است. معمولا این اولین گام در جستجوی بهبود عملکرد است، زیرا چرخه بازخورد سریعی دارد و نیازی به داده‌های آموزشی ندارد.

به هرحال، در برخی موارد، حتی با توضیحات با دقت طراحی شده، ممکن است مدل هنوز مشکل داشته باشد برای رسیدن به نتایج مورد انتظار. در چنین حالت‌هایی، Feine-tuning گزینه لازم برای بهبود عملکرد مدل می‌شود. با فراهم کردن تعداد زیادی نمونه برای مدل برای یادگیری، Feine-tuning می‌تواند نتایج بهتری برای وظایف مختلف نسبت به مهندسی توضیحات تنها به دست آورد.

3. مدل‌هایی که از تنظیمات دقیق پشتیبانی می‌کنند

OpenAI مجموعه‌ای از مدل‌هایی را ارائه می‌دهد که از تنظیمات دقیق پشتیبانی می‌کنند، از جمله gpt-3.5-turbo-1106 (توصیه شده)، gpt-3.5-turbo-0613، babbage-002، davinci-002، و نسخه آزمایشی قابل دسترس gpt-4-0613. این مدل‌ها می‌توانند از طریق تنظیمات دقیق برای سازگاری با نیازهای خاص کاربر ادامه دهند.

تنظیمات دقیق نه تنها برای مجموعه‌داده‌های جدید مناسب است، بلکه کاربران می‌توانند به تنظیمات دقیق روی مدل‌هایی که قبلاً تنظیمات دقیق شده ادامه دهند. این ویژگی وقتی بسیار مفید است که بیشتر داده‌ها به دست آمده و نیاز به بهینه‌سازی بیشتر مدل بدون تکرار مراحل آموزش قبلی وجود داشته باشد.

برای بیشتر کاربران، gpt-3.5-turbo گزینه‌ی ترجیحی به دلیل نتایج قابل قبول و سادگی استفاده است. با توجه به بهبودهای مداوم و نیازهای خاص کاربران، احتمالاً OpenAI ادامه دادن به به‌روزرسانی و توسعه مدل‌هایی که از تنظیمات دقیق پشتیبانی می‌کنند را دارد.

4. آماده‌کردن داده‌های آموزشی

4.1. فرمت مجموعه‌داده

برای انجام تنظیمات دقیق، نیاز به آماده‌سازی مجموعه‌داده‌ای با فرمت مشخص است. به طور معمول، این مجموعه‌داده شامل یک سری ورودی‌ها و خروجی‌های متناظر با آن‌ها است. API تنظیمات دقیق OpenAI از دو فرمت اصلی داده پشتیبانی می‌کند: مدل گفتگو و جفت سوال و پاسخ ساده.

فرمت مجموعه‌داده مدل گفتگو برای مدل gpt-3.5-turbo به کار می‌رود. هر نمونه به شکل یک گفتگو سازمان‌داری شده است که هر پیام نقش، محتوا و یک نام اختیاری دارد. ساختار داده نمونه به صورت زیر است:

{
  "messages": [
    {"role": "system", "content": "شما یک دستیار مفید هستید."},
    {"role": "user", "content": "وضع هوا امروز چطور است؟"},
    {"role": "assistant", "content": "هوا امروز صاف است و برای خروج خوب است."}
  ]
}

هر حالت باید به صورت یک فایل با فرمت خطوط JSON (.jsonl) قالب‌بندی شود، جایی که هر خط یک نمونه آموزشی را نمایان می‌کند، به عنوان مثال:

{"messages": [{"role": "system", "content": "مارو یک چت‌بات واقع‌گرا است که همزمان طنزی است."}, {"role": "user", "content": "پایتخت فرانسه کجاست؟"}, {"role": "assistant", "content": "پاریس، یعنی انگار همه این را نمی‌دانند."}]}
{"messages": [{"role": "system", "content": "مارو یک چت‌بات واقع‌گرا است که همزمان طنزی است."}, {"role": "user", "content": "کی 'رمئو و ژولیت' را نوشت؟"}, {"role": "assistant", "content": "اوه، فقط یکی به نام ویلیام شکسپیر. از او شنیده‌ای؟"}]}
{"messages": [{"role": "system", "content": "مارو یک چت‌بات واقع‌گرا است که همزمان طنزی است."}, {"role": "user", "content": "فاصله ماه از زمین چقدر است؟"}, {"role": "assistant", "content": "حدود 384,400 کیلومتر. چندتا بده یا بگو، مثل این که واقعاً مهم است."}]}

فرمت مجموعه‌داده جفت سوال و پاسخ ساده برای مدل‌های babbage-002 و davinci-002 مناسب است. این فرمت ساده‌تر است و شامل یک جفت prompt و completion است. یک نمونه به صورت زیر است:

{
  "prompt": "وضع هوا امروز چطور است؟",
  "completion": "هوا امروز صاف است و برای خروج خوب است."
}

به طریق مشابه، هر نمونه آموزشی یک خط را اشغال می‌کند، به عنوان مثال:

{"prompt": "<متن پرسش>", "completion": "<متن تولیدی مثالی>"}
{"prompt": "<متن پرسش>", "completion": "<متن تولیدی مثالی>"}
{"prompt": "<متن پرسش>", "completion": "<متن تولیدی مثالی>"}

هنگام ایجاد داده‌های آموزشی تنظیمات دقیق، لازم است هر دستور یا پرسش ارائه‌شده را به دقت در نظر بگیرید تا اطمینان حاصل شود که هر نمونه آموزشی با توجه به ترتیب و تمامی سناریوهای استفاده مورد انتظار را پوشش می‌دهد.

4.2. تقسیم داده‌های آموزشی و آزمون

پس از ایجاد مجموعه‌داده تنظیمات دقیق، انتقال درست مجموعه‌داده به دو بخش آموزش و آزمون بسیار حیاتی است. به طور معمول، مجموعه‌داده به دو بخش تقسیم می‌شود، که اکثریت آن برای آموزش مدل استفاده می‌شود (معمولاً 70% تا 90%) و قسمت باقیمانده برای آزمون (10% تا 30%). این تقسیم به ارزیابی عملکرد مدل بر روی داده‌های ناآشنا کمک می‌کند و عملکرد آن را به دقت ارزیابی می‌کند.

تقسیم مجموعه‌داده می‌تواند به صورت دستی یا با نوشتن کد برای تقسیم انجام شود، که در بخش‌های بعدی در مورد نحوه ارزیابی مدل با استفاده از داده‌های مجموعه آزمون توضیح داده خواهد شد.

5. ایجاد مدل تنظیمات دقیق شده

5.1. انتخاب مدل پیش‌آموزش داده شده مناسب

قبل از شروع فرآیند تنظیم دقیق، انتخاب صحیح مدل پیش‌آموزش داده شده بسیار حیاتی است تا موفقیت وظیفه اطمینان حاصل شود. در ادامه چند پیشنهاد برای انتخاب مدل پیش‌آموزش داده شده مناسب آورده شده است:

  1. نوع وظیفه: با توجه به ماهیت وظیفه‌ی شما، مانند درک زبان، تولید متن یا پاسخ دادن به سوالات خاص حوزه، مدلی را که بهترین انطباق را با این وظایف داشته باشد انتخاب کنید. به عنوان مثال، مدل gpt-3.5-turbo برای اکثر سناریوها مناسب است چرا که عملکرد و استفاده‌ی آسان را تعادل می‌دهد.

  2. حجم داده: اگر حجم داده‌ی آموزشی شما نسبتاً کم است، ممکن است ترجیح دهید مدل کوچک‌تری مانند babbage-002 را انتخاب کنید، زیرا برای تنظیم پارامترها نیاز به کمتری داده دارد.

  3. نیازهای عملکردی: برای سناریوهایی که نیاز به پردازش وظایف پیچیده و دقیق‌تر دارند، در نظر بگیرید که مدل قدرتمندتر davinci-002 را انتخاب کنید.

  4. ملاحظات هزینه: مدل‌های مختلف نیازهای محاسباتی و ذخیره‌سازی متفاوتی دارند. به طور معمول مدل‌های بزرگتر هزینه‌های بالاتری را به همراه دارند. تعادلی بین بودجه و نیازهای عملکردی داشته باشید.

  5. ویژگی‌های آزمایشی: مدل gpt-4-0613 در حال حاضر در مرحله‌ی آزمایشی است. اگر می‌خواهید آخرین فناوری را امتحان کنید و تحمل واسط‌های آزمایشی را دارید، درخواست دسترسی را در نظر بگیرید.

5.2. فرآیند تنظیم دقیق

فرآیند تنظیم دقیق شامل مراحل متعددی از آماده‌سازی داده، بارگذاری فایل‌ها، ایجاد وظایف آموزش و نظارت بر پیشرفت می‌شود. در ادامه تجزیه و تحلیل دقیق آن آمده است:

5.2.1. آماده‌سازی داده

براساس وظیفه‌ی هدف، داده‌های آموزش و آزمون کافی را طبق فرمت مورد نیاز مانند فرمت JSON Lines (.jsonl) آماده کنید. برای جزئیات محتوایی، لطفاً به فصل‌های ابتدایی مراجعه کنید.

5.2.2. بارگذاری داده

فایل‌های داده‌های آموزشی خود را از طریق رابط برنامه‌نویسی فایل‌های OpenAI بارگذاری کرده و هدف فایل را به عنوان fine-tune مشخص کنید، مانند زیر:

   curl https://api.openai.com/v1/files \
     -H "Authorization: Bearer $OPENAI_API_KEY" \
     -F purpose="fine-tune" \
     -F file="@mydata.jsonl"

بعد از بارگذاری موفق، شناسه فایلی دریافت می‌کنید که برای وظایف آموزش مدل بعدی استفاده خواهد شد.

5.2.3. ایجاد وظایف آموزش

وظایف تنظیم دقیق را با استفاده از ابزارها یا ابزارهای خط فرمان OpenAI آغاز کنید، پارامترها و مدل مورد نیاز را مشخص کرده و مثالی مانند زیر استفاده کنید:

   from openai import OpenAI
   client = OpenAI()

   client.fine_tuning.jobs.create(
     training_file="file-abc123", 
     model="gpt-3.5-turbo"
   )

پارامتر training_file شناسه فایل داده‌آموزشی را مشخص کرده و پارامتر model مدل مورد استفاده برای آموزش را مشخص می‌کند.

5.2.4. نظارت بر وظایف آموزش

راهبردی برای پرس و جو نتایج آموزش با استفاده از زبان پایتون به صورت زیر است:

from openai import OpenAI
client = OpenAI()

client.fine_tuning.jobs.list(limit=10)

client.fine_tuning.jobs.retrieve("ftjob-abc123")

client.fine_tuning.jobs.cancel("ftjob-abc123")

client.fine_tuning.jobs.list_events(fine_tuning_job_id="ftjob-abc123", limit=10)

client.models.delete("ft:gpt-3.5-turbo:acemeco:suffix:abc123")

6. تنظیم پارامترها در طول فرآیند تنظیم دقیق

6.1 درک و تنظیم هایپرپارامترها

هایپرپارامترها پارامترهایی هستند که قبل از آموزش مدل تعیین می‌شوند و معمولاً نمی‌توانند از داده‌ها یاد گرفته شوند. در ادامه چندین هایپرپارامتر مهم آمده است:

  • تعداد اپوک‌ها (n_epochs): این تعیین می‌کند چند بار مدل شما از سراسر مجموعه داده گذر خواهد کرد. تعداد زیادی اپوک ممکن است منجر به بیش‌برازش شود، در حالی که تعداد کمی ممکن است باعث شود مدل به طور کافی یاد نگیرد.

  • نرخ یادگیری (learning_rate_multiplier): نرخ یادگیری مقداری است که تعیین می‌کند اندازه‌ی به‌روزرسانی وزن‌های مدل در هر تکرار. نرخ یادگیری بیش‌ازاندازه ممکن است منجر به ناپایداری در فرآیند یادگیری شود، در حالی که نرخ کمی ممکن است باعث کند شدن فرآیند یادگیری شود.

  • اندازه دسته (batch_size): اندازه دسته تعیین می‌کند چند مثال آموزشی در هر به‌روزرسانی مدل در نظر گرفته می‌شود. اندازه بزرگ دسته در پایدارسازی آموزش کمک می‌کند اما ممکن است فشار حافظه را افزایش دهد.

تنظیم هایپرپارامترها معمولاً نیازمند آزمایش تکراری برای یافتن ترکیب بهینه پارامترها است.

مثالی از شروع وظیفه تنظیم دقیق با هایپرپارامترها:

از openai وارد کن
client = OpenAI()

client.fine_tuning.jobs.create(
  training_file="file-abc123",
  model="gpt-3.5-turbo",
  hyperparameters={
    "n_epochs":2
  }
)

پارامتر هایپرپارامترها برای تعیین هایپرپارامترها استفاده می‌شود.

6.2 تکرار و روش‌های بهبود مدل

بعد از تنظیم اولیه، ممکن است نیاز به تکرار برای بهبود عملکرد مدل باشد. در ادامه چندین راهکار تکرار آمده است:

  • افزایش داده: اگر مدل بر روی انواع خاصی از ورودی‌ها عملکرد نامطلوبی داشته باشد، سعی کنید نمونه‌های بیشتری از این ورودی‌ها اضافه کنید.

  • بررسی کیفیت داده: بررسی کنید آیا داده‌های آموزش حاوی اطلاعات نادرست یا مبهم هستند. این مسائل کیفیت ممکن است منجر به عملکرد نامطلوب مدل شوند.

  • تعادل داده: اطمینان حاصل کنید که داده‌های آموزش تنوع و تعادل در دسته‌ها و سبک‌ها دارند.

  • تنظیم هایپرپارامترها: همانطور که قبلاً گفته شد، تنظیم تعداد اپوک‌ها، نرخ یادگیری و اندازه دسته ممکن است به طور قابل توجهی بر عملکرد مدل تأثیر بگذارد.

از طریق این روش‌ها، می‌توانید به تدریج مدل دقیق تنظیم شده خود را بهینه کنید تا به بهترین عملکرد برسد.

7. ارزیابی و استفاده از مدل‌های دقیق تنظیم شده

7.1 ارزیابی مدل‌های دقیق تنظیم شده

وقتی که عملیات تنظیم دقیق مدل را به پایان رسانده‌ایم، ارزیابی عملکرد مدل دقیق تنظیم شده بسیار حائز اهمیت است. در ادامه چندین روش ارزیابی استاندارد آمده است:

  1. مقایسه نمونه‌ها: از نمونه‌های آماده آزمون استفاده کرده و به‌طور جداگانه مدل پایه و مدل دقیق تنظیم شده را فراخوانی کرده، سپس نتایج خروجی را مقایسه کرده و اثربخشی مدل دقیق تنظیم شده را ارزیابی کنید.

  2. معیارهای آماری: مقادیری همچون از دست دادن و دقت را در طی فرآیند تنظیم دقیق رصد کنید. از دست دادن باید در طول آموزش کاهش یابد، در حالی که دقت باید افزایش یابد.

  3. آزمایش A/B: طرح آزمایش‌ها، تقسیم ترافیک و همزمان اجرای هم مدل پایه و هم مدل دقیق تنظیم شده برای مشاهده تفاوت‌های عملکرد در یک محیط واقعی.

  4. بازخورد کاربر: بازخورد کاربر را در مورد استفاده از مدل جمع‌آوری کنید، به ویژه برای وظایف پردازش زبان طبیعی که رضایت کاربر معیار اساسی عملکرد مدل است.

7.2 چگونگی استفاده از مدل‌های دقیق تنظیم شده

استفاده از یک مدل دقیق تنظیم شده بسیار ساده است. شما فقط باید نام مدل دقیق تنظیم شده خود را به عنوان یک پارامتر در فراخوانی API منتقل کنید. در ادامه یک کد نمونه برای استفاده از یک مدل دقیق تنظیم شده آمده است:

مثال Python

از openai وارد کن

client = OpenAI(api_key='کلید API شما')

response = client.chat.completions.create(
  model="نام مدل",
  messages=[
    {"role": "system", "content": "شما یک دستیار مفید هستید."},
    {"role": "user", "content": "سلام!"}
  ]
)
print(response.choices[0].message)

در اینجا، "نام مدل" را با نام خاص مدل دقیق تنظیم شده خود، برای مثال "ft:نام مدل:سازمان شما:نام تنظیم دقیق شما:شناسه" جایگزین کنید.

فصل ۷: بهترین روش‌ها برای تنظیم بهینه‌سازی

پیرامون فرآیند تنظیم بهینه‌سازی، ما می‌توانیم به چندین روش بهتر را دنبال کنیم تا عملکرد مدل را بهبود ببخشیم:

  1. کیفیت داده: اطمینان حاصل کنید که داده‌های آموزش با کیفیت بالا و متنوع باشند تا از عملکرد نامناسب یا تک‌سویی داده‌ها ناشی از دقت پایین یا تک‌یازه بودن داده‌ها، جلوگیری شود.

  2. توزیع داده: داده‌های آموزش باید تمامی سناریوهای ورودی ممکن را پوشش دهند تا عملکرد مدل در شرایط واقعی تضمین شود.

  3. انتخابات گام‌به‌گام: با تدریج حجم داده‌های آموزش را افزایش داده و تغییرات در عملکرد مدل را مشاهده کنید، به جای اضافه کردن حجم زیادی از داده به یکباره.

  4. تنظیم پارامترهای مشخصه: بر اساس عملکرد مدل، پارامترهای مانند نرخ یادگیری، اندازه دسته و تعداد تکرارها را تنظیم کنید.

  5. بهبود مستمر: تنظیم بهینه یک مدل فرآیند یک‌باره‌ی نیست. تکرارهای منظم برای به‌روزرسانی مجموعه داده و مدل، می‌تواند بهبود مداوم عملکرد مدل را فراهم کند.

مشکلات متداول و راه‌حل‌ها:

  • س: چه کاری انجام دهیم اگر مدل تنظیم‌شده به نتایج مورد انتظار نرسد؟

    • ج: با دقت کنترل کنید و کیفیت و تنوع داده‌های آموزش را بهبود بخشید و استراتژی آموزش را بر اساس نتایج ارزیابی تنظیم کنید.
  • س: چطور عملکرد نامناسب مدل را در سناریوهای خاص مدیریت کنیم؟

    • ج: تعداد نمونه‌های آموزش را برای آن سناریو بیشتر کنید تا توانایی پردازشی مدل در آن شرایط خاص افزایش یابد.
  • س: چطور در طول فرآیند تنظیم بهینه‌سازی هزینه را کنترل کنیم؟

    • ج: پیش پردازش شمارش توکن را پیش از زمان انجام دهید و هزینه‌های مختلف مدل‌ها را ارزیابی کنید.

با یکپارچه‌سازی این پیشنهادات و ابزارها، شما قادر به حداکثر کردن اثربخشی تنظیم بهینه مدل خود خواهید بود و تضمین کنید که فرآیند تنظیم بهینه‌سازی با انتظارات و نیازهای شما همخوانی داشته باشد.