mysql优化的几种方法_sgd优化算法

mysql优化的几种方法_sgd优化算法1.SGDBatchGradientDescent在每一轮的训练过程中,BatchGradientDescent算法用整个训练集的数据计算costfuction的梯度,并用该梯度对模型参数进行更新:Θ=Θ−α⋅▽ΘJ(Θ)\Theta=\Theta-\alpha\cdot\triangledown_\ThetaJ(\Theta)优点:costfuction若为凸函数,能

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1. SGD

Batch Gradient Descent

在每一轮的训练过程中,Batch Gradient Descent算法用整个训练集的数据计算cost fuction的梯度,并用该梯度对模型参数进行更新:

Θ = Θ − α ⋅ ▽ Θ J ( Θ ) \Theta = \Theta -\alpha \cdot \triangledown_\Theta J(\Theta ) Θ=ΘαΘJ(Θ)

优点:

  • cost fuction若为凸函数,能够保证收敛到全局最优值;若为非凸函数,能够收敛到局部最优值

缺点:

  • 由于每轮迭代都需要在整个数据集上计算一次,所以批量梯度下降可能非常慢
  • 训练数较多时,需要较大内存
  • 批量梯度下降不允许在线更新模型,例如新增实例。

Stochastic Gradient Descent

和批梯度下降算法相反,Stochastic gradient descent 算法每读入一个数据,便立刻计算cost fuction的梯度来更新参数:
Θ = Θ − α ⋅ ▽ Θ J ( Θ ; x ( i ) , y ( i ) ) \Theta = \Theta -\alpha \cdot \triangledown_\Theta J(\Theta ;x^{(i)},y^{(i)}) Θ=ΘαΘJ(Θ;x(i),y(i))

优点:

  • 算法收敛速度快(在Batch Gradient Descent算法中, 每轮会计算很多相似样本的梯度, 这部分是冗余的)
  • 可以在线更新
  • 有几率跳出一个比较差的局部最优而收敛到一个更好的局部最优甚至是全局最优

缺点:

  • 容易收敛到局部最优,并且容易被困在鞍点

Mini-batch Gradient Descent

mini-batch Gradient Descent的方法是在上述两个方法中取折衷, 每次从所有训练数据中取一个子集(mini-batch) 用于计算梯度:
Θ = Θ − α ⋅ ▽ Θ J ( Θ ; x ( i : i + n ) , y ( i : i + n ) ) \Theta = \Theta -\alpha \cdot \triangledown_\Theta J(\Theta ;x^{(i:i+n)},y^{(i:i+n)}) Θ=ΘαΘJ(Θ;x(i:i+n),y(i:i+n))

Mini-batch Gradient Descent在每轮迭代中仅仅计算一个mini-batch的梯度,不仅计算效率高,而且收敛较为稳定。该方法是目前深度学训练中的主流方法

上述三个方法面临的主要挑战如下:

  • 选择适当的学习率 α \alpha α 较为困难。太小的学习率会导致收敛缓慢,而学习速度太块会造成较大波动,妨碍收敛。
  • 目前可采用的方法是在训练过程中调整学习率大小,例如模拟退火算法:预先定义一个迭代次数m,每执行完m次训练便减小学习率,或者当cost function的值低于一个阈值时减小学习率。然而迭代次数和阈值必须事先定义,因此无法适应数据集的特点。
  • 上述方法中, 每个参数的 learning rate 都是相同的,这种做法是不合理的:如果训练数据是稀疏的,并且不同特征的出现频率差异较大,那么比较合理的做法是对于出现频率低的特征设置较大的学习速率,对于出现频率较大的特征数据设置较小的学习速率。
  • 近期的的研究表明,深层神经网络之所以比较难训练,并不是因为容易进入local minimum。相反,由于网络结构非常复杂,在绝大多数情况下即使是 local minimum 也可以得到非常好的结果。而之所以难训练是因为学习过程容易陷入到马鞍面中,即在坡面上,一部分点是上升的,一部分点是下降的。而这种情况比较容易出现在平坦区域,在这种区域中,所有方向的梯度值都几乎是 0。

2. Momentum

SGD方法的一个缺点是其更新方向完全依赖于当前batch计算出的梯度,因而十分不稳定。Momentum算法借用了物理中的动量概念,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:

v t = γ ⋅ v t − 1 + α ⋅ ▽ Θ J ( Θ ) v_{t} = \gamma \cdot v_{t-1} + \alpha \cdot \triangledown_\Theta J(\Theta ) vt=γvt1+αΘJ(Θ)
Θ = Θ − v t \Theta = \Theta-v_{t} Θ=Θvt

Momentum算法会观察历史梯度 v t − 1 v_{t-1} vt1,若当前梯度的方向与历史梯度一致(表明当前样本不太可能为异常点),则会增强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。**一种形象的解释是:**我们把一个球推下山,球在下坡时积聚动量,在途中变得越来越快,γ可视为空气阻力,若球的方向发生变化,则动量会衰减。

3. Nesterov Momentum

在小球向下滚动的过程中,我们希望小球能够提前知道在哪些地方坡面会上升,这样在遇到上升坡面之前,小球就开始减速。这方法就是Nesterov Momentum,其在凸优化中有较强的理论保证收敛。并且,在实践中Nesterov Momentum也比单纯的 Momentum 的效果好:

v t = γ ⋅ v t − 1 + α ⋅ ▽ Θ J ( Θ − γ v t − 1 ) v_{t} = \gamma \cdot v_{t-1} + \alpha \cdot \triangledown_\Theta J(\Theta -\gamma v_{t-1}) vt=γvt1+αΘJ(Θγvt1)
Θ = Θ − v t \Theta = \Theta-v_{t} Θ=Θvt

其核心思想是:注意到 momentum 方法,如果只看 γ * v 项,那么当前的 θ经过 momentum 的作用会变成 θ-γ * v。因此可以把 θ-γ * v这个位置看做是当前优化的一个”展望”位置。所以,可以在 θ-γ * v求导, 而不是原始的θ。
这里写图片描述

4. Adagrad

上述方法中,对于每一个参数 θ i θ_i θi 的训练都使用了相同的学习率α。Adagrad算法能够在训练中自动的对learning rate进行调整,对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。因此,Adagrad非常适合处理稀疏数据。

我们设 g t , i g_{t,i} gt,i为第t轮第i个参数的梯度,即 g t , i = ▽ Θ J ( Θ i ) g_{t,i}=\triangledown_\Theta J(\Theta_i) gt,i=ΘJ(Θi)。因此,SGD中参数更新的过程可写为:

Θ t + 1 , i = Θ t , i − α ⋅ g t , i \Theta_{t+1,i} =\Theta_{t,i}-\alpha \cdot g_{t,i} Θt+1,i=Θt,iαgt,i

Adagrad在每轮训练中对每个参数 θ i θ_i θi的学习率进行更新,参数更新公式如下:

Θ t + 1 , i = Θ t , i − α G t , i i + ϵ ⋅ g t , i \Theta_{t+1,i} =\Theta_{t,i}- \frac{\alpha}{\sqrt{G_{t,ii}+\epsilon }}\cdot g_{t,i} Θt+1,i=Θt,iGt,ii+ϵ
α
gt,i

其中, G t ∈ R d × d G_t\in \mathbb{R}^{d\times d} GtRd×d为对角矩阵,每个对角线位置 i , i i,i i,i为对应参数 θ i θ_i θi从第1轮到第t轮梯度的平方和。ϵ是平滑项,用于避免分母为0,一般取值1e−8。Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。

5. RMSprop

RMSprop是Geoff Hinton提出的一种自适应学习率方法。Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解Adagrad算法学习率下降较快的问题。
E [ g 2 ] t = 0.9 E [ g 2 ] t − 1 + 0.1 g t 2 E[g^2]_t=0.9E[g^2]_{t-1}+0.1g_t^2 E[g2]t=0.9E[g2]t1+0.1gt2
Θ t + 1 = Θ t − α E [ g 2 ] t + ϵ ⋅ g t \Theta_{t+1} =\Theta_{t}- \frac{\alpha}{\sqrt{E[g^2]_t+\epsilon }}\cdot g_{t} Θt+1=ΘtE[g2]t+ϵ
α
gt

6. Adam

Adam(Adaptive Moment Estimation)是另一种自适应学习率的方法。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。公式如下:
m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t=\beta_1m_{t-1}+(1-\beta_1)g_t mt=β1mt1+(1β1)gt
v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2 vt=β2vt1+(1β2)gt2
m ^ t = m t 1 − β 1 t \hat{m}_t=\frac{m_t}{1-\beta_1^t} m^t=1β1tmt
v ^ t = v t 1 − β 2 t \hat{v}_t=\frac{v_t}{1-\beta_2^t} v^t=1β2tvt
Θ t + 1 = Θ t − α v ^ t + ϵ m ^ t \Theta_{t+1} =\Theta_{t}- \frac{\alpha}{\sqrt{\hat{v}_t }+\epsilon }\hat{m}_t Θt+1=Θtv^t
+ϵ
α
m^t

其中, m t m_t mt v t v_t vt分别是对梯度的一阶矩估计和二阶矩估计,可以看作对期望 E [ g t ] E[g_t] E[gt] E [ g t 2 ] E[g_t^2] E[gt2]的近似; m t ^ \hat{m_t} mt^ v t ^ \hat{v_t} vt^是对 m t m_t mt v t v_t vt的校正,这样可以近似为对期望的无偏估计。 Adam算法的提出者建议 β 1 \beta_1 β1 的默认值为0.9, β 2 \beta_2 β2的默认值为.999,$\epsilon $默认为 1 0 − 8 10^{-8} 108。 另外,在数据比较稀疏的时候,adaptive的方法能得到更好的效果,例如Adagrad,RMSprop, Adam 等。Adam 方法也会比 RMSprop方法收敛的结果要好一些, 所以在实际应用中 ,Adam为最常用的方法,可以比较快地得到一个预估结果。

最后两张动图从直观上展现了算法的优化过程。第一张图为不同算法在损失平面等高线上随时间的变化情况,第二张图为不同算法在鞍点处的行为比较。
这里写图片描述

这里写图片描述

7. 参考资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/201107.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pycharm怎么设置中文版_如何把pycharm改成中文版

    pycharm怎么设置中文版_如何把pycharm改成中文版Pycharm设置中文版注意:1.只有最新版才支持。要2021.1月份后的Pytharm版本。2.要激活自己淘宝。步骤:1.打开pycharm。选择”文件-设置”.2.选择”插件“,搜索”chinese“,安装如图所示。3.安装安城后重启即可。…

  • MATLAB绘制B样条曲线[通俗易懂]

    MATLAB绘制B样条曲线[通俗易懂]1B样条曲线1.1B样条曲线定义B样条方法具有表示与设计自由型曲线曲面的强大功能,是形状数学描述的主流方法之一,另外B样条方法是目前工业产品几何定义国际标准——有理B样条方法(NURBS)的基础。B样条方法兼备了Bezier方法的一切优点,包括几何不变性,仿射不变性等等,同时克服了Bezier方法中由于整体表示带来不具有局部性质的缺点(移动一个控制顶点将会影响整个曲线)。B样条曲线方程可写为

  • 体验了一把线上CPU100%及应用OOM的排查和解决过程

    点击上方☝,轻松关注!及时获取有趣有料的技术文章“下面是我遇到的问题,以及一些简单的排查思路,如有不对的地方,欢迎留言讨论。如果你已经遇到 InMemoryReporterMetrics…

  • tar压缩文件

    tar压缩文件tar压缩的优点:兼容性好使用tar压缩文件tar-zcvftest.tar.gz./test/该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令:tar-cvftest.tar./test/使用tar解压文件tar-xzvftest.tar.gz该命令表示把后缀为.tar.gz的文件解压到当前文件夹下。如果压缩文件的后缀是.tar,没有gz,则使用命令:tar-xvf

  • cuda和cudnn安装详解

    cuda和cudnn安装详解从事深度学习无论是tensorflow还是caffe都需要安装cuda和cudnn这2个显卡支持的库,经过一番倒腾,将经验分享给大家。cuda的安装1、下载cuda首先去官网下载。在选择版本的时候很重要,默认下载是最新的,若想下载旧的版本可点击如下图红色区域:在选择版本还是比较重要的,因为显卡驱动和cuda的版本需要匹配,否则显示安装了,后面测试通不过,可以参考:cudarelaeas…

  • 学习经验谈:Unity3d开发中最佳语言还是C#

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!               作为学unity3d的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号