zoukankan      html  css  js  c++  java
  • 深度神经网络常用优化算法

    MINI-BRATCH

    这个就是把一个大训练集分成几个小训练集去训练

    主要原因,,,,是因为训练集太大,显存塞不下

    这样的话,loss会有一定波动,就是有时上升,有时下降,但总体趋势是下降的

    最后精度上升到一个值后,训练很多次都没有上升,训练完成

    动量梯度下降:

    简单来说就是在训练一整个训练集的时候

    w =  w - dw_change

    b同理

    dw_change 是这么得出来的

    以下dw_change简写为dw_c

    dw_c1 = a * dw_c0 + (1 - a) * dw1

    dw_c2 = a * dw_c1 + (1 - a) * dw2

    实际上就是削弱了一个训练集对w的影响

    其实这个东西更像一个求平均值的过程,因为有求了这个平均值所以,我们loss上下摆动的幅度会变小

    而且我们想最优解移动的步伐会加大(因为累加了之前的数嘛)

    这样就加速了训练

    红点是最优解

    蓝色是用普通的梯度下降

    红色是用动量梯度下降法

    但是有一个问题,就是在做指数加权平均时,在训练刚开始的阶段,由于我们的训练样本对w,b的影响较小,使得训练变慢

    这个时候可以暂时先不用指数加权平均,之后再用,比如训练了200个样本之后

    也可以熬过前面这训练刚开始的阶段

    我一般选择熬过这一阶段,因为另一个方法写起来太复杂了

    RMS_Prob

    s_dw = b * s_dw + (1 - b) * dw * dw

    w = w - a * (dw/更号(s_dw))

    对于b也是这样的

    那么对于某一步而言,如果这一步在某一维(wi)上波动较大

    那么dw变大  ->  s_dw变大

     dw/更号(s_dw) 变小

    减小了这一步在wi这一维上的波动

    同理, 如果这一步在某一维上的波动过小

    那RMS_Prop也能提高在这一维上的波动

    总的来说,RMS_Prob会让loss的下降在一定的,我们可以接受的范围内波动

    从而使训练的方向更多的指向最优解,加速训练过程

    Adam优化算法:

    可以看见,我的动量梯度下降是优化的分子,RMS_Prob是优化的分母

    两个加起来就是Adam了

    这里就不做详细描述了

    也就是说Adam有4个超参数

    learning_rate, a1(动量梯度下降), a2, b(RMS_Prob)

  • 相关阅读:
    第一周。。。
    新人日报1129
    Daily Report-1126
    How to read source code[repost]
    Markdown tutorial [repost]
    蘑菇街面经
    阿里面经
    百度凤巢一二面经
    Mybatis最入门---代码自动生成(generatorConfig.xml配置)
    Maven的生命周期阶段
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/8947306.html
Copyright © 2011-2022 走看看