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.
Files changed (75) hide show
  1. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/PKG-INFO +14 -11
  2. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/README.rst +11 -3
  3. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pyproject.toml +3 -3
  4. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/__init__.py +8 -1
  5. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/optimizer.py +88 -51
  6. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/types.py +3 -1
  7. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/a2grad.py +1 -1
  8. pytorch_optimizer-2.10.0/pytorch_optimizer/optimizer/adahessian.py +139 -0
  9. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adai.py +1 -1
  10. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adamp.py +1 -1
  11. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adan.py +1 -1
  12. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/agc.py +1 -1
  13. pytorch_optimizer-2.10.0/pytorch_optimizer/optimizer/amos.py +142 -0
  14. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/apollo.py +2 -2
  15. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/dadapt.py +1 -1
  16. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/gc.py +1 -3
  17. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lion.py +1 -1
  18. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lookahead.py +1 -1
  19. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/pcgrad.py +1 -1
  20. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/ranger.py +1 -1
  21. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/ranger21.py +20 -34
  22. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sgd.py +72 -0
  23. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/shampoo.py +2 -2
  24. pytorch_optimizer-2.10.0/pytorch_optimizer/optimizer/sophia.py +133 -0
  25. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/utils.py +1 -3
  26. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/LICENSE +0 -0
  27. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/__init__.py +0 -0
  28. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/exception.py +0 -0
  29. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/base/scheduler.py +0 -0
  30. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
  31. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
  32. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +0 -0
  33. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  34. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
  35. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
  36. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
  37. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/__init__.py +0 -0
  38. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adabelief.py +0 -0
  39. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adabound.py +0 -0
  40. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adadelta.py +0 -0
  41. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adafactor.py +0 -0
  42. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adamax.py +0 -0
  43. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adamod.py +0 -0
  44. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adams.py +0 -0
  45. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adanorm.py +0 -0
  46. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adapnm.py +0 -0
  47. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adashift.py +0 -0
  48. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
  49. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/aggmo.py +0 -0
  50. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/alig.py +0 -0
  51. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/avagrad.py +0 -0
  52. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
  53. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/fp16.py +0 -0
  54. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/fromage.py +0 -0
  55. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/gravity.py +0 -0
  56. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/gsam.py +0 -0
  57. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lamb.py +0 -0
  58. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/lars.py +0 -0
  59. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/madgrad.py +0 -0
  60. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/msvag.py +0 -0
  61. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/nero.py +0 -0
  62. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/novograd.py +0 -0
  63. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/pid.py +0 -0
  64. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/pnm.py +0 -0
  65. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/qhadam.py +0 -0
  66. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/qhm.py +0 -0
  67. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/radam.py +0 -0
  68. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/rotograd.py +0 -0
  69. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sam.py +0 -0
  70. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sgdp.py +0 -0
  71. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/shampoo_utils.py +0 -0
  72. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/sm3.py +0 -0
  73. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/srmm.py +0 -0
  74. {pytorch_optimizer-2.9.0 → pytorch_optimizer-2.10.0}/pytorch_optimizer/optimizer/swats.py +0 -0
  75. {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.9.0
4
- Summary: optimizer & lr scheduler implementations in PyTorch with clean-code, strict types. Also, including useful optimization ideas.
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, 50 optimizers, 6 lr schedulers are supported!
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>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2020arXiv201001412F/exportcitation>`__ |
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>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2021arXiv210211600K/exportcitation>`__ |
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, 50 optimizers, 6 lr schedulers are supported!
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>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2020arXiv201001412F/exportcitation>`__ |
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>`__ | `cite <https://ui.adsabs.harvard.edu/abs/2021arXiv210211600K/exportcitation>`__ |
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.9.0"
4
- description = "optimizer & lr scheduler implementations in PyTorch with clean-code, strict types. Also, including useful optimization ideas."
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 validate_pullback_momentum(pullback_momentum: str):
153
- if pullback_momentum not in ('none', 'reset', 'pullback'):
154
- raise ValueError(
155
- f'[-] pullback_momentum {pullback_momentum} must be one of (\'none\' or \'reset\' or \'pullback\')'
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 validate_reduction(reduction: str):
160
- if reduction not in ('mean', 'sum'):
161
- raise ValueError(f'[-] reduction {reduction} must be one of (\'mean\' or \'sum\')')
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
- @staticmethod
164
- def validate_rebound(rebound: str):
165
- if rebound not in ('constant', 'belief'):
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
- @staticmethod
169
- def validate_a2grad_variant(variant: str):
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
- @staticmethod
174
- def validate_nus(nus: Union[float, Tuple[float, float]]):
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
- if not 0.0 <= nus <= 1.0:
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
- if not 0.0 <= nus[0] <= 1.0:
180
- raise ValueError(f'[-] nus1 {nus[0]} must be in the range [0, 1]')
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.validate_a2grad_variant(variant)
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
- grad = centralize_gradient(grad, gc_conv_only=False)
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
- grad = centralize_gradient(grad, gc_conv_only=False)
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
- grad = centralize_gradient(grad, gc_conv_only=False)
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: Parameter. parameter.
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.