一文搞清楚梯度下降

何为梯度?为什么要下降?

一、梯度下降的基本思想

讲一个故事《三个兄弟找水喝》

有三个兄弟被困在山顶,目标是下山找水喝,水在最低处。山上有大雾,只能一点点前进,找到前进的方向;

  • 老大非常谨慎,四下综合比较后才选择最陡峭的方向;
  • 老二随心大胆,随便探测一下就往最低的地方走去;
  • 老三中庸普通,没有大哥小心翼翼,也没有二哥随性,探测几次后就走最陡峭的方向;

谁最先会找到水源呢?

三兄弟下山找水的过程都用到了梯度下降,每走一段路,测量出最陡的方向,然后向前走,重复这个过程,就能成功抵达山谷。

在这个故事中,大山代表了什么,又应该如何确定梯度(陡峭度)呢?

二、梯度下降法的主要原理

1.确定一个小目标-预测函数

机器学习的常见任务是通过学习算法,自动发现数据背后的规律,不断改变模型,然后做出预测。为了便于理解,举个例子。

在二位直角坐标系中有一群样本点,横纵坐标分别代表一组有因果关系的变量,比如房子的价格和面积。常识告诉我们他们的分布是正比例的,也就是一条过原点的直线y = wx;

我们的任务就是设计一个算法让机器拟合这些数据,帮我们算出直线的参数w。

一个简单想法是先随机选取一条,然后计算所有样本点和该直线的偏离程度,再根据误差大小调整w的大小,在这个问题中,y = wx,就是所谓的预测函数;

2.找到差距-代价函数

首先我们需要量化数据的偏离程度,也就是误差,最常见的方法是均方误差,顾名思义就是误差平方和的平均值,

比如上面的点p1和真值的误差就是

同理其他特征点,也可以求出误差的平方

我们的目的是求出所有点误差的平均值

考虑到xy和样本数n都是已知数,因此通过合并同类项,用abc分别代替不同项的系数来简化我们公式。

这样就得到了一个我们高中就学过的一元二次函数

这个误差函数,就表示学习所需要付出的代价,因此也常常被称为代价函数cost function。

a是x的平方和,肯定是大于0的,所以这个函数是一个开口向上的抛物线图像,当w取值发生变化时,直线绕着原点旋转,对应到抛物线图像就是取值点。

通过定义预测函数,根据误差公式推导代价函数,我们成功的将样本点拟合过程,映射到了一个函数图像上。

3.明确搜索方向 - 梯度计算

找到了代价函数图像之后,我们该怎么走呢?机器学习的目标是拟合出最接近训练数据分布的直线,也就是找到误差代价函数最小的参数w,对应到函数图像上就是其最低点。这个寻找最低点的过程就是梯度下降。

假定起始点w在抛物线上任意一处位置,直觉告诉我们要往陡峭程度最大的程度走,这个陡峭程度就是梯度,英文是gradient导数,对抛物线而言就是曲线的斜率。

4.大胆往前走吗?-学习率

确定方向以后就要前进了,但是步子该迈出多大?

假如随便选一个数0.1,那么算法迭代会非常缓慢,且会一直在最低点附近震荡,难以收敛。

假如直接用斜率值作为步长,离最低点远时候斜率大,可以快速收敛,离最低点近时,斜率小,收敛越精准,实际效果确实左右反复横跳,依然无法收敛到最小值。肯定是步子迈得太大,我们可以让斜率乘以一个非常小的值,比如0.01,再来看看效果,下降的就会更加顺滑。这个0.01就是学习率。

通过学习调整权重的方式就是新w = 旧w-斜率*学习率

5.不达目的不罢休 - 循环迭代

总结起来,梯度下降包含以下几个步骤:

  1. 定义代价函数
  2. 选择起始点;
  3. 计算梯度;
  4. 沿着梯度方向,按照学习率前进;
  5. 重复34两步操作,直到找到最低点;

整体流程就是梯度下降法的核心

三、实际情况没有这么简单

既然都知道了代价函数就是一个一元二次抛物线,直接按照数据手段直接求解最大值和最小值呢?因为实际上训练样本千奇百怪,代价函数千变万化,不太可能是一条简单的抛物线。

比如我们预测函数稍作改动,y = wx+b,那么代价函数就变成了误差e 关于两个参数w和b的曲边,这依然是比较简答的情况,因为只有一个最小点。

代价函数还可能是一个波浪线,当有多个最小点存在时,机器学习的目标将是找到最低的那个点,也就是所谓的全局最优,而非局部最优。

代价函数也可能是一个起伏不定的曲面,有或者是某种无法用三维图像描述的更复杂函数,比如房价除了和面积相关外,还和城市地段朝向政策等息息相关,这个问题中代价函数变成十维或者百维都是有可能的,将很难可视化的展示出来。但是无论多少维度,都可以通过梯度下降法找到误差最小的点。


 

四、梯度下降法的各种变体

现在回到最开始的故事,三个兄弟谁线可能找到水源,实际上他们分别代表了不同类型的梯度下降算法。

批量梯度下降BGD

大哥小心翼翼,每次都把四周探测的明明白白,是批量梯度下降算法,简称bgd,下降过程如上图所示,左侧维样本点,右侧是等高线表示的代价函数曲面,可以看到其运算是用全部的训练样本参与,梯度下降的非常平稳,走出了强迫症一般的漂亮曲线,这个是梯度下降法最原始的形式。好处是保证算法的精准度,找到全局的最优点。但是整个训练搜索的过程变得很慢,代价很大。

随机梯度下降SGD

老二大大咧咧,探测一下就走的做法就像是随机梯度下降算法,其下降过程非常随性,每次下降一步都只需要一个样本进行计算,其行进路线就像是一个醉汉,深一脚浅一脚的前进,虽然大方向没错,但是下降的非常不平稳,其优势是提升了计算的速度,但是却牺牲了一定的精准度。

小批量梯度下降MBGD

老三结合了老大和老二的优点,试探几次果断就走,这种方法叫做下批量梯度下降算法,每下降一步,都需要选用一小批样本进行计算,其下降过程虽然没有大哥平稳有规律,但是快的多,虽然没有二哥快,但是准确度提高了很多。相对来讲,老三的方法最科学。

五、更优的下山方法

梯度下降法简单有效,适用范围广,但是也并非完美无缺,第一个问题就是其对于学习率的设定非常的敏感,学习率太大反复横跳,学习率太小,浪费计算量。

另一个问题就是除了效率极低的BGD之外,无法保证找到全局最低点,很有可能陷入局部低点,难以自拔。

经常爬山的三兄弟也在不断寻求更加优秀的下山方法。

方法

特点

问题

AdaGrad

动态调节学习率

经常更新的参数学习率设置小一些,不常更新的学习率设置大一些

频繁更新参数的学习率有可能会过小,以至于逐渐消失,为了解决这个问题出现了RMSProp算法

RMSProp

优化动态学习率

AdaDelta

不需要设置学习率

Adam

融合了AdaGrad+RMSProp

Momentum

模拟动量

在下降过程中,充分考虑前一个阶段下降的惯性,有一些像是滚下山的样子

FTRL等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值