李宏毅 机器学习笔记-04 Gradient Decent

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_39538889/article/details/97782189
视频地址 课件(PDF)

Gradient Decent 梯度下降

前情回顾:在机器学习 step 3 中,我们要挑出一个可以使得 Loss 最小的一个function,当做best function。我们这里使用梯度下降来解决这个最优化问题。
在这里插入图片描述
在这里插入图片描述

梯度下降的三个小技巧

Tip 1: 调整学习率

在这里插入图片描述
学习率对梯度下降的影响还是比较大的。在做梯度下降时最好画出loss随参数更新次数的曲线(如图),这样可以直观的看到Loss的走势。

如何做到调整学习率呢?最流行也是最简单的做法:每隔几个epoch,用一些因子来减小learning rate。

  • 起始位置距离最低点较远,所以我们用较大 η \eta
  • 经过几个epoch,我们接近最低点,所以减小 η \eta
  • E.g. 1 t \frac { 1 } { t } 衰减: η t = η t + 1 \eta^t = \frac { \eta } {\sqrt { t + 1 } }

并且不同的参数有不同的学习率。接下来让我们学习梯度下降中的一个方法AdaGrad。

AdaGrad

用学习率 η \eta 除以之前所有偏导数的均方根 σ \sigma
在这里插入图片描述
更新方法如下图所示。更新后,每组参数的learning rate都不同。
在这里插入图片描述
使用Adagrad,参数变化或者梯度下降公式可改写为:
在这里插入图片描述
这里我们有一处矛盾。本来梯度越大,步子越大。但是添加因子之后,Adagrad分母部分梯度越大,步子越小。
在这里插入图片描述
直观解释:Adagrad关注的是梯度有多大的“反差”,用平方和看过去的梯度有多大,做除法,观察反差多大。
在这里插入图片描述
在一个参数时,微分大小可以代表距离最低点的远近。
在这里插入图片描述
但是跨参数时,微分越大并不意味着距离最低点越远。这里c对 w 2 w_2 微分大但是距离近,a对 w 1 w_1 微分小但是距离远。
在这里插入图片描述
Best step:与函数的一阶偏导成正比,与二阶偏导成反比。

从下图我们可以看出, w 1 w_1 方向上二阶偏导更小, w 2 w_2 方向上二阶偏导更大。用二阶偏导调整后才能真正表示该点距离最低点的距离。所以正确的比较方法是用 一阶偏导/二阶偏导 来比较。
在这里插入图片描述
为什么用一阶偏导的均方根估算二阶偏导,而不是直接求二阶偏导?

如果参数较多,算一阶偏导就要很长时间,算二阶偏导得不偿失。
在这里插入图片描述

Tip 2: Stochastic Gradient Descent

加快训练的速度

传统梯度下降,Loss是所有训练样本误差的总和,更新一次参数。但SGD每次只拿一个样本,Loss只考虑某一个样本,只根据那一个样本更新参数。
在这里插入图片描述
实际操作一下:传统GD走一次的时候,SGD已经走了二十次。
在这里插入图片描述

Tip 3: Feature Scaling

在这里插入图片描述
如果不同参数的取值范围不同,那么loss函数等高线方向(负梯度方向,参数更新方向)不是直指向loss最低点,需要不同的learning rate来调整。Feature Scaling让不同参数的取值范围在相同的区间,这样Loss函数等高线是一系列共圆心的正圆,不管在哪一点,更新参数都向圆心走,更新比较有效率。
在这里插入图片描述
Feature Scaling常见做法是,把input feature的每个维度都标准化( x r x^r i i 个component减去该维度特征的均值 m i m_i ,除以该维度的标准差 σ i \sigma_i )。
在这里插入图片描述

Warning:梯度下降算法的原理

下图中我们不可能马上说住Loss function的最低点在哪里。但在起始点 θ 0 \theta^0 附近画一个圈圈可以找到它的最低点。再画圈再找最小值。
在这里插入图片描述
如何快速找到圈圈里的最低点?

泰勒级数

百度百科:泰勒级数

如果 f ( x ) f(x) 在点 x = x 0 x=x_0 具有任意阶导数,则幂级数如下。当 x x 接近 x 0 x_0 的时候 x x 0 x-x_0 远大于 ( x x 0 ) 2 (x-x_0)^2 ,就可以把高次项省略。
在这里插入图片描述
多变量泰勒级数:
在这里插入图片描述
在很小很小的范围内,可以用泰勒级数简化Loss function。

将常量用字母代替,在圆圈范围内 L ( θ ) s + u ( θ 1 a ) + v ( θ 2 b ) L(\theta) \approx s + u ( \theta_1- a ) + v ( \theta_2- b )
在这里插入图片描述
在这里插入图片描述
s为常量与 θ \theta 无关,所以可以先忽略。损失函数的计算就变为了两个向量之间的乘法,且其中向量(u,v)的方向和大小是已知的,当(theta1,theta2)与(u,v)反向的时候,两个向量相乘的结果最小。

又因为是在一个以(theta1,theta2)为圆心的小范围内,所以可以在(theta1,theta2)之前乘上一个值,让这个向量的长度正好等于这个小圆的半径,这样我们就求出了损失函数的最小值。在这里插入图片描述
u v u和v 带回去,就得到这个式子。就是Gradient Decent,前提是红色圈圈够小,泰勒级数才够精确。Learning rate要够小才行。
在这里插入图片描述
如果使用泰勒级数的二次展开式的话,就会变成使用牛顿法来求解最优问题了。

但在深度学习中,那并不实用,还是用选择用一次展示式——梯度下降。
在这里插入图片描述
在梯度下降中,通常认为是当导数值为0时,就认为求得了最优解了。但是,出现导数为0的点并不仅仅是最优点,还有可能是之前谈及的局部最优点,鞍点(不是极大值也不是极小值的临界点),甚至在“高原”处,导数值小到可以约等于0。这就是梯度下降的限制。

参考目录:

猜你喜欢

转载自blog.csdn.net/weixin_39538889/article/details/97782189