台大李宏毅--梯度下降Gradient Descent

版权声明:博客转载,请标注 来自 丁磊_ml博客 网址为 blog.csdn.net/MosBest https://blog.csdn.net/MosBest/article/details/79685771

一:简单梯度下降

1. 概述

预测模型为 y = b + w x c p ,真实标签为 y ^ n ,则损失函数loss function为
这里写图片描述

我们目的是最小化 损失函数L(w,b),即找出最佳的 w , b

这里写图片描述

处理方法 : 梯度下降法

2. 仅含一个参数的梯度下降

对某一个参数的偏导数,就是对损失函数在这个参数的方向的斜率

这里写图片描述

即,就是
这里写图片描述

这里写图片描述

然后,不对向极点逼近

这里写图片描述

3. 含多个参数的梯度下降

这里写图片描述

我们可以多个参数 列在一起,变成一个列向量。
这里写图片描述

同时,通过链式法则,直接可以求出每一个点的偏导数的值
这里写图片描述

梯度下降可能会出现一些问题。
1. 我们下降到一个局部最优值,但是不是全局最优值。
2. 下降到下图中第二种情况。这个地方的导数也是为0。但是也不在最优点,而且可能离最优点很远
3. 下降到下图中第一种情况。这个地方的导数约为0。而且离最优点更远

以上三种情况,都会对结果产生影响。
但是,在线性回归中,不用考虑这种问题。因为,线性回归的loss fuanction 损失函数是 ( y ^ y ) 2 ,即是平方。所以是个凸函数,呈现一个碗状。有且仅有一个最优值。上面三种情况不会出现。

这里写图片描述

二: Tuning your learning rates 与 Adagrad算法

1. 回顾

问题 最小化L , 求对应的参数
这里写图片描述

方法:梯度下降,如下
这里写图片描述

2. 使用可变 learning rates

这里写图片描述
在多个变量情况下,我们画不出左图的情况,但是可以画出右图的情况。所以,编代码时,要画出右图,时时关注曲线变化,才能够找到自己的learning rates是否设置的合理
如上图所示,左右两图对照着看
1. 红色表示learning rates 正好
2. 蓝色表示learning rates 过小,可以到达谷底,但是速度太慢,如右图
3. 绿色表示learning rates过大,先下降很快,但是最后卡在了一个地方,就是下降不下来
4. 黄色表示learning rates太大,直接飞出去了,损失函数不仅没降下来,还增大了

发现,learning rates 的不同,直接影响了最终结果的好坏。因此有了,时时改变learning rates的想法。
基本想法:
learning rates 不能一成不变。根据参数的不同,给出不同的learning rates
1. 一开始, 离目的地远,所以learning rates可以大一些。即,一次跨大步子大。
2. 几个回合后,离得目的地近,调小learning rates,避免出现上图中绿色线一样,最终卡得不能走下去。
比如这里写图片描述

3. Adagrad 算法

普通梯度下降
这里写图片描述

Adagrad 算法
这里写图片描述

其中:
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

所以,最终Adagad算法核心为:
这里写图片描述

三: Stochastic Gradient Descent 随机梯度下降

Make the training faster
训练速度明显优于上面的梯度下降

原理: 一次仅仅处理一个数据,进行更新参数。等每个数据都处理了一遍,参数也就更新完了。
实验表明,
1. 假如有20个数据,每次仅仅处理一次数据,处理20次 ——————随机梯度下降
2. 直接20个数据一次处理完,仅处理一次——————————普通梯度下降
以上两种情况,第一次的速度明显优于第二次。

这里写图片描述
这里写图片描述

四: Feature Scaling 特征标准化

比如:

这里写图片描述

为什么要将特征标准化???

这里写图片描述
如上图所示,左图特征不在一个量级,右图特征在一个量级。那么左图等高线图像为不规则椭圆,右图等高线图像接近与圆。
对二者都进行梯度下降。如图所示,你会发现,
左图梯度下降很曲折,走了很多弯路,且很容易到达局部最优,且当learning rates取得不合适时,根本走不到谷底。
但是右图就很容易达到最优值,达到谷底。

一种标准化的方法:

这里写图片描述
对于每一个特征:
这里写图片描述
此时每一个维度 平均值都为0 。方差都为1。

四: 梯度下降数学解释(梯度下降与泰勒级数)

一元泰勒级数

这里写图片描述

多元泰勒级数(二元)

这里写图片描述
仅仅保留一阶导数叫做 梯度下降。
用二阶导数 就是 Hessian矩阵。

多元泰勒级数与梯度下降

这里写图片描述

那么梯度下降,就是梯度方向一小步一小步向下走,走到最低端。如下图。
这里写图片描述

在二元泰勒级数上,我们去掉高阶导数,仅仅留一阶导数
这里写图片描述
要找到最小的 ( θ 1 , θ 2 ) 最小化L
同时点 ( θ 1 , θ 2 ) 要在红色小圆内,所以
这里写图片描述


Δ θ 1 = θ 1 a
Δ θ 2 = θ 2 b

L ( θ ) s + u Δ θ 1 + v Δ θ 2 = s + ( u , v ) ( Δ θ 1 , Δ θ 2 )
其中s是常数,不变,那么就是怎样最小化 ( Δ θ 1 , Δ θ 2 ) 与(u,v)两个向量的点积。
两个向量的点积什么时候最小?
u , v ) ( Δ θ 1 , Δ θ 2 ) = | u , v ) | ( Δ θ 1 , Δ θ 2 ) c o s ( θ )
则,两个向量的模值最大,且方向相反(即180度)。此时两个向量的点积最小。
( Δ θ 1 , Δ θ 2 ) c o s ( θ ) 方向必须在圆内,所以点最佳在圆上。
所以
这里写图片描述


这里写图片描述


这里写图片描述
综上:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/MosBest/article/details/79685771