
Факел-оптимизатор -Сбор оптимизаторов для Pytorch, совместимый с Optim Module.
import torch_optimizer as optim
# model = ...
optimizer = optim . DiffGrad ( model . parameters (), lr = 0.001 )
optimizer . step ()Процесс установки прост, просто:
$ pip установить torch_optimizer
https://pytorch-optimizer.rtfd.io
Пожалуйста, цитируйте оригинальных авторов алгоритмов оптимизации. Если вам нравится этот пакет:
@software {novik_torchoptimizers,
title = {{Torch-Optimizer-Сбор алгоритмов оптимизации для Pytorch.}},
Автор = {novik, mykola},
год = 2020,
месяц = 1,
версия = {1.0.1}
}
Или используйте функцию GitHub: «Цитировать этот репозиторий».
| A2gradexp | https://arxiv.org/abs/1810.00553 |
| A2Gradinc | https://arxiv.org/abs/1810.00553 |
| A2Graduni | https://arxiv.org/abs/1810.00553 |
| ACCSGD | https://arxiv.org/abs/1803.05591 |
| Adabelief | https://arxiv.org/abs/2010.07468 |
| Adabound | https://arxiv.org/abs/1902.09843 |
| Адамод | https://arxiv.org/abs/1910.12249 |
| Адафактор | https://arxiv.org/abs/1804.04235 |
| Адагессиан | https://arxiv.org/abs/2006.00719 |
| Адам | https://arxiv.org/abs/2006.08217 |
| Аггмо | https://arxiv.org/abs/1804.00325 |
| Аполлон | https://arxiv.org/abs/2009.13586 |
| Diffgrad | https://arxiv.org/abs/1909.11015 |
| Ягненок | https://arxiv.org/abs/1904.00962 |
| Lookahead | https://arxiv.org/abs/1907.08610 |
| Сумасшедший | https://arxiv.org/abs/2101.11075 |
| Новоград | https://arxiv.org/abs/1905.11286 |
| Пид | 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 |
| Радам | https://arxiv.org/abs/1908.03265 |
| Рейнджер | https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combanity-of-radam-lookahead-for-the-best-of-2dc83f79a48d |
| Rangerqh | https://arxiv.org/abs/1810.06801 |
| Рангерва | https://arxiv.org/abs/1908.00700v2 |
| SGDP | https://arxiv.org/abs/2006.08217 |
| SGDW | https://arxiv.org/abs/1608.03983 |
| Смазывание | https://arxiv.org/abs/1712.07628 |
| Шампунь | https://arxiv.org/abs/1802.09568 |
| Йог | https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization |
Визуализации помогают нам увидеть, как различные алгоритмы имеют дело с простыми ситуациями, такими как: седловые точки, локальные минимумы, долины и т. Д., И могут дать интересную информацию о внутренней работе алгоритма. Функции Brosenbrock и Rastrigin Benchmark были отобраны, потому что:
Rastrigin-это не-конногенная функция и имеет один глобальный минимум в (0,0, 0,0). Поиск минимума этой функции является довольно сложной проблемой из -за ее большого пространства поиска и большого количества локальных минимумов.
Каждый оптимизатор выполняет 501 этап оптимизации. Скорость обучения является лучшим, найденным в алгоритме поиска гипер -параметра, остальные параметры настройки по умолчанию. Очень легко расширить сценарий и настроить другие параметры оптимизатора.
Примеры Python/viz_optimizers.py
Не выбирайте оптимизатор на основе визуализаций, подходы к оптимизации обладают уникальными свойствами и могут быть адаптированы для различных целей или могут потребовать явного графика обучения и т. Д. Лучший способ выяснить это - попробовать его по вашей конкретной проблеме и посмотреть, улучшит ли он результаты.
Если вы не знаете, какой оптимизатор использовать, начните со встроенного SGD/Adam. Как только логика обучения будет готова и базовые оценки установлены, обмениваются оптимизатором и посмотрите, есть ли какое -либо улучшение.
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 ()Бумага : оптимальный адаптивный и ускоренный стохастический градиент спуск (2018) [https://arxiv.org/abs/1810.00553]]
Справочный код : https://github.com/severilov/a2gradgre_optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . A2GradInc (
model . parameters (),
kappa = 1000.0 ,
beta = 10.0 ,
lips = 10.0 ,
)
optimizer . step ()Бумага : оптимальный адаптивный и ускоренный стохастический градиент спуск (2018) [https://arxiv.org/abs/1810.00553]]
Справочный код : https://github.com/severilov/a2gradgre_optimizer
import torch_optimizer as optim
# model = ...
optimizer = optim . A2GradUni (
model . parameters (),
kappa = 1000.0 ,
beta = 10.0 ,
lips = 10.0 ,
)
optimizer . step ()Бумага : оптимальный адаптивный и ускоренный стохастический градиент спуск (2018) [https://arxiv.org/abs/1810.00553]]
Справочный код : https://github.com/severilov/a2gradgre_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 ()Бумага : о недостаточности существующих схем импульса для стохастической оптимизации (2019) [https://arxiv.org/abs/1803.05591]
Справочный код : 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 ()Бумага : Оптимизатор Adabelief, адаптируя шаги в соответствии с верой в наблюдаемые градиенты (2020) [https://arxiv.org/abs/2010.07468]
Справочный код : 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 ()Бумага : Адаптивные методы градиента с динамической границей скорости обучения (2019) [https://arxiv.org/abs/1902.09843]
Справочный код : https://github.com/luolc/adabound
Метод ADAMOD ограничивает адаптивные скорости обучения адаптивными и момиентными верхними границами. Динамические границы скорости обучения основаны на экспоненциальных средних показателях самостоятельных адаптивных скоростей обучения, которые сглаживают неожиданные большие показатели обучения и стабилизируют обучение глубоких нейронных сетей.
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 ()Бумага : адаптивный и мамочный метод для стохастического обучения. (2019) [https://arxiv.org/abs/1910.12249]
Справочный код : 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 ()Бумага : Adafactor: адаптивные ставки обучения с сублинейными затратами на память. (2018) [https://arxiv.org/abs/1804.04235]
Справочный код : 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 ()Бумага : Адахессиан: адаптивный оптимизатор второго порядка для машинного обучения (2020) [https://arxiv.org/abs/2006.00719]
Справочный код : https://github.com/amirgholami/AdaHessian
Adamp предлагает простое и эффективное решение: на каждой итерации оптимизатора ADAM, применяемого на масштаб-инвариантных весах (например, CEAR, предшествующие уровню BN), адамп удаляет радиальный компонент (то есть параллельно вектору веса) из вектора обновления. Интуитивно, эта операция предотвращает ненужное обновление вдоль радиального направления, которое только увеличивает норму веса, не способствуя минимизации потерь.
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 ()Бумага : замедление увеличения нормы веса в оптимизаторах на основе импульса. (2020) [https://arxiv.org/abs/2006.08217]
Справочный код : 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 ()Бумага : агрегированный импульс: стабильность через пассивное демпфирование. (2019) [https://arxiv.org/abs/1804.00325]
Справочный код : 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 ()Бумага : Аполлон: адаптивный диагональный квази-нютон метод для неконтенсной стохастической оптимизации. (2020) [https://arxiv.org/abs/2009.13586]
Справочный код : https://github.com/xuezhemax/apollo
Оптимизатор На основании разницы между настоящим и непосредственным градиентом прошлого, размер шага корректируется для каждого параметра таким образом, чтобы он должен иметь больший размер шага для более быстрых параметров изменения градиента и более низкий размер шага для более низких параметров изменения градиента.
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 ()Документ : Diffgrad: метод оптимизации для сверточных нейронных сетей. (2019) [https://arxiv.org/abs/1909.11015]
Справочный код : 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 ()Бумага : Большая оптимизация партии для глубокого обучения: обучение BERT за 76 минут (2019) [https://arxiv.org/abs/1904.00962]
Справочный код : 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 ()Бумага : Lookahead Optimizer: K шага вперед, 1 шаг назад (2019) [https://arxiv.org/abs/1907.08610]
Справочный код : https://github.com/alphadl/lookahead.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 ()Бумага : Адаптивность без компромисса: наносящий наменять, адаптивный, двойной усредненный метод градиента для стохастической оптимизации (2021) [https://arxiv.org/abs/2101.11075]
Справочный код : 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 ()Бумага : Стохастические градиентные методы с адаптивными моментами для обучения Deep Networks (2019) [https://arxiv.org/abs/1905.11286]
Справочный код : 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 ()Документ : подход контроллера PID для стохастической оптимизации Deep Networks (2018) [http://www4.comp.polyu.edu.hk/~cslzhang/paper/cvpr18_pid.pdf]
Справочный код : 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 ()Бумага : квази-гиперболический импульс и Адам для глубокого обучения (2019) [https://arxiv.org/abs/1810.06801]
Справочный код : 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 ()Бумага : квази-гиперболический импульс и Адам для глубокого обучения (2019) [https://arxiv.org/abs/1810.06801]
Справочный код : https://github.com/facebookresearch/qhoptim
Установите, пожалуйста, используйте версию, предоставленную 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 ()Документ : О дискете адаптивного уровня обучения и за его пределами (2019) [https://arxiv.org/abs/1908.03265]
Справочный код : 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 ()Бумага : Новый оптимизатор глубокого обучения, Ranger: синергетическое сочетание радама + Lookahead для лучших из обоих (2019) [https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-compant-fradam-lookahead-for-best-of-2dc83f79a48d]]
Справочный код : https://github.com/lessw2020/ranger-deep-learning-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 ()Бумага : квази-гиперболический импульс и Адам для глубокого обучения (2018) [https://arxiv.org/abs/1810.06801]
Справочный код : https://github.com/lessw2020/ranger-deep-learning-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 ()Бумага : калибровка адаптивного уровня обучения для улучшения конвергенции ADAM (2019) [https://arxiv.org/abs/1908.00700v2]
Справочный код : https://github.com/lessw2020/ranger-deep-learning-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 ()Бумага : замедление увеличения нормы веса в оптимизаторах на основе импульса. (2020) [https://arxiv.org/abs/2006.08217]
Справочный код : 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 ()Бумага : SGDR: Стохастический градиент спуск с теплыми перезапуску (2017) [https://arxiv.org/abs/1608.03983]
Справочный код : 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 ()Документ : улучшение производительности обобщения путем перехода с Адама на SGD (2017) [https://arxiv.org/abs/1712.07628]
Справочный код : 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 ()Бумага : Шампунь: оптимизация стохастического тензора с предварительной кондиционированием (2018) [https://arxiv.org/abs/1802.09568]
Справочный код : https://github.com/moskomule/shampoo.pytorch
Йоги - это алгоритм оптимизации, основанный на Адаме с более мелким эффективным контролем скорости обучения, и имеет сходные теоретические гарантии на конвергенцию как Адам.
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 ()Бумага : адаптивные методы для невыпускной оптимизации (2018) [https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization]
Справочный код : https://github.com/4rtemi5/yogi-optimizer_keras