timm documentation
التحسين
التحسين
تحتوي هذه الصفحة على توثيق مرجع واجهة برمجة التطبيقات (API) للمحسّنات (optimizers) المضمنة في timm، بالإضافة إلى نظرة عامة على كيفية اختيارها وإعدادها من خلال مصنع المحسّنات (optimizer factory).
الاستخدام
تُنشأ المُحسِّنات (Optimizers) بالاسم باستخدام create_optimizer_v2. عند تقديم نموذج، يقوم المصنع ببناء مجموعات المعاملات (استثناءات اضمحلال الوزن، والتخفيض الاختياري لمعدل التعلم على مستوى الطبقات) قبل بناء المُحسِّن. تُمرَّر الحُجج الخاصة بكل مُحسِّن كحُجج كلمات مفتاحية.
import timm
from timm.optim import create_optimizer_v2, list_optimizers
model = timm.create_model('vit_base_patch16_224')
# AdamW. 1D params (biases, norm scales) and params in model.no_weight_decay() are excluded from weight decay.
optimizer = create_optimizer_v2(model, opt='adamw', lr=1e-3, weight_decay=0.05)
# Layer-wise learning rate decay (fine-tuning), per-layer lr scales from the model's group_matcher().
optimizer = create_optimizer_v2(model, opt='adamw', lr=1e-3, weight_decay=0.05, layer_decay=0.75)
# Optimizer specific arguments are passed through.
optimizer = create_optimizer_v2(model, opt='lamb', lr=5e-3, weight_decay=0.02, trust_clip=True)
# A list of params or param groups can be passed instead of a model, weight decay grouping is then up to the caller.
optimizer = create_optimizer_v2(model.parameters(), opt='sgd', lr=0.1, momentum=0.9)
# All registered names, optionally with a description.
print(list_optimizers(with_description=True))يُتيح سكربت التدريب (train.py) نفس الوظائف من خلال هذه الأعلام:
- يحدد
--optالمُحسِّن. - يحدد
--lrمعدل التعلم. - يحدد
--weight-decayقيمة تخفيف الوزن. --momentumيحدد الزخم.--opt-epsيحدد قيمة إبسيلون (eps).--opt-betasيحدد معاملات بيتا (betas).- يحدد
--layer-decayمعدل التلاشي التدريجي لمعدل التعلم على مستوى الطبقات. --opt-kwargs key=value ...يمرر أي حُجج أخرى للمُحسِّن.
اتفاقيات التسمية
تكون الأسماء المسجلة بحروف صغيرة، وهي اسم المُحسِّن الأساسي مع بعض التعديلات:
| تعديل | المعنى | أمثلة |
|---|---|---|
بادئة c | النوع الحذر، حيث يتم إخفاء التحديث في المواضع التي يختلف فيها علامته عن علامة التدرج (المحسّنات الحذرة) | cadamw, clion, cmars, cadopt |
لاحقة w | تخفيف الوزن المنفصل (بنمط AdamW)، للمحسّنات التي تعتمد افتراضيًا على تخفيف L2 المقترن | sgdw, lambw, adoptw, novogradw, rmsproptfw |
لاحقة c | تصحيح للتلاشي الوزني، حيث يُقاس التلاشي بواسطة lr² / max_lr بدلاً من lr (لماذا تتزايد التدرجات بسرعة قرب نهاية التدريب) | adamc, nadamc, sgdc, lionc, adoptc, kronc |
بادئة n | زخم نيستروف (عائلات SGD وLARS وMuon) | nesterov, nlars, nmuon, nadamuon |
بادئة lookahead_ | غلّف المُحسِّن في Lookahead | lookahead_adamw |
بادئة fused | تنفيذ NVIDIA Apex المدمج (يتطلب apex) | fusedadamw, fusedlamb |
بادئة bnb | تنفيذ bitsandbytes، لاحقة 8bit لحالة 8-بت (يتطلب bitsandbytes) | bnbadamw, bnbadamw8bit |
تسبق بعض التسميات المعايير المتبعة: lambc وlarc هما LAMB / LARS مع قص نسبة الثقة (النسخة المصححة من LAMB مع الاضمحلال هي lambcd)، وmomentum هو SGD مع الزخم الكلاسيكي، وsgd هو SGD مع زخم Nesterov.
التنفيذات legacy في الجدول أدناه تسبق إدراجها في PyTorch.
عائلات المُحسِّنات
| الأسماء | التنفيذ | ملاحظات |
|---|---|---|
adamw, adam, nadam, radam, radamw, adamax, adadelta, adagrad, rmsprop, sgd, momentum, nesterov | torch.optim | |
adamwlegacy, adamc, cadamw, cadamc | AdamWLegacy | AdamW مع الحذر، اضمحلال مُصحح، قصّ التحديث، capturable |
nadamw, nadamc, cnadamw, cnadamc | NAdamW | AdamW مع زخم نيستروف (صيغة كفاءة الخوارزميات من MLCommons) |
adopt, adoptw, adoptc, cadopt, cadoptw, cadoptc | Adopt | نموذج مشتق من Adam يتقارب لأي قيمة لـ β2 |
adan, adanw, cadan, cadanw | Adan | زخم نيستروف التكيفي |
adabelief, radabelief | AdaBelief | radabelief يضيف تصحيحًا بنمط RAdam |
adafactor, cadafactor | Adafactor | fairseq Adafactor، حجم الخطوة النسبي عندما يكون lr=None |
adafactorbv, adafactorbvc, cadafactorbv, cadafactorbvc | AdafactorBigVision | Big Vision Adafactor، زخم الدقائق الثانية المُجزّأة، زخم بدقة منخفضة، قصّ التحديث |
adamp, cadamp, sgdp, csgdp | AdamP, SGDP | إسقاط التحديث للأوزان غير الحساسة للمقياس |
adahessian | Adahessian | من الرتبة الثانية، ويتطلب دالة مغلقة (is_second_order) |
kron, kronw, kronc | Kron | PSGD مع مُسبِّق مُعامَل مُقسَّم على شكل كرونكر |
lamb, lambc, lambw, lambcw, lambcd, clamb, clambw | Lamb | زخم التكيف على مستوى الطبقات، متغيرات trust_clip (lambc، lambcw) |
laprop, lapropc, claprop | LaProp | فصل الزخم والتكيف |
lars, larc, nlars, nlarc | Lars | مقياس المعدل التكيفي على مستوى الطبقات، متغيرات trust_clip (larc، nlarc) |
lion, lionc, clion, clionc | Lion | زخم الإشارة المتطور |
madgrad, madgradw | MADGRAD | المُتَوَسِّط المزدوج القائم على الزخم |
mars, cmars | Mars | تقليل التباين، تحديث بأسلوب AdamW أو Lion |
muon, nmuon, adamuon, nadamuon | Muon | زخم مُعامَد بطريقة نيوتن-شولتز للأوزان ذات البُعد 2+، مع اللجوء إلى AdamW / NAdamW للمعاملات ذات البُعد 1 |
novograd, novogradw, novogradc | NvNovoGrad | الزخمات المعيارية على مستوى الطبقات |
rmsproptf, rmsproptfw, rmsproptfc, crmsproptf | RMSpropTF | ترتيب العمليات في TensorFlow ومعالجة eps، مع دمج lr في مخزن الزخم |
sgdw, nesterovw, sgdc, csgdw, csgdc | SGDW | SGD مع انحلال الوزن المنفصل |
nadamlegacy, radamlegacy | NAdamLegacy, RAdamLegacy | تنفيذات مرجعية، تم استبدالها بواسطة torch.optim |
fused*, bnb* | NVIDIA Apex، bitsandbytes | يُسجَّل عند تثبيت الحزمة |
خيارات شائعة
تشارك معظم محسّنات timm مجموعة من الخيارات إلى جانب الخيارات المعتادة lr وweight_decay وbetas وeps. يمكن التحقق من المحسّنات التي تقبل أيًا من هذه الخيارات من خلال التواقيع (signatures) الخاصة بالفئات أدناه، حيث يثير المصنع (factory) خطأً عند تمرير حِجج غير مدعومة.
cautionيطبّق قناع التحديث الحذر، وهو ما يعادل أسماء السجلّات التي تبدأ بالبادئةc.- يُقيّم
corrected_weight_decayالتخميد المنفصل للوزن بمعاملlr² / max_lrبدلاً منlr(الأسماء التي تنتهي بلاحقةc)، بحيث يتبع التخميد الفعلي جدول معدل التعلم. يمثلmax_lrمعدل التعلم الذي بُني به المُحسِّن، لذا يجب بناؤه بمعدل التعلم الذروي للجدول (كما تفعلtrain.py). يُحفظ هذا القيمة في كل مجموعة من مجموعات المعلمات (max_lr_snapshot) ويُحفظ ويُستعاد مع حالة المُحسِّن. decoupled_decay(أوdecoupled) يبدّل المُحسِّنات التي تعتمد افتراضيًا على تخميد L2 مقترن إلى تخميد بنمط AdamW (الأسماء المنتهية بـw).- يختار
foreachالتنفيذ متعدد الموترات. افتراضيًا (None)، يُستخدم على CUDA والأجهزة الأخرى التي تدعم نواة foreach، بما يتوافق معtorch.optim، ما لم يكن غير مدعوم من قبل الإعدادات (موترlrبدونcapturable، أوcautionعلى إصدار PyTorch لا يحتوي على الحمولة الزائدة_foreach_maximum_المطلوبة). يُنفَّذ الخطوة متعددة الموترات في مجموعات من المعاملات بحجم يُبقي مجموعة العمل لكل مجموعة داخل ذاكرة L2 في وحدة معالجة الرسوميات، وهو أسرع من تمرير كل معامل عبر الذاكرة مرة واحدة لكل عملية في النماذج الكبيرة. يُشتق حجم المجموعة من حجم ذاكرة L2 في الجهاز (PyTorch >= 2.5) ويُتخطى التقسيم إلى مجموعات على الأجهزة التي يكون فيها حجم المجموعة الناتج أقل من 4 ملايين عنصر. يعيدTIMM_FOREACH_CHUNK_SIZE=<elements>تعيين حجم المجموعة، بينما يعطّل0التقسيم إلى مجموعات. - يحافظ
capturable(AdamWLegacy، NAdamW، Adopt، Muon) على عدد الخطوات على الجهاز حتى يمكن التقاط الخطوة في رسم CUDA. تقبل جميع المُحسِّناتlrالمُعطاة كمُتجه بعدد أبعاد صفر، ويتم تحديثه في مكانه بواسطة جدول، للاستخدام معtorch.compileورسميات CUDA. clipping_threshold(AdamWLegacy, NAdamW, AdafactorBigVision) يقصّ التحديث بناءً على RMS الخاص به،update / max(1, rms / threshold)حيثrmsهو RMS للتدرّج المُطبَّع بلحظة ثانية، لكل متجه (StableAdamW, Adafactor).1.0كما في الأوراق البحثية. وكما في Adafactor، لا يُقصّ اضمحلال الوزن (المفكوك)، بل يقوم StableAdamW أيضًا بمقياس اضمحلال الوزن بمعدل التعلم المقصوص.maximizeتعظّم الدالة الهدف بدلاً من تقليلها.
تُدعم معاملات الدقة المنخفضة (bfloat16، float16) على نطاق واسع:
- AdaBelief وRAdamLegacy وAdafactor تحتفظ بحالتها في
float32للمعاملات منخفضة الدقة. - يحافظ AdafactorBigVision على زخمه بدقة مخفّضة (
momentum_dtype). - يتميز Kron بخيارات منفصلة هي
mu_dtype/precond_dtype.
تُحافظ أنواع الحالة هذه على قيمها عند استخدام load_state_dict (فالمحمّل الافتراضي في PyTorch يُحوّل الحالة إلى نوع المعامل).
تتجنب دوال الخطوة مزامنة المضيف (فروع بايثون المعتمدة على البيانات على متجهات الجهاز)، باستثناء فحص الإسقاط في AdamP / SGDP.
مجموعات المعلمات
عند تقديم نموذج، تُجمّع create_optimizer_v2 المعاملات باستخدام param_groups_weight_decay (بدون اضمحلال للمعاملات أحادية البعد ومجموعة no_weight_decay() الخاصة بالنموذج) أو، عند تعيين layer_decay، باستخدام param_groups_layer_decay، والذي يعيّن مقياس معدل تعلّم قدره layer_decay ** (num_layers - layer_id) لكل طبقة باستخدام group_matcher() الخاص بالنموذج. أما النماذج التي لا تحتوي على group_matcher() فتعود إلى auto_group_layers، والذي يحتاج إلى pretrained_cfg['classifier'] الخاص بالنموذج لفصل الرأس. بالنسبة لمُحسِّنات الهجين (Muon)، تُوجّه الحجة fallback_list و fallback_no_weight_decay المعاملات إلى مُحسِّن الاحتياط (AdamW).
واجهة برمجة التطبيقات
دوال المصنع
timm.optim.create_optimizer_v2
< source >( model_or_params: typing.Union[torch.nn.Module, torch.optim.optimizer.ParamsT]opt: str = 'sgd'lr: typing.Optional[float] = Noneweight_decay: float = 0.0momentum: float = 0.9foreach: typing.Optional[bool] = Nonefilter_bias_and_bn: bool = Truefallback_list: typing.Collection[str] = ()fallback_no_weight_decay: bool = Falselayer_decay: typing.Optional[float] = Nonelayer_decay_min_scale: float = 0.0layer_decay_no_opt_scale: typing.Optional[float] = Noneparam_group_fn: typing.Optional[typing.Callable[[torch.nn.Module], torch.optim.optimizer.ParamsT]] = None**kwargs: typing.Any )
المعاملات
- model_or_params — نموذج PyTorch أو قابل للتكرار من المعاملات/مجموعات المعاملات. إذا تم تقديم نموذج، فسيتم استخراج المعاملات وتجميعها تلقائيًا بناءً على الحُجج الأخرى.
- opt — اسم المُحسِّن الذي سيتم إنشاؤه (مثلًا: ‘adam’، ‘adamw’، ‘sgd’). استخدم list_optimizers() لرؤية الخيارات المتاحة.
- lr — معدل التعلم. إذا كان None، فسيتم استخدام القيمة الافتراضية للمُحسِّن.
- weight_decay — معامل تخفيف الوزن. سيُستخدم لإنشاء مجموعات المعلمات إذا كان model_or_params نموذجًا.
- momentum — معامل الزخم للمحسّنات التي تدعمه. يُستخدم فقط إذا كان المحسّن المختار يقبل معامل الزخم.
- foreach — تفعيل/تعطيل تنفيذ foreach (متعدد المتجهات) إذا كان متاحًا. إذا كانت القيمة None، فسيتم استخدام الإعدادات الافتراضية الخاصة بمحسّن الأداء.
- filter_bias_and_bn — إذا كانت القيمة True، فلن يُطبَّق تخفيف الوزن (weight decay) على معاملات الانحياز وطبقات التطبيع (جميع المعاملات أحادية البعد). يُستخدم هذا الخيار فقط عندما يكون model_or_params نموذجًا و weight_decay > 0.
- fallback_list — مجموعة من أنماط أسماء المعلمات لاستخدام مُحسِّن الاحتياط في المُحسِّنات الهجينة (مثل AdamW لـ Muon). يدعم المطابقة باستخدام الرموز البرجية.
- fallback_no_weight_decay — إذا كانت القيمة True، فستستخدم المعاملات الموجودة في قائمة no_weight_decay() الخاصة بالنموذج المُحسِّن الاحتياطي للمُحسِّنات الهجينة (مثل AdamW لـ Muon).
- layer_decay — معامل اختياري لتخفيف معدل التعلم على مستوى الطبقات. إذا تم تقديمه، فسيتم قياس معدلات التعلم بواسطة layer_decay^(max_depth - layer_depth). يُستخدم فقط عندما يكون model_or_params نموذجًا.
- param_group_fn — دالة اختيارية لإنشاء مجموعات معلمات مخصصة. إذا تم توفيرها، سيتم تجاهل خيارات تجميع المعلمات الأخرى.
- **kwargs — حُجج إضافية خاصة بالمُحسِّن (مثل betas في Adam).
أنشئ مثبّتًا (optimizer) عبر سجل timm.
ينشئ مُحسِّناً (optimizer) ويضبطه مع مجموعات معاملات وإعدادات مناسبة. يدعم إنشاء مجموعات معاملات تلقائياً لتلاشي الأوزان ومعدلات التعلم على مستوى الطبقات، بالإضافة إلى تجميع مخصص للمعاملات.
أمثلة:
عند استخدام AdamW من نموذج، تُنشأ مجموعات المعاملات تلقائيًا:
optimizer = create_optimizer_v2(model, 'adamw', lr=1e-3)SGD مع الزخم وتلاشي الأوزان:
optimizer = create_optimizer_v2(model, 'sgd', lr=0.1, momentum=0.9, weight_decay=1e-4)أدام مع انخفاض معدل التعلم على مستوى الطبقات:
optimizer = create_optimizer_v2(model, 'adam', lr=1e-3, layer_decay=0.7)مجموعات المعلمات المخصصة:
def group_fn(model):
return [
{'params': model.backbone.parameters(), 'lr': 1e-4},
{'params': model.head.parameters(), 'lr': 1e-3},
]
optimizer = create_optimizer_v2(model, 'sgd', param_group_fn=group_fn)ملاحظة: أولوية معالجة مجموعات المعلمات:
- إذا تم توفير param_group_fn، فسيتم استخدامه حصريًا
- إذا تم توفير layer_decay، فسيتم إنشاء مجموعات على مستوى الطبقات
- إذا كان weight_decay > 0 وكان filter_bias_and_bn True، فسيتم إنشاء مجموعات تخفيف الوزن
- وإلا، فستكون جميع المعاملات في مجموعة واحدة
timm.optim.list_optimizers
< source >( filter: typing.Union[str, typing.List[str]] = ''exclude_filters: typing.Optional[typing.List[str]] = Nonewith_description: bool = False ) → If with_description is False
المعاملات
- filter — سلسلة نصية أو قائمة بسلاسل نصية بنمط النجمة البرية (على سبيل المثال، ‘adam’ لجميع متغيرات Adam، أو [‘adam’, ‘*8bit’] لمتغيرات Adam ومحسّنات 8-بت). تعني السلسلة الفارغة عدم وجود تصفية.
- exclude_filters — قائمة اختيارية لأنماط كروية للاستبعاد. على سبيل المثال، [’8bit’, ‘fused’] يستبعد التنفيذات الثمانية البتات والمدمجة.
- with_description — إذا كانت True، تُرجع tuples من (name, description) بدلاً من الأسماء فقط. توفر الأوصاف شرحًا موجزًا لخصائص المُحسِّن.
يعيد
إذا كان with_description هو False
قائمة بأسماء المُحسِّنات كنصوص (مثلًا: [‘adam’, ‘adamw’, …]) إذا كان with_description هو True: قائمة من السلاسل (توبلز) من (name, description) (مثلًا: [(‘adam’, ‘Adaptive Moment…’), …])
قائمة أسماء المُحسِّنات المتاحة، مع إمكانية التصفية اختيارياً.
عرض جميع المُحسِّنات المسجَّلة، مع إمكانية التصفية الاختيارية باستخدام أنماط النجمة. يمكن تصفية المُحسِّنات باستخدام أنماط include وexclude، ويمكن اختيارياً إرجاع الأوصاف مع اسم كل مُحسِّن.
أمثلة:
>>> list_optimizers()
['adam', 'adamw', 'sgd', ...]
>>> list_optimizers(['la*', 'nla*']) # List lamb & lars
['lamb', 'lambc', 'larc', 'lars', 'nlarc', 'nlars']
>>> list_optimizers('*adam*', exclude_filters=['bnb*', 'fused*']) # Exclude bnb & apex adam optimizers
['adam', 'adamax', 'adamp', 'adamw', 'nadam', 'nadamw', 'radam']
>>> list_optimizers(with_description=True) # Get descriptions
[('adabelief', 'Adapts learning rate based on gradient prediction error'),
('adadelta', 'torch.optim Adadelta, Adapts learning rates based on running windows of gradients'),
('adafactor', 'Memory-efficient implementation of Adam with factored gradients'),
...]timm.optim.get_optimizer_class
< source >( name: strbind_defaults: bool = True ) → If bind_defaults is False
المعاملات
- name — اسم المُحسِّن المطلوب استرجاعه (مثلًا: ‘adam’، ‘sgd’)
- bind_defaults — إذا كانت القيمة True، تُرجع دالة جزئية مع ربط الحُجج الافتراضية من OptimInfo. إذا كانت القيمة False، تُرجع فئة المُحسِّن الخام.
يعيد
إذا كان bind_defaults هو False
فئة المُحسِّن (مثل torch.optim.Adam) إذا كان bind_defaults هو True: دالة جزئية مع ربط الحُجج الافتراضية
يرفع
ValueError
ValueError— إذا لم يتم العثور على اسم المُحسِّن في السجل
احصل على فئة المُحسِّن (optimizer) بالاسم مع خيار ربط الحُجج الافتراضية.
يسترجع فئة المُحسِّن أو دالة جزئية مع ربط الحُجج الافتراضية مسبقًا. يتيح هذا الفتح المباشر للمُحسِّنات بإعداداتها الافتراضية دون المرور عبر المصنع الكامل.
أمثلة:
timm.optim.get_optimizer_info
< source >( name: str )
احصل على OptimInfo لمُحسِّن (optimizer).
دوال مجموعات المعلمات
timm.optim.param_groups_weight_decay
< source >( model: Moduleweight_decay: typing.Optional[float] = 1e-05weight_decay_exclude_1d: bool = Trueno_weight_decay_list: typing.Collection[str] = ()fallback_list: typing.Collection[str] = ()fallback_no_weight_decay: bool = False )
timm.optim.param_groups_layer_decay
< source >( model: Moduleweight_decay: float = 0.05no_weight_decay_list: typing.Collection[str] = ()fallback_list: typing.Collection[str] = ()fallback_no_weight_decay: bool = Falseweight_decay_exclude_1d: bool = Truelayer_decay: float = 0.75min_scale: float = 0.0no_opt_scale: typing.Optional[float] = Noneverbose: bool = False )
مجموعات المعاملات لتخفيف معدل التعلم على مستوى الطبقات والتخفيف الوزني بناءً على BEiT: https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L58
فئات المُحسِّن
فئة timm.optim.AdaBelief
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-16weight_decay = 0amsgrad = Falsedecoupled_decay = Truefixed_decay = Falserectify = Truedegenerated_to_sgd = Trueforeach: typing.Optional[bool] = None )
المعاملات
- params (iterable) — متسلسلة من المعلمات التي سيتم تحسينها أو قواميس تعرّف مجموعات المعلمات
- lr (float, اختياري) — معدل التعلم (الافتراضي: 1e-3)
- betas (Tuple[float, float], اختياري) — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج ومربعه (الافتراضي: (0.9, 0.999))
- eps (float, اختياري) — حد يُضاف إلى المقام لتحسين الاستقرار العددي (الافتراضي: 1e-16)
- weight_decay (float, اختياري) — تضاؤل الوزن (عقوبة L2) (الافتراضي: 0)
- amsgrad (منطقي، اختياري) — ما إذا كان سيتم استخدام متغير AMSGrad من هذه الخوارزمية من الورقة
On the Convergence of Adam and Beyond_ (الافتراضي: False) - decoupled_decay (منطقي، اختياري) — (الافتراضي: True) إذا تم ضبطه على True، فإن المُحسِّن يستخدم تخفيف الوزن المنفصل كما في AdamW
- fixed_decay (boolean, optional) — (الافتراضي: False) يُستخدم هذا عندما يُضبط decouple على True. عندما يكون fixed_decay == True، يتم تنفيذ تخفيف الوزن (weight decay) على النحو التالي: $W{new} = W{old} - W{old} \times decay$. عندما يكون fixeddecay == False، يتم تنفيذ تخفيف الوزن على النحو التالي: $W{new} = W{old} - W{old} \times decay \times lr$. لاحظ أنه في هذه الحالة، ينخفض معدل تخفيف الوزن (weight decay) مع معدل التعلم (lr).
- rectify (boolean, optional) — (الافتراضي: True) إذا تم ضبطه على True، يتم تنفيذ التحديث المُصحَّح بشكل مشابه لـ RAdam
- degenerated_to_sgd (boolean, optional) (الافتراضي —True) إذا تم ضبطه على True، يتم تنفيذ تحديث SGD عندما تكون تباين التدرج مرتفع
- foreach (boolean, optional) — استخدام تنفيذ foreach (متعدد المتجهات)، وهو الافتراضي (None) ما لم يكن غير مدعوم
يُنفّذ خوارزمية AdaBelief. تم تعديله من Adam في PyTorch
مرجع: مُحسِّن AdaBelief، يُكيّف أحجام الخطوات بناءً على الثقة في التدرجات المرصودة، NeurIPS 2020
لجدول كامل بالمعاملات الفائقة الموصى بها، راجع https://github.com/juntang-zhuang/Adabelief-Optimizer’ على سبيل المثال، تدريب/الحجج لـ EfficientNet راجع هذه المقاطع
- رابط إلى train_script: https://gist.github.com/juntang-zhuang/0a501dd51c02278d952cf159bc233037
- رابط إلى args.yaml: https://gist.github.com/juntang-zhuang/517ce3c27022b908bb93f78e4f786dc3
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.Adafactor
< source >( params: ParamsTlr: typing.Optional[float] = Noneeps: float = 1e-30eps_scale: float = 0.001clip_threshold: float = 1.0decay_rate: float = -0.8betas: typing.Optional[typing.Tuple[float, float]] = Noneweight_decay: float = 0.0scale_parameter: bool = Truewarmup_init: bool = Falsemin_dim_size_to_factor: int = 16caution: bool = False )
يُنفّذ خوارزمية Adafactor.
تعتمد هذه النسخة على: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost (انظر https://arxiv.org/abs/1804.04235)
لاحظ أن هذا المُحسِّن يعدّل معدل التعلم داخلياً بناءً على خيارات scale_parameter وrelative_step وwarmup_init.
يُستخدم جدول معدل تعلّم يدوي (خارجي) عند ضبط lr (حيث يصبح relative_step كاذبًا في هذه الحالة).
يرجى ملاحظة أنه في هذا التنفيذ، لا تنطبق scale_parameter وwarmup_init إلا على معدل التعلّم الخاص بالخطوة النسبية (lr=None)، على عكس fairseq / HF Transformers، حيث لا يُطبَّق تحجيم RMS للمعاملات على معدل التعلّم الخارجي.
Ags: params: متسلسلة من المعاملات المراد تحسينها أو قواميس تعرّف مجموعات المعاملات lr: معدل تعلّم خارجي eps: ثوابت تنظيم لمربع التدرج ومقياس المعامل على التوالي eps_scale: ثوابت تنظيم لمقياس المعامل على التوالي clip_threshold: عتبة الجذر التربيعي للمتوسط للتدرج النهائي للتحديث decay_rate: معامل يُستخدم لحساب المتوسطات المتحركة لمربع التدرج beta1: معامل يُستخدم لحساب المتوسطات المتحركة للتدرج weight_decay: اضمحلال الأوزان scale_parameter: إذا كانت True، يتم توسيع معدل تعلّم الخطوة النسبي بالجذر التربيعي للمتوسط لمقياس المعامل warmup_init: يعتمد حساب معدل التعلّم المعتمد على الوقت على ما إذا كان يتم استخدام تهيئة الإحماء
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.AdafactorBigVision
< source >( params: ParamsTlr: float = 1.0min_dim_size_to_factor: int = 16decay_rate: float = 0.8decay_offset: int = 0beta2_cap: float = 0.999momentum: typing.Optional[float] = 0.9momentum_dtype: typing.Union[str, torch.dtype] = torch.bfloat16eps: typing.Optional[float] = Noneweight_decay: float = 0.0clipping_threshold: typing.Optional[float] = Noneunscaled_wd: bool = Falsecaution: bool = Falsecorrected_weight_decay: bool = False )
تنفيذ PyTorch لمتغير Adafactor الخاص بـ BigVision مع كلا التنفيذين أحادي المتجه ومتعدد المتجهات.
مُعدَّل من https://github.com/google-research/big_vision بواسطة روس وايتمان
فئة timm.optim.Adahessian
< source >( paramslr = 0.1betas = (0.9, 0.999)eps = 1e-08weight_decay = 0.0hessian_power = 1.0update_each = 1n_samples = 1avg_conv_kernel = False )
المعاملات
- params (iterable) — قائمة قابلة للتكرار من المعلمات المراد تحسينها، أو قواميس تحدد مجموعات المعلمات
- lr (float, اختياري) — معدل التعلم (الافتراضي: 0.1)
- betas ((float, float), اختياري) — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج وأثر المصفوفة الهيسية المربعة (الافتراضي: (0.9, 0.999))
- eps (float, اختياري) — حد يُضاف إلى المقام لتحسين الاستقرار العددي (الافتراضي: 1e-8)
- weight_decay (float, اختياري) — تضاؤل الأوزان (عقوبة L2) (الافتراضي: 0.0)
- hessian_power (float، اختياري) — أُسّ أثر الهيسيان (الافتراضي: 1.0)
- update_each (int، اختياري) — حساب تقريب أثر الهيسيان فقط بعد هذا العدد من الخطوات (لتوفير الوقت) (الافتراضي: 1)
- n_samples (int, اختياري) — عدد مرات أخذ عينات من
zلتقريب أثر الهيسيان (الافتراضي: 1)
يُنفّذ خوارزمية AdaHessian من “ADAHESSIAN: مُحسِّن من الرتبة الثانية مُتكيف لتعلم الآلة”
يحصل على جميع المعاملات في جميع مجموعات المعاملات التي تحتوي على تدرجات
يُحسب تقريب هاتشيسون لمتتبع الهيسين ويجمعه لكل معامل قابل للتدريب.
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
يصفّر آثار هيسيان المتراكمة.
فئة timm.optim.AdamP
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0delta = 0.1wd_ratio = 0.1nesterov = Falsecaution = False )
فئة timm.optim.AdamWLegacy
< source >( params: ParamsTlr: float = 0.001betas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-08weight_decay: float = 0.01amsgrad: bool = Falsecaution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = Nonecapturable: bool = Falseclipping_threshold: typing.Optional[float] = None )
المعاملات
- params — قابل للتكرار من المعلمات المراد تحسينها أو قواميس تعرّف مجموعات المعلمات
- lr — معدل التعلم
- betas — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج ومربعه
- eps — حد يُضاف إلى المقام لتحسين الاستقرار العددي
- weight_decay — معامل تخفيف الوزن
- amsgrad — ما إذا كان سيتم استخدام متغير AMSGrad لهذا الخوارزمية
من الورقة
On the Convergence of Adam and Beyond - caution — توخَّ الحذر عند استخدام AdamW
- corrected_weight_decay — تطبيق تخفيف الوزن المُصحَّح (lr**2 / max_lr)
- maximize — تعظيم المعاملات بناءً على الدالة الهدف، بدلاً من تقليلها
- foreach — whether foreach implementation of optimizer is used. If unspecified by the user (so foreach is None), we will try to use foreach over for-loop implementation on CUDA, since it is faster in general.
- capturable — ما إذا كان هذا المثال آمنًا للالتقاط في رسم CUDA. قد يؤدي تمرير True إلى تدهور الأداء غير المرتبط بالرسم، لذا إذا لم تكن تنوي التقاط هذا المثال ضمن رسم، اتركه False
- clipping_threshold — عتبة قصّ تحديث RMS (StableAdamW، https://arxiv.org/abs/2304.13013)، حيث يُقاس التحديث بمعامل 1 / max(1, rms / clipping_threshold) حيث rms هو RMS للتدرج / (sqrt(v_hat) + eps). يُخمد التحديث للمعاملات التي تشهد زيادة مفاجئة في التدرج مقارنةً بتقدير لحظتها الثانية. القيمة 1.0 كما وردت في الورقة البحثية، وقيمة None (الافتراضية) تعطل هذه الميزة. وكما في Adafactor، لا يُقصّ اضمحلال الوزن المنفصل (كما أن StableAdamW يقاس اضمحلال الوزن أيضاً بمعدل التعلم المقصوص).
يُنفّذ خوارزمية AdamW.
ملاحظة: تم إيقاف استخدام هذا التنفيذ لصالح torch.optim.AdamW ويبقى كمرجع
المراجع:
- آدام: طريقة لتحسين عشوائي: https://arxiv.org/abs/1412.6980
- تنظيم تخفيف الوزن المنفصل: https://arxiv.org/abs/1711.05101
- حول تقارب آدم وما بعده: https://openreview.net/forum?id=ryQu7f-RZ
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.Adan
< source >( paramslr: float = 0.001betas: typing.Tuple[float, float, float] = (0.98, 0.92, 0.99)eps: float = 1e-08weight_decay: float = 0.0no_prox: bool = Falsecaution: bool = Falseforeach: typing.Optional[bool] = None )
المعاملات
- params — قابل للتكرار من المعلمات المراد تحسينها أو قواميس تعرّف مجموعات المعلمات.
- lr — معدل التعلم.
- betas — المعاملات المستخدمة للعزوم من الرتبة الأولى والثانية.
- eps — حد يُضاف إلى المقام لتحسين الاستقرار العددي.
- weight_decay — تخفيف الأوزان المنفصل (عقوبة L2)
- no_prox — كيفية تنفيذ تراجع الأوزان
- caution — تفعيل الحذر من ‘Cautious Optimizers’
- foreach — إذا كانت القيمة True، فسيتم استخدام تنفيذ torch._foreach. أسرع لكنه يستخدم ذاكرة أكثر قليلاً.
يُنفّذ نسخة من Adan مبنية على PyTorch.
قُدم خوارزمية Adan في ورقة Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models https://arxiv.org/abs/2208.06677
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.Adopt
< source >( params: ParamsTlr: typing.Union[float, torch.Tensor] = 0.001betas: typing.Tuple[float, float] = (0.9, 0.9999)eps: float = 1e-06clip_exp: typing.Optional[float] = 0.333weight_decay: float = 0.0decoupled: bool = Falsecorrected_weight_decay: bool = Falsecaution: bool = Falseforeach: typing.Optional[bool] = Nonemaximize: bool = Falsecapturable: bool = Falsedifferentiable: bool = False )
ADOPT: Adam المُعدَّل يمكن أن يتقارب مع أي β2 بمعدل مثالي: https://arxiv.org/abs/2411.02853
خطوة
< source >( closure = None )
أداء خطوة تحسين واحدة.
class timm.optim.kron.Kron
< source >( params: ParamsTlr: float = 0.001momentum: float = 0.9weight_decay: float = 0.0preconditioner_update_probability: typing.Union[typing.Callable, float, NoneType] = Nonemax_size_triangular: int = 2048min_ndim_triangular: int = 2memory_save_mode: typing.Optional[str] = Nonemomentum_into_precond_update: bool = Trueprecond_lr: float = 0.1precond_init_scale: float = 1.0mu_dtype: typing.Optional[torch.dtype] = Noneprecond_dtype: typing.Optional[torch.dtype] = Nonedecoupled_decay: bool = Falsecorrected_weight_decay: bool = Falseflatten: bool = Falseflatten_start_dim: int = 2flatten_end_dim: int = -1stochastic_weight_decay: bool = Falsedeterministic: bool = False )
المعاملات
- params — قابل للتكرار من المعلمات المراد تحسينها أو قواميس تعرّف مجموعات المعلمات.
- lr — معدل التعلم.
- momentum — معامل الزخم.
- weight_decay — اضمحلال الأوزان.
- preconditioner_update_probability — احتمال تحديث المُعدِّم المسبق. إذا كانت القيمة None، فإن القيمة الافتراضية هي جدول يُخفِّض الاحتمال من 1.0 إلى 0.03 بحلول الخطوة 4000.
- max_size_triangular — الحد الأقصى لحجم مُعدّم الأبعاد ليكون مثلثيًا.
- min_ndim_triangular — الحد الأدنى لعدد الأبعاد التي يجب أن تمتلكها طبقة ما حتى تستخدم المُسبِّقات المثلثية.
- memory_save_mode — ‘one_diag’ أو ‘smart_one_diag’ أو ‘all_diag’، والقيمة الافتراضية هي None لتعيين جميع المُسَبِّقات (preconditioners) على أنها مثلثية، يُعيّن ‘one_diag’ أكبر بُعد أو البعد الأخير ليكون قطريًا في كل طبقة، بينما يُعيّن ‘all_diag’ جميع المُسَبِّقات لتكون قطرية.
- momentum_into_precond_update — ما إذا كان يجب إرسال الزخم إلى تحديث المُسَبِّق بدلاً من التدرجات الخام.
- mu_dtype — نوع البيانات (Dtype) لمجمّع الزخم.
- precond_dtype — نوع البيانات (Dtype) للمُعدِّم المسبق (preconditioner).
- decoupled_decay — انحطاط وزن منفصل على غرار AdamW
- corrected_weight_decay — تطبيق تخفيف الوزن المُصحَّح عند استخدام decoupled_decay (lr**2 / max_lr)
- flatten — تسطيح الأبعاد بدلاً من الاعتماد الكامل على التعبيرات للمعاملات ذات الرتبة الأعلى
- flatten_start_dim — بداية نطاق التسطيح، القيمة الافتراضية هي 2. يبدو أنه توازن جيد لشبكات التلافف (ConvNets).
- flatten_end_dim — نهاية نطاق التسطيح، القيمة الافتراضية هي -1.
- stochastic_weight_decay — تفعيل تعديل عشوائي لتلاشي الأوزان
- deterministic — سلوك حتمي عبر الحفظ / التحميل (الاستئناف). FIXME بطيء، يحتاج إلى عمل
يُنفّذ PSGD Kron من https://github.com/lixilinx/psgd_torch.
فئة timm.optim.Lamb
< source >( params: ParamsTlr: float = 0.001bias_correction: bool = Truebetas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-06weight_decay: float = 0.01grad_averaging: bool = Truemax_grad_norm: typing.Optional[float] = 1.0trust_clip: bool = Falsealways_adapt: bool = Falsecaution: bool = Falsedecoupled_decay: bool = Falsecorrected_weight_decay: bool = Falseforeach: typing.Optional[bool] = None )
المعاملات
- params — قابل للتكرار من المعلمات المراد تحسينها أو قواميس تعرّف مجموعات المعلمات.
- lr — معدل التعلم
- betas — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج ومعايره.
- eps — حد يُضاف إلى المقام لتحسين الاستقرار العددي.
- weight_decay — اضمحلال الأوزان
- grad_averaging — ما إذا كان سيتم تطبيق (1-beta2) على التدرج عند حساب المتوسطات المتحركة للتدرج.
- max_grad_norm — القيمة المستخدمة لقص معيار التدرج العالمي.
- trust_clip — تفعيل قصّ نسبة الثقة في LAMBC.
- always_adapt — تطبيق معدل تعلم تكيفي على معامل تخفيف الوزن 0.0.
- caution — توخَّ الحذر.
- decoupled — تطبيق تخفيف الوزن المنفصل
- corrected_weight_decay — تطبيق تخفيف الوزن المُصحَّح (lr**2 / max_lr) عند استخدام decoupled_decay
- foreach — استخدم تنفيذ foreach (متعدد المتجهات)، وهو الافتراضي (None) ما لم يكن غير مدعوم
يُنفّذ نسخة PyTorch خالصة من مُحسّن FuseLAMB (نسخة NvLamb) من apex.optimizers.FusedLAMB المصدر: https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/Transformer-XL/pytorch/lamb.py
قُدم خوارزمية LAMB في:
- التحسين بدفعات كبيرة للتعلم العميق - تدريب BERT في 76 دقيقة: https://arxiv.org/abs/1904.00962
- حول تقارب آدم وما بعده: https://openreview.net/forum?id=ryQu7f-RZ
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.LaProp
< source >( params: ParamsTlr: float = 0.0004betas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-15weight_decay: float = 0.0caution: bool = Falsecorrected_weight_decay: bool = Falseforeach: typing.Optional[bool] = None )
مُحسِّن LaProp
الورقة البحثية: LaProp: Separating Momentum and Adaptivity in Adam، https://arxiv.org/abs/2002.04839
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.Lars
< source >( paramslr = 1.0momentum = 0dampening = 0weight_decay = 0nesterov = Falsetrust_coeff = 0.001eps = 1e-08trust_clip = Falsealways_adapt = Falseforeach: typing.Optional[bool] = None )
المعاملات
- params (iterable) — متسلسلة من المعلمات المراد تحسينها أو قواميس تحدد مجموعات المعلمات.
- lr (float, اختياري) — معدل التعلم (الافتراضي: 1.0).
- momentum (float, اختياري) — معامل الزخم (الافتراضي: 0)
- weight_decay (float, اختياري) — تضاؤل الوزن (عقوبة L2) (الافتراضي: 0)
- dampening (float, اختياري) — تخميد للعزم (الافتراضي: 0)
- nesterov (bool، اختياري) — يُفعّل زخم نيستروف (الافتراضي: False)
- trust_coeff (float) — معامل الثقة لحساب معدل التعلم التكيفي / trust_ratio (الافتراضي: 0.001)
- eps (float) — قيمة eps لمقام القسمة (الافتراضي: 1e-8)
- trust_clip (bool) — تفعيل قصّ نسبة الثقة في LARC (الافتراضي: False)
- always_adapt (bool) — تطبيق تكييف LARS LR دائمًا، وإلا فقط عندما group weight_decay != 0 (الافتراضي: False)
- foreach (bool, اختياري) — استخدام تنفيذ foreach (متعدد المتجهات)، يُستخدم افتراضيًا (None) ما لم يكن غير مدعوم
LARS لـ PyTorch
الورقة: Large batch training of Convolutional Networks - https://arxiv.org/pdf/1708.03888.pdf
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.Lion
< source >( params: ParamsTlr: float = 0.0001betas: typing.Tuple[float, float] = (0.9, 0.99)weight_decay: float = 0.0caution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = None )
يُنفّذ خوارزمية Lion.
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.MADGRAD
< source >( params: typing.Anylr: float = 0.01momentum: float = 0.9weight_decay: float = 0eps: float = 1e-06decoupled_decay: bool = False )
المعاملات
- params (iterable) — قابلة للتكرار من المعاملات المراد تحسينها أو قواميس تعرّف مجموعات المعاملات.
- lr (float) — معدل التعلم (الافتراضي: 1e-2).
- momentum (float) — قيمة الزخم في المدى [0,1) (الافتراضي: 0.9).
- weight_decay (float) — تلاشي الأوزان، أي عقوبة L2 (الافتراضي: 0).
- eps (float) — مصطلح يُضاف إلى المقام خارج عملية الجذر لتحسين الاستقرار العددي. (الافتراضي: 1e-6).
MADGRAD_: طريقة تدرّج مُزَمنة ومُكيّفة ومتوسط ثنائي للتكافؤ في التحسين العشوائي.
.. _MADGRAD: https://arxiv.org/abs/2101.11075
MADGRAD هو مُحسِّن عام يمكن استخدامه بدلاً من SGD أو Adam وقد يتقارب بشكل أسرع ويتعمم بشكل أفضل. حاليًا، يعمل على وحدات معالجة الرسوميات (GPU) فقط. عادةً، يمكن استخدام جدول معدل التعلم نفسه المستخدم لـ SGD أو Adam. معدل التعلم الكلي غير قابل للمقارنة مع أيٍّ من الطريقتين ويجب تحديده من خلال مسح المعلمات الفائقة (hyper-parameter sweep).
يتطلب MADGRAD مقداراً أقل من اضمحلال الوزن مقارنةً بالطرق الأخرى، وغالباً ما يكون صفر. كما أن قيم الزخم المستخدمة في SGD أو beta1 في Adam ينبغي أن تعمل هنا أيضاً.
في المسائل المتناثرة، يجب ضبط كل من weight_decay و momentum على القيمة 0.
خطوة
< source >( closure: typing.Optional[typing.Callable[[], float]] = None )
يُنفّذ خطوة تحسين واحدة.
class timm.optim.Mars
< source >( params: ParamsTlr: float = 0.003betas: typing.Tuple[float, float] = (0.9, 0.99)eps: float = 1e-08weight_decay: float = 0.0gamma: float = 0.025mars_type: str = 'adamw'optimize_1d: bool = Falselr_1d_factor: float = 1.0betas_1d: typing.Optional[typing.Tuple[float, float]] = Nonecaution: bool = False )
مُحسِّن MARS
الورقة البحثية: MARS: إطلاق قوة تقليل التباين لتدريب النماذج الكبيرة https://arxiv.org/abs/2411.10438
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.Muon
< source >( params: ParamsTlr: float = 0.02weight_decay: float = 0momentum: float = 0.95nesterov: bool = Falsens_steps: int = 5ns_coefficients: typing.Union[str, typing.Tuple[float, float, float], typing.List[typing.Tuple[float, float, float]]] = 'quintic'eps: float = 1e-07safety_factor: float = 1.0adjust_lr_fn: typing.Optional[str] = 'match_rms_adamw'conv_mode: str = 'flatten'normalize_spatial: bool = Trueadamw_lr: typing.Optional[float] = Nonefallback_lr_scale: float = 1.0betas: typing.Tuple[float, float] = (0.9, 0.95)algo: str = 'muon'scale_eps: bool = Falsecapturable: bool = Falseverbose: bool = False )
مايون - الزخم المُعامَل بطريقة نيوتن-شولتز
يجمع بين Muon للمعاملات ذات البُعد 2+ (مصفوفات الأوزان) وAdamW للمعاملات ذات البُعد 1 (الانحيازات، المعايير) ومجموعات المعاملات التي تم ضبط ‘use_fallback=True’ لها (أو ‘use_muon=False’ من أجل التوافق).
يدعم خوارزميتين:
- “muon”: خوارزمية Muon القياسية مع الزخم + التقويم
- “adamuon”: خوارزمية AdaMuon التي تضيف تقديرًا للزخم الثاني لكل عنصر إلى الاتجاهات المتعامدة لتحقيق تحجيم تكيفي مشابه لـ Adam
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.NAdamLegacy
< source >( paramslr = 0.002betas = (0.9, 0.999)eps = 1e-08weight_decay = 0schedule_decay = 0.004 )
المعاملات
- params (iterable) — متسلسلة من المعلمات التي سيتم تحسينها أو قواميس تعرّف مجموعات المعلمات
- lr (float, اختياري) — معدل التعلم (الافتراضي: 2e-3)
- betas (Tuple[float, float], optional) — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج ومربعه
- eps (float, اختياري) — حد يُضاف إلى المقام لتحسين الاستقرار العددي (الافتراضي: 1e-8)
- weight_decay (float, اختياري) — تضاؤل الوزن (عقوبة L2) (الافتراضي: 0)
- schedule_decay (float, اختياري) — معدل اضمحلال جدول الزخم (الافتراضي: 4e-3)
يُنفّذ خوارزمية Nadam (نسخة من Adam مبنية على زخم Nesterov).
ملاحظة: تم إيقاف استخدام هذا التنفيذ لصالح torch.optim.NAdam ويبقى كمرجع
تم اقتراح ذلك في Incorporating Nesterov Momentum into Adam__.
http://cs229.stanford.edu/proj2015/054_report.pdf http://www.cs.toronto.edu/~fritz/absps/momentum.pdf
أُخذت في الأصل من: https://github.com/pytorch/pytorch/pull/1408 ملاحظة: قد تحتوي على مشاكل محتملة لكنها تعمل بشكل جيد في بعض المشكلات.
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.NAdamW
< source >( params: ParamsTlr: float = 0.001betas: typing.Tuple[float, float] = (0.9, 0.999)eps: float = 1e-08weight_decay: float = 0.01caution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = Nonecapturable: bool = Falseclipping_threshold: typing.Optional[float] = None )
المعاملات
- params — قابل للتكرار من المعلمات المراد تحسينها أو قواميس تعرّف مجموعات المعلمات
- lr — معدل التعلم
- betas — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج ومربعه
- eps — حد يُضاف إلى المقام لتحسين الاستقرار العددي
- weight_decay — معامل تخفيف الوزن
- caution — تفعيل الحذر
- corrected_weight_decay — تطبيق تخفيف الوزن المُصحَّح (lr**2 / max_lr)
- maximize — تعظيم المعاملات بناءً على الدالة الهدف، بدلاً من تقليلها
- foreach — ما إذا كان يُستخدم تنفيذ foreach الخاص بمحسّن الأداء. إذا لم يُحدد (None)، يُستخدم تنفيذ foreach على CUDA (الأجهزة التي تحتوي على نواة foreach) لأنه أسرع بشكل عام.
- capturable — ما إذا كان هذا المثال آمنًا للالتقاط في رسم CUDA
- clipping_threshold — عتبة قصّ تحديث RMS (StableAdamW، https://arxiv.org/abs/2304.13013)، حيث يُقاس التحديث بمعامل 1 / max(1, rms / clipping_threshold) حيث rms هو RMS للتدرج / (sqrt(v_hat) + eps). يُخمد التحديث للمعاملات التي تشهد زيادة مفاجئة في التدرج مقارنةً بتقدير لحظتها الثانية. القيمة 1.0 كما وردت في الورقة البحثية، وقيمة None (الافتراضية) تعطل هذه الميزة. وكما في Adafactor، لا يُقصّ اضمحلال الوزن المنفصل (كما أن StableAdamW يقاس اضمحلال الوزن أيضاً بمعدل التعلم المقصوص).
يُنفّذ خوارزمية NAdamW.
انظر إلى الجدول 1 في https://arxiv.org/abs/1910.05446 لمعرفة تنفيذ خوارزمية NAdam (كما يوجد تعليق في الكود يبرز الفرق الوحيد بين NAdamW و AdamW).
لمزيد من التفاصيل حول الخوارزمية، نحيلكم إلى
- تنظيم تخفيف الوزن المنفصل: https://arxiv.org/abs/1711.05101
- حول تقارب آدم وما بعده: https://openreview.net/forum?id=ryQu7f-RZ
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.NvNovoGrad
< source >( paramslr = 0.001betas = (0.95, 0.98)eps = 1e-08weight_decay = 0grad_averaging = Falseamsgrad = Falsedecoupled_decay = Falsecorrected_weight_decay = False )
المعاملات
- params (iterable) — متسلسلة من المعلمات التي سيتم تحسينها أو قواميس تعرّف مجموعات المعلمات
- lr (float, اختياري) — معدل التعلم (الافتراضي: 1e-3)
- betas (Tuple[float, float], اختياري) — المعاملات المستخدمة لحساب المتوسطات المتحركة للتدرج ومربعه (الافتراضي: (0.95, 0.98))
- eps (float, اختياري) — حد يُضاف إلى المقام لتحسين الاستقرار العددي (الافتراضي: 1e-8)
- weight_decay (float, اختياري) — تضاؤل الوزن (عقوبة L2) (الافتراضي: 0)
- grad_averaging — متوسط التدرجات
- amsgrad (منطقي، اختياري) — ما إذا كان سيتم استخدام متغير AMSGrad من هذه الخوارزمية من الورقة
On the Convergence of Adam and Beyond_ (الافتراضي: False) - decoupled_decay — تطبيق تخفيف الوزن مباشرة على الأوزان (lr * weight_decay في كل خطوة) بدلاً من إضافته إلى التدرج المُطَبَّع قبل تحديث الزخم (كما هو موضح في الورقة البحثية)
- corrected_weight_decay — تطبيق تخفيف الوزن المُصحَّح (lr**2 / max_lr) عندما يكون decoupled_decay True
يُنفّذ خوارزمية Novograd.
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.RAdamLegacy
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0 )
مُحسِّن PyTorch RAdam
ملاحظة: تم إيقاف استخدام هذا التنفيذ لصالح torch.optim.AdamW ويبقى كمرجع
فئة timm.optim.RMSpropTF
< source >( params: ParamsTlr: float = 0.01alpha: float = 0.9eps: float = 1e-10weight_decay: float = 0momentum: float = 0.0centered: bool = Falsedecoupled_decay: bool = Falsecorrected_weight_decay: bool = Falselr_in_momentum: bool = Truecaution: bool = Falseforeach: typing.Optional[bool] = None )
المعاملات
- params — قابل للتكرار من المعلمات المراد تحسينها أو قواميس تعرّف مجموعات المعلمات
- lr — معدل التعلم
- momentum — معامل الزخم
- alpha — ثابت التنعيم (التلاشي)
- eps — حد يُضاف إلى المقام لتحسين الاستقرار العددي
- centered — إذا كان
True، يتم حساب RMSProp المُوسَط، حيث يُطبَّع التدرّج باستخدام تقدير لتباينه - weight_decay — تضاؤل الأوزان (عقوبة L2) (الافتراضي: 0)
- decoupled_decay — تخفيف الأوزان المنفصل وفقاً لـ https://arxiv.org/abs/1711.05101
- corrected_weight_decay — تطبيق تخفيف الوزن المُصحَّح (lr**2 / max_lr) عندما يكون decoupled_decay True
- lr_in_momentum — يُضمَّن تحجيم معدل التعلم في تحديث مخزن الزخم وفقاً للإعدادات الافتراضية في Tensorflow
- caution — توخَّ الحذر
- foreach — استخدم تنفيذ foreach (متعدد المتجهات)، وهو الافتراضي (None) ما لم يكون غير مدعوم (انظر rmsprop_tf())
يُنفّذ خوارزمية RMSprop (مع قيمة epsilon بأسلوب TensorFlow)
ملاحظة: هذا هو نسخ ولصق مباشر لخوارزمية PyTorch RMSprop مع تطبيق eps قبل الجذر التربيعي، بالإضافة إلى بعض التعديلات الأخرى لمطابقة Tensorflow بشكل أقرب عند استخدام نفس المعلمات الفائقة.
تشمل التغييرات الجديرة بالذكر:
- إبسيلون مطبقة داخل الجذر التربيعي
- square_avg مُهيّأة إلى ones
- مقياس معدل التعلم للتحديث المتراكم في مخزن الزخم
اقترحها جي. هنتون في دوره.
تظهر النسخة المركزية أولاً في توليد التسلسلات باستخدام الشبكات العصبية المتكررة.
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.
فئة timm.optim.SGDP
< source >( paramslr = torch.optim.optimizer.requiredmomentum = 0dampening = 0weight_decay = 0nesterov = Falseeps = 1e-08delta = 0.1wd_ratio = 0.1caution = False )
فئة timm.optim.SGDW
< source >( params: ParamsTlr: float = 0.001momentum: float = 0.0dampening: float = 0.0weight_decay: float = 0.0nesterov: bool = Falsecaution: bool = Falsecorrected_weight_decay: bool = Falsemaximize: bool = Falseforeach: typing.Optional[bool] = Nonedifferentiable: bool = False )
خطوة
< source >( closure = None )
يُنفّذ خطوة تحسين واحدة.