Julia:Flux.jl 中的网络更新优化器参数解释

简介: Julia 是一个十分年轻的语言,通过预编译的方式能够将速度提高很多,有 C++ 的速度,解释性语言的特性,十分适合做数学分析和科学计算的工作。Flux.jl 是 Julia 用于做机器学习和深度学习的工具,这篇文章对文档中的不同优化器做一个翻译和总结,供参考。

Flux.jl 中网络参数的更新方法为 update!(opt, p, g)update!(opt, ps::Params, gs),其中 p 或者 ps 是网络的参数,ggs 是参数对应的梯度。网络参数更新的优化器有很多的选择,但是大部分都是 Adam 算法的变种或者优化,下面是关于这些优化器的一些介绍和参数的意义,详细的可以去看不同算法的论文深入了解。

1、Flux.Optimise.Descent(eta=0.1):最原始的梯度下降优化器,参数 $\eta$ 为学习率。对于每一个参数 $p$ 以及对应的梯度 $\delta p$,会执行 $p := \eta\times \delta p$.

2、Flux.Optimise.Momentum(eta=0.01, rho=0.9):带有动量的梯度下降算法。$\rho$ 控制梯度下降在主要方向上的加速度,可以看成是一个阻尼。

3、Flux.Optimise.Nesterov(eta=0.001, rho=0.9):带有 Nesterov 动量的梯度下降算法。rho 控制梯度下降在主要方向上的加速度,可以看成是一个阻尼。

4、Flux.Optimise.RMSProp(eta=0.001, rho=0.9, \epsilon=1e-8):RMSProp 算法 [2],通常在循环网络上使用,除了学习率 eta 之外其他的参数通常不用调参。

5、Flux.Optimise.ADAM(eta=0.001, beta::Tuple=(0.9,0.999), epsilon=1e-8):ADAM 算法 [3],beta 为动量的衰减系数,是一个 Tuple 分别为第一个(beta_1)和第二个(beta_2)动量估计的指数衰减。

6、Flux.Optimise.RADAM(eta=0.001, beta::Tuple=(0.9,0.999), epsilon=1e-8):Rectified ADAM 算法 [4]。

7、Flux.Optimise.AdaMax(eta=0.001, beta::=(0.9,0.999), epsilon=1e-8):基于 无穷范数的 ADAM 变种

8、·Flux.Optimise.ADAGrad(eta=0.1, epsilon=1e-8)`:ADAGrad 算法 [5],它具有基于其更新频率的参数特定学习率。所有的参数都不需要调整。

9、Flux.Optimise.ADADelta(rho=0.9,epsilon=1e-8):ADADelta [6] 是 ADAGrad 的一个版本,它根据过去的梯度更新窗口调整其学习率。参数不需要调整。rho 是梯度在每个时间步衰减的因子。

10、Flux.Optimise.AMSGrad(eta=0.001, beta::Tuple=(0.9,0.999), epsilon=1e-8):ADAM 优化器的 AMSGrad 版本 [7]。参数不需要调整。

11、Flux.Optimise.NADAM(eta=0.001, beta::Tuple=(0.9,0.999), epsilon=1e-8):ADAM 优化器的 Nesterov 版本 [8]。参数不需要调整

12、Flux.Optimise.ADAMW(eta=0.001, beta::Tuple=(0.9,0.999), decay=0):ADAMW [9] 是修正其权重衰减正则化的 ADAM 的变体。decay 参数在优化期间应用于权重的衰减。

13、·Flux.Optimise.OADAM}(eta=0.0001, beta::Tuple=(0.5,0.9), epsilon=1e-8)`:OADAM (Optimistic ADAM) [10] 是 ADAM 的一个变体,增加了一个适合对抗性训练的「优化项」。

14、Flux.Optimise.AdaBelief(eta=0.001, beta::Tuple=(0.9,0.999), epsilon=10e-8):AdaBelief [11] 是 ADAM 优化器的变体。


参考:

[1] Training, Optimisers, Document of Flux.jl

[2] Geoffrey H., Nitish S. and Kevin S. Neural Networks for Machine Learning - Lecture 6a Overview of mini-batch gradient descent.

[3] Kingma, D. P. and Ba, J. Adam: A Method for Stochastic Optimization. arXiv (2014)

[4] Liu, L., Jiang, H. and He, P. et al. On the Variance of the Adaptive Learning Rate and Beyond. arXiv (2019)

[5] John D., Elad H. and Yoram S. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. J. Mach. Learn. Res. 12, 2121-2159 (2011)

[6] Matthew D. Z. ADADELTA: An Adaptive Learning Rate Method. arXiv.

[7] Sashank J. R., Satyen K. and Sanjiv K. On the Convergence of Adam and Beyond. ICLR 2018 Conference (2018)

[8] Timothy D. Incorporating Nesterov Momentum into Adam. ICLR 2016 Workshop (2016)

[9] Ilya L. and Frank H. Decoupled Weight Decay Regularization. ICLR 2019 Conference (2019)

[10] Daskalakis, C., Ilyas, A., yrgkanis, V. and Zeng, H. Training GANs with Optimism. arXiv (2017)

[11] Zhuang, J., Tang, T., Ding, Y. et al. AdaBelief Optimizer: Adapting Stepsizes by the Belief in Observed Gradients. arXiv (2020)

目录
相关文章
|
13天前
|
JSON 监控 安全
Julia企业网络监控的实现:科学计算代码解析
使用Julia语言进行企业网络监控,通过定义带宽利用率和延迟等指标及阈值来检测网络状态。示例代码展示了如何监控带宽和延迟,当超过阈值时触发警报。此外,还介绍了如何通过HTTP请求将监控数据自动提交到网站,以便及时处理网络问题,保障网络安全和稳定性。
119 0
|
13天前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
42 0
|
13天前
|
存储 算法 Windows
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(下)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
13天前
|
算法 数据可视化 数据挖掘
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(上)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
13天前
|
网络协议 Linux API
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
Linux网络编程:shutdown() 与 close() 函数详解:剖析 shutdown()、close() 函数的实现原理、参数说明和使用技巧
132 0
|
11天前
|
应用服务中间件 网络安全 数据安全/隐私保护
Sqlmap参数设置_sqlmap怎么指定参数(1),阿里面试100%会问到的网络安全
Sqlmap参数设置_sqlmap怎么指定参数(1),阿里面试100%会问到的网络安全
|
13天前
|
前端开发 数据挖掘 数据建模
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(中)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
13天前
|
机器学习/深度学习 算法 测试技术
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
|
13天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android's AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
13 0
|
13天前
|
缓存 BI Linux
CPU-IO-网络-内核参数的调优(一)
【4月更文挑战第3天】本文介绍了Linux系统中调整CPU资源使用的两种方法。一是通过`nice`和`renice`命令改变进程优先级,影响进程对CPU的占用。`nice`用于设置新进程的优先级,例如将`vim`的优先级设为-5,而`renice`用于改变已运行进程的优先级。二是使用`taskset`设置进程的CPU亲和力,指定进程在特定CPU上运行,如将`vim`限制在CPU0上执行。此外,通过`vmstat`工具监控系统状态,分析CPU利用率、内存使用、IO活动和上下文切换,帮助找出系统瓶颈。
38 1

热门文章

最新文章