pytorch-optimizer 2.9.0__tar.gz → 2.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/PKG-INFO +14 -11
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/README.rst +11 -3
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pyproject.toml +3 -3
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/__init__.py +8 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/optimizer.py +88 -51
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/types.py +3 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/a2grad.py +1 -1
- pytorch_optimizer-2.10.0/pytorch_optimizer/optimizer/adahessian.py +139 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adai.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adamp.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adan.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/agc.py +1 -1
- pytorch_optimizer-2.10.0/pytorch_optimizer/optimizer/amos.py +142 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/apollo.py +2 -2
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/dadapt.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/gc.py +1 -3
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lion.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lookahead.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/pcgrad.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/ranger.py +1 -1
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/ranger21.py +20 -34
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sgd.py +72 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/shampoo.py +2 -2
- pytorch_optimizer-2.10.0/pytorch_optimizer/optimizer/sophia.py +133 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/utils.py +1 -3
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/LICENSE +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/__init__.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/exception.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/scheduler.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/__init__.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adabelief.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adabound.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adadelta.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adafactor.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adamax.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adamod.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adams.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adanorm.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adapnm.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adashift.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/aggmo.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/alig.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/avagrad.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/fp16.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/fromage.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/gravity.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/gsam.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lamb.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lars.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/madgrad.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/msvag.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/nero.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/novograd.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/pid.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/pnm.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/qhadam.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/qhm.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/radam.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/rotograd.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sam.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sgdp.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/shampoo_utils.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sm3.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/srmm.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/swats.py +0 -0
- {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/yogi.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pytorch-optimizer
|
|
3
|
-
Version: 2.
|
|
4
|
-
Summary: optimizer & lr scheduler
|
|
3
|
+
Version: 2.10.0
|
|
4
|
+
Summary: optimizer & lr scheduler collections in PyTorch
|
|
5
5
|
Home-page: https://github.com/kozistr/pytorch_optimizer
|
|
6
6
|
License: Apache-2.0
|
|
7
|
-
Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdaMod,AdaNorm,AdaPNM,AdaSmooth,Adai,AdamP,AdamS,Adan,AggMo,AliG,Apollo,AvaGrad,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DiffGrad,Fromage,Gravity,LARS,Lamb,Lion,MADGRAD,MSVAG,Nero,NovoGrad,PID,PNM,QHAdam,QHM,RAdam,Ranger,Ranger21,SGDP,SGDW,SM3,SRMM,SWATS,ScalableShampoo,Shampoo,Yogi,SAM,GSAM,PCGrad,RotoGrad
|
|
7
|
+
Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdaHessian,Adai,AdamP,AdamS,Adan,AggMo,AliG,Amos,Apollo,AvaGrad,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DiffGrad,Fromage,Gravity,LARS,Lamb,Lion,MADGRAD,MSVAG,Nero,NovoGrad,PID,PNM,QHAdam,QHM,RAdam,Ranger,Ranger21,SGDP,SGDW,SignSGD,SM3,SopihaH,SRMM,SWATS,ScalableShampoo,Shampoo,Yogi,SAM,GSAM,PCGrad,RotoGrad
|
|
8
8
|
Author: kozistr
|
|
9
9
|
Author-email: kozistr@gmail.com
|
|
10
10
|
Maintainer: kozistr
|
|
@@ -21,13 +21,8 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.9
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
-
Classifier: Programming Language :: Python :: 3
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
26
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
27
24
|
Classifier: Programming Language :: Python :: 3.6
|
|
28
25
|
Classifier: Programming Language :: Python :: 3.7
|
|
29
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
30
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
31
26
|
Classifier: Topic :: Scientific/Engineering
|
|
32
27
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
33
28
|
Classifier: Topic :: Software Development
|
|
@@ -59,7 +54,7 @@ pytorch-optimizer
|
|
|
59
54
|
|
|
60
55
|
| **pytorch-optimizer** is optimizer & lr scheduler collections in PyTorch.
|
|
61
56
|
| I just re-implemented (speed & memory tweaks, plug-ins) the algorithm while based on the original paper. Also, It includes useful and practical optimization ideas.
|
|
62
|
-
| Currently,
|
|
57
|
+
| Currently, 54 optimizers, 6 lr schedulers are supported!
|
|
63
58
|
|
|
|
64
59
|
| Highly inspired by `pytorch-optimizer <https://github.com/jettify/pytorch-optimizer>`__.
|
|
65
60
|
|
|
@@ -172,9 +167,9 @@ You can check the supported optimizers & lr schedulers.
|
|
|
172
167
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
173
168
|
| Adai | *Disentangling the Effects of Adaptive Learning Rate and Momentum* | `github <https://github.com/zeke-xie/adaptive-inertia-adai>`__ | `https://arxiv.org/abs/2006.15815 <https://arxiv.org/abs/2006.15815>`__ | `cite <https://github.com/zeke-xie/adaptive-inertia-adai#citing>`__ |
|
|
174
169
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
175
|
-
| SAM | *Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2010.01412 <https://arxiv.org/abs/2010.01412>`__
|
|
170
|
+
| SAM | *Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2010.01412 <https://arxiv.org/abs/2010.01412>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2020arXiv201001412F/exportcitation>`__ |
|
|
176
171
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
177
|
-
| ASAM | *Adaptive Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2102.11600 <https://arxiv.org/abs/2102.11600>`__
|
|
172
|
+
| ASAM | *Adaptive Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2102.11600 <https://arxiv.org/abs/2102.11600>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2021arXiv210211600K/exportcitation>`__ |
|
|
178
173
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
179
174
|
| GSAM | *Surrogate Gap Guided Sharpness-Aware Minimization* | `github <https://github.com/juntang-zhuang/GSAM>`__ | `https://openreview.net/pdf?id=edONMAnhLu- <https://openreview.net/pdf?id=edONMAnhLu->`__ | `cite <https://github.com/juntang-zhuang/GSAM#citation>`__ |
|
|
180
175
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
@@ -256,6 +251,14 @@ You can check the supported optimizers & lr schedulers.
|
|
|
256
251
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
257
252
|
| AdaDelta | *An Adaptive Learning Rate Method* | | `https://arxiv.org/abs/1212.5701v1 <https://arxiv.org/abs/1212.5701v1>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2012arXiv1212.5701Z/exportcitation>`__ |
|
|
258
253
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
254
|
+
| Amos | *An Adam-style Optimizer with Adaptive Weight Decay towards Model-Oriented Scale* | `github <https://github.com/google-research/jestimator>`__ | `https://arxiv.org/abs/2210.11693 <https://arxiv.org/abs/2210.11693>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2022arXiv221011693T/exportcitation>`__ |
|
|
255
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
256
|
+
| SignSGD | *Compressed Optimisation for Non-Convex Problems* | `github <https://github.com/jxbz/signSGD>`__ | `https://arxiv.org/abs/1802.04434 <https://arxiv.org/abs/1802.04434>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2018arXiv180204434B/exportcitation>`__ |
|
|
257
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
258
|
+
| AdaHessian | *An Adaptive Second Order Optimizer for Machine Learning* | `github <https://github.com/amirgholami/adahessian>`__ | `https://arxiv.org/abs/2006.00719 <https://arxiv.org/abs/2006.00719>`__ | `cite <https://github.com/amirgholami/adahessian#citation>`__ |
|
|
259
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
260
|
+
| Sophia | *A Scalable Stochastic Second-order Optimizer for Language Model Pre-training* | `github <https://github.com/Liuhong99/Sophia>`__ | `https://arxiv.org/abs/2305.14342 <https://arxiv.org/abs/2305.14342>`__ | `cite <https://github.com/Liuhong99/Sophia>`__ |
|
|
261
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
259
262
|
|
|
260
263
|
Useful Resources
|
|
261
264
|
----------------
|
|
@@ -16,7 +16,7 @@ pytorch-optimizer
|
|
|
16
16
|
|
|
17
17
|
| **pytorch-optimizer** is optimizer & lr scheduler collections in PyTorch.
|
|
18
18
|
| I just re-implemented (speed & memory tweaks, plug-ins) the algorithm while based on the original paper. Also, It includes useful and practical optimization ideas.
|
|
19
|
-
| Currently,
|
|
19
|
+
| Currently, 54 optimizers, 6 lr schedulers are supported!
|
|
20
20
|
|
|
|
21
21
|
| Highly inspired by `pytorch-optimizer <https://github.com/jettify/pytorch-optimizer>`__.
|
|
22
22
|
|
|
@@ -129,9 +129,9 @@ You can check the supported optimizers & lr schedulers.
|
|
|
129
129
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
130
130
|
| Adai | *Disentangling the Effects of Adaptive Learning Rate and Momentum* | `github <https://github.com/zeke-xie/adaptive-inertia-adai>`__ | `https://arxiv.org/abs/2006.15815 <https://arxiv.org/abs/2006.15815>`__ | `cite <https://github.com/zeke-xie/adaptive-inertia-adai#citing>`__ |
|
|
131
131
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
132
|
-
| SAM | *Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2010.01412 <https://arxiv.org/abs/2010.01412>`__
|
|
132
|
+
| SAM | *Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2010.01412 <https://arxiv.org/abs/2010.01412>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2020arXiv201001412F/exportcitation>`__ |
|
|
133
133
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
134
|
-
| ASAM | *Adaptive Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2102.11600 <https://arxiv.org/abs/2102.11600>`__
|
|
134
|
+
| ASAM | *Adaptive Sharpness-Aware Minimization* | `github <https://github.com/davda54/sam>`__ | `https://arxiv.org/abs/2102.11600 <https://arxiv.org/abs/2102.11600>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2021arXiv210211600K/exportcitation>`__ |
|
|
135
135
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
136
136
|
| GSAM | *Surrogate Gap Guided Sharpness-Aware Minimization* | `github <https://github.com/juntang-zhuang/GSAM>`__ | `https://openreview.net/pdf?id=edONMAnhLu- <https://openreview.net/pdf?id=edONMAnhLu->`__ | `cite <https://github.com/juntang-zhuang/GSAM#citation>`__ |
|
|
137
137
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
@@ -213,6 +213,14 @@ You can check the supported optimizers & lr schedulers.
|
|
|
213
213
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
214
214
|
| AdaDelta | *An Adaptive Learning Rate Method* | | `https://arxiv.org/abs/1212.5701v1 <https://arxiv.org/abs/1212.5701v1>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2012arXiv1212.5701Z/exportcitation>`__ |
|
|
215
215
|
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
216
|
+
| Amos | *An Adam-style Optimizer with Adaptive Weight Decay towards Model-Oriented Scale* | `github <https://github.com/google-research/jestimator>`__ | `https://arxiv.org/abs/2210.11693 <https://arxiv.org/abs/2210.11693>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2022arXiv221011693T/exportcitation>`__ |
|
|
217
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
218
|
+
| SignSGD | *Compressed Optimisation for Non-Convex Problems* | `github <https://github.com/jxbz/signSGD>`__ | `https://arxiv.org/abs/1802.04434 <https://arxiv.org/abs/1802.04434>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2018arXiv180204434B/exportcitation>`__ |
|
|
219
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
220
|
+
| AdaHessian | *An Adaptive Second Order Optimizer for Machine Learning* | `github <https://github.com/amirgholami/adahessian>`__ | `https://arxiv.org/abs/2006.00719 <https://arxiv.org/abs/2006.00719>`__ | `cite <https://github.com/amirgholami/adahessian#citation>`__ |
|
|
221
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
222
|
+
| Sophia | *A Scalable Stochastic Second-order Optimizer for Language Model Pre-training* | `github <https://github.com/Liuhong99/Sophia>`__ | `https://arxiv.org/abs/2305.14342 <https://arxiv.org/abs/2305.14342>`__ | `cite <https://github.com/Liuhong99/Sophia>`__ |
|
|
223
|
+
+--------------+---------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------+
|
|
216
224
|
|
|
217
225
|
Useful Resources
|
|
218
226
|
----------------
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pytorch_optimizer"
|
|
3
|
-
version = "2.
|
|
4
|
-
description = "optimizer & lr scheduler
|
|
3
|
+
version = "2.10.0"
|
|
4
|
+
description = "optimizer & lr scheduler collections in PyTorch"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
authors = ["kozistr <kozistr@gmail.com>"]
|
|
7
7
|
maintainers = ["kozistr <kozistr@gmail.com>"]
|
|
@@ -9,7 +9,7 @@ readme = "README.rst"
|
|
|
9
9
|
homepage = "https://github.com/kozistr/pytorch_optimizer"
|
|
10
10
|
repository = "https://github.com/kozistr/pytorch_optimizer"
|
|
11
11
|
documentation = "https://pytorch-optimizers.readthedocs.io/en/latest"
|
|
12
|
-
keywords = ["pytorch", "deep-learning", "optimizer", "lr scheduler", "A2Grad", "ASGD", "AccSGD", "AdaBelief", "AdaBound", "AdaDelta", "AdaFactor", "AdaMax", "AdaMod", "AdaNorm", "AdaPNM", "AdaSmooth", "Adai", "AdamP", "AdamS", "Adan", "AggMo", "AliG", "Apollo", "AvaGrad", "DAdaptAdaGrad", "DAdaptAdam", "DAdaptAdan", "DAdaptSGD", "DiffGrad", "Fromage", "Gravity", "LARS", "Lamb", "Lion", "MADGRAD", "MSVAG", "Nero", "NovoGrad", "PID", "PNM", "QHAdam", "QHM", "RAdam", "Ranger", "Ranger21", "SGDP", "SGDW", "SM3", "SRMM", "SWATS", "ScalableShampoo", "Shampoo", "Yogi", "SAM", "GSAM", "PCGrad", "RotoGrad"]
|
|
12
|
+
keywords = ["pytorch", "deep-learning", "optimizer", "lr scheduler", "A2Grad", "ASGD", "AccSGD", "AdaBelief", "AdaBound", "AdaDelta", "AdaFactor", "AdaMax", "AdaMod", "AdaNorm", "AdaPNM", "AdaSmooth", "AdaHessian", "Adai", "AdamP", "AdamS", "Adan", "AggMo", "AliG", "Amos", "Apollo", "AvaGrad", "DAdaptAdaGrad", "DAdaptAdam", "DAdaptAdan", "DAdaptSGD", "DiffGrad", "Fromage", "Gravity", "LARS", "Lamb", "Lion", "MADGRAD", "MSVAG", "Nero", "NovoGrad", "PID", "PNM", "QHAdam", "QHM", "RAdam", "Ranger", "Ranger21", "SGDP", "SGDW", "SignSGD", "SM3", "SopihaH", "SRMM", "SWATS", "ScalableShampoo", "Shampoo", "Yogi", "SAM", "GSAM", "PCGrad", "RotoGrad"]
|
|
13
13
|
classifiers = [
|
|
14
14
|
"License :: OSI Approved :: Apache Software License",
|
|
15
15
|
"Development Status :: 5 - Production/Stable",
|
|
@@ -21,6 +21,7 @@ from pytorch_optimizer.optimizer.adabelief import AdaBelief
|
|
|
21
21
|
from pytorch_optimizer.optimizer.adabound import AdaBound
|
|
22
22
|
from pytorch_optimizer.optimizer.adadelta import AdaDelta
|
|
23
23
|
from pytorch_optimizer.optimizer.adafactor import AdaFactor
|
|
24
|
+
from pytorch_optimizer.optimizer.adahessian import AdaHessian
|
|
24
25
|
from pytorch_optimizer.optimizer.adai import Adai
|
|
25
26
|
from pytorch_optimizer.optimizer.adamax import AdaMax
|
|
26
27
|
from pytorch_optimizer.optimizer.adamod import AdaMod
|
|
@@ -34,6 +35,7 @@ from pytorch_optimizer.optimizer.adasmooth import AdaSmooth
|
|
|
34
35
|
from pytorch_optimizer.optimizer.agc import agc
|
|
35
36
|
from pytorch_optimizer.optimizer.aggmo import AggMo
|
|
36
37
|
from pytorch_optimizer.optimizer.alig import AliG
|
|
38
|
+
from pytorch_optimizer.optimizer.amos import Amos
|
|
37
39
|
from pytorch_optimizer.optimizer.apollo import Apollo
|
|
38
40
|
from pytorch_optimizer.optimizer.avagrad import AvaGrad
|
|
39
41
|
from pytorch_optimizer.optimizer.dadapt import DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptSGD
|
|
@@ -61,7 +63,7 @@ from pytorch_optimizer.optimizer.ranger import Ranger
|
|
|
61
63
|
from pytorch_optimizer.optimizer.ranger21 import Ranger21
|
|
62
64
|
from pytorch_optimizer.optimizer.rotograd import RotoGrad
|
|
63
65
|
from pytorch_optimizer.optimizer.sam import SAM
|
|
64
|
-
from pytorch_optimizer.optimizer.sgd import ASGD, SGDW, AccSGD
|
|
66
|
+
from pytorch_optimizer.optimizer.sgd import ASGD, SGDW, AccSGD, SignSGD
|
|
65
67
|
from pytorch_optimizer.optimizer.sgdp import SGDP
|
|
66
68
|
from pytorch_optimizer.optimizer.shampoo import ScalableShampoo, Shampoo
|
|
67
69
|
from pytorch_optimizer.optimizer.shampoo_utils import (
|
|
@@ -80,6 +82,7 @@ from pytorch_optimizer.optimizer.shampoo_utils import (
|
|
|
80
82
|
power_iteration,
|
|
81
83
|
)
|
|
82
84
|
from pytorch_optimizer.optimizer.sm3 import SM3
|
|
85
|
+
from pytorch_optimizer.optimizer.sophia import SophiaH
|
|
83
86
|
from pytorch_optimizer.optimizer.srmm import SRMM
|
|
84
87
|
from pytorch_optimizer.optimizer.swats import SWATS
|
|
85
88
|
from pytorch_optimizer.optimizer.utils import (
|
|
@@ -145,6 +148,10 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
|
|
|
145
148
|
AvaGrad,
|
|
146
149
|
AdaShift,
|
|
147
150
|
AdaDelta,
|
|
151
|
+
Amos,
|
|
152
|
+
AdaHessian,
|
|
153
|
+
SophiaH,
|
|
154
|
+
SignSGD,
|
|
148
155
|
]
|
|
149
156
|
OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
|
|
150
157
|
|
|
@@ -1,16 +1,84 @@
|
|
|
1
1
|
import math
|
|
2
2
|
from abc import ABC, abstractmethod
|
|
3
|
-
from typing import Optional, Tuple, Union
|
|
3
|
+
from typing import List, Optional, Tuple, Union
|
|
4
4
|
|
|
5
5
|
import torch
|
|
6
6
|
|
|
7
7
|
from pytorch_optimizer.base.exception import NegativeLRError, NegativeStepError
|
|
8
|
-
from pytorch_optimizer.base.types import BETAS
|
|
8
|
+
from pytorch_optimizer.base.types import BETAS, HUTCHINSON_G, PARAMETERS, STATE
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class BaseOptimizer(ABC):
|
|
12
12
|
r"""Base optimizer class."""
|
|
13
13
|
|
|
14
|
+
@staticmethod
|
|
15
|
+
@torch.no_grad()
|
|
16
|
+
def set_hessian(param_groups: PARAMETERS, state: STATE, hessian: List[torch.Tensor]):
|
|
17
|
+
r"""Set hessian to state from external source. Generally useful when using functorch as a base.
|
|
18
|
+
|
|
19
|
+
Example usage:
|
|
20
|
+
```
|
|
21
|
+
# Hutchinsons Estimator using HVP
|
|
22
|
+
noise = tree_map(lambda v: torch.randn_like(v), params)
|
|
23
|
+
loss_, hvp_est = jvp(grad(run_model_fn), (params,), (noise,))
|
|
24
|
+
hessian_diag_est = tree_map(lambda a, b: a * b, hvp_est, noise)
|
|
25
|
+
|
|
26
|
+
optimizer.set_hessian(hessian_diag_est)
|
|
27
|
+
# OR
|
|
28
|
+
optimizer.step(hessian=hessian_diag_est)
|
|
29
|
+
````
|
|
30
|
+
"""
|
|
31
|
+
i: int = 0
|
|
32
|
+
for group in param_groups:
|
|
33
|
+
for p in group['params']:
|
|
34
|
+
if p.size() != hessian[i].size():
|
|
35
|
+
raise ValueError(
|
|
36
|
+
f'[-] the shape of parameter and hessian does not match. {p.size()} vs {hessian[i].size()}'
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
state[p]['hessian'] = hessian[i]
|
|
40
|
+
i += 1
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
@torch.no_grad()
|
|
44
|
+
def compute_hutchinson_hessian(
|
|
45
|
+
param_groups: PARAMETERS,
|
|
46
|
+
state: STATE,
|
|
47
|
+
num_samples: int = 1,
|
|
48
|
+
pre_zero: bool = True,
|
|
49
|
+
alpha: float = 1.0,
|
|
50
|
+
distribution: HUTCHINSON_G = 'gaussian',
|
|
51
|
+
):
|
|
52
|
+
r"""Hutchinson's approximate hessian, added to the state under key `hessian`."""
|
|
53
|
+
if distribution not in ('gaussian', 'rademacher'):
|
|
54
|
+
raise NotImplementedError(f'[-] Hessian with distribution {distribution} is not implemented.')
|
|
55
|
+
|
|
56
|
+
params = []
|
|
57
|
+
for group in param_groups:
|
|
58
|
+
for p in group['params']:
|
|
59
|
+
if p.requires_grad and p.grad is not None and not p.grad.is_sparse:
|
|
60
|
+
if 'hessian' not in state[p]:
|
|
61
|
+
state[p]['hessian'] = torch.zeros_like(p)
|
|
62
|
+
elif pre_zero:
|
|
63
|
+
state[p]['hessian'].zero_()
|
|
64
|
+
|
|
65
|
+
params.append(p)
|
|
66
|
+
|
|
67
|
+
if len(params) == 0:
|
|
68
|
+
return
|
|
69
|
+
|
|
70
|
+
grads = [p.grad for p in params]
|
|
71
|
+
|
|
72
|
+
for i in range(num_samples):
|
|
73
|
+
if distribution == 'rademacher':
|
|
74
|
+
zs = [torch.randint_like(p, 0, 1) * 2.0 - 1.0 for p in params]
|
|
75
|
+
else:
|
|
76
|
+
zs = [torch.randn_like(p) for p in params]
|
|
77
|
+
|
|
78
|
+
h_zs = torch.autograd.grad(grads, params, grad_outputs=zs, retain_graph=i < num_samples - 1)
|
|
79
|
+
for h_z, z, p in zip(h_zs, zs, params):
|
|
80
|
+
state[p]['hessian'].add_(h_z * z, alpha=(1 / num_samples) * alpha)
|
|
81
|
+
|
|
14
82
|
@staticmethod
|
|
15
83
|
def apply_weight_decay(
|
|
16
84
|
p: torch.Tensor,
|
|
@@ -90,31 +158,6 @@ class BaseOptimizer(ABC):
|
|
|
90
158
|
|
|
91
159
|
return grad * exp_grad_norm / grad_norm if exp_grad_norm > grad_norm else grad
|
|
92
160
|
|
|
93
|
-
@staticmethod
|
|
94
|
-
def validate_learning_rate(learning_rate: Optional[float]):
|
|
95
|
-
if learning_rate is not None and learning_rate < 0.0:
|
|
96
|
-
raise NegativeLRError(learning_rate)
|
|
97
|
-
|
|
98
|
-
@staticmethod
|
|
99
|
-
def validate_betas(betas: BETAS):
|
|
100
|
-
if not 0.0 <= betas[0] <= 1.0:
|
|
101
|
-
raise ValueError(f'[-] beta1 {betas[0]} must be in the range [0, 1]')
|
|
102
|
-
if not 0.0 <= betas[1] <= 1.0:
|
|
103
|
-
raise ValueError(f'[-] beta2 {betas[1]} must be in the range [0, 1]')
|
|
104
|
-
|
|
105
|
-
if len(betas) < 3:
|
|
106
|
-
return
|
|
107
|
-
|
|
108
|
-
if not 0.0 <= betas[2] <= 1.0:
|
|
109
|
-
raise ValueError(f'[-] beta3 {betas[2]} must be in the range [0, 1]')
|
|
110
|
-
|
|
111
|
-
@staticmethod
|
|
112
|
-
def validate_weight_decay_type(weight_decay_type: str):
|
|
113
|
-
if weight_decay_type not in ('l2', 'decoupled', 'stable'):
|
|
114
|
-
raise ValueError(
|
|
115
|
-
f'[-] weight_decay_type {weight_decay_type} must be one of (\'l2\', \'decoupled\', \'stable\')'
|
|
116
|
-
)
|
|
117
|
-
|
|
118
161
|
@staticmethod
|
|
119
162
|
def validate_range(x: float, name: str, low: float, high: float, range_type: str = '[)'):
|
|
120
163
|
if range_type == '[)' and not low <= x < high:
|
|
@@ -149,37 +192,31 @@ class BaseOptimizer(ABC):
|
|
|
149
192
|
raise NegativeStepError(step, step_type=step_type)
|
|
150
193
|
|
|
151
194
|
@staticmethod
|
|
152
|
-
def
|
|
153
|
-
if
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
)
|
|
195
|
+
def validate_options(x: str, name: str, options: List[str]):
|
|
196
|
+
if x not in options:
|
|
197
|
+
opts: str = ' or '.join([f'\'{option}\'' for option in options]).strip()
|
|
198
|
+
raise ValueError(f'[-] {name} {x} must be one of ({opts})')
|
|
157
199
|
|
|
158
200
|
@staticmethod
|
|
159
|
-
def
|
|
160
|
-
if
|
|
161
|
-
raise
|
|
201
|
+
def validate_learning_rate(learning_rate: Optional[float]):
|
|
202
|
+
if learning_rate is not None and learning_rate < 0.0:
|
|
203
|
+
raise NegativeLRError(learning_rate)
|
|
162
204
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
raise ValueError(f'[-] rebound {rebound} must be one of (\'constant\' or \'belief\')')
|
|
205
|
+
def validate_betas(self, betas: BETAS):
|
|
206
|
+
self.validate_range(betas[0], 'beta1', 0.0, 1.0, range_type='[]')
|
|
207
|
+
self.validate_range(betas[1], 'beta2', 0.0, 1.0, range_type='[]')
|
|
167
208
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if variant not in ('uni', 'inc', 'exp'):
|
|
171
|
-
raise ValueError(f'[-] A2Grad variant {variant} must be one of (\'uni\' or \'inc\' or \'exp\')')
|
|
209
|
+
if len(betas) < 3:
|
|
210
|
+
return
|
|
172
211
|
|
|
173
|
-
|
|
174
|
-
|
|
212
|
+
self.validate_range(betas[2], 'beta3', 0.0, 1.0, range_type='[]')
|
|
213
|
+
|
|
214
|
+
def validate_nus(self, nus: Union[float, Tuple[float, float]]):
|
|
175
215
|
if isinstance(nus, float):
|
|
176
|
-
|
|
177
|
-
raise ValueError(f'[-] nus {nus} must be in the range [0, 1]')
|
|
216
|
+
self.validate_range(nus, 'nu', 0.0, 1.0, range_type='[]')
|
|
178
217
|
else:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
if not 0.0 <= nus[1] <= 1.0:
|
|
182
|
-
raise ValueError(f'[-] nus2 {nus[1]} must be in the range [0, 1]')
|
|
218
|
+
self.validate_range(nus[0], 'nu1', 0.0, 1.0, range_type='[]')
|
|
219
|
+
self.validate_range(nus[1], 'nu2', 0.0, 1.0, range_type='[]')
|
|
183
220
|
|
|
184
221
|
@abstractmethod
|
|
185
222
|
def reset(self):
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Callable, Dict, Iterable, Optional, Tuple, Type, Union
|
|
1
|
+
from typing import Any, Callable, Dict, Iterable, Literal, Optional, Tuple, Type, Union
|
|
2
2
|
|
|
3
3
|
import torch
|
|
4
4
|
from torch.optim import Optimizer
|
|
@@ -12,3 +12,5 @@ PARAMETERS = Optional[Union[Iterable[Dict[str, Any]], Iterable[torch.Tensor]]]
|
|
|
12
12
|
STATE = Dict[str, Any]
|
|
13
13
|
OPTIMIZER = Type[Optimizer]
|
|
14
14
|
SCHEDULER = Type[_LRScheduler]
|
|
15
|
+
|
|
16
|
+
HUTCHINSON_G = Literal['gaussian', 'rademacher']
|
|
@@ -32,7 +32,7 @@ class A2Grad(Optimizer, BaseOptimizer):
|
|
|
32
32
|
self.validate_learning_rate(lr)
|
|
33
33
|
self.validate_non_negative(lips, 'lips')
|
|
34
34
|
self.validate_non_negative(rho, 'rho')
|
|
35
|
-
self.
|
|
35
|
+
self.validate_options(variant, 'variant', ['uni', 'inc', 'exp'])
|
|
36
36
|
|
|
37
37
|
self.variant = variant
|
|
38
38
|
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
from typing import List, Optional
|
|
2
|
+
|
|
3
|
+
import torch
|
|
4
|
+
from torch.optim.optimizer import Optimizer
|
|
5
|
+
|
|
6
|
+
from pytorch_optimizer.base.exception import NoSparseGradientError
|
|
7
|
+
from pytorch_optimizer.base.optimizer import BaseOptimizer
|
|
8
|
+
from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, HUTCHINSON_G, LOSS, PARAMETERS
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AdaHessian(Optimizer, BaseOptimizer):
|
|
12
|
+
r"""An Adaptive Second Order Optimizer for Machine Learning.
|
|
13
|
+
|
|
14
|
+
Requires `loss.backward(create_graph=True)` in order to calculate hessians.
|
|
15
|
+
|
|
16
|
+
:param params: PARAMETERS. iterable of parameters to optimize or dicts defining parameter groups.
|
|
17
|
+
:param lr: float. learning rate.
|
|
18
|
+
:param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
|
|
19
|
+
:param weight_decay: float. weight decay (L2 penalty).
|
|
20
|
+
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
21
|
+
:param fixed_decay: bool. fix weight decay.
|
|
22
|
+
:param hessian_power: float. exponent of the hessian trace.
|
|
23
|
+
:param update_period: int. number of steps after which to apply hessian approximation.
|
|
24
|
+
:param num_samples: int. times to sample `z` for the approximation of the hessian trace.
|
|
25
|
+
:param hessian_distribution: HUTCHINSON_G. type of distribution to initialize hessian.
|
|
26
|
+
:param adam_debias: bool. Only correct the denominator to avoid inflating step sizes early in training.
|
|
27
|
+
:param eps: float. term added to the denominator to improve numerical stability.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(
|
|
31
|
+
self,
|
|
32
|
+
params: PARAMETERS,
|
|
33
|
+
lr: float = 1e-1,
|
|
34
|
+
betas: BETAS = (0.9, 0.999),
|
|
35
|
+
weight_decay: float = 0.0,
|
|
36
|
+
weight_decouple: bool = True,
|
|
37
|
+
fixed_decay: bool = False,
|
|
38
|
+
hessian_power: float = 1.0,
|
|
39
|
+
update_period: int = 1,
|
|
40
|
+
num_samples: int = 1,
|
|
41
|
+
hessian_distribution: HUTCHINSON_G = 'rademacher',
|
|
42
|
+
adam_debias: bool = False,
|
|
43
|
+
eps: float = 1e-16,
|
|
44
|
+
):
|
|
45
|
+
self.validate_learning_rate(lr)
|
|
46
|
+
self.validate_betas(betas)
|
|
47
|
+
self.validate_non_negative(weight_decay, 'weight_decay')
|
|
48
|
+
self.validate_non_negative(eps, 'eps')
|
|
49
|
+
self.validate_range(hessian_power, 'Hessian Power', 0, 1, range_type='(]')
|
|
50
|
+
|
|
51
|
+
self.update_period = update_period
|
|
52
|
+
self.num_samples = num_samples
|
|
53
|
+
self.distribution = hessian_distribution
|
|
54
|
+
|
|
55
|
+
defaults: DEFAULTS = {
|
|
56
|
+
'lr': lr,
|
|
57
|
+
'betas': betas,
|
|
58
|
+
'weight_decay': weight_decay,
|
|
59
|
+
'weight_decouple': weight_decouple,
|
|
60
|
+
'fixed_decay': fixed_decay,
|
|
61
|
+
'hessian_power': hessian_power,
|
|
62
|
+
'adam_debias': adam_debias,
|
|
63
|
+
'eps': eps,
|
|
64
|
+
}
|
|
65
|
+
super().__init__(params, defaults)
|
|
66
|
+
|
|
67
|
+
def __str__(self) -> str:
|
|
68
|
+
return 'AdaHessian'
|
|
69
|
+
|
|
70
|
+
@torch.no_grad()
|
|
71
|
+
def reset(self):
|
|
72
|
+
for group in self.param_groups:
|
|
73
|
+
group['step'] = 0
|
|
74
|
+
for p in group['params']:
|
|
75
|
+
state = self.state[p]
|
|
76
|
+
state['exp_avg'] = torch.zeros_like(p)
|
|
77
|
+
state['exp_hessian_diag_sq'] = torch.zeros_like(p)
|
|
78
|
+
|
|
79
|
+
@torch.no_grad()
|
|
80
|
+
def step(self, closure: CLOSURE = None, hessian: Optional[List[torch.Tensor]] = None) -> LOSS:
|
|
81
|
+
loss: LOSS = None
|
|
82
|
+
if closure is not None:
|
|
83
|
+
with torch.enable_grad():
|
|
84
|
+
loss = closure()
|
|
85
|
+
|
|
86
|
+
step: int = self.param_groups[0].get('step', 1)
|
|
87
|
+
|
|
88
|
+
if hessian is not None:
|
|
89
|
+
self.set_hessian(self.param_groups, self.state, hessian)
|
|
90
|
+
elif step % self.update_period == 0:
|
|
91
|
+
self.compute_hutchinson_hessian(
|
|
92
|
+
self.param_groups, self.state, self.num_samples, distribution=self.distribution
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
for group in self.param_groups:
|
|
96
|
+
if 'step' in group:
|
|
97
|
+
group['step'] += 1
|
|
98
|
+
else:
|
|
99
|
+
group['step'] = 1
|
|
100
|
+
|
|
101
|
+
beta1, beta2 = group['betas']
|
|
102
|
+
|
|
103
|
+
bias_correction1: float = 1.0 - beta1 ** group['step']
|
|
104
|
+
bias_correction2: float = 1.0 - beta2 ** group['step']
|
|
105
|
+
|
|
106
|
+
for p in group['params']:
|
|
107
|
+
if p.grad is None:
|
|
108
|
+
continue
|
|
109
|
+
|
|
110
|
+
grad = p.grad
|
|
111
|
+
if grad.is_sparse:
|
|
112
|
+
raise NoSparseGradientError(str(self))
|
|
113
|
+
|
|
114
|
+
state = self.state[p]
|
|
115
|
+
if 'exp_avg' not in state:
|
|
116
|
+
state['exp_avg'] = torch.zeros_like(p)
|
|
117
|
+
state['exp_hessian_diag_sq'] = torch.zeros_like(p)
|
|
118
|
+
|
|
119
|
+
self.apply_weight_decay(
|
|
120
|
+
p=p,
|
|
121
|
+
grad=grad,
|
|
122
|
+
lr=group['lr'],
|
|
123
|
+
weight_decay=group['weight_decay'],
|
|
124
|
+
weight_decouple=group['weight_decouple'],
|
|
125
|
+
fixed_decay=group['fixed_decay'],
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
exp_avg, exp_hessian_diag_sq = state['exp_avg'], state['exp_hessian_diag_sq']
|
|
129
|
+
exp_avg.mul_(beta1).add_(grad, alpha=1.0 - beta1)
|
|
130
|
+
|
|
131
|
+
if 'hessian' in state and (group['step'] % self.update_period == 0 or hessian is not None):
|
|
132
|
+
exp_hessian_diag_sq.mul_(beta2).addcmul_(state['hessian'], state['hessian'], value=1.0 - beta2)
|
|
133
|
+
|
|
134
|
+
de_nom = (exp_hessian_diag_sq / bias_correction2).pow_(group['hessian_power'] / 2).add_(group['eps'])
|
|
135
|
+
|
|
136
|
+
step_size: float = self.apply_adam_debias(group['adam_debias'], group['lr'], bias_correction1)
|
|
137
|
+
p.addcdiv_(exp_avg, de_nom, value=-step_size)
|
|
138
|
+
|
|
139
|
+
return loss
|
|
@@ -103,7 +103,7 @@ class Adai(Optimizer, BaseOptimizer):
|
|
|
103
103
|
state['step'] += 1
|
|
104
104
|
|
|
105
105
|
if self.use_gc:
|
|
106
|
-
|
|
106
|
+
centralize_gradient(grad, gc_conv_only=False)
|
|
107
107
|
|
|
108
108
|
bias_correction2: float = 1.0 - beta2 ** state['step']
|
|
109
109
|
|
|
@@ -122,7 +122,7 @@ class AdamP(Optimizer, BaseOptimizer):
|
|
|
122
122
|
state['exp_grad_norm'] = torch.zeros((1,), dtype=grad.dtype, device=grad.device)
|
|
123
123
|
|
|
124
124
|
if self.use_gc:
|
|
125
|
-
|
|
125
|
+
centralize_gradient(grad, gc_conv_only=False)
|
|
126
126
|
|
|
127
127
|
s_grad = self.get_adanorm_gradient(
|
|
128
128
|
grad=grad,
|
|
@@ -130,7 +130,7 @@ class Adan(Optimizer, BaseOptimizer):
|
|
|
130
130
|
grad.mul_(clip_global_grad_norm)
|
|
131
131
|
|
|
132
132
|
if self.use_gc:
|
|
133
|
-
|
|
133
|
+
centralize_gradient(grad, gc_conv_only=False)
|
|
134
134
|
|
|
135
135
|
grad_diff = state['previous_grad']
|
|
136
136
|
grad_diff.add_(grad)
|
|
@@ -6,7 +6,7 @@ from pytorch_optimizer.optimizer.utils import unit_norm
|
|
|
6
6
|
def agc(p: torch.Tensor, grad: torch.Tensor, agc_eps: float, agc_clip_val: float, eps: float = 1e-6) -> torch.Tensor:
|
|
7
7
|
r"""Clip gradient values in excess of the unit wise norm.
|
|
8
8
|
|
|
9
|
-
:param p:
|
|
9
|
+
:param p: torch.Tensor. parameter.
|
|
10
10
|
:param grad: torch.Tensor, gradient.
|
|
11
11
|
:param agc_eps: float. agc epsilon to clip the norm of parameter.
|
|
12
12
|
:param agc_clip_val: float. norm clip.
|