杩欎釜姹熸箹涓嶈鑵?xn--tqqw9c1it2c960cr7hxptbts.amba-adv.com

google seo -> telegram: @ehseo6

">Newsnet 2022-09-29 12:22
  • home  >   /珠海合八酱经贸有限公司  >   杩欎釜姹熸箹涓嶈鑵?
  • 皇冠体育APP濂虫潃鎵?琛€鑵ユ姤澶崱?886.tv』琛€鑵ョ嫏鏉€-b3c1v2I-   G   A

    Table Of Contents
    Table Of Contents

    皇冠体育APP缃戞父涔嬭鑵ュ爞『0886.tv』琛€鑵ユ毚鍔涚數褰卞湪绾胯鐪?b3c1v2I-  铮?M   M

    我们在“AdaGrad算法”一节中提到,因为调整学习率时分母上的变量\(\boldsymbol{s}_t\)一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。为了解决这一问题,RMSProp算法对AdaGrad算法做了一点小小的修改。该算法源自Coursera上的一门课,即“机器学习的神经网络” [1]。

    7.6.1. 算法?

    我们在“动量法”一节里介绍过指数加权移动平均。不同于AdaGrad算法里状态变量\(\boldsymbol{s}_t\)是截至时间步\(t\)所有小批量随机梯度\(\boldsymbol{g}_t\)按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。具体来说,给定超参数\(0 \leq \gamma < 1\),RMSProp算法在时间步\(t>0\)计算

    \[\boldsymbol{s}_t \leftarrow \gamma \boldsymbol{s}_{t-1} + (1 - \gamma) \boldsymbol{g}_t \odot \boldsymbol{g}_t.\]

    和AdaGrad算法一样,RMSProp算法将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量

    \[\boldsymbol{x}_t \leftarrow \boldsymbol{x}_{t-1} - \frac{\eta}{\sqrt{\boldsymbol{s}_t + \epsilon}} \odot \boldsymbol{g}_t,\]

    其中\(\eta\)是学习率,\(\epsilon\)是为了维持数值稳定性而添加的常数,如\(10^{-6}\)。因为RMSProp算法的状态变量\(\boldsymbol{s}_t\)是对平方项\(\boldsymbol{g}_t \odot \boldsymbol{g}_t\)的指数加权移动平均,所以可以看作最近\(1/(1-\gamma)\)个时间步的小批量随机梯度平方项的加权平均。如此一来,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。

    照例,让我们先观察RMSProp算法对目标函数\(f(\boldsymbol{x})=0.1x_1^2+2x_2^2\)中自变量的迭代轨迹。回忆在“AdaGrad算法”一节使用的学习率为0.4的AdaGrad算法,自变量在迭代后期的移动幅度较小。但在同样的学习率下,RMSProp算法可以更快逼近最优解。

    In [1]:
    
    %matplotlib inline
    import d2lzh as d2l
    import math
    from mxnet import nd
    
    def rmsprop_2d(x1, x2, s1, s2):
        g1, g2, eps = 0.2 * x1, 4 * x2, 1e-6
        s1 = gamma * s1 + (1 - gamma) * g1 ** 2
        s2 = gamma * s2 + (1 - gamma) * g2 ** 2
        x1 -= eta / math.sqrt(s1 + eps) * g1
        x2 -= eta / math.sqrt(s2 + eps) * g2
        return x1, x2, s1, s2
    
    def f_2d(x1, x2):
        return 0.1 * x1 ** 2 + 2 * x2 ** 2
    
    eta, gamma = 0.4, 0.9
    d2l.show_trace_2d(f_2d, d2l.train_2d(rmsprop_2d))
    
    epoch 20, x1 -0.010599, x2 0.000000
    

    7.6.2. 从零开始实现?

    接下来按照RMSProp算法中的公式实现该算法。

    In [2]:
    
    features, labels = d2l.get_data_ch7()
    
    def init_rmsprop_states():
        s_w = nd.zeros((features.shape[1], 1))
        s_b = nd.zeros(1)
        return (s_w, s_b)
    
    def rmsprop(params, states, hyperparams):
        gamma, eps = hyperparams['gamma'], 1e-6
        for p, s in zip(params, states):
            s[:] = gamma * s + (1 - gamma) * p.grad.square()
            p[:] -= hyperparams['lr'] * p.grad / (s + eps).sqrt()
    

    我们将初始学习率设为0.01,并将超参数\(\gamma\)设为0.9。此时,变量\(\boldsymbol{s}_t\)可看作最近\(1/(1-0.9) = 10\)个时间步的平方项\(\boldsymbol{g}_t \odot \boldsymbol{g}_t\)的加权平均。

    In [3]:
    
    d2l.train_ch7(rmsprop, init_rmsprop_states(), {'lr': 0.01, 'gamma': 0.9},
                  features, labels)
    
    loss: 0.246587, 0.382151 sec per epoch
    

    7.6.3. 简洁实现?

    通过名称为“rmsprop”的Trainer实例,我们便可使用Gluon提供的RMSProp算法来训练模型。注意,超参数\(\gamma\)通过gamma1指定。

    In [4]:
    
    d2l.train_gluon_ch7('rmsprop', {'learning_rate': 0.01, 'gamma1': 0.9},
                        features, labels)
    
    loss: 0.247679, 0.256022 sec per epoch
    

    7.6.4. 小结?

    • RMSProp算法和AdaGrad算法的不同在于,RMSProp算法使用了小批量随机梯度按元素平方的指数加权移动平均来调整学习率。

    7.6.5. 练习?

    • \(\gamma\)的值设为1,实验结果有什么变化?为什么?
    • 试着使用其他的初始学习率和\(\gamma\)超参数的组合,观察并分析实验结果。

    7.6.6. 参考文献?

    [1] Tieleman, T., & Hinton, G. (2012). Lecture 6.5-rmsprop: Divide the gradient by a running average of its recent magnitude. COURSERA: Neural networks for machine learning, 4(2), 26-31.

    7.6.7. 扫码直达讨论区?

    日本av 穿蓝色毛衣 松金洋子av 亚州天堂在线视频av 佳苗无码AV在线 美国av明星阴道扩张
    唯美av ed2k 在线看黄av免费 在线播放青草AV 成濑心美AV视频播放 av欧美影片
    韩国AV毛片 888米奇第四色线av av人人草 av福利网址大全 好吊色av这里只有精品
    岛国最美av AV色情4438 为什么av棒舒服 另类重口特殊AV无码 亚洲影片一av手机版