精华内容
参与话题
问答
  • AdaGrad 本文来源于下面博客: https://medium.com/konvergen/an-introduction-to-adagrad-f130ae871827 前面讲到梯度下降法以及带动量的梯度下降法、NAG等,它们的一个共同的特点是都包含学习率η\etaη这个参数,...

    码字不易,转载请注明出处~

    tags: optimizer;AdaGrad

    本文来源于下面博客:
    https://medium.com/konvergen/an-introduction-to-adagrad-f130ae871827

    前面讲到梯度下降法以及带动量的梯度下降法、NAG等,它们的一个共同的特点是都包含学习率η\eta这个参数,而这个参数的选择属于超参数的范围。个人感觉超参数包含了两方面的内容:1. 参数需要人工调整,不是一次设置之后系统自动处理;2. 对全局的影响相当大,不同的取值在一定程度上影响整体的效果。然而超参数的麻烦之处在于,它是需要人不断调整试优的,或大或小都可能导致网络无法达到最优解。更麻烦的是,对于神经网络而言,它本身需要解决的是一个高维的非凸优化问题,维度高达上百万维,极有可能在不同的维度上,某个参数比较适合而在另外一些维度上面,该参数就可能不适合了。对于学习率,面临的就是这种情况。因此,我们希望最好的情况是学习率能够根据网络训练样本的变化而自动调整,这样就省去了很多人为的工作,更重要的是,这样也许能够使网络自己找到最好的优化方向,而不是去地毯式搜索。

    AdaGrad

    该算法应对的就是在高维空间中,网络学习率在各个维度上面应该如何变化这个问题。公式如下:
    (1)θt+1=θtηεI+diag(Gt)gt\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{\varepsilon I+diag(G_t)}}\cdot g_t\tag{1}
    式中,θ\theta是需要更新的权重参数,η\eta是初始化学习率,ε\varepsilon是为了避免除0引入的因子,II是单位矩阵,gtg_t是在t时刻所计算得到的梯度,公式如下:
    (2)gt=1ni=1nθL(x(i),y(i),θt)g_t=\frac{1}{n}\sum_{i=1}^{n}\nabla_\theta L(x^{(i)}, y{(i)}, \theta_t)\tag{2}
    最关键的是GtG_t矩阵,它表示到t时刻为止,所有之前和现在所累积的梯度信息,公式如下:
    (3)Gt=τ=1tgτgτTG_t=\sum_{\tau=1}^{t}g_\tau g_{\tau}^{T}\tag{3}
    看着有点累人,感觉每次计算都要计算一个大矩阵。实际上,也的确如此。如果每次使用GtG_t进行计算,那么势必会有很大的计算量,更何况还要进行矩阵的开方运算。所以,如果我们仅仅计算对角化的GtG_t,情况就会好很多,毕竟对角阵有很好的性质,所有的操作都可以应用到每一个对角元素上面而无需增加额外的运算负担。这样就可以很容易进行参数更新了。
    [θt+1(1)θt+1(2)θt+1(m)]=[θt1)θt(2)θt(m)]η([ε000ε000ε]+[Gt(1,1)000Gt(2,2)000Gtm,m])1/2[gt(1)gt(2)gt(m)] \begin{bmatrix} \theta_{t+1}^{(1)} \\ \theta_{t+1}^{(2)} \\ \vdots \\ \theta_{t+1}^{(m)}\end{bmatrix}=\begin{bmatrix} \theta_t^{1)} \\ \theta_t^{(2)} \\ \vdots \\ \theta_t^{(m)}\end{bmatrix}-\eta {\begin{pmatrix}{\begin{bmatrix}&\varepsilon &0 &\cdots &0 \\ &0 &\varepsilon &\cdots &0 \\ &\vdots &\vdots &\ddots &\vdots \\ &0 &0 &\cdots &\varepsilon \end{bmatrix}}+\begin{bmatrix}&G_t^{(1, 1)} &0 &\cdots &0\\ &0 &G_t^{(2, 2)} &\cdots &0 \\ &\vdots &\vdots &\ddots &\vdots \\ &0 &0 &\cdots &G_t^{m, m} \end{bmatrix}\end{pmatrix}}^{-1/2} \cdot \begin{bmatrix} &g_t^{(1)}\\ &g_t^{(2)} \\&\vdots \\&g_t^{(m)} \end{bmatrix}
    还是看起来挺复杂的,其实只需要关注的是学习率更新这部分内容,所有可以进行适当的简化,就可以得到如下的式子:
    [θt+1(1)θt+1(2)θt+1(m)]=[θt1)θt(2)θt(m)][ηε+Gt(1,1)000ηε+Gt(2,2)000ηε+Gt(m,m)][gt(1)gt(2)gt(m)] \begin{bmatrix} \theta_{t+1}^{(1)} \\ \theta_{t+1}^{(2)} \\ \vdots \\ \theta_{t+1}^{(m)} \end{bmatrix}= \begin{bmatrix} \theta_t^{1)} \\ \theta_t^{(2)} \\ \vdots \\ \theta_t^{(m)} \end{bmatrix} \begin{bmatrix} &\frac{\eta}{\sqrt{\varepsilon+G_t^{(1,1)}}} &0 &\cdots &0 \\ &0 &\frac{\eta}{\sqrt{\varepsilon+G_t^{(2,2)}}} &\cdots &0 \\ &\vdots &\vdots &\ddots &\vdots \\ &0 &0 &\cdots &\frac{\eta}{\sqrt{\varepsilon+G_t^{(m,m)}}}\end{bmatrix} \cdot \begin{bmatrix} &g_t^{(1)}\\ &g_t^{(2)} \\ &\vdots \\&g_t^{(m)} \end{bmatrix}
    最终,可以得到AdaGrad的表达式如下:
    (4)[θt+1(1)θt+1(2)θt+1(m)]=[θt1)θt(2)θt(m)][ηε+Gt(1,1)gt(1)ηε+Gt(2,2)gt(2)ηε+Gt(m,m)gt(m)] \begin{bmatrix} \theta_{t+1}^{(1)} \\ \theta_{t+1}^{(2)} \\ \vdots \\ \theta_{t+1}^{(m)} \end{bmatrix}= \begin{bmatrix} \theta_t^{1)} \\ \theta_t^{(2)} \\ \vdots \\ \theta_t^{(m)} \end{bmatrix} \begin{bmatrix} &\frac{\eta}{\sqrt{\varepsilon+G_t^{(1,1)}}}g_t^{(1)} \\ &\frac{\eta}{\sqrt{\varepsilon+G_t^{(2,2)}}}g_t^{(2)}\\ &\vdots \\ &\frac{\eta}{\sqrt{\varepsilon+G_t^{(m,m)}}}g_t^{(m)}\end{bmatrix} \tag{4}
    对比之前文章中的随机梯度下降法:
    (5)[θt+1(1)θt+1(2)θt+1(m)]=[θt1)θt(2)θt(m)][ηgt(1)ηgt(2)ηgt(m)] \begin{bmatrix} \theta_{t+1}^{(1)} \\ \theta_{t+1}^{(2)} \\ \vdots \\ \theta_{t+1}^{(m)} \end{bmatrix}= \begin{bmatrix} \theta_t^{1)} \\ \theta_t^{(2)} \\ \vdots \\ \theta_t^{(m)} \end{bmatrix} \begin{bmatrix} &\eta g_t^{(1)} \\ &\eta g_t^{(2)} \\ &\vdots \\ &\eta g_t^{(m)} \\ \end{bmatrix} \tag{5}
    可以看到,这里相当于每次在进行参数更新的时候,将η\eta缩放了1(ε+Gt)\frac{1}{\sqrt(\varepsilon+G_t)}倍,而且由于GtG_t每次都累加梯度,因此是发生变化的。这就看上去仿佛学习率是发生变化的。虽然事实上只是梯度gtg_t之前的因子发生了变化,我觉得这里应该理解为,学习率不变,只不过给学习率乘以了一个变化的变量,因此看上去好像学习率发生了变化。当然,如果把梯度之前的乘子看做是学习率,那理解为学习率变化也没什么问题。所以,AdaGrad的做法就是这样。
    实际上,(3)中的公式也不太好理解,如果写成下面这样或许更直白易懂:
    (6)Gt(i,i)=τ=1t(gτ(i))2G_t^{(i,i)}= \sum_{\tau=1}^{t}(g_\tau^{(i)})^2\tag{6}
    那么参数的更新过程就可以写作:
    (7)θt+1=θtηε+gt2gt\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{\varepsilon +\sum{g_t^2}}}\bigodot g_t\tag{7}
    式中的矩阵乘积用了\bigodot。之所以(3)写成那样,主要是为了理解实际上真实发生的是矩阵的的操作,而且缩放因子中的GG代表的是对角矩阵。

    AdaGrad的特点

    算法对于稀疏的数据所表现的性能更好,对于经常出现的特征,我们希望他们他们的学习率更新不要太快,而对不常出现的特征,则希望学习率更新快一些,从而能够让网络学习到的特征更好。但由于一般我们在网络学习之初就对每一次梯度进行了累积,所以当网络训练到一定程度的时候(不一定收敛),很容易导致网络没法继续学习,因为此时的学习率接近0。而这个问题需要进行进一步改进,也就是下面其他的自适应学习率方法所做的工作。

    参考

    1. J. Duchi, E. Hazan, Y. Singer, “Adaptive Subgradient Methods for Online Learning and Stochastic Optimization” (2011)
    2. I. Goodfellow, Y. Bengio, A. Courville, “Deep Learning” (2016)
    展开全文
  • AdaGrad算法

    千次阅读 2019-08-02 17:04:52
    AdaGrad算法介绍 表示第i个参数的梯度,对于经典的SGD优化方法,参数θ的更新为: 再来看AdaGrad算法表示为: 其中,r为梯度累积变量,r的初始值为0。ε为全局学习率,需要自己设置。δ为小常数,为了...

    参考:

    深度学习优化方法-AdaGrad https://blog.csdn.net/program_developer/article/details/80756008


    AdaGrad算法介绍

    表示第i个参数的梯度,对于经典的SGD优化方法,参数θ的更新为:

    再来看AdaGrad算法表示为:

    其中,r为梯度累积变量,r的初始值为0。ε为全局学习率,需要自己设置。δ为小常数,为了数值稳定大约设置为。

    AdaGrad算法分析

     (1)从AdaGrad算法中可以看出,随着算法不断迭代,r会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢

    (2)在SGD中,随着梯度的增大,我们的学习步长应该是增大的。但是在AdaGrad中,随着梯度g的增大,我们的r也在逐渐的增大,且在梯度更新时r在分母上,也就是整个学习率是减少的,这是为什么呢?
    这是因为随着更新次数的增大,我们希望学习率越来越慢。因为我们认为在学习率的最初阶段,我们距离损失函数最优解还很远,随着更新次数的增加,越来越接近最优解,所以学习率也随之变慢。
    (3)经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrade在某些深度学习模型上效果不错,但不是全部。

    优势:

    在数据分布稀疏的场景,能更好利用稀疏梯度的信息,比标准的SGD算法更有效地收敛。

    缺点:

    主要缺陷来自分母项的对梯度平方不断累积,随之时间步地增加,分母项越来越大,最终导致学习率收缩到太小无法进行有效更新。

    展开全文
  • AdaGrad(自适应梯度算法),Adaptive

    千次阅读 2019-09-22 18:51:04
    学习衰减率: 随着学习的进行,使得学习率逐渐减小。AdaGrad会为参数的每个元素适当的体哦阿正学习率
    • 学习衰减率:
      随着学习的进行,使得学习率逐渐减小。AdaGrad会为参数的每个元素适当的体哦阿正学习率
      在这里插入图片描述

    在这里插入图片描述

    # coding: utf-8
    import numpy as np
    
    
    class AdaGrad:
        def __init__(self, learning_rate=0.01):
            self.learning_rate = learning_rate
            self.h = None
    
        def update(self, params, grads):
            if self.h is None:
                self.h = {}
                for key, value in params.items():
                    self.h[key] = np.zeros_like(value)
    
            for key in params.keys():
                self.h[key] += grads[key] * grads[key]
                params[key] -= self.learning_rate * grads[key] / (np.sqrt(self.h[key]) + 1e-07) # 1e-07微小值避免分母为0
    展开全文
  • 深度学习优化方法-AdaGrad

    万次阅读 2018-06-21 10:09:44
    “微信公众号” 梯度下降算法、随机梯度下降算法(SGD)、小批量梯度下降算法(mini-batch SGD)、动量法(momentum)、Nesterov动量法有一个共同的特点是:对于每一个参数都用相同的学习率进行更新。...

    梯度下降算法、随机梯度下降算法(SGD)、小批量梯度下降算法(mini-batch SGD)、动量法(momentum)、Nesterov动量法有一个共同的特点是:对于每一个参数都用相同的学习率进行更新。
    但是在实际应用中,各个参数的重要性肯定是不一样的,所以我们对于不同的参数要动态的采取不同的学习率,让目标函数更快的收敛。
    AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后在开方,用全局学习率除以这个数,作为学习率的动态更新。
    AdaGrad算法介绍

    表示第i个参数的梯度,对于经典的SGD优化方法,参数θth的更新为:


    再来看AdaGrad算法表示为:


    其中,r为梯度累积变量,r的初始值为0。ε为全局学习率,需要自己设置。δ为小常数,为了数值稳定大约设置为

    AdaGrad算法分析

    (1)从AdaGrad算法中可以看出,随着算法不断迭代,r会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。

    (2)在SGD中,随着梯度的增大,我们的学习步长应该是增大的。但是在AdaGrad中,随着梯度g的增大,我们的r也在逐渐的增大,且在梯度更新时r在分母上,也就是整个学习率是减少的,这是为什么呢?
    这是因为随着更新次数的增大,我们希望学习率越来越慢。因为我们认为在学习率的最初阶段,我们距离损失函数最优解还很远,随着更新次数的增加,越来越接近最优解,所以学习率也随之变慢。
    (3)经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrade在某些深度学习模型上效果不错,但不是全部。


    Reference

    【1】深度学习,Ian Goodfellow / Yoshua Bengio所著。

    【2】深度学习优化函数详解(6)-- adagrad

    【3】adagrad原理

    展开全文
  • pytorch学习笔记(三十六):AdaGrad

    千次阅读 多人点赞 2020-08-10 12:38:59
    文章目录AdaGrad算法1. 算法2. 特点3. 从零开始实现4. 简洁实现小结 AdaGrad算法 在之前介绍过的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。举个例子,假设目标函数为fff,...
  • 目录前言python实现 前言 这前面两篇不同的是,这篇优化...缺点:AdaGrad会记录之前的所有梯度之和,这使得这个结果会越来越大,从而使得后面学习率会无限接近0,从而使得权值无法得到更新。为了改善这点,后面会介
  • Adagrad

    千次阅读 2018-12-30 22:04:12
    给梯度逐元素加了一个平方和
  • 模型优化-AdaGrad

    千次阅读 2019-06-02 20:53:25
    在先前介绍的梯度下降算法以及动量方法都...本篇博客主要借鉴 深度学习优化方法-AdaGrad 以及《百面机器学习》,若构成侵权则立即删除。 【做法】:将每一个参数的每一次迭代的梯度取平方,然后累加并开方得到 r,最...
  • 深度学习之AdaGrad算法

    2020-04-02 21:00:00
    AdaGrad 算法根据自变量在每个维度的梯度值调整各个维度的学习率,从而避免统一的维度难以适应所有维度的问题。 特点: 小批量随机梯度按元素累加变量,出现在学习率的...实现AdaGrad算法,使⽤的学习率为0.4。...
  • 在训练模型时,会使⽤优化算法不断迭代模型参数以降低模型损失函数的值,本节详细学习常用的优化算法:梯度下降、动量法、AdaGrad算法、RMSProp算法、AdaDelta算法、Adam算法
  • 思想:如果一个参数的梯度一直都非常大,就让它的学习率变小一点,防止震动,反之,则让其学习率变大,使其能更快更新 做法:学习率由下列式子所得 +后的参数是为了防止分母等于0,一般取10的-10次方 ...
  • 在之前介绍过的优化算法中,⽬标函数⾃变量的每一个元素在相同时间步都使用同一个学习率来⾃我迭代。举个例子,假设⽬标函数为f,⾃变量为一个二维向量,该向量中每一个元素在迭代时都使⽤相同的学习率。例如,在学习...
  • AdaGrad算法会使用一个小批量随机梯度gt按元素平方的累加变量st。在时间步0,AdaGrad将s0中每个元素初始化为0。在时间步t,首先将小批量随机梯度gt按元素平方后累加到变量st: 其中⊙是按元素相乘 如果目标函数...
  • Mxnet (29): AdaGrad算法

    2020-10-02 13:52:04
    1. 稀疏特征和学习率 在模型训练中会有稀疏特征(很少发生的特征),在自然语言模型中常见,比如,与 “学习”相比“预处理”更加少见。同时在其他领域也会用到,例如计算广告和个性化的协同过滤。...
  • 7.5 AdaGrad算法在之前介绍过的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。举个例子,假设目标函数为ff fst​的累加效果使学习率不断衰减,自变量在迭代后期的移动幅度较小...
  • 优化算法Adagrad 自适应学习率 ​ 随机梯度下降算法,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。举个例子,假设目标函数为fff,自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1​,...
  • 梯度下降算法中的Adagrad和Adadelta

    万次阅读 2016-07-29 15:41:07
    主要介绍了Adagrad和Adadelta两种学习率更新方法,他们都是梯度下载优化算法的变种
  • 本文是Deep Learning之 最优化方法系列文章的AdaGrad方法(自适应算法1)。主要参考Deep Learning一书。 以下节选自个人深度学习笔记。 内容整合来源于网络与个人理解。 Adagrad 口 应该为不同的参数设置...
  • 深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结 1. 引言 在深度学习中我们定义了损失函数以后,会采取各种各样的方法来降低损失函数,从而使模型参数不断的逼近于真实数据的表达。不过损失函数...
  • 优化算法 梯度下降 自适应学习率 Adagrad RMSprop Adam
  • 本文介绍如何利用Matlab从头搭建深度前馈神经网络,实现手写字体mnist数据集的识别,以及展示各类优化算法的训练效果,包括SGD、mSGD、AdaGrad、RMSProp、Adam,最终网络的识别率能达到98%。读者可自行调整网络结构...
  • 深度学习优化函数详解(6)-- adagrad

    万次阅读 2017-08-06 14:42:52
    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 深度学习优化函数详解...
  • 优化方法总结:SGD,Momentum,AdaGrad,RMSProp,Adam

    万次阅读 多人点赞 2017-08-06 10:55:40
    1. SGDBatch Gradient Descent在每一轮的训练过程中,Batch Gradient Descent算法用整个训练集的数据计算cost fuction的梯度,并用该梯度对模型参数进行更新:Θ=Θ−α⋅▽ΘJ(Θ)\Theta = \Theta -\alpha \cdot \...
  • 首先我们来看一下AdaGrad算法 我们可以看出该优化算法与普通的sgd算法差别就在于标黄的哪部分,采取了累积平方梯度。 简单来讲,设置全局学习率之后,每次通过,全局学习率逐参数的除以历史梯度平方和的平方根,...
  • 优化算法通常只考虑最小化目标函数。其实,任何最大化问题都可以很容易地转化为最小化问题。 很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解,即数值解。 为了求得最小化目标函数的数值解...
  •  简单的梯度下降等优化算法存在一个问题:目标函数自变量的每一个元素在相同时间步都使用同一个学习率来迭代,如果存在如下图的情况(不同自变量的梯度值有较大差别时候),存在如下问题: 选择较小的学习率会...
  • 指数加权平均(目的,抗噪声): 假设我们有一年365天的气温数据θ1,θ2,...,θ365\theta_1,\theta_2,...,\theta_{365}θ1​,θ2​,...,θ365​,把他们化成散点图,如下图所示: 这些数据有些杂乱,我们想画一条曲线,...
  • 求解神经网络,也就是求解 y =f(wx + b) 中的w 和 b...首先,初始化 w 和 b, 然后,使用梯度下降算法,对 w 和 b 进行更新。 下面,就对梯度下降算法,及其优化变体进行解释。   梯度下降算法 形象化解释: ...
  • 前言 这里讨论的优化问题指的是,给定目标函数f(x),我们须要找到一组參数x。使得f(x)的值最小。 本文下面内容如果读者已经了解机器学习基本知识,和梯度下降的原理。 ...SGD指stochastic gradient descent,即...
  • 一、Learning rate 1.Learning rate中的问题 如果learning rate刚刚好,就可以像下图中红色线段一样顺利地到达到loss的最小值 如果learning rate太小的话,像下图中的蓝色线段,虽然最后能够走到local minimal...

空空如也

1 2 3 4 5 ... 20
收藏数 8,902
精华内容 3,560
关键字:

adagrad