通俗易懂
一个经典的例子就是假设你现在在山上,为了以最快的速度下山,且视线良好,你可以看清自己的位置以及所处位置的坡度,那么沿着坡向下走,最终你会走到山底。但是如果你被蒙上双眼,那么你则只能凭借脚踩石头的感觉判断当前位置的坡度,精确性就大大下降,有时候你认为的坡,实际上可能并不是坡,走一段时间后发现没有下山,或者曲曲折折走了好多路才能下山。
渐入佳境
批量梯度下降法(Batch Gradient Descent,BGD)就好比正常下山,而随机梯度下降法就好比蒙着眼睛下山,数学上的表达式为。
批量梯度下降法在全部训练集上计算准确的梯度,公式为
∑ i = 1 n ∇ θ f ( θ ; x i , y i ) + ∇ θ ϕ ( θ ) \sum_{i=1}^{n} \nabla_{\theta} f\left(\theta ; x_{i}, y_{i}\right)+\nabla_{\theta} \phi(\theta) i=1∑n∇θf(θ;xi,yi)+∇θϕ(θ)
其中 f ( θ ; x i , y i ) 表示在每个样本的损失函数, ϕ ( θ ) 为正则项。 随机梯度下降法则采样单个样本来估计当前的梯度,即 ∇ θ f ( θ ; x i , y i ) + ∇ θ ϕ ( θ ) 其中f\left(\theta ; x_{i}, y_{i}\right)表示在每个样本的损失函数,\phi(\theta) 为正则项。\\ 随机梯度下降法则采样单个样本来估计当前的梯度,即\\ ∇θf(θ;xi,yi)+∇θϕ(θ) 其中f(θ;xi,yi)表示在每个样本的损失函数,ϕ(θ)为正则项。随机梯度下降法则采样单个样本来估计当前的梯度,即∇θf(θ;xi,yi)+∇θϕ(θ)
遇到的问题
进步地,有人会说深度学习中的优化问基本身就很难,有太多局部最优点的陷阱,没错,这些陷阱对于随机梯度下降法和批量梯度下降都是普遍存在的。但对随机梯度下降法来说,可怕的不是局部最优点,而是山谷和鞍点两类地形。山谷顾名思义就是狭长的山间小道,左右两边是峭壁;鞍点的形状像是一个马鞍,一个方向上两头翘, 另一个方向上两头垂,而中心区域是一片近乎水平的平地。为什么随机梯度下降法最害怕遇上这两类地形呢?在山谷中,准确的梯度方向是沿山道向下,稍有偏离就会撞向山壁,而粗糙的梯度估计使得它在两山壁间来回反弹震荡,不能沿山道方向迅速下降,导致收敛不稳定和收敛速度慢。在鞍点处,随机梯度下降法会走入一片平坦之地(此时离最低点还很远,故也称plateau)。想象一下蒙着双眼只凭借脚底感觉坡度,如果坡度很明显,那么基本能估计出下山的大致方向;如果坡度不明显,则很可能走错方向。同样,在梯度近乎为零的区域,随机梯度下降法无法准确察觉出梯度的微小变化,结果就停滞下来。
解决的思路
动量(Momentum)方法
为了解决随机梯度下降法山谷震荡和鞍点停滞的问题,我们做一个简单的思维实验。想象一下纸团在山谷和鞍点处的运动轨迹,在山谷中纸团受重力作用沿山道滚下,两边是不规则的山壁,纸团不可避免地撞在山壁上,由于质量小受山壁弹力的干扰大,从一侧山壁反弹回来撞向另一侧山壁,结果来回震荡地滚下;如果当纸团来到鞍点的一片平坦之地时,还是由于质属小,速度很快减为零。纸团的情况和随机梯度下降法遇到的问题面直如出一辙。直观地,如果换成一个铁球,当沿着山谷滚下时,不容易受到途中旁力的干扰,轨迹会更稳更直;当来到鞍点中心处,在惯性作用下继续前行,从而有机会冲出这片平坦的陷阱,因此,有了动量方法,模型参数的迭代公式为:
v t = γ v t − 1 + η g t θ t + 1 = θ t − v t vt=γvt−1+ηgt\\ \theta_{t+1}=θ_t−v_t vt=γvt−1+ηgtθt+1=θt−vt
具体来说,前进步伐 v t ,由两部分组成。一是学习速率 η 乘以当前估计的梯度 g t ;二是带衰减的前一次步伐 v t − 1 这里, 惯性就体现在对前一次步伐信息的重利用上。 类比中学物理知识,当前梯度就好比当前时刻受力产生的加速度, 前一次步伐好比前一 − 时刻的速度,当前步伐好比当前时刻的速度。 为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用的结果, 因此 v t 直接依赖于 v t − 1 和 g t ,而不仅仅是 g t 。另外,衰减系数 γ 扮演了阻力的作用。 中学物理还告诉我们,刻画惯性的物理量是动量,这也是算法名字的由来。沿山谷滚下的铁球, 会受到沿坡道向下的力和与左右山壁碰撞的弹力。向下的力稳定不变,产生的动量不断累积, 速度越来越快;左右的弹力总是在不停切换,动量累积的结果是相互抵消,自然减弱了球的来回震荡。 因此,与随机梯度下降法相比,动量方法的收敛速度更快, 收敛曲线也更稳定,如下图示 具体来说,前进步伐 v_{t},由两部分组成。一是学习速率 η 乘以当前估计的梯度 g_{t} ;二是带衰减的前一次步伐 v_{t-1}这里,\\惯性就体现在对前一次步伐信息的重利用上。\\类比中学物理知识,当前梯度就好比当前时刻受力产生的加速度,\\前一次步伐好比前一-时刻的速度,当前步伐好比当前时刻的速度。\\为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用 的结果,\\因此v_{t}直接依赖于v_{t -1}和 g_{t},而不仅仅是g_{t}。另外,衰减系数 γ扮演了阻力的作用。\\ 中学物理还告诉我们,刻画惯性的物理量是动量,这也是算法名字的由来。沿山谷滚下的铁球,\\会受到沿坡道向下的力和与左右山壁碰撞的弹力。向下的力稳定不变,产生的动量不断累积,\\速度越来越快;左右的弹力总是在不停切换,动量累积的结果是相互抵消,自然减弱了球的来回震荡。\\因此,与随机梯度下降法相比,动量方法的收敛速度更快,\\收敛曲线也更稳定,如下图示 具体来说,前进步伐vt,由两部分组成。一是学习速率η乘以当前估计的梯度gt;二是带衰减的前一次步伐vt−1这里,惯性就体现在对前一次步伐信息的重利用上。类比中学物理知识,当前梯度就好比当前时刻受力产生的加速度,前一次步伐好比前一−时刻的速度,当前步伐好比当前时刻的速度。为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用的结果,因此vt直接依赖于vt−1和gt,而不仅仅是gt。另外,衰减系数γ扮演了阻力的作用。中学物理还告诉我们,刻画惯性的物理量是动量,这也是算法名字的由来。沿山谷滚下的铁球,会受到沿坡道向下的力和与左右山壁碰撞的弹力。向下的力稳定不变,产生的动量不断累积,速度越来越快;左右的弹力总是在不停切换,动量累积的结果是相互抵消,自然减弱了球的来回震荡。因此,与随机梯度下降法相比,动量方法的收敛速度更快,收敛曲线也更稳定,如下图示
计算损失函数
梯度下降最简单的用法是计算损失函数(数据集中所有样本的损失均值) 关于模型参数的导数(在这里也可以称为梯度)。 但实际中的执行可能会非常慢:因为在每一次更新参数之前,我们必须遍历整个数据集。 因此,我们通常会在每次需要计算更新的时候随机抽取一小批样本, 这种变体叫做小批量随机梯度下降(minibatch stochastic gradient descent).