机器学习(4)

机器学习之梯度下降法

1.什么是梯度下降

  • 解决的问题:找到一组参数 θ,让损失函数 L ( θ ) L(\theta) L(θ)越小越好
  • θ ∗ = arg min ⁡ θ L ( θ ) (1) \theta^∗= \underset{ \theta }{\operatorname{arg\ min}} L(\theta) \tag1 θ=θarg minL(θ)(1)
  • 解决方法:随机选取参数初始值 θ 0 \theta^0 θ0,计算初始值处各参数对 L L L的偏微分,然后 θ 0 \theta^0 θ0减去η 乘上偏微分的值,得到一组新的参数,同理反复进行这样的计算。 ▽ L ( θ ) \triangledown L(\theta) L(θ) 即为梯度。
    在这里插入图片描述

2.梯度下降的理论基础

梯度下降需要解决的问题可以转变为,例如在初始值 θ 0 \theta^0 θ0处的一个小范围圆圈内找到让损失函数更小的 θ 1 \theta^1 θ1,再在 θ 1 \theta^1 θ1处寻找更小的,如此循环往复直到找到最小的。这样问题就可以再简化为:如何在小圆圈内快速的找到最小值?
在这里插入图片描述

基于泰勒展开式,在 (a,b)点的红色圆圈范围内,可以将损失函数用泰勒展开式进行简化:
在这里插入图片描述

不考虑s的话,可以看出剩下的部分就是两个向量 ( △ θ 1 , △ θ 2 ) (\triangle \theta1,\triangle \theta2) (θ1,θ2) ( u , v ) (u,v) (u,v) 的内积,当向量 ( △ θ 1 , △ θ 2 ) (\triangle \theta1,\triangle \theta2) (θ1,θ2) 和向量 ( u , v ) (u,v) (u,v) 方向相反时,内积最小。
在这里插入图片描述
将u、v代入:
在这里插入图片描述

最后得到的式子即梯度下降的式子,当红色圆圈足够小(学习率足够小)才能使用。实际应用中,如果学习率没有设好,会导致做梯度下降的时候,损失函数没有越来越小。

3.梯度下降的限制

  • 极易陷入局部极值
  • 可能卡在不是极值,但微分值是0的地方(鞍点)
  • 可能实际中只是当微分值小于某一个数值就停下来了,但这里只是比较平缓,并不是极值点
    在这里插入图片描述

4.梯度下降的关键问题

4.1 调整学习率

  • 若学习率调整得太小,会导致走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。
  • 若学习率调整得太大,会出现震荡,永远无法达到最低点,当学习率非常非常大时,甚至可能出现直接就飞出去了,更新参数的时候只会发现损失函数越更新越大。
  • 解决方案:将参数改变对损失函数的影响进行可视化。

4.2 自适应学习率

基本思想:随着次数的增加,通过一些因子来减少学习率

注意点:

  • 通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率
  • update好几次参数之后呢,比较靠近最低点了,此时减少学习率
  • 比如 η t = η t t + 1 \eta^t =\frac{\eta^t}{\sqrt{t+1}} ηt=t+1 ηt t t t 是次数。随着次数的增加, η t \eta^t ηt 减小
  • 学习率不能是一个值通用所有特征,不同的参数需要不同的学习率

4.3 Adagrad 算法

基本思想:每个参数的学习率都把它除上之前微分的均方根

  • 对比
    普通的梯度下降:
    w t + 1 ← w t − η t g t (3) w^{t+1} \leftarrow w^t -η^tg^t \tag3 wt+1wtηtgt(3) η t = η t t + 1 (4) \eta^t =\frac{\eta^t}{\sqrt{t+1}} \tag4 ηt=t+1 ηt(4)
    w w w 是一个参数

    Adagrad:
    w t + 1 ← w t − η t σ t g t (5) w^{t+1} \leftarrow w^t -\frac{η^t}{\sigma^t}g^t \tag5 wt+1wtσtηtgt(5) g t = ∂ L ( θ t ) ∂ w (6) g^t =\frac{\partial L(\theta^t)}{\partial w} \tag6 gt=wL(θt)(6)
    σ t \sigma^t σt :之前 参数的所有微分的均方根,对于每个参数都是不一样的

    Adagrad举例:
    在这里插入图片描述
    进行简化:
    在这里插入图片描述

∑ i = 0 t ( g i ) 2 \sqrt{\sum_{i=0}^t(g^i)^2} i=0t(gi)2 就是在尽可能不增加过多运算的情况下模拟二次微分(如果计算二次微分,在实际情况中可能会增加很多的时间消耗)

  • 为什么要引入二次微分呢?
    在这里插入图片描述
    可以看出 ∣ 2 a x 0 + b ∣ |2ax_0+b| 2ax0+b 就是方程绝对值在 x 0 x_0 x0 这一点的微分,所以可以得出:如果算出来的微分越大,则距离最低点越远。

    但是!!!以上结论在多参数下并不成立

在这里插入图片描述

上图左边是两个参数的损失函数,颜色代表损失函数的值。如果只考虑参数 w 1 w1 w1,就像图中蓝色的线,得到右边上图结果;如果只考虑参数 w 2 w2 w2, 就像图中绿色的线,得到右边下图的结果。确实对于 a a a b b b,上述结论是成立的,同理 c c c b b b 也成立。但是如果对比 a a a c c c,就不成立 了, c c c a a a 大,但 c c c 距离最低点是比较近的。

之前说到的最佳距离 ∣ 2 a x 0 + b 2 a ∣ \left | \frac{2ax_0+b}{2a} \right | 2a2ax0+b,还有个分母 2 a 2a 2a 。对function进行二次微分刚好可以得到: ∂ 2 y ∂ x 2 = 2 a (7) \frac{\partial ^2y}{\partial x^2} = 2a \tag7 x22y=2a(7) 所以最好的步伐应该是: 一 次 微 分 二 次 微 分 \frac{一次微分}{二次微分} 即不止和一次微分成正比,还和二次微分成反比。最好的step应该考虑到 二次微分,而Adagrad简化后得到的 ∑ i = 0 t ( g i ) 2 \sqrt{\sum_{i=0}^t(g^i)^2} i=0t(gi)2 恰好近似等于二次微分的结果。

4.4 随机梯度下降法

  • 普通梯度下降:
    L = ∑ n ( y ^ n − ( b + ∑ w i x i n ) ) 2 (8) L=\sum^n(\hat y^n-(b+\sum w_ix_i^n))^2 \tag8 L=n(y^n(b+wixin))2(8) θ i = θ i − 1 − η ▽ L ( θ i − 1 ) (9) \theta^i =\theta^{i-1}- \eta\triangledown L(\theta^{i-1}) \tag9 θi=θi1ηL(θi1)(9)
  • 随机梯度下降:
    L = ( y ^ n − ( b + ∑ w i x i n ) ) 2 (10) L=(\hat y^n-(b+\sum wixi^n))^2 \tag{10} L=(y^n(b+wixin))2(10) θ i = θ i − 1 − η ▽ L n ( θ i − 1 ) (11) \theta^i =\theta^{i-1}- \eta\triangledown L^n(\theta^{i-1}) \tag{11} θi=θi1ηLn(θi1)(11)
    随机梯度下降相较于普通梯度下降法更快,普通梯度下降法走一步需要处理所有例子,而随机梯度下降法没处理一个例子就更新,所以更快。
    在这里插入图片描述

4.5 特征缩放

  • 目的:解决多参数且尺度相差较大时,各个参数对损失函数影响不一致的问题
  • 解决方案:归一化
    在这里插入图片描述
    上图每一列都是一个例子,里面都有一组特征。对每一个维度 i i i(绿色框)都计算平均数,记做 m i m_i mi;还要计算标准差,记做 σ i \sigma _i σi。然后用第 r r r 个例子中的第 i i i 个输入,减掉平均数 m i m_i mi,然后除以标准差 σ i \sigma _i σi,得到的结果是所有的维数都是 0 0 0,所有的方差都是 1 1 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值