【深度学习】第二阶段 —— 第二课


声明: 此笔记为吴恩达(Andrew Ng)的深度学习课程学习后的总结,会根据自己的学习进度更新。

优化算法

  1. Mini-batch梯度下降法

    • 巨大数据集中一个个数据迭代费事太久,将数据集分为更多的小组(例如:500百万个数据分为5000组一组一千个),对每个组进行迭代
    • 梯度下降中cost的变化图如下:
      【深度学习】第二阶段 —— 第二课
    • 如何去选择你的mini-batch的大小:
      ① 当你的mini-batch大小等于样本总数“m”时,相当于只有一组
      ② 当你的mini-batch大小等于“1”的 时候,相当于有m组。
      其训练迭代图如下:
      【深度学习】第二阶段 —— 第二课
      ③ 自然而然,选取应该在中间不太大的值
  2. 指数加权平均

    • 以London一年的温度分布为例,如图:
      【深度学习】第二阶段 —— 第二课
      线条就是按照加权平均来计算的温度值:

      Vt=βVt1+(1β)θt V_t = \beta V_{t-1} + (1-\beta)\theta_t

      其中β\beta的值在实际总一般取0.98,实际上就是绿线,此时就是V0V_0的值为实际记录值

    • 偏差修正(Bias Correction)
      实际上,在用公式推导的时候V0=0V_0=0,那么就是利用偏差修正进行前期的误差修正,使其达到更吻合的绿线。
      计算表达下:Vt1βt\frac{V_t}{1-\beta^t}t=2:1βt=1(0.098)2=0.0396t=2:1-\beta^t = 1- (0.098)^2=0.0396,这样计算出来的VtV_t在前期会更接近实际值
    • 在实际情况中,大多数人宁愿熬过初始时期,拿到偏差的估测继续计算下去,因为后面的拟合度也不差
  3. 其他加速梯度下降法

    • 动量梯度
      梯度下降示意图:
      【深度学习】第二阶段 —— 第二课
      在纵向上,需要尽可能的缩小摆动,横向上,尽可能加快速度,这反映到公式上如下
      On iteration t:
      Compute dW,db on current mini-batch

      Vdw=βVdw+(1β)dW V_{dw} = \beta V_{dw} + (1-\beta)dW

      Vdb=βVdwb+(1β)db V_{db} = \beta V_{dwb} + (1-\beta)db

    W=WαVdw W =W - \alpha V_{dw}

    b=bαVdb b = b - \alpha V_{db}

    Hyperparrameters:α β\alpha \ \beta,在实际中β\beta的值多为0.9,而一般也不用取修正偏差,因为迭代增加到10后,影响不大了,有些参考资料中会删去1β1-\beta,然后修改学习率的值来调节,Andrew Ng更偏向于不删,效果差不多的。

    • RMSProp(均方根)
      还是看上图,假设在纵轴是b,横轴是W(这样假设的理由是,只要b减小,上下的摆动就会减小,而只要W增大,梯度下降的速度也就增快了)
      On iteration t:
      Compute dW,db on current mini-batch

      Sdw=βSdw+(1β)dW2S_{dw} = \beta S_{dw} + (1-\beta)dW^2

      Vdb=βVdwb+(1β)db2V_{db} = \beta V_{dwb} + (1-\beta)db^2

      W=WαdwSdw W =W - \alpha \frac{dw}{ \sqrt{S_{dw}}}

      b=bαdbSdbb = b - \alpha \frac{db}{\sqrt{S_{db}}}

    其中dw变小,相应最后W变大,而db相反,这样就减小了摆动,而在实际操作中为了防止分母趋于0,会加上一个很小的数:Sdw+ϵ\sqrt{S_{dw}+\epsilon} 其中 ϵ=108\epsilon = 10^{-8}

    • Adam优化算法
      相当于结合了Momentun和RMSProp
      On iteration t:
      Compute dW,db on current mini-batch

      Vdw=0,Sdw=0,Vdb=0,Sdb=0V_{dw} = 0,S_{dw}=0,V_{db}=0,S_{db}=0

      Vdw=β1Vdw+(1β1)dW ,Vdb=β1Vdb+1β1db(momentun) V_{dw} = \beta_1 V_{dw} + (1-\beta_1) dW \ , V_{db} = \beta_1 V_{db} +{1-\beta_1} db \tag{momentun}

      Sdw=β2Sdw+(1β2)dW2,Sdb=β2Sdb+(1β2)db2(RMSProp) S_dw = \beta_2 S_{dw} + (1-\beta_2)dW^2, S_db = \beta_2 S_{db} + (1- \beta_2)db^2 \tag{RMSProp}

      W=WαVdwcorrectSdwcorrect+ϵ ,b=bαVdbcorrectSdbcorrect+ϵ W = W -\alpha \frac{V^{correct}_{dw}}{\sqrt{S^{correct}_{dw}}+\epsilon} \ , b = b -\alpha \frac{V^{correct}_{db}}{\sqrt{S^{correct}_{db}}+\epsilon}

    Hyperparameters chice:
    α\alpha:needs to be tune
    β1\beta_1:0.9 (dw)
    β2\beta_2:0.9 (dw2dw^2)
    ϵ\epsilon:1e-8

  4. 学习衰减率

    • 为何要用到学习衰减率?
      当你在训练的过程中,大的“步伐”会在最优值附近大幅度的“徘徊”,在训练的后期,小的学习率有利于减小这一幅度,如图(绿线运用了学习衰减率):
      【深度学习】第二阶段 —— 第二课

    • 实现方法:

      α=11+decayRateepochNumαi \alpha = \frac{1}{1 + decayRate \cdot epochNum} \cdot \alpha_i

    还有其他的更多的方法来实现,效果也不同

  5. 局部最优问题
    【深度学习】第二阶段 —— 第二课
    总结:好马!


第二阶段第一周编程作业附上 (非本人撰写) :优化算法实战