Phase 19: Capstone Projects

كوزين LR مع حرارة خطية

جدول معدل التعلم هو ثاني أهم قرار بعد وظيفة الخسارة. أدام و مع التدهور الكوسينية والحرارة الخطية هي الافتراض الحديث للتدريب على نموذج اللغة لأنه يسمح للنموذج رؤية حجم خطوة فعالة صغيرة خلال التحديثات الفنية الأولى ، ويتم تصاعدها إلى ذروة محددة ، ويتدهور بسلاسة نحو الصفر. هذا الدروس يبني هذا الجدول الزمني، يرسم منحنى على خطوات التدريب، يكتب معايير التراجع بالقرب من الجدول الزمني، ويدل على أن الجدول الزمني يحترم حدود الاحتباس الحراري، الذروة، والفساد.

Type: Build

Languages: Python

Prerequisites: Phase 19 lessons 30-37

Time: ~90 minutes

أهداف التعلم

  • تنفيذ محفز AdamW متصل بتوقيت معدل التعلم الكوسيني مع التدفئة الخطية.
  • احسب القيمة الدقيقة للجدول الزمني في أي خطوة دون ان يتنقل نقطة العبور عبر الرحلات.
  • نسبة التدفقات L2 مع معدل التعلم حتى يتم ملاحظة صحة التدريب.
  • اعيد الجدول الزمني إلى مسار نصي يمكن للعين قراءته و CSV أي أداة يمكن استهلاكها.

المشكلة

أول ألف تحديث للتدريب هو الأكثر صاخبة أوزان النموذج ما زالت قريبة من البداية. تقدير اللحظة الثانية التشغيلية لم يتحسن معايير التراجع كبيرة و ضوضاء إذا كان معدل التعلم في ذروته خلال هذه التحديثات فإن النموذج إما يختلف تماماً أو يستقر في مستوى الخسارة لا يفر منه أبداً. الإصلاحات المعروفة هي قطع التراجع، والذي هو موضوع الدروس في المرحلة 19 45، وجدول زمني لعدد التعلم الذي يبدأ صغيرًا ويصعد.

جدول التدريبات مع الحرارة يحتوي على ثلاث مناطق من الخطوة الصفرة إلى الخطوةwarmup_stepsمعدل التعلم يتحرك خطيا من الصفر إلى ذروة التكوين lr_maxمن الخطوةwarmup_stepsللخطوةtotal_stepsمعدل التعلم يتبع النصف العلوي من منحنى الكوسين، يتحلل من lr_maxإلىlr_minبعد ذلكtotal_stepsمعدل التعلم يحدد على lr_minلذا مدرب خاطئ يخطئ فلن يخرج عن الجدول

مشكلة البناء هي أن الجدول الزمني سهل التخطئ به. يظهر الجدول الزمني لمدة ست ساعات في عملية التدريب كمعدل تعلم مرتفع بنسبة 1٪ أو منخفض جدا في اللحظة التي يبدأ فيها النموذج في التكيف بشكل كبير، وهو أمر غير مرئي ما لم يتم اختبار الجدول الزمني بشكل كامل على الحدود.

المفهوم

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. يمكن إعادة إنتاج الجدول لأن الإعداد هو معالج المحتوى؛ الجدول يمكن تدقيقه لأن الإعداد هو جزء من فرق العلاقات العامة.

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.يبدأ ركض 200 مليون خطوة مع 2000 خطوة للتدفئة في ذروته على الفور تقريباً؛ يبدأ ركض 20000 خطوة مع نفس العدد بتدفئة بنسبة 10 في المائة. حدد التدفئة كجزء (عادة: 1-3 في المائة) حتى يتساوى جدول الممارسة مع مدة التدريب.
  • 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 هو أفضل افتراضية ل IC تشغيل.

الشروط الرئيسية

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.