
Torch-Optimizer -Koleksi pengoptimal untuk Pytorch yang kompatibel dengan modul optimal.
import torch_optimizer as optim
# model = ...
optimizer = optim . DiffGrad ( model . parameters (), lr = 0.001 )
optimizer . step ()Proses instalasi sederhana, hanya:
$ Pip Instal Torch_optimizer
https://pytorch-optimizer.rtfd.io
Harap kutip penulis asli dari algoritma optimasi. Jika Anda menyukai paket ini:
@software {novik_torchoptimizers,
title = {{torch-optimizer-kumpulan algoritma optimasi untuk pytorch.}},
penulis = {novik, mykola},
tahun = 2020,
Bulan = 1,
Versi = {1.0.1}
}
Atau gunakan fitur GitHub: tombol "CITE Repositori ini".
| 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 |
| Ada yang ada | https://arxiv.org/abs/1902.09843 |
| Adamod | https://arxiv.org/abs/1910.12249 |
| Adafactor | https://arxiv.org/abs/1804.04235 |
| Adahessian | https://arxiv.org/abs/2006.00719 |
| Adamp | https://arxiv.org/abs/2006.08217 |
| Aggmo | https://arxiv.org/abs/1804.00325 |
| Apollo | https://arxiv.org/abs/2009.13586 |
| Diffgrad | https://arxiv.org/abs/1909.11015 |
| Domba | https://arxiv.org/abs/1904.00962 |
| Lihat ke depan | 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 |
| Ranger | https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combination-of-radam-lookahead-for-to-f --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 |
| Umpan | https://arxiv.org/abs/1712.07628 |
| Sampo | https://arxiv.org/abs/1802.09568 |
| Yogi | https://papers.nips.cc/paper/8186-adaptive-methods-for-nonconvex-optimization |
Visualisasi membantu kita melihat bagaimana algoritma yang berbeda berurusan dengan situasi sederhana seperti: titik pelana, minimum lokal, lembah dll, dan dapat memberikan wawasan menarik tentang cara kerja dalam suatu algoritma. Fungsi benchmark Rosenbrock dan Rastrigin dipilih karena:
Rastrigin adalah fungsi non-cembung dan memiliki satu minimum global dalam (0,0, 0,0). Menemukan minimum fungsi ini adalah masalah yang cukup sulit karena ruang pencariannya yang besar dan sejumlah besar minimum lokal.
Setiap pengoptimal melakukan 501 langkah optimisasi. Tingkat pembelajaran adalah yang terbaik yang ditemukan oleh algoritma pencarian parameter hiper, sisa parameter tuning adalah default. Sangat mudah untuk memperluas skrip dan menyetel parameter pengoptimal lainnya.
Contoh Python/viz_optimizers.py
Jangan memilih pengoptimal berdasarkan visualisasi, pendekatan optimasi memiliki sifat unik dan dapat disesuaikan untuk tujuan yang berbeda atau mungkin memerlukan jadwal tingkat pembelajaran yang eksplisit dll. Cara terbaik untuk mengetahuinya adalah dengan mencoba satu pada masalah khusus Anda dan melihat apakah itu meningkatkan skor.
Jika Anda tidak tahu pengoptimal mana yang akan digunakan, mulailah dengan SGD/Adam bawaan. Setelah logika pelatihan siap dan skor dasar ditetapkan, pertukarkan pengoptimal dan lihat apakah ada peningkatan.
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 ()Kertas : Descent gradien stokastik adaptif dan akselerasi yang optimal (2018) [https://arxiv.org/abs/1810.00553]
Kode referensi : 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 ()Kertas : Descent gradien stokastik adaptif dan akselerasi yang optimal (2018) [https://arxiv.org/abs/1810.00553]
Kode referensi : 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 ()Kertas : Descent gradien stokastik adaptif dan akselerasi yang optimal (2018) [https://arxiv.org/abs/1810.00553]
Kode referensi : 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 ()Kertas : Pada kekurangan skema momentum yang ada untuk optimasi stokastik (2019) [https://arxiv.org/abs/1803.05591]
Kode referensi : 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 ()Kertas : Adabelief Optimizer, mengadaptasi langkah -langkah dengan keyakinan pada gradien yang diamati (2020) [https://arxiv.org/abs/2010.07468]
Kode referensi : 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 ()Kertas : Metode Gradien Adaptif dengan Batas Dinamis Tingkat Pembelajaran (2019) [https://arxiv.org/abs/1902.09843]
Kode referensi : https://github.com/luolc/adabound
Metode Adamod membatasi tingkat pembelajaran adaptif dengan batas atas adaptif dan momental. Batas tingkat pembelajaran yang dinamis didasarkan pada rata -rata bergerak eksponensial dari tingkat pembelajaran adaptif itu sendiri, yang menghaluskan tingkat pembelajaran besar yang tidak terduga dan menstabilkan pelatihan jaringan saraf dalam.
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 ()Kertas : Metode terikat adaptif dan momental untuk pembelajaran stokastik. (2019) [https://arxiv.org/abs/1910.12249]
Kode referensi : 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 ()Kertas : Adafactor: Tingkat pembelajaran adaptif dengan biaya memori sublinear. (2018) [https://arxiv.org/abs/1804.04235]
Kode referensi : 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 ()Kertas : Adahessian: Pengoptimal Urutan Kedua Adaptif untuk Pembelajaran Mesin (2020) [https://arxiv.org/abs/2006.00719]
Kode referensi : https://github.com/amirgholami/adahessian
Adamp mengusulkan solusi yang sederhana dan efektif: Pada setiap iterasi pengoptimal Adam yang diaplikasikan pada bobot skala-invarian (misalnya, bobot Conv sebelum lapisan BN), ADAMP menghilangkan komponen radial (yaitu, sejajar dengan vektor berat) dari vektor pembaruan. Secara intuitif, operasi ini mencegah pembaruan yang tidak perlu di sepanjang arah radial yang hanya meningkatkan norma bobot tanpa berkontribusi pada minimalisasi kerugian.
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 ()Kertas : Memperlambat peningkatan norma pada pengoptimal berbasis momentum. (2020) [https://arxiv.org/abs/2006.08217]
Kode referensi : 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 ()Kertas : Momentum agregat: stabilitas melalui redaman pasif. (2019) [https://arxiv.org/abs/1804.00325]
Kode referensi : 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 ()Kertas : Apollo: Metode quasi-newton diagonal parameter adaptif untuk optimasi stokastik nonkonveks. (2020) [https://arxiv.org/abs/2009.13586]
Kode referensi : https://github.com/xuezhemax/apollo
Pengoptimal berdasarkan perbedaan antara sekarang dan gradien masa lalu langsung, ukuran langkah disesuaikan untuk setiap parameter sedemikian rupa sehingga harus memiliki ukuran langkah yang lebih besar untuk parameter perubahan gradien yang lebih cepat dan ukuran langkah yang lebih rendah untuk parameter perubahan gradien yang lebih rendah.
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 ()Kertas : Diffgrad: Metode optimisasi untuk jaringan saraf konvolusional. (2019) [https://arxiv.org/abs/1909.11015]
Kode referensi : 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 ()Kertas : Optimalisasi Batch Besar untuk Pembelajaran mendalam: Pelatihan Bert dalam 76 menit (2019) [https://arxiv.org/abs/1904.00962]
Kode referensi : 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 ()Kertas : Optimizer lookahead: k langkah maju, 1 langkah mundur (2019) [https://arxiv.org/abs/1907.08610]
Kode referensi : 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 ()Kertas : Adaptivitas Tanpa Kompromi: Metode Gradien Rata -Rata Ganda Momentum, Adaptif, Rata -rata Ganda untuk Optimasi Stokastik (2021) [https://arxiv.org/abs/2101.11075]
Kode referensi : 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 ()Kertas : Metode gradien stokastik dengan momen adaptif lapisan-bijaksana untuk pelatihan Deep Networks (2019) [https://arxiv.org/abs/1905.11286]
Kode Referensi : https://github.com/nvidia/deeeplearningexamples/
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 ()Kertas : Pendekatan Pengontrol PID untuk Optimalisasi Stochastic Deep Networks (2018) [http://www4.comp.polyu.edu.hk/~cslzhang/paper/cvpr18_pid.pdf]
Kode referensi : 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 ()Kertas : Momentum Quasi-Hyperbolic dan Adam for Deep Learning (2019) [https://arxiv.org/abs/1810.06801]
Kode referensi : 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 ()Kertas : Momentum Quasi-Hyperbolic dan Adam for Deep Learning (2019) [https://arxiv.org/abs/1810.06801]
Kode referensi : https://github.com/facebookResearch/qhoptim
Tercerahkan, silakan gunakan versi yang disediakan oleh 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 ()Kertas : Tentang Varian Tingkat Pembelajaran Adaptif dan Beyond (2019) [https://arxiv.org/abs/1908.03265]
Kode referensi : 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 ()Kertas : Pengoptimal Pembelajaran Mendalam Baru, Ranger: Kombinasi sinergis radam + lookahead untuk yang terbaik dari keduanya (2019) [https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combination-fadam-radam8d-for-the-best-of-2dc833]
Kode referensi : 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 ()Kertas : Momentum Quasi-Hyperbolic dan Adam for Deep Learning (2018) [https://arxiv.org/abs/1810.06801]
Kode referensi : 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 ()Kertas : Mengalibrasi Tingkat Pembelajaran Adaptif untuk Meningkatkan Konvergensi Adam (2019) [https://arxiv.org/abs/1908.00700v2]
Kode referensi : 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 ()Kertas : Memperlambat peningkatan norma pada pengoptimal berbasis momentum. (2020) [https://arxiv.org/abs/2006.08217]
Kode referensi : 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 ()Kertas : SGDR: Penurunan gradien stokastik dengan restart hangat (2017) [https://arxiv.org/abs/1608.03983]
Kode Referensi : 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 ()Kertas : Meningkatkan kinerja generalisasi dengan beralih dari Adam ke SGD (2017) [https://arxiv.org/abs/1712.07628]
Kode referensi : 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 ()Kertas : Shampoo: Optimasi Tensor Stochastic Prakondisi (2018) [https://arxiv.org/abs/1802.09568]
Kode referensi : https://github.com/moskomule/shampoo.pytorch
Yogi adalah algoritma optimasi berdasarkan Adam dengan kontrol laju pembelajaran yang lebih halus, dan memiliki jaminan teoritis yang sama tentang konvergensi seperti 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 ()Kertas : Metode Adaptif untuk Optimasi Nonkonveks (2018) [https://papers.nips.cc/paper/8186-Arttive-Methods-for-nonconvex-optimization]
Kode referensi : https://github.com/4rtemi5/yogi-optimizer_keras