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

视频地址 课件(PDF)

Gradient Decent 梯度下降

前情回顾:在机器学习 step 3 中,我们要挑出一个可以使得 Loss 最小的一个function,当做best function。我们这里使用梯度下降来解决这个最优化问题。
李宏毅 机器学习笔记-04 Gradient Decent_第1张图片
李宏毅 机器学习笔记-04 Gradient Decent_第2张图片

梯度下降的三个小技巧

Tip 1: 调整学习率

李宏毅 机器学习笔记-04 Gradient Decent_第3张图片
学习率对梯度下降的影响还是比较大的。在做梯度下降时最好画出loss随参数更新次数的曲线(如图),这样可以直观的看到Loss的走势。

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

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

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

AdaGrad

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

从下图我们可以看出, w 1 w_1 w1方向上二阶偏导更小, w 2 w_2 w2方向上二阶偏导更大。用二阶偏导调整后才能真正表示该点距离最低点的距离。所以正确的比较方法是用 一阶偏导/二阶偏导 来比较。
李宏毅 机器学习笔记-04 Gradient Decent_第11张图片
为什么用一阶偏导的均方根估算二阶偏导,而不是直接求二阶偏导?

如果参数较多,算一阶偏导就要很长时间,算二阶偏导得不偿失。
李宏毅 机器学习笔记-04 Gradient Decent_第12张图片

Tip 2: Stochastic Gradient Descent

加快训练的速度

传统梯度下降,Loss是所有训练样本误差的总和,更新一次参数。但SGD每次只拿一个样本,Loss只考虑某一个样本,只根据那一个样本更新参数。
李宏毅 机器学习笔记-04 Gradient Decent_第13张图片
实际操作一下:传统GD走一次的时候,SGD已经走了二十次。
李宏毅 机器学习笔记-04 Gradient Decent_第14张图片

Tip 3: Feature Scaling

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

Warning:梯度下降算法的原理

下图中我们不可能马上说住Loss function的最低点在哪里。但在起始点 θ 0 \theta^0 θ0 附近画一个圈圈可以找到它的最低点。再画圈再找最小值。
李宏毅 机器学习笔记-04 Gradient Decent_第18张图片
如何快速找到圈圈里的最低点?

泰勒级数

百度百科:泰勒级数

如果 f ( x ) f(x) f(x)在点 x = x 0 x=x_0 x=x0具有任意阶导数,则幂级数如下。当 x x x接近 x 0 x_0 x0的时候 x − x 0 x-x_0 xx0远大于 ( x − x 0 ) 2 (x-x_0)^2 (xx0)2,就可以把高次项省略。
李宏毅 机器学习笔记-04 Gradient Decent_第19张图片
多变量泰勒级数:
李宏毅 机器学习笔记-04 Gradient Decent_第20张图片
在很小很小的范围内,可以用泰勒级数简化Loss function。

将常量用字母代替,在圆圈范围内 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)
李宏毅 机器学习笔记-04 Gradient Decent_第21张图片
李宏毅 机器学习笔记-04 Gradient Decent_第22张图片
s为常量与 θ \theta θ无关,所以可以先忽略。损失函数的计算就变为了两个向量之间的乘法,且其中向量(u,v)的方向和大小是已知的,当(theta1,theta2)与(u,v)反向的时候,两个向量相乘的结果最小。

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

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

参考目录:

  • https://www.cnblogs.com/XDU-Lakers/p/10522109.html
  • https://blog.csdn.net/soulmeetliang/article/details/72830179
  • https://blog.csdn.net/sinat_25346307/article/details/78745973

你可能感兴趣的:(李宏毅,Machine,Learning)