رفتن به محتوای اصلی
بازگشت به وبلاگ

راهنماهای هوش مصنوعی

Epoch، Batch و Step چه فرقی دارند؟ شمارش گام آموزش

تعداد گام آموزش را برای ۱۰۳ نمونه حساب کنید؛ اثر دسته آخر و انباشت گرادیان، تفاوت پردازش دسته و به‌روزرسانی با کد پایتون.

Epoch یک گذر روی مجموعه آموزش است؛ Batch گروهی از نمونه‌ها در یک بار پردازش، و Step واژه‌ای است که باید در گزارش تعریف شود. بعضی گزارش‌ها هر پردازش دسته را step می‌نامند و بعضی هر به‌روزرسانی بهینه‌ساز را. وقتی انباشت گرادیان داریم، این دو تعداد می‌توانند متفاوت باشند.

برای ۱۰۳ نمونه چند گام داریم؟

فرض کنیم مجموعه‌ای ثابت با ۱۰۳ نمونه داریم، batch size برابر ۳۲ است، دسته آخر نگه داشته می‌شود و بعد از هر دسته دقیقاً یک گام بهینه‌ساز داریم. در هر گذر، اندازه دسته‌ها ۳۲، ۳۲، ۳۲ و ۷ است. پس تعداد دسته و به‌روزرسانی در هر epoch برابر سقف ۱۰۳÷۳۲ یعنی ۴ است؛ نه ۳ و نه عدد اعشاری ۳٫۲۱۸۷۵.

در سه epoch، تعداد به‌روزرسانی ۱۲ و مجموع دفعات دیده‌شدن نمونه‌ها ۳۰۹ است. ۳۰۹ تعداد نمونه یکتای تازه نیست؛ همان مجموعه در چند گذر استفاده شده است. این مثال فقط شمارش حلقه را نشان می‌دهد و هیچ مدلی در آن آموزش داده نمی‌شود.

اگر دسته آخر حذف شود چه؟

با قرارداد drop_last=True در این مسئله تک‌فرایندی، دسته ناقص ۷تایی حذف می‌شود. در هر گذر ۳ دسته و در سه گذر ۹ گام داریم؛ مجموع دفعات حضور نمونه ۹۶×۳=۲۸۸ می‌شود. اگر ترتیب در هر گذر ثابت بماند، همان هفت ردیف آخر همواره حذف می‌شوند. با جابه‌جایی ترتیب، هویت نمونه‌های حذف‌شده ممکن است عوض شود.

قرارداد سه گذرپردازش دستهبه‌روزرسانی بهینه‌سازدفعات حضور نمونه
نگه‌داشتن دسته آخر1212309
حذف دسته آخر99288
نگه‌داشتن آخر و انباشت هر دو دسته126309

انباشت گرادیان چه چیزی را تغییر می‌دهد؟

اگر بعد از هر دو دسته یک بار بهینه‌ساز را اجرا کنیم، در هر گذر چهار پردازش دسته اما دو به‌روزرسانی داریم. اینجا فرض کرده‌ایم در پایان هر epoch، گروه انباشت ناقص هم اجرا و بافر برای گذر بعد پاک می‌شود. اگر تعداد دسته فرد باشد یا انباشت از مرز epoch عبور کند، فرمول و قرارداد شمارش باید صریح نوشته شود.

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

کد شمارش، مستقل از کتابخانه مدل

import math

def batch_sizes(n, batch_size, drop_last=False):
    if n <= 0 or batch_size <= 0:
        raise ValueError('positive sample count and batch size required')
    sizes = [min(batch_size, n-start) for start in range(0, n, batch_size)]
    return [s for s in sizes if not drop_last or s == batch_size]

def count(n, b, epochs, accumulation=1, drop_last=False):
    if epochs <= 0 or accumulation <= 0:
        raise ValueError('positive epochs and accumulation required')
    sizes = batch_sizes(n, b, drop_last)
    # Flush each incomplete accumulation group at every epoch end.
    updates_per_epoch = math.ceil(len(sizes)/accumulation)
    return {'sizes': sizes, 'microsteps': len(sizes)*epochs,
            'optimizer_updates': updates_per_epoch*epochs,
            'sample_visits': sum(sizes)*epochs}

normal = count(103, 32, 3)
dropped = count(103, 32, 3, drop_last=True)
accumulated = count(103, 32, 3, accumulation=2)
print('normal', normal)
print('drop_last', dropped)
print('accumulate 2', accumulated)
assert normal == {'sizes':[32, 32, 32, 7], 'microsteps':12,
                  'optimizer_updates':12, 'sample_visits':309}
assert dropped['optimizer_updates'] == 9 and dropped['sample_visits'] == 288
assert accumulated['optimizer_updates'] == 6 and accumulated['microsteps'] == 12
assert batch_sizes(3, 32, True) == []

خروجی‌های این قطعه شمارش شبیه‌سازی‌شده حلقه‌اند؛ forward، backward یا optimizer واقعی اجرا نمی‌شود. برای داده کمتر از اندازه دسته و drop_last=True، تعداد دسته می‌تواند صفر شود؛ مثال پایانی همین حالت را کنترل می‌کند. این کد برای مجموعه محدود تک‌فرایندی است و شمارنده آموزش توزیع‌شده یا جریان داده نامتناهی نیست.

چه چیزی در گزارش آموزش ثبت کنیم؟

  • تعداد نمونه و قاعده ساخت مجموعه در هر گذر.
  • اندازه دسته واقعی و رفتار دسته آخر.
  • تعداد پردازش دسته و تعداد گام بهینه‌ساز با نام جدا.
  • تعداد انباشت و رفتار پایان گذر یا توقف زودهنگام.

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

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

فایل تمرین و منابع

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

تاریخ بررسی منابع: ۳ نوامبر ۲۰۲۶. منابع، مرجع روش‌اند؛ داده‌ها، اعداد و کد مثال برای همین راهنما طراحی شده‌اند.

ادامه مسیر یادگیری

محاسبه یک گام پس‌انتشار — این راهنما تعداد رویدادها را شمرد؛ برای دیدن محاسبه گرادیان در یک رویداد، مثال پس‌انتشار را بخوانید.

برای این نیاز، کدام خدمت مناسب‌تر است؟

تماس و منشی، چت سایت و تحلیل مکالمه سه مسیر متفاوت‌اند. ابتدا خدمت متناسب نیازتان را انتخاب کنید.

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه