台大李宏毅Machine Learning学习笔记(四)——梯度下降

  回顾笔记二中求参数 w , b w,b w,b用的梯度下降法。在此,我们讲几个问题。

  1. 小心地调节learning rate

  如果learning rate太小,步伐太短,会需要很长时间才能到达极小值点,而如果步伐太大,会出现一直在极小值点附近振荡的情况,从而无法真正到达极小值点,甚至有可能会偏离极小值点,出现发散的情况,如图所示:图1

图1
  当参数多于两个的时候,不能够直观的在图上显示出来运动的轨迹,但可通过观察损失函数的大小变化来感知。如果我们自己调的话,会非常麻烦,毕竟数字那么多,这时可以让计算机自动调节步长。
图2
图2 自动调节步长
  通常在开始的时候,离最优解很远,我们会设置比较大的步长,以尽快靠近目标点,然后减小学习率。最简单的可以设置成迭代次数的函数 η t = η t + 1 \eta^t=\frac{\eta}{\sqrt t+1} ηt=t +1η
图3
图3
图3

图3 Adagrad法

  对于不同的参数使用Adagrad法设置不同的学习率会更好,具体做法是对于每一次迭代,都把前面计算的所有偏导数的均方根加入进去。比如说对 w w w而言
w 1 = w 0 − η ( g 0 ) 2 w^1=w^0-\frac{\eta}{(g^0)^2} w1=w0(g0)2η,其中, g 0 = ∂ L ∂ w ∣ w = w 0 g^0=\frac{\partial L}{\partial w}|_{w=w^0} g0=wLw=w0
w 2 = w 1 − η / [ ( g 0 ) 2 + ( g 1 ) 2 ] w^2=w^1-{\eta}/\sqrt{[(g^0)^2+(g^1)^2]} w2=w1η/[(g0)2+(g1)2] ,其中, g 0 = ∂ L ∂ w ∣ w = w 0 , g 1 = ∂ L ∂ w ∣ w = w 1 g^0=\frac{\partial L}{\partial w}|_{w=w^0},g^1=\frac{\partial L}{\partial w}|_{w=w^1} g0=wLw=w0,g1=wLw=w1
⋯ ⋯ \cdots\cdots
w t + 1 = w t − η / ∑ i = 0 t ( g i ) 2 w^{t+1}=w^t-{\eta}/\sqrt{\sum\limits^t_{i=0}(g^i)^2} wt+1=wtη/i=0t(gi)2 ,其中, g 0 = ∂ L ∂ w ∣ w = w 0 g^0=\frac{\partial L}{\partial w}|_{w=w^0} g0=wLw=w0 ⋯ ⋯ \cdots\cdots g t = ∂ L ∂ w ∣ w = w t g^t=\frac{\partial L}{\partial w}|_{w=w^t} gt=wLw=wt
当然,还有更多更好的方法,Adagrad法是比较简单实用的一种,实际上,许多设置参数学习率的方法是以Adagrad法为基础的。
图4

图4 一个问题
  在此,我们考虑一个问题:再上图中可以看出,如果求出的导数越大,步长越大(显而易见的),但是在Adagrad法中,导数越大,步长越小。这是为什么呢?一种直观地解释是Adagrad法强调的就是某一步的这种反差效果,如图。
图5
图5 直观解释
  后面用什么二次导解释的听不懂(哪位懂的小伙伴请赐教),能理解这个方法,为方便大家学习,在后面脚注里附上了论文链接,详细了推导了该方法 1
  随着优化过程的进行,对于已经下降很多的变量,则减缓学习率,对于还没怎么下降的变量,则保持一个较大的学习率。AdaGrad的缺点是虽然不同变量有了各自的学习率,但是初始的全局学习率还是需要手工指定。如果全局学习率过大,优化同样不稳定;而如果全局学习率过小,因为AdaGrad的特性,随着优化的进行,学习率会越来越小,很可能还没有到极值就停滞不前了。

  1. 随机梯度下降(Stochastic Gradient Descent,SGD)图6
    图6 SGD

  上面讨论的梯度下降算法每一次更新参数都将所有的训练集数据用上了,但是这样会使训练时间延长,所以提出了随机梯度下降算法,即每次随机选取一个训练数据,以此来对参数进行更新,SGD以震荡的方式趋向于最小值。
图7

图7 SGD比梯度下降快

  1. 特征缩放

  假设预测宝可梦的 c p cp cp值的函数为 y = b + w 1 ⋅ x 1 + w 2 ⋅ x 2 y=b+w_1\cdot x_1+w_2\cdot x_2 y=b+w1x1+w2x2 x 1 , x 2 x_1,x_2 x1,x2的分布相差很大的时候,比如 x 1 x_1 x1 1 , 2 , ⋯ ⋯ 1,2,\cdots\cdots 1,2,附近,而 x 2 x_2 x2 100 , 200 , ⋯ ⋯ 100,200,\cdots\cdots 100,200,附近的时候,如下图:
图8

图8 x 1 , x 2 x_1,x_2 x1,x2分布相差很大
  这时当更新 w w w的时候, x 1 x_1 x1就会对损失函数影响很小, x 2 x_2 x2对损失函数影响很大,如果不用AdaGrad法给它们不同的学习率,梯度下降法很难得出好的结果。因为梯度下降法是沿着梯度下降最快的方向更新参数的,如果 x 1 , x 2 x_1,x_2 x1,x2相差较大,如左边的图,到靠近极小点时,会很慢或者根本到不了极小点,但是如果 x 1 , x 2 x_1,x_2 x1,x2接近,如右边的图,图形接近正圆形,不管从哪个方向都是朝着极小点更新。因此,我们需要对特征进行缩放,使它们的分布互相接近。
图9
图9 特征缩放
  特征缩放的方法很多,这里介绍一种。如图所示:
图10
图10 一种特征缩放的方法
  具体做法为对每个对象 x i x^i xi求均值 m i m_i mi和标准差 δ i \delta_i δi,然后令 δ i r = x i r − m i δ i \delta_i^r=\frac{x_i^r-m_i}{\delta_i} δir=δixirmi,这样,所有的训练集数据的均值就化为0,方差为1(感觉像是化为了正态分布)。

  1. 梯度下降理论

图11

图11 梯度下降并不是更新一次就减小一次损失函数
  在使用梯度下降的过程中,并不是每次更新参数都会使得我们的损失函数越来越小。关于梯度下降的具体推到如下:
图12
图12 梯度下降的基本原理
  假设让我们求如图所示的极小值点,我们想到的方法就是先随机取一个点,然后在这个点的邻域内向着极小值点走一小段,根据泰勒公式 L ( θ ) ≈ s + u ( θ 1 − a ) + v ( θ 2 − b ) L(\theta)\approx s+u(\theta_1-a)+v(\theta_2-b) L(θ)s+u(θ1a)+v(θ2b),其中, s = L ( a , b ) , u = ∂ L ( a , b ) ∂ θ 1 , v = ∂ L ( a , b ) ∂ θ 2 s=L(a,b),u=\frac{\partial L(a,b)}{\partial \theta_1},v=\frac{\partial L(a,b)}{\partial \theta_2} s=L(a,b),u=θ1L(a,b),v=θ2L(a,b),要使 L ( θ ) L(\theta) L(θ)最小。显然应该朝 u , v u,v u,v的反方向走,即导数的反方向 2
图13
图13 梯度下降

5. 梯度下降的局限
图
梯度下降是比较基础的方法,有一些局限性:

  • 求出来是局部极小值
  • 停留在导数为零的非极小值点
  • 在平滑的地方更新及其缓慢

  1. 后面的什么二次导啥的其实没太听懂,附上AdaGrad的论文链接AdaGrad论文,有懂的小伙伴还望不吝赐教。 ↩︎

  2. 这部分可以参考最优化算法里面的,陈宝林的《最优化理论与算法》有详细介绍,这只是最基础的梯度下降法,还有很多诸如牛顿法之类的方法。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值