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)

  • 相关阅读:
    练习 字符串存入字典 数组的降序 倒序 字符串目录存不存在 数组中文排序
    随机 随机获得100个50-100的数字字符串,存到数组并输出
    练习 字符串10题
    把一个字符串反输出abc123.xyz789输出987zyx.321cba
    把NSString *string=@"2013 年 05 月 05 日";以2013-05-05输出
    dephi cef3获取Post数据
    Delphi下 多显示器,将窗体显示于第二个显示器
    Delphi下POS机
    SQLConnection 连接 SQLite
    cxGrid主视图取得从视图
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/8947306.html
Copyright © 2011-2022 走看看