Phase 19: Capstone Projects

کوزین LR با گرم کردن خطی

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

Type: Build

Languages: Python

Prerequisites: Phase 19 lessons 30-37

Time: ~90 minutes

اهداف یادگیری

  • پیاده سازی یک بهینه ساز AdamW که به یک برنامه یادگیری با سرعت کوسین با گرم شدن خطی متصل است.
  • ارزش دقیق برنامه را در هر مرحله بدون حرکت نقطه شناور در میان مسیرها محاسبه کنید.
  • درجه ی L2 استاندارد به کنار سرعت یادگیری است بنابراین سلامت آموزش قابل مشاهده است.
  • جدول را به یک نقشه متن که چشم می تواند بخواند و یک CSV که هر ابزار می تواند مصرف کند، برگردانید.

مشکل

اولين هزار روزگيري از آموزش ها بلند ترينه وزن مدل هنوز نزديک شروع شدن تخمین دوهم لحظه ی کار بهینه ساز ثابت نشده نورم گرادینت بزرگ و شورآمیز است. اگر نرخ یادگیری در طول این بروزرسانی ها در اوج باشد، مدل یا کاملاً منحرف می شود یا به یک سطح بالا از دست دادن می رسد که هرگز از آن فرار نمی کند. دو راه حل شناخته شده، کپی گرادینت است که موضوع درس 45 مرحله 19 است و یک برنامه یادگیری که شروع کوچک و بالا می رود.

برنامه ی "کوسین با گرم شدن" سه منطقه دارد. از مرحله صفر تا مرحلهwarmup_stepsسرعت یادگیری خطی از صفر تا اوج پیک پیک شده است lr_maxاز قدمwarmup_stepsقدم زدنtotal_stepsسرعت یادگیری در نیمه بالا منحنی کوسین است و از lr_maxبهlr_minبعدشtotal_stepsنرخ یادگیری به lr_minپس یک مربی اشتباه که بیش از حد می گذرد به طور ساکت از برنامه خارج نمی شود.

مشکل ساخت این است که برنامه ها به راحتی با یک اشتباه می شوند. برنامه های خارج از یک به شش ساعت در یک دوره آموزشی به عنوان یک درصد بیش از حد بالا یا بیش از حد پایین در لحظه ای که مدل شروع به بیش از حد مناسب می شود، نشان می دهد، که غیر از زمانی که برنامه به طور کامل در مرزها آزمایش شود، نامرئی است.

مفهوم

flowchart TD
  Step[Training step] --> Branch{step state}
  Branch -- step <= warmup --> Linear[Linear ramp from 0 to lr_max]
  Branch -- warmup < step <= total --> Cosine[Cosine decay from lr_max to lr_min]
  Branch -- step > total --> Floor[Pin at lr_min]
  Linear --> Apply[AdamW.step]
  Cosine --> Apply
  Floor --> Apply
  Apply --> GradNorm[Compute gradient L2 norm]
  GradNorm --> Log[Step log row]
  Log --> Plot[Text plot + CSV]

فرمول گرم کردن

برایstepدر[0, warmup_steps]باwarmup_steps > 0، نرخ یادگیریlr_max * step / warmup_steps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .warmup_steps = 0این پرونده به عنوان "حتی گرم شدن" مورد استفاده قرار می گیرد: برنامه مستقیماً در lr_maxدر مرحله صفر و بلافاصله وارد تجزیه کوسین می شود.warmup_steps = 0برای بررسی برنامه هنوز منحنی قابل استفاده تولید می کند.

فرمول کوسین

برایstepدر(warmup_steps, total_steps]نرخ یادگیریlr_min + 0.5 (lr_max - lr_min) (1 + cos(pi * progress))کجاprogress = (step - warmup_steps) / max(1, total_steps - warmup_steps). درstep = warmup_stepsکوسین به cos(0) = 1، که به ما میگهlr_max، دقیقاً با نقطه گرم شدن مطابقت دارهstep = total_stepsکوسین به cos(pi) = -1، که به ما میگهlr_min، دقیقاً با نقطه پایان تجزیه مطابقت داره

ادامه در هر دو نقطه پایان تصادفی نیست. این دلیل است که برنامه به عنوان یک تابع واحد در طول اجرا می شود.step، نه به عنوان سه تابع مختلف به هم چسبیده شده. یک برنامه چسبیده یک مرز را در اولین بار از دست می دهدlr_maxتغییر کرده

طبقه بعد از کل پله ها

برایstep > total_stepsنرخ یادگیری در lr_min. قرارداد صریح است: برنامه اشتباه نمی کند و خارج نمی شود؛ آن را در زمین می کند و اجازه می دهد تا مربی هشدار را ثبت کند. مربی که نیاز به تمدید آموزش دارند برنامه را تغییر می دهند total_stepsنه حلقه

ثبت استاندارد درجه ای در کنار نرخ

برنامه نصف سلامتی تمرین است. استاندارد گرادینت نیمه دیگر است. چرخه تمرین هر دو را در هر مرحله ثبت می کند. یک دوره تمرین متفاوت نشان می دهد که درجه گرادینت قبل از کاهش افزایش می یابد. گرمایش خوب باعث می شود که درجه گرامی به صورت خطی با سرعت افزایش یابد. یک اوج بیش از حد تهاجمی به عنوان یک استاندارد ظاهر می شود که پس از گرم شدن بالا باقی می ماند. مجموعه داده های روی دیسکstep, lr, grad_l2_norm, loss. CSV تنها سوابق دوامداره

آن را بسازید

code/main.pyابزار:

  • CosineWithWarmup- یک تابع بی کشورlr(step) -> floatبر اساس برنامه تنظیم شده.
  • TrainState- مدل رو بسته می کنهAdamWبهینه سازی، و برنامه به یک تابع یک مرحله.
  • TrainState.step- یک گذرگاه جلو و یک گذرگاه عقب را اجرا می کند، استاندارد گرادیو L2 را ثبت می کند و اعمال می شودlr(step)به اصلاح کننده
  • plot_schedule_ascii- برنامه رو به عنوان نقشه متن که چشم می تونه بخونه بازگو مي کنه
  • write_schedule_csv- در هر مرحله با سرعت یادگیری یک ردیف را منتشر می کند.

یک نمایش در پایین فایل ساخت یک کوچک nn.Linearمدل، قطار ها برای 20 مرحله در یک دسته ورودی ثابت، و سرعت یادگیری در هر مرحله، نرمه گرادینت و از دست دادن را چاپ می کند. برنامه همچنین به عنوان یک نقشه متن برای بررسی عقل بصری ارائه می شود.

اجرا کن

bashpython3 code/main.py

اسکریپت صفر را ترک می کند و یک دفترچه تمرینات در هر مرحله و نقشه برنامه را چاپ می کند.

الگوهای تولید

چهار الگوی برنامه را به یک اثر هنری تولید می کنند.

Schedule lives in a config, not in code.مربی میخوادwarmup_steps،total_steps،lr_max،lr_minاز یک پیکربندی YAML یا JSON که به git اختصاص داده شده است. برنامه بازیافت می شود زیرا پیکربندی با محتوای مخاطب است؛ برنامه قابل بررسی است زیرا پیکربندی بخشی از تفاوت PR است.

Step counter is monotonic and decoupled from epochs.برخی از چارچوب ها مرحله و دوره را اشتباه می گیرند وقتی مجموعه داده ها پاره شده یا بارگذاری داده ها دوباره شروع می شود. جدول می گوید global_stepاز نقطه کنترل مربی، نه از یک کنتر محلی. یک راه اندازی مجدد در موقعیت برنامه مناسب ادامه می یابد زیرا کنتر قدم محور پایدار است.

Schedule plot in the run directory.هر دوره آموزش نوشته شدهoutputs/lr_schedule.pngیک بازرس که دایرکتوری را بازبینی می کند می تواند بدون اینکه چیزی را دوباره اجرا کند، برنامه را با عقل بررسی کند. این کلاس خطای برنامه را در زمان روابط عمومی می گیرد.

Log row schema is fixed. step, lr, grad_l2_norm, lossیک دفترچه یادداشت یا داشبورد پایین تر، طرح را می خواند؛ نامگذاری مجدد یک ستون بدون اینکه نسخه ای را تضاد کند، تمام داشبورد های موجود را باطل می کند.

ازش استفاده کن

الگوهای تولید:

  • Sweep peak before sweeping anything else. lr_maxاول آن را روی یک مدل کوچک پاک کنید، بهترینlr_maxبا اندازه مدل ضعیف است، بنابراین پاک کردن مدل کوچک یک پیش فرض قوی است.
  • Warmup is a fraction of total steps, not an absolute count.یک دو میلیون مرحله با دو هزار مرحله گرمایش تقریباً بلافاصله در اوج شروع می شود؛ یک دو هزار مرحله با همان تعداد گرمایش به ۱۰ درصد می رسد. گرمایش را به عنوان یک بخش تشکیل دهید (معمولاً: ۱ تا ۳ درصد) بنابراین برنامه با طول تمرین متناوب است.
  • lr_min is non-zero on purpose.طبقه ای که 10 درصد ازlr_maxاین روش باعث می شود که بهینه سازی کننده در طول دم طولانی یادگیری داشته باشد.lr_min = 0برنامه برنامه ای که منحنی آموزش را تولید می کند که در یک نقشه عالی به نظر می رسد و یک مدل که در واقع آموزش را تمام نکرده است.

-باده

outputs/skill-cosine-warmup.mdدر یک پروژه واقعی، توصیف می کند که کدام پیکربندی برنامه را حمل می کند، از کدام مرحله آموزشگاه شمارش جهانی خوانده می شود و چه چیزی lr_maxاین درس موتور را می برد.

تمرینات

  1. یک ویرانت برعکس ریشه مربع از برنامه اضافه کنید و آن را در یک راه اندازی تمرین بازی 200 مرحله مقایسه کنید. کدام منحنی باعث کاهش ضرر نهایی می شود؟
  2. اضافه کنید--restartپرچم که گرم شدن دوم را اضافه می کندtotal_steps / 2. دفاع از اینکه آیا شروع مجدد گرم بهبود یا آسیب در راه رفتن اسباب بازی.
  3. یک آزمون واحد اضافه کنید که برنامه مداوم باشد: برای هر مرحله در [0, total_steps]تفاوت|lr(step+1) - lr(step)|با lr_max / warmup_steps. .
  4. برنامه رو به يه خط وصل کنtorch.optim.lr_scheduler.LambdaLRدرسی از یک تابع ساده قدم استفاده می کند؛ بسته بندی چه چیزی را تغییر می دهد؟
  5. اضافه کنید--plot-pngپرچم که نقشه ای واقعی را از طریقmatplotlib. دفاع از اینکه آیا متن متن درس یا PNG برای اجرای CI بهتر است.

اصطلاحات کلیدی

TermWhat people sayWhat it actually means
Warmup"Slow start"Linear ramp from zero to lr_max over the first warmup_steps updates
Cosine decay"Smooth drop"Upper-half cosine curve from lr_max to lr_min over the remaining steps
Floor"After training"The fixed lr_min value the schedule pins at past total_steps
Gradient norm"L2 of grads"The Euclidean norm of the concatenated gradient vector, logged each step
Global step"Schedule axis"A monotonic step counter that survives restarts and drives the schedule

خواندن بیشتر

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.