机器学习-Gradient Descent

文章探讨了梯度下降法在优化损失函数中的应用,强调了学习率的重要性。它介绍了Adagrad算法如何实现自适应学习率,并讨论了StochasticGradientDescent(SGD)的优势。此外,还提到了特征缩放对模型训练的影响以及泰勒展开在梯度下降理论中的作用。
摘要由CSDN通过智能技术生成

机器学习(Gradient Descent)

videopptblog

梯度下降(Gradient Descent)

optimization problem:
optimization

损失函数最小化
假设本模型有两个参数𝜃1和𝜃2,随机取得初始值
求解偏微分,梯度下降对参数进行更新梯度下降

Visualize:

确定梯度方向,红色表示Gradient方向,蓝色是梯度下降的方向,因为我们要是损失函数L减小,使用应该取与Gradient方向相反的方向,这也对应着进行参数更新时用的是-(减号)
其中:η 叫做Learning rates(学习速率)

Visualize

Small Tips

Tip 1:Tuning your learning rates

下面是两幅图,我们来简单看一下

  1. 图左边黑色为损失函数的曲线,假设从左边最高点开始:(一维)
    • 学习率刚刚好,比如红色的线,就能顺利找到最低点。
    • 学习率太小,比如蓝色的线,也可以顺利找到最低点,就会走的太慢,时间成本太高。
    • 学习率有点大,比如绿色的线,出现了跳过最低点,反复进行横跳,很难到达最低点。
    • 学习率非常大,比如黄色的线,直接就飞出去了,更新参数的时候只会发现损失函数越更新越大
  2. 当参数为一维或者二维的时候,我们可以很直观地建立图形进行观察,但是超过了三维以后,我们就无法进行可视化,但是右图是始终可以建立的,分别表示了不同学习率下参数更新以后损失函数的变化情况。将参数改变对损失函数的影响进行可视化。比如学习率太小(蓝色的线),损失函数下降的非常慢;学习率太大(绿色的线),损失函数下降很快,但马上就卡住不下降了;学习率特别大(黄色的线),损失函数就飞出去了;红色的就是差不多刚好,可以得到一个好的结果。

Learning Rate

我们可能会猜想,学习率很重要,既不能太大,跳出最优解,也不能太小,收敛过慢,那有没有一种可能实现学习率地改变呢?

Adaptive Learning Rates

在训练的过程中,我们需要实现学习率的自适应变化:

  1. Reduce the learning rate by some factor every few epochs.
    • 前期初始点可能距离最低点较远,我们可以将学习率设置大一些,使得损失函数更快收敛。
    • update参数以后,离最低点较近,此时,我们应该调整学习率变小,防止跳过了最低点。
  2. Learning rate cannot be one-size-fits-all
    • 给不同的参数分配不同的学习率
自适应学习率算法-Adagrad

下面有两种方法,第一种是针对一个参数的,但是我们要学习的是第二种,实现参数独立的自适应学习率算法

Adagrad

w是一个参数
𝜎t :之前参数的所有微分的均方根,对于每个参数都是不一样的。
普通梯度下降如Vanilla Gradient descent
使用Adagrad算法:每个参数的学习率都把除以之前微分的均方根。

Adagrad

变形
end

Contradiction

按照正常的理解,梯度越大,说明可能离最低点越远,那么我们变化的步伐也应该越大,梯度越小,说明可能离最低点越远,那么我们变化的步伐也应该越小,但是在Adagrad算法里面,当梯度越大的时候,步伐应该越大,但下面分母又导致当梯度越大的时候,步伐会越小,前后有点矛盾了。
解释:
此处我们的步长是相对的,我们当前的梯度的大小也是相对于前面的梯度大小来调整步长

  1. 构造反差效果
    反差
  2. 通过实例看出最优步长与一次微分成正比,与二次微分成反比,这里采用之前所有一次微分的均方根估计二次微分
    • 正比解释:一次微分越大,说明可能离最低点越远,步伐越大
    • 反比解释:二次微分越小,一次微分变化越慢,一次微分也就倾向于保留较大的趋势,步伐也就越大
      二次微分
  3. 同一参数,可以通过比较其一次微分比较其距离最优值的距离;不同参数还需要考虑二次微分。
    Do not cross parameters
    参数
  4. 第2点我们提到了Use first derivative to estimate second derivative
    • 一个较为复杂的参数模型,我们在进行求解的时候,算一次偏微分可能就需要很长的时间,所以二次偏微分一般不可取
    • 一般情况下,在一定的范围内取一次偏微分,进行平方求和开根号,在一定的程度上面也可以反映二次偏微分的大小
      二次偏微分
Tip 2:Stochastic Gradient Descent(SGD)

基本思想:损失函数没处理一个批次的数据就进行一次更新,
Loss Function

  • 普通的算法在进行参数更新的时候是一次遍历所有的例子,然后更新,实现一次更新,步伐一般较大。
  • SGD算法进行参数更新的时候每遍历一个例子就进行一次更新,实现多次更新,一般步伐较小。

SGD

Tip 3:Feature Scaling

Scaling

存在多个变量的时候,很可能出现的一种情况就是,他们的取值范围不一样,一个可以很大,一个可以很小,那么我们在对他们的对应参数进行相同变化的时候,而y的变化的情况却大不相同。

Scaling

左图: x1的scale比x2要小很多,所以当 w1​和 w2做同样的变化时,w1对 y 的变化影响是比较小的(w1对损失函数L有较小的微分,在w1方向上梯度较小,图像较为平滑),x2​ 对 y 的变化影响是比较大的(w2对损失函数L有较大的微分,在w2方向上梯度较大,图像上有比较陡峭的峡谷)
右图:二者scale相近,各点处梯度大致相同
来源

Normalize

归一化

计算每一个维度变量的

  • 均值:mi
  • 标准差: σi

进行相应的变化
归一化
这样所有维度的均值都是0,方差都是1。

Gradient Descent Theory

当我们在使用梯度下降算法进行参数优化的时候,每一次的优化并不能百分百保证使得损失函数越来越小。

Taylor

我们在一般情况下,我们无法一瞬间找到全局最优解,可以做到的是给定某个初始值和某个范围,我们可以找到局部最低点。

How to y find the point with the smallest value nearby?

Taylor Series

一个变量的泰勒展开

Taylor

Taylor多项式在点x=x0上逼近函数的值。多项式的阶次越高,多项式中的项越多,逼近函数的实际值越近。

Taylor

两个变量的泰勒展开

Taylor

Gradient Desent

Loss

我们在前面提到了,给定某个初始值和某个范围,如果这个范围足够小,那么我们是不是可以用泰勒展开对损失函数表达式进行替换

Taylor

以d为半径,做一个足够小的圆形区域,在这个区域上面,我们可以使用泰勒展开

Taylor

s可以看作定值,后面可以看作向量点乘(不记得的去百度一下)
点乘还有一种计算方法就是:两向量的模相乘再乘以夹角的余弦值,其中(u,v)是一节偏微分,是梯度,所以要让点乘结果最小,我们可以让两向量方向相反,夹角余弦值为-1,让另一向量模最大,但是有边界限制。

Taylor

现在我们可以更好理解使用泰勒展开的意义了,最后得到的向量的方向也就是我们向最低点移动的方向,但是不要忘记了我们使用泰勒展开的前提范围足够小,同样也要求我们学习率也要足够小,这样才能保证泰勒展开的精度是足够的

More Limitation of Gradient Descent

  • 微分值为0,可能是极值点,但不一定是全局极值,也可能仅仅只是微分值为0的非极值点
  • 在实际的ML中,当微分值小于某一个数值就停下来了,但这里只是比较平缓,并不是极值点

Limitation

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值