
Optimizador de antorcha : colección de optimizadores para Pytorch compatible con el módulo óptimo.
import torch_optimizer as optim
# model = ...
optimizer = optim . DiffGrad ( model . parameters (), lr = 0.001 )
optimizer . step ()El proceso de instalación es simple, solo:
$ Pip Install Torch_optimizer
https://pytorch-optimizer.rtfd.io
Cite los autores originales de los algoritmos de optimización. Si te gusta este paquete:
@Software {Novik_torChoptimizers,
title = {{Torch-Optimizer-Colección de algoritmos de optimización para Pytorch.}},
autor = {Novik, mykola},
año = 2020,
mes = 1,
versión = {1.0.1}
}
O use la función GitHub: el botón "Cite este repositorio".
| A2gradexp | https://arxiv.org/abs/1810.00553 |
| A2gradinc | https://arxiv.org/abs/1810.00553 |
| A2graduni | https://arxiv.org/abs/1810.00553 |
| Accesivo | https://arxiv.org/abs/1803.05591 |
| Adabelief | https://arxiv.org/abs/2010.07468 |
| Adabundante | https://arxiv.org/abs/1902.09843 |
| Adamod | https://arxiv.org/abs/1910.12249 |
| Adafactor | https://arxiv.org/abs/1804.04235 |
| Adahessiano | https://arxiv.org/abs/2006.00719 |
| Adampa | https://arxiv.org/abs/2006.08217 |
| Aggmo | https://arxiv.org/abs/1804.00325 |
| Apolo | https://arxiv.org/abs/2009.13586 |
| Difgrado | https://arxiv.org/abs/1909.11015 |
| Cordero | https://arxiv.org/abs/1904.00962 |
| Mirada | https://arxiv.org/abs/1907.08610 |
| Madgrad | https://arxiv.org/abs/2101.11075 |
| Novograd | https://arxiv.org/abs/1905.11286 |
| Pid | https://www4.comp.polyu.edu.hk/~cslzhang/paper/cvpr18_pid.pdf |
| Qhadam | https://arxiv.org/abs/1810.06801 |
| QHM | https://arxiv.org/abs/1810.06801 |
| Radam | https://arxiv.org/abs/1908.03265 |
| Guardabosque | https://medium.com/@lessw/new-deep-letarning-optimizer-ranger-synergistics-combination-of-radam-lookead-for-the-best-of-2DC83f79a48d |
| Rangerqh | https://arxiv.org/abs/1810.06801 |
| Rangerva | https://arxiv.org/abs/1908.00700V2 |
| SGDP | https://arxiv.org/abs/2006.08217 |
| Sgdw | https://arxiv.org/abs/1608.03983 |
| Holgazanería | https://arxiv.org/abs/1712.07628 |
| Champú | https://arxiv.org/abs/1802.09568 |
| Yogui | https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization |
Las visualizaciones nos ayudan a ver cómo los diferentes algoritmos tratan con situaciones simples como: puntos de silla de montar, mínimos locales, valles, etc., y pueden proporcionar ideas interesantes sobre el funcionamiento interno de un algoritmo. Las funciones de referencia de Rosenbrock y Rastrigin se seleccionaron porque:
La rastrigina es una función no convexa y tiene un mínimo global en (0.0, 0.0). Encontrar el mínimo de esta función es un problema bastante difícil debido a su gran espacio de búsqueda y su gran cantidad de mínimos locales.
Cada optimizador realiza 501 pasos de optimización. La tasa de aprendizaje es la mejor que se encuentra con un algoritmo de búsqueda de hiper parámetros, el resto de los parámetros de sintonización son predeterminados. Es muy fácil extender el script y ajustar otros parámetros de optimizador.
Ejemplos de Python/Viz_optimizers.py
No elija un optimizador basado en visualizaciones, los enfoques de optimización tienen propiedades únicas y pueden adaptarse para diferentes propósitos o puede requerir un horario de tasa de aprendizaje explícito, etc. La mejor manera de averiguar es probar una en su problema particular y ver si mejora los puntajes.
Si no sabe qué optimizador usar, comience con el SGD/Adam incorporado. Una vez que la lógica de entrenamiento esté lista y se establecen puntajes de línea de base, intercambie el optimizador y vea si hay alguna mejora.
import torch_optimizer as optim
# model = ...
optimizer = optim . A2GradExp (
model . parameters (),
kappa = 1000.0 ,
beta = 10.0 ,
lips = 10.0 ,
rho = 0.5 ,
)
optimizer . step ()Documento : descenso de gradiente estocástico adaptativo y acelerado óptimo (2018) [https://arxiv.org/abs/1810.00553]
Código de referencia : https://github.com/severilov/a2grad_optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . A2GradInc (
model . parameters (),
kappa = 1000.0 ,
beta = 10.0 ,
lips = 10.0 ,
)
optimizer . step ()Documento : descenso de gradiente estocástico adaptativo y acelerado óptimo (2018) [https://arxiv.org/abs/1810.00553]
Código de referencia : https://github.com/severilov/a2grad_optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . A2GradUni (
model . parameters (),
kappa = 1000.0 ,
beta = 10.0 ,
lips = 10.0 ,
)
optimizer . step ()Documento : descenso de gradiente estocástico adaptativo y acelerado óptimo (2018) [https://arxiv.org/abs/1810.00553]
Código de referencia : https://github.com/severilov/a2grad_optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . AccSGD (
model . parameters (),
lr = 1e-3 ,
kappa = 1000.0 ,
xi = 10.0 ,
small_const = 0.7 ,
weight_decay = 0
)
optimizer . step ()Documento : Sobre la insuficiencia de los esquemas de impulso existentes para la optimización estocástica (2019) [https://arxiv.org/abs/1803.05591]
Código de referencia : https://github.com/rahulkidambi/accsgd
import torch_optimizer as optim
# model = ...
optimizer = optim . AdaBelief (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-3 ,
weight_decay = 0 ,
amsgrad = False ,
weight_decouple = False ,
fixed_decay = False ,
rectify = False ,
)
optimizer . step ()Documento : Adabelief Optimizer, Adapting Stepizs por la creencia en los gradientes observados (2020) [https://arxiv.org/abs/2010.07468]
Código de referencia : https://github.com/juntang-zhuang/adabelief-optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . AdaBound (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
final_lr = 0.1 ,
gamma = 1e-3 ,
eps = 1e-8 ,
weight_decay = 0 ,
amsbound = False ,
)
optimizer . step ()Documento : Métodos de gradiente adaptativo con límite dinámico de la tasa de aprendizaje (2019) [https://arxiv.org/abs/1902.09843]
Código de referencia : https://github.com/luolc/adabound
El método Adamod restringe las tasas de aprendizaje adaptativas con los límites superiores adaptativos y domésticos. Los límites de la tasa de aprendizaje dinámico se basan en los promedios móviles exponenciales de las tasas de aprendizaje adaptativas en sí, lo que suaviza las tasas inesperadas de aprendizaje y estabilizan la capacitación de redes neuronales profundas.
import torch_optimizer as optim
# model = ...
optimizer = optim . AdaMod (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
beta3 = 0.999 ,
eps = 1e-8 ,
weight_decay = 0 ,
)
optimizer . step ()Documento : un método adaptativo y de límite doméstico para el aprendizaje estocástico. (2019) [https://arxiv.org/abs/1910.12249]
Código de referencia : https://github.com/lancopku/adamod
import torch_optimizer as optim
# model = ...
optimizer = optim . Adafactor (
m . parameters (),
lr = 1e-3 ,
eps2 = ( 1e-30 , 1e-3 ),
clip_threshold = 1.0 ,
decay_rate = - 0.8 ,
beta1 = None ,
weight_decay = 0.0 ,
scale_parameter = True ,
relative_step = True ,
warmup_init = False ,
)
optimizer . step ()Documento : Adafactor: Tasas de aprendizaje adaptativas con costo de memoria sublineal. (2018) [https://arxiv.org/abs/1804.04235]
Código de referencia : https://github.com/pytorch/fairseq/blob/master/fairseq/optim/adafactor.py
import torch_optimizer as optim
# model = ...
optimizer = optim . Adahessian (
m . parameters (),
lr = 1.0 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-4 ,
weight_decay = 0.0 ,
hessian_power = 1.0 ,
)
loss_fn ( m ( input ), target ). backward ( create_graph = True ) # create_graph=True is necessary for Hessian calculation
optimizer . step ()Documento : Adahessian: un optimizador adaptativo de segundo orden para el aprendizaje automático (2020) [https://arxiv.org/abs/2006.00719]
Código de referencia : https://github.com/amirgholami/adahessian
ADAMP propone una solución simple y efectiva: en cada iteración del Optimizador de Adam aplicado en los pesos invariantes de escala (por ejemplo, los pesos de convivencia que preceden a una capa BN), Adamp elimina el componente radial (es decir, paralelo al vector de peso) del vector de actualización. Intuitivamente, esta operación evita la actualización innecesaria a lo largo de la dirección radial que solo aumenta la norma de peso sin contribuir a la minimización de pérdidas.
import torch_optimizer as optim
# model = ...
optimizer = optim . AdamP (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-8 ,
weight_decay = 0 ,
delta = 0.1 ,
wd_ratio = 0.1
)
optimizer . step ()Documento : ralentización del aumento de la norma de peso en los optimizadores basados en el momento. (2020) [https://arxiv.org/abs/2006.08217]
Código de referencia : https://github.com/clovaai/adamp
import torch_optimizer as optim
# model = ...
optimizer = optim . AggMo (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.0 , 0.9 , 0.99 ),
weight_decay = 0 ,
)
optimizer . step ()Documento : Momento agregado: estabilidad a través de la amortiguación pasiva. (2019) [https://arxiv.org/abs/1804.00325]
Código de referencia : https://github.com/athemathmo/aggmo
import torch_optimizer as optim
# model = ...
optimizer = optim . Apollo (
m . parameters (),
lr = 1e-2 ,
beta = 0.9 ,
eps = 1e-4 ,
warmup = 0 ,
init_lr = 0.01 ,
weight_decay = 0 ,
)
optimizer . step ()Documento : Apolo: un método de cuasi-newton diagonal de parámetro adaptativo para la optimización estocástica no convexa. (2020) [https://arxiv.org/abs/2009.13586]
Código de referencia : https://github.com/xuezhemax/apollo
Optimizador Basado en la diferencia entre el gradiente presente y el pasado inmediato, el tamaño de paso se ajusta para cada parámetro de tal manera que debe tener un tamaño de paso más grande para los parámetros de cambio de gradiente más rápido y un tamaño de paso más bajo para parámetros de cambio de gradiente más bajo.
import torch_optimizer as optim
# model = ...
optimizer = optim . DiffGrad (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-8 ,
weight_decay = 0 ,
)
optimizer . step ()Documento : DiFgrad: un método de optimización para redes neuronales convolucionales. (2019) [https://arxiv.org/abs/1909.11015]
Código de referencia : https://github.com/shivram1987/diffgrad
import torch_optimizer as optim
# model = ...
optimizer = optim . Lamb (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-8 ,
weight_decay = 0 ,
)
optimizer . step ()Documento : Optimización de lotes grandes para el aprendizaje profundo: capacitación Bert en 76 minutos (2019) [https://arxiv.org/abs/1904.00962]
Código de referencia : https://github.com/cybertronai/pytorch-lamb
import torch_optimizer as optim
# model = ...
# base optimizer, any other optimizer can be used like Adam or DiffGrad
yogi = optim . Yogi (
m . parameters (),
lr = 1e-2 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-3 ,
initial_accumulator = 1e-6 ,
weight_decay = 0 ,
)
optimizer = optim . Lookahead ( yogi , k = 5 , alpha = 0.5 )
optimizer . step ()Documento : LookAhead Optimizer: K pasa adelante, 1 paso atrás (2019) [https://arxiv.org/abs/1907.08610]
Código de referencia : https://github.com/alphadl/lookhead.pytorch
import torch_optimizer as optim
# model = ...
optimizer = optim . MADGRAD (
m . parameters (),
lr = 1e-2 ,
momentum = 0.9 ,
weight_decay = 0 ,
eps = 1e-6 ,
)
optimizer . step ()Documento : Adaptación sin compromiso: un método de gradiente de doble promedio impulso, adaptativo y dual para la optimización estocástica (2021) [https://arxiv.org/abs/2101.11075]
Código de referencia : https://github.com/facebookresearch/madgrad
import torch_optimizer as optim
# model = ...
optimizer = optim . NovoGrad (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-8 ,
weight_decay = 0 ,
grad_averaging = False ,
amsgrad = False ,
)
optimizer . step ()Documento : Métodos de gradiente estocástico con momentos adaptativos en forma de capa para el entrenamiento de redes profundas (2019) [https://arxiv.org/abs/1905.11286]
Código de referencia : https://github.com/nvidia/deeplearningexamples/
import torch_optimizer as optim
# model = ...
optimizer = optim . PID (
m . parameters (),
lr = 1e-3 ,
momentum = 0 ,
dampening = 0 ,
weight_decay = 1e-2 ,
integral = 5.0 ,
derivative = 10.0 ,
)
optimizer . step ()Documento : un enfoque de controlador PID para la optimización estocástica de redes profundas (2018) [http://www4.comp.polyu.edu.hk/~cslzhang/paper/cvpr18_pid.pdf]
Código de referencia : https://github.com/tensorboy/pidoptimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . QHAdam (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
nus = ( 1.0 , 1.0 ),
weight_decay = 0 ,
decouple_weight_decay = False ,
eps = 1e-8 ,
)
optimizer . step ()Documento : cuasi-hyperbolic Momentum y Adam for Deep Learning (2019) [https://arxiv.org/abs/1810.06801]
Código de referencia : https://github.com/facebookresearch/qhoptim
import torch_optimizer as optim
# model = ...
optimizer = optim . QHM (
m . parameters (),
lr = 1e-3 ,
momentum = 0 ,
nu = 0.7 ,
weight_decay = 1e-2 ,
weight_decay_type = 'grad' ,
)
optimizer . step ()Documento : cuasi-hyperbolic Momentum y Adam for Deep Learning (2019) [https://arxiv.org/abs/1810.06801]
Código de referencia : https://github.com/facebookresearch/qhoptim
Descargado, utilice la versión proporcionada por Pytorch.
import torch_optimizer as optim
# model = ...
optimizer = optim . RAdam (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-8 ,
weight_decay = 0 ,
)
optimizer . step ()Documento : Sobre la varianza de la tasa de aprendizaje adaptativo y más allá (2019) [https://arxiv.org/abs/1908.03265]
Código de referencia : https://github.com/liyuanlucasliu/radam
import torch_optimizer as optim
# model = ...
optimizer = optim . Ranger (
m . parameters (),
lr = 1e-3 ,
alpha = 0.5 ,
k = 6 ,
N_sma_threshhold = 5 ,
betas = ( .95 , 0.999 ),
eps = 1e-5 ,
weight_decay = 0
)
optimizer . step ()Documento : Nuevo optimizador de aprendizaje profundo, Ranger: Combinación sinérgica de Radam + LookAhead para lo mejor de ambos (2019) [https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combinación---radam-lookead-for-the-best of-2dc83f79a48d]]
Código de referencia : https://github.com/lessw2020/ranger-deep-letarning-optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . RangerQH (
m . parameters (),
lr = 1e-3 ,
betas = ( 0.9 , 0.999 ),
nus = ( .7 , 1.0 ),
weight_decay = 0.0 ,
k = 6 ,
alpha = .5 ,
decouple_weight_decay = False ,
eps = 1e-8 ,
)
optimizer . step ()Documento : cuasi-hyperbolic Momentum y Adam for Deep Learning (2018) [https://arxiv.org/abs/1810.06801]
Código de referencia : https://github.com/lessw2020/ranger-deep-letarning-optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . RangerVA (
m . parameters (),
lr = 1e-3 ,
alpha = 0.5 ,
k = 6 ,
n_sma_threshhold = 5 ,
betas = ( .95 , 0.999 ),
eps = 1e-5 ,
weight_decay = 0 ,
amsgrad = True ,
transformer = 'softplus' ,
smooth = 50 ,
grad_transformer = 'square'
)
optimizer . step ()Documento : Calibrar la tasa de aprendizaje adaptativo para mejorar la convergencia de Adam (2019) [https://arxiv.org/abs/1908.00700V2]
Código de referencia : https://github.com/lessw2020/ranger-deep-letarning-optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . SGDP (
m . parameters (),
lr = 1e-3 ,
momentum = 0 ,
dampening = 0 ,
weight_decay = 1e-2 ,
nesterov = False ,
delta = 0.1 ,
wd_ratio = 0.1
)
optimizer . step ()Documento : ralentización del aumento de la norma de peso en los optimizadores basados en el momento. (2020) [https://arxiv.org/abs/2006.08217]
Código de referencia : https://github.com/clovaai/adamp
import torch_optimizer as optim
# model = ...
optimizer = optim . SGDW (
m . parameters (),
lr = 1e-3 ,
momentum = 0 ,
dampening = 0 ,
weight_decay = 1e-2 ,
nesterov = False ,
)
optimizer . step ()Documento : SGDR: descenso de gradiente estocástico con reinicios cálidos (2017) [https://arxiv.org/abs/1608.03983]
Código de referencia : Pytorch/Pytorch#22466
import torch_optimizer as optim
# model = ...
optimizer = optim . SWATS (
model . parameters (),
lr = 1e-1 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-3 ,
weight_decay = 0.0 ,
amsgrad = False ,
nesterov = False ,
)
optimizer . step ()Documento : Mejora del rendimiento de la generalización cambiando de Adam a SGD (2017) [https://arxiv.org/abs/1712.07628]
Código de referencia : https://github.com/mrpatekful/swats
import torch_optimizer as optim
# model = ...
optimizer = optim . Shampoo (
m . parameters (),
lr = 1e-1 ,
momentum = 0.0 ,
weight_decay = 0.0 ,
epsilon = 1e-4 ,
update_freq = 1 ,
)
optimizer . step ()Documento : Champú: optimización de tensor estocástico preacondicionado (2018) [https://arxiv.org/abs/1802.09568]
Código de referencia : https://github.com/moskomule/shampoo.pytorch
Yogi es un algoritmo de optimización basado en Adam con un control de tasa de aprendizaje efectivo más fino de grano, y tiene garantías teóricas similares sobre la convergencia como Adam.
import torch_optimizer as optim
# model = ...
optimizer = optim . Yogi (
m . parameters (),
lr = 1e-2 ,
betas = ( 0.9 , 0.999 ),
eps = 1e-3 ,
initial_accumulator = 1e-6 ,
weight_decay = 0 ,
)
optimizer . step ()Documento : Métodos de adaptación para la optimización no conconvexa (2018) [https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization]
Código de referencia : https://github.com/4rtemi5/yogi-optimizer_keras