timm 文件
最佳化
並獲得增強的文件體驗
開始使用
最佳化
本頁包含 timm
中學習率最佳化器的 API 參考文件。
最佳化器
工廠函式
timm.optim.create_optimizer_v2
< 原始碼 >( model_or_params: typing.Union[torch.nn.modules.module.Module, collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] opt: str = 'sgd' lr: typing.Optional[float] = None weight_decay: float = 0.0 momentum: float = 0.9 foreach: typing.Optional[bool] = None filter_bias_and_bn: bool = True layer_decay: typing.Optional[float] = None layer_decay_min_scale: float = 0.0 layer_decay_no_opt_scale: typing.Optional[float] = None param_group_fn: typing.Optional[typing.Callable[[torch.nn.modules.module.Module], typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]]]] = None **kwargs: typing.Any )
引數
- model_or_params — 一個 PyTorch 模型或一個可迭代的引數/引數組。如果提供了一個模型,將根據其他引數自動提取和分組引數。
- opt — 要建立的最佳化器的名稱(例如,‘adam’、‘adamw’、‘sgd’)。使用 list_optimizers() 檢視可用選項。
- lr — 學習率。如果為 None,將使用最佳化器的預設值。
- weight_decay — 權重衰減因子。如果 model_or_params 是一個模型,將用於建立引數組。
- momentum — 支援動量的最佳化器的動量因子。僅當所選最佳化器接受 momentum 引數時使用。
- foreach — 啟用/停用 foreach (多張量) 實現(如果可用)。如果為 None,將使用最佳化器特定的預設值。
- filter_bias_and_bn — 如果為 True,則偏置、歸一化層引數(所有一維引數)將不應用權重衰減。僅當 model_or_params 是一個模型且 weight_decay > 0 時使用。
- layer_decay — 可選的逐層學習率衰減因子。如果提供,學習率將按 layer_decay^(max_depth - layer_depth) 縮放。僅當 model_or_params 是一個模型時使用。
- param_group_fn — 用於建立自定義引數組的可選函式。如果提供,其他引數分組選項將被忽略。
- **kwargs — 額外的最佳化器特定引數(例如,Adam 的 betas)。
透過 timm 登錄檔建立最佳化器例項。
建立並配置一個具有適當引數組和設定的最佳化器。支援為權重衰減和逐層學習率自動建立引數組,以及自定義引數分組。
示例
模型的基本用法
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 … )
帶逐層學習率衰減的 Adam
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
< 原始碼 >( filter: typing.Union[str, typing.List[str]] = '' exclude_filters: typing.Optional[typing.List[str]] = None with_description: bool = False ) → 如果 with_description 為 False
引數
- filter — 萬用字元樣式的過濾字串或過濾字串列表(例如,‘adam’ 表示所有 Adam 變體,或 [‘adam’, ‘*8bit’] 表示 Adam 變體和 8 位最佳化器)。空字串表示不進行過濾。
- exclude_filters — 可選的用於排除的萬用字元模式列表。例如,[’8bit’, ‘fused’] 將排除 8 位和融合實現。
- with_description — 如果為 True,則返回 (名稱, 描述) 的元組,而不僅僅是名稱。描述提供了最佳化器特性的簡要說明。
返回
如果 with_description 為 False
字串形式的最佳化器名稱列表(例如,[‘adam’, ‘adamw’, …]) 如果 with_description 為 True:(名稱, 描述) 的元組列表(例如,[(‘adam’, ‘Adaptive Moment…’), …])
列出可用的最佳化器名稱,可選擇性地過濾。
列出所有已註冊的最佳化器,並可選擇使用萬用字元模式進行過濾。可以使用包含和排除模式過濾最佳化器,並可選擇為每個最佳化器名稱返回描述。
示例
list_optimizers() [‘adam’, ‘adamw’, ‘sgd’, …]
list_optimizers([‘la’, ‘nla’]) # 列出 lamb 和 lars [‘lamb’, ‘lambc’, ‘larc’, ‘lars’, ‘nlarc’, ‘nlars’]
list_optimizers(’adam’, exclude_filters=[‘bnb’, ‘fused’]) # 排除 bnb 和 apex adam 最佳化器 [‘adam’, ‘adamax’, ‘adamp’, ‘adamw’, ‘nadam’, ‘nadamw’, ‘radam’]
list_optimizers(with_description=True) # 獲取描述 [(‘adabelief’, ‘根據梯度預測誤差調整學習率’), (‘adadelta’, ‘torch.optim Adadelta, 根據梯度的執行視窗調整學習率’), (‘adafactor’, ‘使用分解梯度的記憶體高效 Adam 實現’), …]
timm.optim.get_optimizer_class
< 原始碼 >( name: str bind_defaults: bool = True ) → 如果 bind_defaults 為 False
透過名稱獲取最佳化器類,並可選擇繫結預設引數。
檢索最佳化器類或一個綁定了預設引數的偏函式。這允許直接使用其預設配置例項化最佳化器,而無需透過完整的工廠函式。
示例
獲取帶 nesterov 動量預設值的 SGD
SGD = get_optimizer_class(‘sgd’) # 繫結 nesterov=True opt = SGD(model.parameters(), lr=0.1, momentum=0.9)
獲取原始最佳化器類
SGD = get_optimizer_class(‘sgd’) opt = SGD(model.parameters(), lr=1e-3, momentum=0.9)
最佳化器類
class timm.optim.AdaBelief
< 原始碼 >( params lr = 0.001 betas = (0.9, 0.999) eps = 1e-16 weight_decay = 0 amsgrad = False decoupled_decay = True fixed_decay = False rectify = True degenerated_to_sgd = True )
引數
- params (iterable) — 可最佳化的引數的可迭代物件或定義引數組的字典
- lr (float, optional) — 學習率 (預設: 1e-3)
- betas (Tuple[float, float], optional) — 用於計算梯度及其平方的執行平均值的係數 (預設: (0.9, 0.999))
- eps (float, optional) — 新增到分母以提高數值穩定性的項 (預設: 1e-16)
- weight_decay (float, optional) — 權重衰減 (L2 懲罰) (預設: 0)
- amsgrad (boolean, optional) — 是否使用論文
On the Convergence of Adam and Beyond
中該演算法的 AMSGrad 變體 (預設: False) - decoupled_decay (boolean, optional) — (預設: True) 如果設定為 True,則最佳化器將使用類似 AdamW 的解耦權重衰減
- fixed_decay (boolean, optional) — (預設: False) 當 weight_decouple 設定為 True 時使用。當 fixed_decay == True 時,權重衰減執行為 $W_{new} = W_{old} - W_{old} \times decay$。當 fixed_decay == False 時,權重衰減執行為 $W_{new} = W_{old} - W_{old} \times decay \times lr$。請注意,在這種情況下,權重衰減率會隨著學習率 (lr) 的降低而降低。
- rectify (boolean, optional) — (預設: True) 如果設定為 True,則執行類似 RAdam 的修正更新
- degenerated_to_sgd (boolean, optional) (預設—True) 如果設定為 True,則在梯度方差較大時執行 SGD 更新
實現 AdaBelief 演算法。修改自 PyTorch 中的 Adam
參考:AdaBelief Optimizer, adapting stepsizes by the belief in observed gradients, NeurIPS 2020
有關推薦超引數的完整表格,請參見 https://github.com/juntang-zhuang/Adabelief-Optimizer’ 例如,有關 EfficientNet 的 train/args,請參見這些 gists
- 訓練指令碼連結:https://gist.github.com/juntang-zhuang/0a501dd51c02278d952cf159bc233037
- args.yaml 連結:https://gist.github.com/juntang-zhuang/517ce3c27022b908bb93f78e4f786dc3
執行單次最佳化步驟。
class timm.optim.Adafactor
< 原始碼 >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: typing.Optional[float] = None eps: float = 1e-30 eps_scale: float = 0.001 clip_threshold: float = 1.0 decay_rate: float = -0.8 betas: typing.Optional[typing.Tuple[float, float]] = None weight_decay: float = 0.0 scale_parameter: bool = True warmup_init: bool = False min_dim_size_to_factor: int = 16 caution: bool = False )
實現 Adafactor 演算法。
此實現基於:Adafactor: Adaptive Learning Rates with Sublinear Memory Cost
(參見 https://arxiv.org/abs/1804.04235)
請注意,該最佳化器會根據 scale_parameter、relative_step 和 warmup_init 選項內部調整學習率。
要使用手動(外部)學習率排程,您應設定 scale_parameter=False
和 relative_step=False
。
引數: params: 用於最佳化的引數可迭代物件或定義引數組的字典 lr: 外部學習率 eps: 分別用於平方梯度和引數尺度的正則化常數 eps_scale: 分別用於引數尺度的正則化常數 clip_threshold: 最終梯度更新的均方根閾值 decay_rate: 用於計算平方梯度執行平均值的係數 beta1: 用於計算梯度執行平均值的係數 weight_decay: 權重衰減 scale_parameter: 如果為 True,學習率將按引數的均方根進行縮放 warmup_init: 依賴時間的學習率計算取決於是否使用預熱初始化
執行單次最佳化步驟。
class timm.optim.AdafactorBigVision
< 原始碼 >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 1.0 min_dim_size_to_factor: int = 16 decay_rate: float = 0.8 decay_offset: int = 0 beta2_cap: float = 0.999 momentum: typing.Optional[float] = 0.9 momentum_dtype: typing.Union[str, torch.dtype] = torch.bfloat16 eps: typing.Optional[float] = None weight_decay: float = 0.0 clipping_threshold: typing.Optional[float] = None unscaled_wd: bool = False caution: bool = False corrected_weight_decay: bool = False foreach: typing.Optional[bool] = False )
BigVision 的 Adafactor 變體的 PyTorch 實現,具有單張量和多張量實現。
由 Ross Wightman 改編自 https://github.com/google-research/big_vision
class timm.optim.Adahessian
< 原始碼 >( params lr = 0.1 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0.0 hessian_power = 1.0 update_each = 1 n_samples = 1 avg_conv_kernel = False )
引數
- params (iterable) — 可最佳化的引數的可迭代物件或定義引數組的字典
- lr (float, optional) — 學習率 (預設: 0.1)
- betas ((float, float), optional) — 用於計算梯度和海森矩陣跡的平方的執行平均值的係數 (預設: (0.9, 0.999))
- eps (float, optional) — 新增到分母以提高數值穩定性的項 (預設: 1e-8)
- weight_decay (float, optional) — 權重衰減 (L2 懲罰) (預設: 0.0)
- hessian_power (float, optional) — 海森矩陣跡的指數 (預設: 1.0)
- update_each (int, 可選) — 僅在執行*此*步數後計算海森矩陣跡的近似值(以節省時間)(預設值:1)
- n_samples (int, 可選) — 為近似海森矩陣跡而對
z
進行取樣的次數(預設值:1)
實現了論文《ADAHESSIAN: An Adaptive Second OrderOptimizer for Machine Learning》中的 AdaHessian 演算法。
獲取所有引數組中帶有梯度的所有引數。
計算海森矩陣跡的 Hutchinson 近似值,併為每個可訓練引數累加該值。
執行單次最佳化步驟。
將累加的海森矩陣跡清零。
class timm.optim.AdamP
< source >( params lr = 0.001 betas = (0.9, 0.999) eps = 1e-08 weight_decay = 0 delta = 0.1 wd_ratio = 0.1 nesterov = False )
class timm.optim.Adan
< source >( params lr: float = 0.001 betas: typing.Tuple[float, float, float] = (0.98, 0.92, 0.99) eps: float = 1e-08 weight_decay: float = 0.0 no_prox: bool = False caution: bool = False foreach: typing.Optional[bool] = None )
實現了 Adan 的一個 PyTorch 變體。
Adan 演算法在論文《Adan: Adaptive Nesterov Momentum Algorithm for Faster Optimizing Deep Models》中被提出,網址:https://arxiv.org/abs/2208.06677
執行單次最佳化步驟。
class timm.optim.Adopt
< source >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: typing.Union[float, torch.Tensor] = 0.001 betas: typing.Tuple[float, float] = (0.9, 0.9999) eps: float = 1e-06 clip_exp: typing.Optional[float] = 0.333 weight_decay: float = 0.0 decoupled: bool = False corrected_weight_decay: bool = False caution: bool = False foreach: typing.Optional[bool] = False maximize: bool = False capturable: bool = False differentiable: bool = False )
ADOPT: Modified Adam Can Converge with Any β2 with the Optimal Rate: https://arxiv.org/abs/2411.02853
執行單步最佳化。
class timm.optim.Lamb
< source >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.001 bias_correction: bool = True betas: typing.Tuple[float, float] = (0.9, 0.999) eps: float = 1e-06 weight_decay: float = 0.01 grad_averaging: bool = True max_grad_norm: typing.Optional[float] = 1.0 trust_clip: bool = False always_adapt: bool = False caution: bool = False decoupled_decay: bool = False corrected_weight_decay: bool = False )
引數
- 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 — 當使用 decoupled_decay 時,應用校正後的權重衰減 (lr**2 / max_lr)
實現了一個純 PyTorch 版本的 FuseLAMB(NvLamb 變體)最佳化器,源自 apex.optimizers.FusedLAMB。參考:https://github.com/NVIDIA/DeepLearningExamples/blob/master/PyTorch/LanguageModeling/Transformer-XL/pytorch/lamb.py
LAMB 演算法在以下論文中被提出:
- Large Batch Optimization for Deep Learning - Training BERT in 76 minutes: https://arxiv.org/abs/1904.00962
- On the Convergence of Adam and Beyond: https://openreview.net/forum?id=ryQu7f-RZ
執行單次最佳化步驟。
class timm.optim.LaProp
< source >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.0004 betas: typing.Tuple[float, float] = (0.9, 0.999) eps: float = 1e-15 weight_decay: float = 0.0 caution: bool = False corrected_weight_decay: bool = False )
LaProp 最佳化器
論文:LaProp: Separating Momentum and Adaptivity in Adam, https://arxiv.org/abs/2002.04839
執行單次最佳化步驟。
class timm.optim.Lars
< source >( params lr = 1.0 momentum = 0 dampening = 0 weight_decay = 0 nesterov = False trust_coeff = 0.001 eps = 1e-08 trust_clip = False always_adapt = False )
引數
- params (iterable) — 要最佳化的可迭代引數或定義引數組的字典。
- lr (float, 可選) — 學習率(預設值:1.0)。
- momentum (float, 可選) — 動量因子(預設值:0)
- weight_decay (float, 可選) — 權重衰減(L2 懲罰)(預設值:0)
- dampening (float, 可選) — 動量阻尼(預設值:0)
- nesterov (bool, 可選) — 啟用 Nesterov 動量(預設值:False)
- trust_coeff (float) — 用於計算自適應學習率/置信度比率的置信係數(預設值:0.001)
- eps (float) — 用於除法分母的 epsilon 值(預設值:1e-8)
- trust_clip (bool) — 啟用 LARC 置信度比率裁剪(預設值:False)
- always_adapt (bool) — 總是應用 LARS 學習率自適應,否則僅當組的 weight_decay != 0 時應用(預設值:False)
用於 PyTorch 的 LARS 最佳化器
論文:Large batch training of Convolutional Networks
- https://arxiv.org/pdf/1708.03888.pdf
執行單次最佳化步驟。
class timm.optim.Lion
< source >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.0001 betas: typing.Tuple[float, float] = (0.9, 0.99) weight_decay: float = 0.0 caution: bool = False corrected_weight_decay: bool = False maximize: bool = False foreach: typing.Optional[bool] = None )
實現了 Lion 演算法。
執行單次最佳化步驟。
class timm.optim.MADGRAD
< 原始碼 >( params: typing.Any lr: float = 0.01 momentum: float = 0.9 weight_decay: float = 0 eps: float = 1e-06 decoupled_decay: bool = False )
MADGRAD_:一種用於隨機最佳化的動量化、自適應、雙重平均梯度方法。
.. _MADGRAD: https://arxiv.org/abs/2101.11075
MADGRAD 是一種通用最佳化器,可替代 SGD 或 Adam,可能會更快地收斂並具有更好的泛化能力。目前僅支援 GPU。通常,可使用與 SGD 或 Adam 相同的學習率排程。總體學習率與這兩種方法都不可比,應透過超引數搜尋確定。
MADGRAD 所需的權重衰減比其他方法少,通常甚至可以為零。用於 SGD 或 Adam 的 beta1 的動量值也適用於此。
對於稀疏問題,weight_decay 和 momentum 都應設定為 0。
步驟
< 原始碼 >( closure: typing.Optional[typing.Callable[[], float]] = None )
執行單次最佳化步驟。
class timm.optim.Mars
< 原始碼 >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.003 betas: typing.Tuple[float, float] = (0.9, 0.99) eps: float = 1e-08 weight_decay: float = 0.0 gamma: float = 0.025 mars_type: str = 'adamw' optimize_1d: bool = False lr_1d_factor: float = 1.0 betas_1d: typing.Optional[typing.Tuple[float, float]] = None caution: bool = False )
MARS 最佳化器
論文:MARS: Unleashing the Power of Variance Reduction for Training Large Models https://arxiv.org/abs/2411.10438
執行單次最佳化步驟。
class timm.optim.NAdamW
< 原始碼 >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.001 betas: typing.Tuple[float, float] = (0.9, 0.999) eps: float = 1e-08 weight_decay: float = 0.01 caution: bool = False corrected_weight_decay: bool = False maximize: bool = False foreach: typing.Optional[bool] = None capturable: bool = False )
實現 NAdamW 演算法。
有關 NAdam 演算法的實現,請參閱 https://arxiv.org/abs/1910.05446 中的表 1(程式碼中也有註釋,強調了 NAdamW 和 AdamW 之間的唯一區別)。
有關該演算法的更多詳情,請參閱
- 解耦權重衰減正則化:https://arxiv.org/abs/1711.05101
- On the Convergence of Adam and Beyond: https://openreview.net/forum?id=ryQu7f-RZ
執行單次最佳化步驟。
class timm.optim.NvNovoGrad
< 原始碼 >( params lr = 0.001 betas = (0.95, 0.98) eps = 1e-08 weight_decay = 0 grad_averaging = False amsgrad = 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 (boolean, 可選) — 是否使用論文 `On the Convergence of Adam and Beyond`_ 中的 AMSGrad 變體演算法(預設值:False)
實現 Novograd 演算法。
執行單次最佳化步驟。
class timm.optim.RMSpropTF
< 原始碼 >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.01 alpha: float = 0.9 eps: float = 1e-10 weight_decay: float = 0 momentum: float = 0.0 centered: bool = False decoupled_decay: bool = False corrected_weight_decay: bool = False lr_in_momentum: bool = True caution: bool = False )
引數
- params — 可迭代的待最佳化引數或定義引數組的字典
- lr — 學習率
- momentum — 動量因子
- alpha — 平滑(衰減)常數
- eps — 為提高數值穩定性而新增到分母的項
- centered — 如果為 `True`,則計算中心化的 RMSProp,梯度將透過其方差的估計值進行歸一化
- weight_decay — 權重衰減(L2 懲罰項)(預設值:0)
- decoupled_decay — 解耦權重衰減,根據 https://arxiv.org/abs/1711.05101
- corrected_weight_decay — 當 decoupled_decay 為 True 時,應用修正的權重衰減 (lr**2 / max_lr)
- lr_in_momentum — 根據 Tensorflow 中的預設設定,學習率縮放包含在動量緩衝更新中
- caution — 應用 caution
實現 RMSprop 演算法(TensorFlow 風格的 epsilon)
注意:這是 PyTorch RMSprop 的直接複製貼上,在 sqrt 之前應用了 eps,並進行了一些其他修改,以更接近 Tensorflow,從而匹配超引數。
值得注意的變化包括
- 在平方根內應用 Epsilon
- square_avg 初始化為 1
- 在動量緩衝中累積更新的學習率縮放
由 G. Hinton 在他的課程中提出。
中心化版本首次出現在 Generating Sequences With Recurrent Neural Networks 中。
執行單次最佳化步驟。
class timm.optim.SGDP
< 原始碼 >( params lr = <required parameter> momentum = 0 dampening = 0 weight_decay = 0 nesterov = False eps = 1e-08 delta = 0.1 wd_ratio = 0.1 )
class timm.optim.SGDW
< 原始碼 >( params: typing.Union[collections.abc.Iterable[torch.Tensor], collections.abc.Iterable[dict[str, typing.Any]], collections.abc.Iterable[tuple[str, torch.Tensor]]] lr: float = 0.001 momentum: float = 0.0 dampening: float = 0.0 weight_decay: float = 0.0 nesterov: bool = False caution: bool = False corrected_weight_decay: bool = False maximize: bool = False foreach: typing.Optional[bool] = None differentiable: bool = False )
執行單次最佳化步驟。