【深度学习】优化算法

本文为深度学习的学习总结,讲解神经网络中的优化算法。欢迎交流

Mini-batch 梯度下降法

  • 批量梯度下降:每次更新所有样本,每轮对于 θ \theta θ 的更新,所有样本都有贡献,计算得到的是标准梯度,对于凸问题,肯定能找到全局最优解。但每次更新幅度较大,样本很多时耗时太久。下面是更新公式:

    在这里插入图片描述

  • 随机梯度下降:每次更新时用 1 个样本,用 1 个样本来近似所有样本来调整 θ \theta θ,计算出的梯度不是准确的梯度,因而随机梯度下降会带来一些问题。对于凸问题,代价函数整体向着全局最优解,永远不会收敛,但最终得到的结果往往在全局最优解附近,我们可以接收。相比于批量梯度,这种方法更快收敛。减小学习率可以改善噪声(后面会详细讲解),但会失去所有向量化带来的加速。更新公式如下:

    在这里插入图片描述

  • mini-batch 梯度下降:在每次更新时用 b 个样本,用一些小样本近似全部样本,是上面两种方式的折中。这种方式在深度学习中使用最多,因为其收敛不会很慢,并且收敛的局部最优解也更容易被接受。一方面得到了大量的向量化,另一方面,无需等待整个训练集被处理完,就可以开始后续工作了。更新公式如下:

    在这里插入图片描述

当我们使用批量梯度下降法时,代价函数 J J J 与迭代次数间的关系如左图。如果使用 mini-batch 梯度下降法,则函数 J J J 与迭代次数间的关系如右图,走向朝下,但有很多的噪声,它并不是每次迭代都在下降。

在这里插入图片描述

右图产生噪声的原因是,如果第一批数据容易计算而第二批数据较难计算时,则成本会增加。

因此我们要决定 min-batch 的大小。如果样本容量很小( < 2000 <2000 <2000),我们直接使用批量梯度算法,如果样本容量较大,一般取 mini-batch 为 64 到 512,因为计算机内存的特点,取 2 的次方时代码会运行的快一些。最后, X { t } , Y { t } X^{\{t\}},Y^{\{t\}} X{ t},Y{ t} 要符合 CPU/GPU 内存,否则算法的表现将急剧下降。通常我们多次尝试不同的 mini-batch 选择最好的大小。

指数加权平均

在讲解其他更快速的优化算法之前,我们需要先讲解指数加权平均

下图为一年中温度随时间的变化图:

在这里插入图片描述

如果我们想要计算温度的趋势或局部平均值时,我们会使用指数加权平均,公式为:
v t = β v t − 1 + ( 1 − β ) θ t v_t=\beta v_{t-1}+(1-\beta)\theta_t vt=βvt1+(1β)θt
β = 0.9 \beta=0.9 β=0.9 时,得到红色的趋势曲线:

在这里插入图片描述

在计算时,可视 v t v_t vt 1 1 − β \frac{1}{1-\beta} 1β1 天的温度的平均。此时是 10 天的平均值。

若取 β = 0.98 \beta=0.98 β=0.98,则得到的结果为过去 50 天的平均温度,我们作图得到绿色的曲线:

在这里插入图片描述

因为我们多平均了几天的温度,所以得到的曲线波动更小更平坦。缺点是,为了平均更多的值,公式在温度变化时适应地会较为缓慢。

我们再设 β = 0.5 \beta=0.5 β=0.5,平均了 2 天的温度,得到下图中的黄线:

在这里插入图片描述

我们平均的数据太少,曲线有很多噪声,更可能出现异常值,但是能更快地适应温度变化。

通过调整不同的参数值,我们最终可以得到一个最佳的计算公式。

下面我们来理解这个公式的本质。我们将所有的 v t − 1 v_{t-1} vt1 代入到 v t v_t vt 的公式中,最终得到这样的公式(公式中的 β = 0.9 \beta=0.9 β=0.9):
v t = ∑ i = 0 t − 1 ( 1 − β ) β i θ t − i v_t=\sum\limits_{i=0}^{t-1}(1-\beta)\beta^i\theta_{t-i} vt=i=0t1(1β)βiθti
我们假设有一些日期的温度,分别为 θ 1 , . . . , θ t \theta_1,...,\theta_t θ1,...,θt

在这里插入图片描述

然后我们构建一个指数衰减函数,最大值为 1 − β = 0.1 1-\beta=0.1 1β=0.1

在这里插入图片描述

计算 v t v_t vt 通过将两个函数横坐标 t t t 对应的值相乘,然后求和。上图中所有的数相加起来为 1 或逼近 1,我们称之为偏差修正。

那么我们需要平均多少天的温度。 0. 9 10 ≈ 0.35 ≈ 1 e 0.9^{10}≈0.35≈\frac{1}{e} 0.9100.35e1 ( 1 − ϵ ) 1 ϵ ≈ 1 e ≈ 0.35 (1-\epsilon)^{\frac{1}{\epsilon}}≈\frac{1}{e}≈0.35 (1ϵ)ϵ1e10.35。则 10 天后曲线的高度下降到峰值的 1 e \frac{1}{e} e1,数值快速衰减,本质上是一个下降幅度喊打。因此当 β = 0.9 \beta=0.9 β=0.9 时,我们计算了过去 10 天的平均温度。得到公式 1 1 − β \frac{1}{1-\beta} 1β1<

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值