timm documentation
최적화
최적화
이 페이지에는 timm에 포함된 옵티마이저의 API 참조 문서와 옵티마이저 팩토리를 통해 옵티마이저가 선택되고 구성되는 방식에 대한 개요가 포함되어 있습니다.
사용
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는 weight decay를 설정합니다.--momentum은 모멘텀을 설정합니다.--opt-eps는 epsilon(eps)을 설정합니다.--opt-betas는 베타 계수(betas)를 설정합니다.--layer-decay는 레이어별 학습률 감쇠를 설정합니다.--opt-kwargs key=value ...는 기타 옵티마이저 인수를 전달합니다.
네이밍 규칙
등록된 이름은 소문자이며, 기본 옵티마이저 이름에 수정자가 추가된 형태입니다:
| 수정자 | 의미 | 예시 |
|---|---|---|
c 접두사 | 신중 변형으로, 그 부호가 기울기와 일치하지 않는 위치에서 업데이트가 마스킹됩니다(Cautious Optimizers) | cadamw, clion, cmars, cadopt |
w 접미사 | 결합된 L2 감쇠를 기본으로 사용하는 옵티마이저를 위한 분리된(AdamW 스타일) 가중치 감쇠 | sgdw, lambw, adoptw, novogradw, rmsproptfw |
c 접미사 | 수정된 weight decay는 lr 대신 lr² / max_lr로 스케일링됩니다(왜 학습 말미에 그래디언트가 급격히 증가하는가) | adamc, nadamc, sgdc, lionc, adoptc, kronc |
n 접두사 | Nesterov momentum (SGD, LARS 및 Muon 계열) | nesterov, nlars, nmuon, nadamuon |
lookahead_ 접두사 | Lookahead로 옵티마이저를 감싸세요 | lookahead_adamw |
fused 접두사 | NVIDIA Apex 융합 구현(apex 필요) | fusedadamw, fusedlamb |
bnb 접두사 | bitsandbytes 구현, 8비트 상태를 위한 8bit 접미사(bitsandbytes 필요) | bnbadamw, bnbadamw8bit |
일부 이름은 컨벤션이 정해지기 전에 사용되었습니다: lambc와 larc는 trust ratio clipping이 적용된 LAMB / LARS입니다(수정된 decay LAMB 변형은 lambcd입니다). momentum은 고전적 momentum이 적용된 SGD이고, sgd는 Nesterov momentum이 적용된 SGD입니다. 아래 표의 legacy 구현은 PyTorch에 포함되기 전에 작성되었습니다.
옵티마이저 계열
| 이름 | 구현 | The input is a single word "Notes". 참고 |
|---|---|---|
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 | Nesterov 모멘텀을 적용한 AdamW(MLCommons 알고리즘 효율성 형태) |
adopt, adoptw, adoptc, cadopt, cadoptw, cadoptc | Adopt | 모든 β2에 대해 수렴하는 Adam 변형 |
adan, adanw, cadan, cadanw | Adan | 적응형 Nesterov 모멘텀 |
adabelief, radabelief | AdaBelief | radabelief은 RAdam 스타일의 교정을 추가합니다 |
adafactor, cadafactor | Adafactor | fairseq Adafactor, lr=None일 때 상대적 스텝 크기 |
adafactorbv, adafactorbvc, cadafactorbv, cadafactorbvc | AdafactorBigVision | Big Vision Adafactor, 분해된 2차 모멘트, 저정밀도 모멘텀, 업데이트 클리핑 |
adamp, cadamp, sgdp, csgdp | AdamP, SGDP | 스케일 불변 가중치의 업데이트 투사 |
adahessian | Adahessian | 2차, 클로저(is_second_order) 필요 |
kron, kronw, kronc | Kron | Kronecker 분해 사전조건자를 사용하는 PSGD |
lamb, lambc, lambw, lambcw, lambcd, clamb, clambw | Lamb | 레이어별 적응적 모멘트, trust_clip 변형 (lambc, lambcw) |
laprop, lapropc, claprop | LaProp | Momentum과 adaptivity 분리 |
lars, larc, nlars, nlarc | Lars | 레이어별 적응형 레이트 스케일링, trust_clip 변형 (larc, nlarc) |
lion, lionc, clion, clionc | Lion | 진화한 부호 모멘텀 |
madgrad, madgradw | MADGRAD | 모멘텀 기반 이중 평균 |
mars, cmars | Mars | Variance reduction, AdamW or Lion style update |
muon, nmuon, adamuon, nadamuon | Muon | 2D 이상의 가중치에는 Newton-Schulz 직교화 모멘텀, 1D 파라미터에는 AdamW / NAdamW 폴백 |
novograd, novogradw, novogradc | NvNovoGrad | 레이어별 정규화 모멘트 |
rmsproptf, rmsproptfw, rmsproptfc, crmsproptf | RMSpropTF | TensorFlow의 연산 순서 및 eps 처리, lr을 모멘텀 버퍼에 접기 |
sgdw, nesterovw, sgdc, csgdw, csgdc | SGDW | SGD with decoupled weight decay |
nadamlegacy, radamlegacy | NAdamLegacy, RAdamLegacy | torch.optim에 의해 대체된 참조 구현 |
fused*, bnb* | NVIDIA Apex, bitsandbytes | 패키지가 설치될 때 등록됩니다 |
일반적인 옵션
대부분의 timm 옵티마이저는 일반적인 lr, weight_decay, betas, eps 외에도 공통된 옵션 세트를 공유합니다. 각 옵티마이저가 어떤 옵션을 지원하는지는 아래 클래스 시그니처에서 확인할 수 있으며, 팩토리는 지원하지 않는 인자가 전달되면 예외를 발생시킵니다.
caution은 신중한 업데이트 마스크를 적용하며,c접두사가 붙은 레지스트리 이름과 동일합니다.corrected_weight_decay는lr(c접미사 이름) 대신lr² / max_lr로 decoupled weight decay를 스케일링하여, 실제 감쇠가 학습률 스케줄을 따르도록 합니다.max_lr는 옵티마이저가 생성될 때 사용된 학습률이며, 피크 스케줄 lr로 생성해야 합니다(train.py가 수행하는 방식). 이 값은 각 파라미터 그룹(max_lr_snapshot)에 유지되며 옵티마이저 상태와 함께 저장/복원됩니다.decoupled_decay(또는decoupled)는 기본적으로 결합된 L2 감쇠를 사용하는 옵티마이저를 AdamW 스타일의 감쇠(w접미사가 붙은 이름)로 전환합니다.foreach은 multi-tensor 구현을 선택합니다. 기본적으로 (None) CUDA 및 기타 foreach 커널을 지원하는 장치에서torch.optim과 일치하도록 사용되며, 구성이 지원하지 않는 경우(예:capturable가 없는 텐서lr, 또는 필요한_foreach_maximum_오버로드가 없는 PyTorch 버전에서caution)에는 예외입니다. multi-tensor step은 GPU L2 캐시에 각 청크의 working set이 유지되도록 파라미터 청크 크기가 설정되어 실행되며, 이는 대형 모델에서 각 op마다 모든 파라미터를 메모리를 통해 한 번씩 스트리밍하는 것보다 빠릅니다. 청크 크기는 장치 L2 캐시 크기(PyTorch >= 2.5)에서 유도되며, 결과 청크가 4M 요소 미만인 장치에서는 청킹이 생략됩니다.TIMM_FOREACH_CHUNK_SIZE=<elements>은 청크 크기를 재정의하고,0은 청킹을 비활성화합니다.capturable(AdamWLegacy, NAdamW, Adopt, Muon)는 CUDA graph에서 스텝을 캡처할 수 있도록 스텝 카운트를 디바이스에 유지합니다. 모든 옵티마이저는torch.compile및 CUDA graph와 함께 사용하도록 스케줄에 의해 인플레이스로 업데이트되는 0-dim 텐서로 주어진lr를 받아들입니다.clipping_threshold(AdamWLegacy, NAdamW, AdafactorBigVision)는 RMS로 업데이트를 클리핑하며,rms가 2차 모멘트 정규화 기울기의 RMS인update / max(1, rms / threshold)입니다. (StableAdamW, Adafactor). 논문과 동일하게1.0입니다. Adafactor와 마찬가지로 (decoupled) weight decay는 클리핑되지 않으며, StableAdamW도 decay를 클리핑된 학습률로 스케일링합니다.maximize는 최소화 대신 목적 함수를 최대화합니다.
저정밀도 매개변수(bfloat16, float16)가 전반적으로 지원됩니다:
- AdaBelief, RAdamLegacy and Adafactor는 저정밀 파라미터의 상태를
float32로 유지합니다. - AdafactorBigVision은 모멘텀을 축소된 정밀도(
momentum_dtype)로 유지합니다. - Kron에는
mu_dtype/precond_dtype옵션이 별도로 있습니다.
이러한 state dtype은 load_state_dict에 의해 유지됩니다(PyTorch의 기본 로더는 state를 param dtype으로 캐스팅합니다).
step 함수는 host sync를 피합니다(디바이스 텐서에 대한 데이터 의존 Python 분기). AdamP / SGDP의 projection
check가 예외입니다.
Parameter groups
모델이 주어지면, create_optimizer_v2는 param_groups_weight_decay를 사용하여 매개변수를 그룹화합니다(1D 매개변수와 모델의 no_weight_decay() 세트에는 감쇠를 적용하지 않음). 또는 layer_decay가 설정된 경우, 모델의 group_matcher()를 사용하여 각 레이어에 layer_decay ** (num_layers - layer_id)의 학습률 스케일을 할당하는 param_groups_layer_decay를 사용합니다. group_matcher()가 없는 모델은 헤드 분리 시 모델의 pretrained_cfg['classifier']가 필요한 auto_group_layers로 폴백됩니다. 하이브리드 옵티마이저(Muon)의 경우, fallback_list와 fallback_no_weight_decay 인수를 통해 매개변수를 폴백(AdamW) 옵티마이저로 라우팅합니다.
API
팩토리 함수
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 — Momentum factor for optimizers that support it. Only used if the chosen optimizer accepts a momentum parameter.
- foreach — 사용 가능한 경우 foreach(멀티 텐서) 구현을 활성화/비활성화합니다. None인 경우 옵티마이저별 기본값을 사용합니다.
- filter_bias_and_bn — True인 경우, bias, norm 레이어 매개변수(모든 1d 매개변수)에는 weight decay가 적용되지 않습니다. model_or_params가 모델이고 weight_decay > 0인 경우에만 사용됩니다.
- fallback_list — 하이브리드 옵티마이저(예: Muon의 AdamW)에 대해 폴백 옵티마이저를 사용할 매개변수 이름 패턴의 컬렉션. 와일드카드 매칭을 지원합니다.
- fallback_no_weight_decay — True인 경우, 모델의 no_weight_decay() 목록에 있는 파라미터는 하이브리드 옵티마이저(예: Muon의 경우 AdamW)에서 폴백 옵티마이저를 사용합니다.
- layer_decay — 선택적 레이어별 학습률 감쇠 계수. 제공된 경우, 학습률은 layer_decay^(max_depth - layer_depth)로 스케일링됩니다. model_or_params가 모델일 때만 사용됩니다.
- param_group_fn — 사용자 정의 매개변수 그룹을 생성하는 선택적 함수입니다. 제공되면 다른 매개변수 그룹화 옵션은 무시됩니다.
- **kwargs — 옵티마이저별 추가 인자(예: Adam의 betas).
timm 레지스트리를 통해 옵티마이저 인스턴스를 생성합니다.
적절한 파라미터 그룹과 설정을 갖춘 옵티마이저를 생성하고 구성합니다. 가중치 감쇠와 레이어별 학습률을 위한 자동 파라미터 그룹 생성 및 사용자 정의 파라미터 그룹화를 지원합니다.
예:
모멘텀과 가중치 감쇠를 사용한 SGD:
optimizer = create_optimizer_v2(model, 'sgd', lr=0.1, momentum=0.9, weight_decay=1e-4)커스텀 파라미터 그룹:
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)참고: Parameter group 처리 우선순위:
- param_group_fn이 제공되면 해당 함수만 사용
- layer_decay가 제공되면 레이어별 그룹이 생성됩니다
- weight_decay > 0이고 filter_bias_and_bn이 True인 경우, weight decay 그룹이 생성됩니다
- 그렇지 않으면 모든 파라미터가 단일 그룹에 포함됩니다
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 변형과 8-bit 옵티마이저에 대해 [‘adam’, ‘*8bit’]). 빈 문자열은 필터링하지 않음을 의미합니다.
- exclude_filters — 제외할 와일드카드 패턴의 선택적 목록입니다. 예를 들어, [’8bit’, ‘fused’]는 8비트 및 fused 구현을 제외합니다.
- with_description — True인 경우, 이름만 반환하는 대신 (name, description) 튜플을 반환합니다. 설명은 옵티마이저의 특성에 대한 간략한 설명을 제공합니다.
반환값
with_description가 False인 경우
문자열 형태의 옵티마이저 이름 목록 (예: [‘adam’, ‘adamw’, …]) with_description이 True인 경우: (c2)name, description의 튜플 목록 (예: [(‘adam’, ‘Adaptive Moment…’), …])
필터링 옵션을 적용하여 사용 가능한 옵티마이저 이름을 나열합니다.
와일드카드 패턴을 사용하여 선택적으로 필터링할 수 있는 모든 등록된 optimizer를 나열합니다. Optimizer는 include 및 exclude 패턴을 사용하여 필터링할 수 있으며, 각 optimizer 이름과 함께 설명을 선택적으로 반환할 수 있습니다.
예:
>>> 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 — 가져올 optimizer의 이름 (예: ‘adam’, ‘sgd’)
- bind_defaults — True인 경우, OptimInfo의 기본 인자가 바인딩된 partial 함수를 반환합니다. False인 경우, 원본 옵티마이저 클래스를 반환합니다.
반환값
bind_defaults가 False인 경우
옵티마이저 클래스 (예: torch.optim.Adam) bind_defaults가 True인 경우: 기본 인자가 바인딩된 부분 함수
Raises
ValueError
ValueError— 옵티마이저 이름이 레지스트리에서 찾을 수 없는 경우
기본 인수를 바인딩할 수 있는 옵션과 함께 이름으로 옵티마이저 클래스를 가져옵니다.
최적화기 클래스 또는 기본 인자가 바인딩된 부분 함수를 가져옵니다. 이를 통해 전체 팩토리를 거치지 않고 기본 구성으로 최적화기를 직접 인스턴스화할 수 있습니다.
예:
timm.optim.get_optimizer_info
< source >( name: str )
옵티마이저의 OptimInfo를 가져옵니다.
파라미터 그룹 함수
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 )
레이어별 lr 감쇠 및 weight decay를 위한 Parameter groups BEiT 기반: https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L58
옵티마이저 클래스
class 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) — 최적화할 파라미터의 iterable 또는 파라미터 그룹을 정의하는 dicts
- lr (float, optional) — 학습률 (기본값: 1e-3)
- betas (Tuple[float, float], optional) — 기울기와 그 제곱의 이동 평균을 계산하는 데 사용되는 계수 (기본값: (0.9, 0.999))
- eps (float, optional) — 수치적 안정성을 높이기 위해 분모에 추가되는 항 (기본값: 1e-16)
- weight_decay (float, optional) — weight decay (L2 penalty) (기본값: 0)
- amsgrad (boolean, optional) —
On the Convergence of Adam and Beyond_ 논문에서 소개된 이 알고리즘의 AMSGrad 변형을 사용할지 여부 (기본값: False) - decoupled_decay (boolean, optional) — (기본값: True) True로 설정하면 옵티마이저는 AdamW와 동일한 decoupled weight decay를 사용합니다
- fixed_decay (boolean, optional) — (기본값: False) weightdecouple 가 True로 설정된 경우 사용됩니다. fixed_decay == True이면 weight decay는 $W{new} = W{old} - W{old} \times decay$로 수행됩니다. fixeddecay == False이면 weight decay는 $W{new} = W{old} - W{old} \times decay \times lr$로 수행됩니다. 이 경우 weight decay 비율이 learning rate(lr)에 따라 감소한다는 점에 유의하세요.
- rectify (boolean, optional) — (기본값: True) True로 설정하면 RAdam과 유사하게 rectified 업데이트를 수행합니다
- degenerated_to_sgd (boolean, optional) (기본값 —True) True로 설정하면, 그라디언트의 분산이 높을 때 SGD 업데이트를 수행합니다
- foreach (boolean, optional) — 기본적으로 (None) 사용되며, 지원되지 않는 경우를 제외하고 foreach (multi-tensor) 구현을 사용합니다
AdaBelief 알고리즘을 구현합니다. PyTorch의 Adam에서 수정
reference: AdaBelief Optimizer, 관찰된 그래디언트에 대한 믿음으로 스텝사이즈를 적응, NeurIPS 2020
권장 하이퍼파라미터의 전체 표는 https://github.com/juntang-zhuang/Adabelief-Optimizer’을 참조하세요. 예를 들어 EfficientNet의 train/args는 이 gist들을 확인하세요
- train_script 링크: https://gist.github.com/juntang-zhuang/0a501dd51c02278d952cf159bc233037
- args.yaml 링크: https://gist.github.com/juntang-zhuang/517ce3c27022b908bb93f78e4f786dc3
단일 최적화 단계를 수행합니다.
class 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는 False가 됨)에는 수동(외부) 학습률 스케줄이 사용됩니다.
참고로 이 구현에서는 scale_parameter와 warmup_init가 상대 단계 학습률(lr=None)에만 적용됩니다. fairseq / HF Transformers와 달리, 파라미터 RMS 스케일링은 외부 학습률에는 적용되지 않습니다.
Ags: params: 최적화할 파라미터의 반복 가능한 객체 또는 파라미터 그룹을 정의하는 딕셔너리 lr: 외부 학습률 eps: 제곱 그래디언트 및 파라미터 스케일에 대한 정규화 상수 eps_scale: 파라미터 스케일에 대한 정규화 상수 clip_threshold: 최종 그래디언트 업데이트의 제곱평균제곱근(RMS) 임계값 decay_rate: 제곱 그래디언트의 이동 평균을 계산하는 데 사용되는 계수 beta1: 그래디언트의 이동 평균을 계산하는 데 사용되는 계수 weight_decay: 가중치 감쇠 scale_parameter: True인 경우, 상대적 단계 학습률이 파라미터의 제곱평균제곱근(RMS)으로 스케일링됩니다 warmup_init: 시간 의존 학습률 계산은 워밍업 초기화가 사용되는지에 따라 달라집니다
단일 최적화 단계를 수행합니다.
class 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에서 BigVision의 Adafactor 변형을 단일 텐서 및 다중 텐서 구현으로 제공합니다.
Ross Wightman의 https://github.com/google-research/big_vision에서 가져옴
class 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) — 최적화할 파라미터의 iterable 또는 파라미터 그룹을 정의하는 dicts
- lr (float, optional) — 학습률 (기본값: 0.1)
- betas ((float, float), optional) — 기울기와 제곱 헤시안 트레이스의 이동 평균을 계산하는 데 사용되는 계수 (기본값: (0.9, 0.999))
- eps (float, optional) — 수치적 안정성을 높이기 위해 분모에 추가되는 항 (기본값: 1e-8)
- weight_decay (float, optional) — weight decay (L2 penalty) (기본값: 0.0)
- hessian_power (float, optional) — hessian trace의 지수 (기본값: 1.0)
- update_each (int, optional) — 이 수의 스텝 후에만 헤시안 트레이스 근사값을 계산합니다(시간 절약을 위해) (기본값: 1)
- n_samples (int, optional) — 헤시안 트레이스의 근사를 위해
z를 몇 번 샘플링할지 지정합니다 (기본값: 1)
Implements the AdaHessian algorithm from “ADAHESSIAN: An Adaptive Second OrderOptimizer for Machine Learning”
모든 param_groups에서 그래디언트가 있는 모든 파라미터를 가져옵니다
각 학습 가능한 매개변수에 대해 hessian trace의 Hutchinson 근사값을 계산하고 누적합니다.
단계
< source >( closure = None )
단일 최적화 단계를 수행합니다.
누적된 hessian trace를 0으로 초기화합니다.
class timm.optim.AdamP
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0delta = 0.1wd_ratio = 0.1nesterov = Falsecaution = False )
class 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 —
On the Convergence of Adam and Beyond논문에서 소개된 이 알고리즘의 AMSGrad 변형을 사용할지 여부 - caution — AdamW를 사용할 때 주의가 필요합니다
- corrected_weight_decay — 수정된 weight decay(lr**2 / max_lr)를 적용합니다
- maximize — 최소화 대신 목적 함수에 따라 매개변수를 최대화합니다
- foreach — 옵티마이저의 foreach 구현이 사용되는지 여부. 사용자가 지정하지 않은 경우(즉, foreach가 None인 경우), 일반적으로 더 빠르기 때문에 CUDA에서 for-loop 구현 대신 foreach를 사용하려고 합니다.
- capturable — 이 인스턴스가 CUDA graph에서 캡처하는 것이 안전한지 여부입니다. True를 전달하면 그래프가 아닌 성능이 저하될 수 있으므로, 이 인스턴스를 그래프 캡처할 의도가 없다면 False로 두세요.
- clipping_threshold — RMS 업데이트 클리핑 임계값 (StableAdamW, https://arxiv.org/abs/2304.13013). 업데이트는 rms / (sqrt(v_hat) + eps)의 RMS인 rms를 사용하여 1 / max(1, rms / clipping_threshold)로 스케일링됩니다. 이는 두 번째 모멘트 추정치에 비해 그래디언트가 갑자기 증가하는 매개변수의 업데이트를 감쇠시킵니다. 논문과 동일하게 1.0이며, 기본값인 None은 비활성화합니다. Adafactor와 마찬가지로 분리된 weight decay는 클리핑되지 않습니다 (StableAdamW는 decay도 클리핑된 lr로 스케일링합니다).
AdamW 알고리즘을 구현합니다.
NOTE: 이 구현은 torch.optim.AdamW를 권장하기 위해 비추천(deprecated)되었으며, 참고용으로 유지됩니다
참고 문헌:
- Adam: A Method for Stochastic Optimization: https://arxiv.org/abs/1412.6980
- 분리된 가중치 감쇠 정규화: https://arxiv.org/abs/1711.05101
- Adam의 수렴 및 그 이상: https://openreview.net/forum?id=ryQu7f-RZ
단일 최적화 단계를 수행합니다.
class 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 — 1차 및 2차 모멘트에 사용되는 계수.
- eps — 수치적 안정성을 높이기 위해 분모에 추가되는 항.
- weight_decay — 분리된 가중치 감쇠(L2 페널티)
- no_prox — 가중치 감쇠를 수행하는 방법
- caution — ‘Cautious Optimizers’에서 caution 활성화
- foreach — True인 경우 torch._foreach 구현을 사용합니다. 더 빠르지만 메모리를 약간 더 많이 사용합니다.
Pytorch 버전의 Adan을 구현합니다.
Adan은 Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models https://arxiv.org/abs/2208.06677에서 제안되었습니다.
단일 최적화 단계를 수행합니다.
class 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: 최적 속도로 어떤 β2와도 수렴할 수 있는 수정된 Adam: https://arxiv.org/abs/2411.02853
단일 최적화 단계를 수행합니다.
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 — preconditioner를 업데이트할 확률. None인 경우, 4000 스텝까지 1.0에서 0.03으로 감쇠하는 스케줄을 기본값으로 사용합니다.
- max_size_triangular — dim의 preconditioner가 triangular가 될 수 있는 최대 크기.
- min_ndim_triangular — 레이어가 삼각 사전 조건자를 가질 수 있는 최소 차원 수.
- memory_save_mode — 기본값은 None이며, ‘one_diag’, ‘smart_one_diag’, 또는 ‘all_diag’ 중 하나를 지정할 수 있습니다. 모든 preconditioner를 삼각 행렬로 설정하려면, ‘one_diag’는 레이어별로 가장 큰 차원 또는 마지막 차원을 대각 행렬로 설정하고, ‘all_diag’는 모든 preconditioner를 대각 행렬로 설정합니다.
- momentum_into_precond_update — raw gradients 대신 momentum을 preconditioner 업데이트에 전달할지 여부
- mu_dtype — 모멘텀 누적기의 Dtype.
- precond_dtype — 사전 조건자의 Dtype입니다.
- decoupled_decay — AdamW 스타일의 분리된 가중치 감쇠
- corrected_weight_decay — decoupled_decay를 사용할 때 수정된 weight decay를 적용합니다 (lr**2 / max_lr)
- flatten — 고차원 파라미터에 대해 식에 완전히 의존하는 대신 차원을 평탄화합니다
- flatten_start_dim — flatten 범위의 시작 값으로, 기본값은 2입니다. ConvNets에 대해 좋은 트레이드오프로 보입니다.
- flatten_end_dim — flatten 범위의 끝, 기본값은 -1입니다.
- stochastic_weight_decay — 가중치 감쇠의 무작위 변조 활성화
- deterministic — 저장/로드(재개) 시 결정론적 동작. FIXME 느림, 개선 필요
https://github.com/lixilinx/psgd_torch의 PSGD Kron을 구현합니다.
class 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 — 전역 grad norm을 클리핑하는 데 사용되는 값.
- trust_clip — LAMBC 신뢰 비율 클리핑을 활성화합니다.
- always_adapt — 0.0 weight decay 파라미터에 적응형 학습률을 적용합니다.
- caution — 주의가 필요합니다.
- decoupled — 분리된 가중치 감쇠 적용
- corrected_weight_decay — apply corrected weight decay (lr**2 / max_lr) when using decoupled_decay
- foreach — foreach(멀티 텐서) 구현을 사용합니다. 기본적으로 (None) 사용되며, 지원되지 않는 경우에만 사용하지 않습니다
apex.optimizers.FusedLAMB의 FuseLAMB(NvLamb 변형) 옵티마이저의 순수 PyTorch 변형을 구현합니다. 참고: https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/Transformer-XL/pytorch/lamb.py
LAMB는 다음에서 제안되었습니다:
- 딥러닝을 위한 대규모 배치 최적화 - 76분 만에 BERT 학습: https://arxiv.org/abs/1904.00962
- Adam의 수렴 및 그 이상: https://openreview.net/forum?id=ryQu7f-RZ
단일 최적화 단계를 수행합니다.
class 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
단일 최적화 단계를 수행합니다.
class 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) — 최적화할 파라미터의 iterable 또는 파라미터 그룹을 정의하는 dicts.
- lr (float, optional) — 학습률 (기본값: 1.0).
- momentum (float, optional) — momentum 계수 (기본값: 0)
- weight_decay (float, optional) — weight decay (L2 penalty) (기본값: 0)
- dampening (float, optional) — momentum의 감쇠 (기본값: 0)
- nesterov (bool, optional) — Nesterov 모멘텀을 활성화합니다 (기본값: False)
- trust_coeff (float) — 적응형 lr / trust_ratio를 계산하기 위한 신뢰 계수 (기본값: 0.001)
- eps (float) — 분모의 eps (기본값: 1e-8)
- trust_clip (bool) — LARC 신뢰 비율 클리핑 활성화 (기본값: False)
- always_adapt (bool) — 항상 LARS LR adapt를 적용하며, 그렇지 않으면 group weight_decay != 0인 경우에만 적용합니다 (기본값: False)
- foreach (bool, optional) — 기본적으로 (None) 사용되며, 지원되지 않는 경우를 제외하고 foreach (multi-tensor) 구현을 사용합니다
PyTorch용 LARS
논문: Large batch training of Convolutional Networks - https://arxiv.org/pdf/1708.03888.pdf
단일 최적화 단계를 수행합니다.
class 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 알고리즘을 구현합니다.
단일 최적화 단계를 수행합니다.
class timm.optim.MADGRAD
< source >( params: typing.Anylr: float = 0.01momentum: float = 0.9weight_decay: float = 0eps: float = 1e-06decoupled_decay: bool = False )
MADGRAD_: 확률적 최적화를 위한 모멘텀화, 적응형, 이중 평균 기울기 방법
.. _MADGRAD: https://arxiv.org/abs/2101.11075
MADGRAD는 SGD나 Adam 대신 사용할 수 있는 범용 옵티마이저로, 더 빠르게 수렴하고 더 나은 일반화 성능을 보일 수 있습니다. 현재 GPU 전용입니다. 일반적으로 SGD나 Adam에 사용되는 것과 동일한 학습률 스케줄을 사용할 수 있습니다. 전체 학습률은 두 방법 중 어느 것과도 직접 비교할 수 없으며, 하이퍼파라미터 스윕을 통해 결정해야 합니다.
MADGRAD는 다른 방법보다 적은 weight decay를 필요로 하며, 때로는 0까지도 가능합니다. SGD 또는 Adam의 beta1에 사용된 momentum 값도 여기에서 작동합니다.
희소 문제의 경우 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: Variance Reduction의 힘을 풀어 대용량 모델 학습 https://arxiv.org/abs/2411.10438
단일 최적화 단계를 수행합니다.
class 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 - Newton-schulz에 의해 직교화된 모멘텀
2D 이상의 파라미터(가중치 행렬)에는 Muon을, 1D 파라미터(bias, norm) 및 ‘use_fallback=True’가 설정된(호환성을 위해 ‘use_muon=False’) 파라미터 그룹에는 AdamW를 결합합니다.
두 가지 알고리즘을 지원합니다:
- “muon”: 모멘텀 + 직교화를 사용하는 표준 Muon 알고리즘
- “adamuon”: 직교화된 방향에 요소별 2차 모멘트 추정을 추가하여 Adam과 유사한 적응적 스케일링을 제공하는 AdaMuon 알고리즘
단일 최적화 단계를 수행합니다.
클래스 timm.optim.NAdamLegacy
< source >( paramslr = 0.002betas = (0.9, 0.999)eps = 1e-08weight_decay = 0schedule_decay = 0.004 )
매개변수
- params (iterable) — 최적화할 파라미터의 iterable 또는 파라미터 그룹을 정의하는 dicts
- lr (float, optional) — 학습률 (기본값: 2e-3)
- betas (Tuple[float, float], optional) — 기울기와 그 제곱의 이동 평균을 계산하는 데 사용되는 계수
- eps (float, optional) — 수치적 안정성을 높이기 위해 분모에 추가되는 항 (기본값: 1e-8)
- weight_decay (float, optional) — weight decay (L2 penalty) (기본값: 0)
- schedule_decay (float, 선택 사항) — momentum schedule decay (기본값: 4e-3)
Nesterov 모멘텀에 기반한 Adam의 변형인 Nadam 알고리즘을 구현합니다.
NOTE: 이 구현은 torch.optim.NAdam을 대신하여 비추천(deprecated)되었으며, 참고용으로 유지됩니다.
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 참고: 잠재적인 문제가 있지만 일부 문제에서는 잘 작동합니다.
단일 최적화 단계를 수행합니다.
class 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 — 수정된 weight decay(lr**2 / max_lr)를 적용합니다
- maximize — 최소화 대신 목적 함수에 따라 매개변수를 최대화합니다
- foreach — 옵티마이저의 foreach 구현이 사용되는지 여부. 지정되지 않은 경우(None)에는 일반적으로 더 빠르기 때문에 CUDA(foreach 커널을 지원하는 장치)에서 foreach 구현이 사용됩니다.
- capturable — 이 인스턴스가 CUDA 그래프에서 캡처하는 것이 안전한지 여부
- clipping_threshold — RMS 업데이트 클리핑 임계값 (StableAdamW, https://arxiv.org/abs/2304.13013). 업데이트는 rms / (sqrt(v_hat) + eps)의 RMS인 rms를 사용하여 1 / max(1, rms / clipping_threshold)로 스케일링됩니다. 이는 두 번째 모멘트 추정치에 비해 그래디언트가 갑자기 증가하는 매개변수의 업데이트를 감쇠시킵니다. 논문과 동일하게 1.0이며, 기본값인 None은 비활성화합니다. Adafactor와 마찬가지로 분리된 weight decay는 클리핑되지 않습니다 (StableAdamW는 decay도 클리핑된 lr로 스케일링합니다).
NAdamW 알고리즘을 구현합니다.
NAdam 알고리즘의 구현은 https://arxiv.org/abs/1910.05446의 Table 1을 참고하세요 (NAdamW와 AdamW의 유일한 차이점을 강조하는 코드의 주석도 있습니다).
알고리즘에 대한 자세한 내용은
- 분리된 가중치 감쇠 정규화: https://arxiv.org/abs/1711.05101
- Adam의 수렴 및 그 이상: https://openreview.net/forum?id=ryQu7f-RZ
단일 최적화 단계를 수행합니다.
class 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) — 최적화할 파라미터의 iterable 또는 파라미터 그룹을 정의하는 dicts
- lr (float, optional) — 학습률 (기본값: 1e-3)
- betas (Tuple[float, float], optional) — 기울기와 그 제곱의 이동 평균을 계산하는 데 사용되는 계수 (기본값: (0.95, 0.98))
- eps (float, optional) — 수치적 안정성을 높이기 위해 분모에 추가되는 항 (기본값: 1e-8)
- weight_decay (float, optional) — weight decay (L2 penalty) (기본값: 0)
- grad_averaging — 그라디언트 평균
- amsgrad (boolean, optional) —
On the Convergence of Adam and Beyond_ 논문에서 소개된 이 알고리즘의 AMSGrad 변형을 사용할지 여부 (기본값: False) - decoupled_decay — 정규화된 그래디언트에 모멘텀 업데이트 전에 weight decay를 추가하는 방식(논문에서 제안한 방식) 대신, weight decay를 가중치에 직접 적용합니다(스텝마다 lr * weight_decay).
- corrected_weight_decay — apply corrected weight decay (lr**2 / max_lr) when decoupled_decay is True
Novograd 알고리즘을 구현합니다.
단계
< source >( closure = None )
단일 최적화 단계를 수행합니다.
class timm.optim.RAdamLegacy
< source >( paramslr = 0.001betas = (0.9, 0.999)eps = 1e-08weight_decay = 0 )
PyTorch RAdam 옵티마이저
NOTE: 이 구현은 torch.optim.AdamW를 권장하기 위해 비추천(deprecated)되었으며, 참고용으로 유지됩니다
클래스 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 — weight decay (L2 penalty) (기본값: 0)
- decoupled_decay — https://arxiv.org/abs/1711.05101에 따른 분리된 가중치 감쇠
- corrected_weight_decay — apply corrected weight decay (lr**2 / max_lr) when decoupled_decay is True
- lr_in_momentum — Tensorflow의 기본 설정에 따라 학습률 스케일링이 모멘텀 버퍼 업데이트에 포함됩니다
- caution — 주의
- foreach — 기본적으로 (None) 사용되며, 지원되지 않는 경우를 제외하고 foreach(멀티 텐서) 구현을 사용합니다 (rmsprop_tf() 참조)
RMSprop 알고리즘을 구현합니다 (TensorFlow 스타일 epsilon)
NOTE: PyTorch의 RMSprop을 그대로 복사하여 eps를 sqrt 전에 적용하고, 하이퍼파라미터가 일치하도록 Tensorflow에 더 가깝게 하기 위해 몇 가지 수정을 가했습니다.
주요 변경 사항은 다음과 같습니다:
- 제곱근 내부에 적용된 Epsilon
- square_avg ones로 초기화
- 모멘텀 버퍼에 누적된 업데이트의 LR 스케일링
G. Hinton의 강의에서 제안되었습니다.
중심화 버전은 재귀 신경망을 이용한 시퀀스 생성에서 처음 등장합니다.
단일 최적화 단계를 수행합니다.
class timm.optim.SGDP
< source >( paramslr = torch.optim.optimizer.requiredmomentum = 0dampening = 0weight_decay = 0nesterov = Falseeps = 1e-08delta = 0.1wd_ratio = 0.1caution = False )
class 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 )
단일 최적화 단계를 수행합니다.