机器学习笔记——深入梯度下降细节

机器学习笔记——梯度下降

  • 一、梯度下降回顾
  • 二、学习率的调整
    • 1.学习率对梯度下降的影响
    • 2.Adagrad动态调整学习率
  • 三、随机梯度下降(Stochastic)
  • 四、特征缩放(Feature Scaling)
  • 五、数学证明

一、梯度下降回顾

  • 在回归分析的步骤3中我们需要解决的是如下的优化问题:
  • θ ∗ = a r g m i n θ L ( θ ) \theta^*=argmin_{\theta}L(\theta) θ=argminθL(θ)其中L是函数的函数,但我们也可以用函数的参数来代替此函数。 θ \theta θ代表的是一组参数,用一个列向量的形式来表示。
  • 我们假设 θ \theta θ仅包含两个参数{ θ 1 , θ 2 \theta_1,\theta_2 θ1,θ2}。初始的我们把参数写成向量的形式: θ 0 = [ θ 1 0 θ 2 0 ] \theta^0=\left[ \begin{matrix} \theta^0_1\\\theta^0_2\\\end{matrix} \right] θ0=[θ10θ20]。其中对参数做一下解释, θ 1 0 \theta^0_1 θ10表示第一个参数的第0个值。对此我们有以下公式:
    机器学习笔记——深入梯度下降细节_第1张图片
  • 提取出梯度运算符后我们的梯度下降公式可以完全向量化:机器学习笔记——深入梯度下降细节_第2张图片
  • θ 1 与 θ 2 \theta^1与\theta^2 θ1θ2构成一个二维空间,梯度下降的过程可以理解在该平面内点的移动轨迹。由下图可以看出,梯度方向总是沿着Loss函数等高线的法线方向,每次梯度下降的方向总是沿着梯度的反方向,而步幅则有梯度大小与学习率大小共同决定。
    机器学习笔记——深入梯度下降细节_第3张图片

二、学习率的调整

1.学习率对梯度下降的影响

  • 学习率的调整在梯度下降中至关重要,因为它关乎下降速度的快慢甚至还会出现不降反增的现象。
    机器学习笔记——深入梯度下降细节_第4张图片
  • 针对上图中一个参数产生的二维损失函数曲线,红色代表最合适的步幅;蓝色代表步幅偏小但是也可下降到底端;绿线代表步幅较大卡在某一位置无法下降;黄线代表步幅太大不降反增。
  • 一个参数我们可以二维可视化损失函数曲线,两个参数我们可以三维可视化损失函数曲面。但我们无法肉眼处理理解三维以上的坐标系,因此三个参数及以上的情况我们无法直观的可视化分析步幅的大小。
  • 虽然我们无法可视化全部的损失函数随参数变化曲线,但是我们可以可视化损失函数随迭代次数的变化曲线,如下图所示:
    机器学习笔记——深入梯度下降细节_第5张图片

2.Adagrad动态调整学习率

  • 学习率不能是一成不变的,即便在某个时刻该学习率超级合适,它也不会一直合适。所以一开始我们距离目的地较远,我们需要较大的学习率;经过一定步骤之后我们渐渐接近于目的地,就需要降低学习率。
  • 类似于使用显微镜时,先粗准焦螺旋较快确定大体位置,然后再用细准焦螺旋精确定位。
  • 由于向量表示,原来的公式不同参数也应用相同的学习率。这样是不对的,针对不同参数应该有不同的学习率,针对同一参数的不同时间段学习率也要动态的改变
    机器学习笔记——深入梯度下降细节_第6张图片
    机器学习笔记——深入梯度下降细节_第7张图片
  • 针对我们过去学习的梯度下降函数, η t \eta^t ηt是随着迭代次数t变化而变化的,也就是说该梯度下降函数的学习率考虑了不同阶段的变化。但是所有参数都是用统一的学习率,这样显然不对。
    机器学习笔记——深入梯度下降细节_第8张图片
  • Adagrad梯度下降方法解决了学习率变化的两大问题,前面以及说到 η t \eta^t ηt解决了学习率不同阶段变化的问题。而 σ t \sigma^t σt解决了不同参数使用不同学习率的问题。
  • σ t \sigma^t σt代表的是之前所有迭代中梯度值的均方根(Room Mean Square)。均方根是过去该参数梯度值的综合表征,因此代表了该参数的特点。以下图作为例子:
    在这里插入图片描述
  • η t 与 σ t \eta^t与\sigma^t ηtσt的具体公式代入,我们可以发现分子分母可以同时约掉 1 / t + 1 1/\sqrt{t+1} 1/t+1 。得到了以下公式:
    机器学习笔记——深入梯度下降细节_第9张图片
  • 在过去的梯度下降函数中我们可以分析得到,梯度值 g t g^t gt越大其变化的幅度越大。而在我们新得到的梯度下降函数中,并不存在明显的梯度与步幅之间的关系。这样是否合理呢?
  • 下面我们考虑一个参数构成的二维曲线,从随机位置 x 0 x_0 x0到达 − b 2 a \frac{-b}{2a} 2ab的最佳步幅就是 ∣ x 0 + b 2 a ∣ |x^0+\frac{b}{2a}| x0+2ab化简得到 ∣ 2 a x 0 + b ∣ 2 a \frac{|2ax_0+b|}{2a} 2a2ax0+b。在一个参数的关系中,梯度越大代表离最低点越远,所需的步幅也就越大。这就解释了为什么梯度大步幅大。
    机器学习笔记——深入梯度下降细节_第10张图片
  • 而两个参数以上的关系中就不成立这条规律:梯度越大的离最低点越远需要更大的步幅。因此我们之前的模型并不适用,而新得到的梯度下降函数则考虑到了这一点。观察上面图中的最佳步幅,我们可以看到分子为一阶导分母为二阶导,这条规律适用于多个参数的情况。
  • 而为了用一阶导与二阶导结合的方式来表征步幅,涉及到二阶导的求解会极大增加计算量。那么有没有一种计算指标可以来近似模拟二阶导的作用呢?
    机器学习笔记——深入梯度下降细节_第11张图片
  • 分析以上图像可以看出,二阶导较大的(也就是开口较小)二次曲线其一阶导的均方根更大,二阶导较小的(也就是开口较大)二次曲线其一阶导的均方根更小。因此可以用一阶导的均方根来近似模拟二阶导的作用。
  • 这样我们新得到的梯度下降函数也就可以较好地解释了。

三、随机梯度下降(Stochastic)

  • 梯度下降有如下三种变形形式,分别为:批量梯度下降小批量梯度下降随机梯度下降
  • 批量梯度下降法BGD(Batch Gradient Descent):
    针对的是整个数据集,通过对所有的样本的计算来求解梯度的方向。优点:全局最优解;易于并行实现;缺点:当样本数据很多时,计算量开销大,计算速度慢。
  • 小批量梯度下降法MBGD(mini-batch Gradient Descent):
    把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。
  • 随机梯度下降SGD(stochastic gradient descent):
    每个数据都计算算一下损失函数,然后求梯度更新参数。优点:计算速度快。缺点:收敛性能不好。
  • 这三种方法相比,使用全部样本更新参数的批量梯度下降法全局最优性更高但是如果样本太大时间效率很低。
  • 而随机梯度下降法每次更新参数都使用1个样本,这样有可能不需要使用到所有样本就可以实现参数收敛。但是样本随机性太大,对全局最优性的考量太少。
  • 结合以上两种思维,我们更多的使用小批量梯度下降法。我们既将样本划分成小块为了加快收敛速度,又避免将分块分的过于细导致全局最优性差。
    机器学习笔记——深入梯度下降细节_第12张图片

四、特征缩放(Feature Scaling)

  • 我们取函数模型为: y = b + w 1 x 1 + w 2 x 2 y=b+w_1x_1+w_2x_2 y=b+w1x1+w2x2。假设 x 1 与 x 2 x_1与x_2 x1x2有较大的取值差距, x 1 x_1 x1的取值范围为1,2,…, x 2 x_2 x2的取值范围为100,200,…。我们可以对函数模型做进一步形象化:
    机器学习笔记——深入梯度下降细节_第13张图片
    机器学习笔记——深入梯度下降细节_第14张图片

  • 由于我们梯度下降是调整参数的过程,因此参数对整体函数的影响至关重要。 w 1 与 w 2 w_1与w_2 w1w2相比明显是 w 2 w_2 w2对函数值的影响更大,两个参数的影响力差距很大,因此更加不能使用同一个学习率 η \eta η,参数调整的难度很大。
    机器学习笔记——深入梯度下降细节_第15张图片
    机器学习笔记——深入梯度下降细节_第16张图片

  • 特征缩放之后的两个参数取值接近,更加有利于参数调整。而且每一步参数调整的过程都近似指向最低点,收敛速度更快。

  • 那么到底该如何进行特征缩放呢?
    机器学习笔记——深入梯度下降细节_第17张图片

  • 如图所示。我们有R组样本 x 1 − x R x^1-x^R x1xR,每组样本有多个参数。同列的参数属于同一样本,同行的参数属于同一指标。我们计算出每一行的平均值 m i m_i mi和标准差 σ i \sigma_i σi。将每个参数执行以下运算:
    机器学习笔记——深入梯度下降细节_第18张图片

五、数学证明

  • 通过之前的学习我们知道了梯度下降是用来求解最优参数的方法,也学习了梯度下降的具体实现细节以及几种改进方法。那么本篇博文将聚焦于如何数学证明梯度下降方法的正确性。

  • 假设我们的函数模型有两个参数{ θ 1 , θ 2 \theta_1,\theta_2 θ1,θ2},我们在两个参数构成的二维平面中建立损失函数的等高线视图。
    机器学习笔记——深入梯度下降细节_第19张图片

  • 假设我们的初始位置 θ 0 \theta_0 θ0,红色圆圈是我们的搜索范围。我们每次要在红色圆圈中确定一点损失函数最小,再以该点为圆心继续逼近。那么关键问题在于,我们如何在每一个圆圈中确定最小的损失函数值的点?

  • 根据泰勒定理展开我们可以得到:(高等数学有学过)
    机器学习笔记——深入梯度下降细节_第20张图片

  • 我们考虑当 x x x无限接近于 x 0 x_0 x0时, ( x − x 0 ) 2 、 ( x − x 0 ) 3 . . . (x-x_0)^2、(x-x_0)^3... (xx0)2(xx0)3...都无限接近于0,我们便可以把二次项及其以后的项全部近似舍去,得到如下函数。
    在这里插入图片描述
    -以上是单参数的泰勒展开,我们再来看一下两个参数的泰勒展开:
    在这里插入图片描述

  • 将上述函数更改成我们梯度下降中用到的形式。其中(a,b)表示我们现在点所处的位置, θ 1 与 θ 2 \theta_1与\theta_2 θ1θ2是待优化的两个参数。只有当红色圆圈足够小的时候,也就是说 ( θ 1 , θ 2 ) (\theta_1,\theta_2) (θ1,θ2)足够接近于(a,b)的时候,泰勒展开才可以只保留到一次项。
    在这里插入图片描述

  • 因为在某个固定点(a,b),公式中部分值是个固定值。因此我们把公式中的固定值用常数来代替得到如下式子:
    机器学习笔记——深入梯度下降细节_第21张图片

  • 为了寻找红色圆圈内的最小损失函数值,我们需要对点坐标 ( θ 1 , θ 2 ) (\theta_1,\theta_2) (θ1,θ2)做出如下限制:
    在这里插入图片描述

  • 针对上面式子,我们令 Δ θ 1 = θ 1 − a ; Δ θ 2 = θ 2 − b \Delta\theta_1=\theta_1-a;\Delta\theta_2=\theta_2-b Δθ1=θ1a;Δθ2=θ2b。原式子忽略s,我们可以看成向量( Δ θ 1 , Δ θ 2 \Delta\theta_1,\Delta\theta_2 Δθ1,Δθ2)与向量(u,v)的矢量积,可以表示成如下图所示的样子。
    机器学习笔记——深入梯度下降细节_第22张图片

  • 那么两个矢量呈现什么特征时会使L最小呢?由于(u,v)对于某一点来说是固定值从而方向固定,因此我们可以使( Δ θ 1 , Δ θ 2 \Delta\theta_1,\Delta\theta_2 Δθ1,Δθ2)矢量的方向沿(u,v)反方向并且长度伸长到圆周上即为最小值。
    机器学习笔记——深入梯度下降细节_第23张图片
    机器学习笔记——深入梯度下降细节_第24张图片
    机器学习笔记——深入梯度下降细节_第25张图片

  • 因此我们的( Δ θ 1 , Δ θ 2 \Delta\theta_1,\Delta\theta_2 Δθ1,Δθ2)向量可以写成上述形式,而 η \eta η则是上面提到的长度伸缩的比率。

  • 将所有常数都用原始式子带回,我们惊喜的发现这就是梯度下降的表示公式。所以说我们按照最优化的求解思路结合泰勒展开推出的便是梯度下降。

你可能感兴趣的:(机器学习,机器学习)