优化算法(吴恩达深度学习课程)-- 2018.11.02笔记

优化算法(吴恩达深度学习课程)

  1. batch梯度下降

    • 使用batch梯度下降时,每次迭代你都需要遍历整个训练集,可以预期每次成本都会下降,所以如果成本函数 J J J 是迭代次数的一个函数,它应该会随着每次迭代而减少,如果某次迭代中增加了,那肯定是出了问题,也许你的学习率太大
  2. mini-batch

    • 每次迭代下你都在训练不同的样本集或者说训练不同的mini-batch,如果你要作出成本函数 J J J 的图,你很可能会看到如下图的结果,没有每次迭代都下降是不要紧的,但走势应该向下,噪声产生的原因在于也许 X 1 X^1 X1 Y 1 Y^1 Y1 是比较容易计算的mini-batch,因此成本会低一些。不过也许出于偶然, X 2 X^2 X2 Y 2 Y^2 Y2 是比较难运算的mini-batch,或许你需要一些残缺的样本,这样一来,成本会更高一些,所以才会出现这些摆动,因为你是在运行mini-batch梯度下降法作出成本函数图。
      cost
    • mini-batch的大小问题(m是训练集大小)如下图
      • 如果mini-batch的大小是m(蓝线),其实就是batch梯度下降法;
      • 如果mini-batch的大小是1(紫线),就有了新的算法,叫做随机梯度下降。
      • 如果mini-batch的大小是(1, m)之间的(绿线),则他不会总朝向最小值附近,但它比随机梯度下降要更持续地靠近最小值的方向。
      • 如果mini-batch大小事2的n次方,代码会运行快一些,可以尝试不同的值,64和512的mini-batch比较常见
        gradient descent
    • Stochastic gradient descent(随机梯度下降)
      • 随机梯度下降法是有很多噪声的
      • 随机梯度下降法永远不会收敛,而是会一直在最小值附近被拨动,但它并不会在达到最小值并停留在此
    • X { t } X^{\{t\}} X{t} Y { t } Y^{\{t\}} Y{t} 要符合CPU/GPU内存,否则不管用什么方法处理数据,会使算法的表现急转直下变得惨不忍睹
  3. 加权平均数(指数加权移动平均)

    • v t = β v t − 1 + ( 1 − β ) θ t v_t = \beta v_{t-1} + (1-\beta) \theta_t vt=βvt1+(1β)θt
    • β = β 0 \beta = \beta_0 β=β0 的时候,相当于平均了大约前面 1 ( 1 − β 0 ) \frac{1}{(1-\beta_0)} (1β0)1 天的数据
  4. 偏差修正(指数加权平均的偏差修正)
    bias correction

    • 因为计算移动平均数的时候,初始化 v 0 = 0 v_0 = 0 v0=0 , v 1 = 0.98 v 0 + 0.02 θ 1 v_1 = 0.98v_0 + 0.02\theta_1 v1=0.98v0+0.02θ1 ,但是 v 0 = 0 v_0 = 0 v0=0 ,所以这部分没有了( 0.98 θ 0 0.98\theta_0 0.98θ0 ),所以 v 1 = 0.02 θ 1 v_1 = 0.02\theta_1 v1=0.02θ1,所以如果一天温度是40华氏度,那么 v 1 = 0.02 θ 1 = 0.02 × 40 = 8 v_1 = 0.02\theta_1 = 0.02 \times 40 = 8 v1=0.02θ1=0.02×40=8 ,因此得到的值会小很多,所以第一天温度的估测不准。 v 2 = 0.98 v 1 + 0.02 θ 2 v_2 = 0.98v_1 + 0.02\theta_2 v2=0.98v1+0.02θ2 ,如果代入 v 1 v_1 v1 ,然后相乘,所以 v 2 = 0.98 × 0.02 θ 1 + 0.02 θ 2 = 0.0196 θ 1 + 0.02 θ 2 v_2 = 0.98 \times 0.02\theta_1 + 0.02\theta_2 = 0.0196\theta_1 + 0.02\theta_2 v2=0.98×0.02θ1+0.02θ2=0.0196θ1+0.02θ2 ,假设 θ 1 \theta_1 θ1 θ 1 \theta_1 θ1 都是正数,计算后 v 2 v_2 v2 要远小于 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 ,所以 v 2 v_2 v2 不能很好估测出这一年前两天的温度。
    • 偏差修正的办法:在估测初期,不用 v t v_t vt ,而是用 v t 1 − β t \frac{v_t}{1 - \beta^t} 1βtvt t t t 就是现在的天数。举个具体例子,当 t = 2 t = 2 t=2 时, 1 − β t = 1 − 0.9 8 2 = 0.0396 1 - \beta^t = 1 - 0.98^2 = 0.0396 1βt=10.982=0.0396 ,因此对第二天温度的估测变成了 v 2 0.0396 = 0.0196 θ 1 + 0.02 θ 2 0.0396 \frac{v_2}{0.0396} = \frac{0.0196\theta_1 + 0.02\theta_2}{0.0396} 0.0396v2=0.03960.0196θ1+0.02θ2 ,也就是 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 的加权平均数,并去除了偏差。你会发现随着 t t t 增加, β t \beta_t βt 接近于 θ \theta θ ,所以当 t t t 很大的时候,偏差修正几乎没有作用,因此当 t t t 较大的时候,紫线基本和绿线重合了。不过在开始学习阶段,你才开始预测热身练习,偏差修正可以帮助你更好预测温度,偏差修正可以帮助你使结果从紫线变成绿线。
  5. Gradient descent with Momentum(动量梯度下降法)

    • 动量梯度下降法,运行速度几乎总是快于标准的梯度下降法。简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新你的权重。 β \beta β 一般设置为0.9
      momentum
  6. RMSprop
    On iteration t:
    compute d W \rm dW dW, d b \rm db db on the current mini-batch
    S d w = β S d w + ( 1 − β ) d W 2 \rm{S_{dw}} = \beta\rm{S_{dw}} + (1 - \beta)\rm{dW^2} Sdw=βSdw+(1β)dW2
    S d b = β S d b + ( 1 − β ) d b 2 \rm{S_{db}} = \beta\rm{S_{db}} + (1 - \beta)\rm{db^2} Sdb=βSdb+(1β)db2
    W : = W − α d w S d w \rm{W} := \rm{W} - \alpha\frac{\rm{dw}}{\sqrt{\rm{S_{dw}}}} W:=WαSdw dw
    b : = b − α d b S d b \rm{b} := \rm{b} - \alpha\frac{\rm{db}}{\sqrt{\rm{S_{db}}}} b:=bαSdb db

  7. Adam(Adaptive Moment Estimation)

    • Adam算法基本就是将Momentum和RMSprop结合在一起,并且是一种极其常用的学习算法,被证明能有效使用于不同的神经网络,适用于广泛的结构
      Adam
      Adam hyperparam choice
  8. 学习率衰减

    • 在迭代过程中会有噪音(蓝色线),下降朝向这里的最小值,但是不会精确地收敛,所以你的算法最后在附近摆动,并不会真正收敛,因为你用的a是固定值,不同的mini-batch中有噪音。
    • 如果你想用学习率衰减,要做的是要去尝试不同的值,包括超参数a0,以及超参数衰退率,找到合适的值。
  9. 局部最优的问题

    • 你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。
    • 如果你有2万个参数,那么 J J J 函数有2万个维度向量,你更可能遇到鞍点,而不是局部最优点。如果局部最优不是问题,那么问题是什么?结果是平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于0,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近0,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点,因为左边或右边的随机扰动。你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数 J J J 被定义在较高的维度空间。第二点,平稳段是一个问题,这样使得学习十分缓慢,这也是像Momentum或是RMSprop,Adam这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度,让你尽早往下走出平稳段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值