(一)梯度下降概念预览
损失函数Loss function也可以写成Cost function
梯度下降就是找寻下降速度最快的方向
梯度是上升最快的方向,它的反方向(加上负号)就是下降最快的方向
(二)Tips 1:Tuning your learning rates
需要选择合适的学习率,若学习率(步长)太大,则损失函数先快速下降,再反复横跳(绿线所示)
自适应学习率:一开始学习率较大,后面逐渐调小
最好给不同的参数分配不同的学习率
Adagrad自适应梯度算法
普通梯度下降vs自适应梯度算法(学习率分别为
η
\eta
η^t 和[
η
\eta
η/
σ
\sigma
σ]^t )
σ
\sigma
σ^t指参数w以前的导数的方均根
依次推出
σ
\sigma
σ^t的具体值
Adagrad算法就是为了让梯度大小能够动态调整
普通梯度下降vs自适应梯度算法中出现冲突
Adagrad算法中分子部分表示 梯度越大步长越大;而分母部分则是 梯度越大步长越小
梯度下降不仅是要找到方向(分子上求一阶导数),还要确定下降幅度(分母)
直观的原因是:为了造成反差的效果,防止梯度爆炸或梯度消失
在只考虑一个参数时,导数越大,离最低点越远,应该踏出的步长就越大。所以最合适的步长应该与一阶微分的绝对值成正比
跨参数比较(当出现两个参数时)
在c点处的一阶导数大于在a点处的一阶导数,理应在c点处的步长更大,但是在这里明显是a点处的步长更大
牛顿法(二阶最优化算法)
二次微分考虑的是凹凸性
二阶导数比较大,说明一阶导数变化很快,很可能走一小步就到谷底了。所以二阶导数越大,步长越小
一阶导数小的往往二阶导数也小
Adagrad是涉及二阶微分的梯度下降优化算法
为了避免二次微分,用近似值(过去所有一阶微分)取代,大大减少运算量
(二)Tips 2:Stochastic Gradient Descent(make the training faster)
L^n中的
Σ
\Sigma
Σ是对一个样本所有的特征
选一个x就是抓一只宝可梦,里面的是多个参数
SGD(随机)更快,每次只算一个,而梯度下降每次都要算所有函数的loss
(三)Tips 3:Feature Scaling
特征缩放:即特征归一化,消除量纲影响(不同特征分布统一到一个范围)
adagrad是批量梯度下降,这个是随机梯度下降(回归问题不需要归一化,一般分类才会归一化)
关键是rescale之后可以使用相同的lr
正态分布标准化:减均值,再除以标准差
(四)Tips 4:Theory
梯度决定方向,步长决定目的地
每更新一次参数,Loss Function会得到改善
但下面的陈述不一定正确(可能会有步长过大导致的震荡或者梯度爆炸)
(五)Tips 5:Warning of math
形式推导:在解一个optimization的问题时,给定一个起始点,以它为圆心作圆,能找到局部最低点,然后以此类推
泰勒级数(泰勒展开式)
infinitely differentiable:无限可微
当x趋向x0时,可以把高阶无穷小都去掉
approximation:近似值
次数越高和原函数越逼近
多元函数的泰勒展开式
回到形式推导那里:用泰勒公式来解释梯度下降
(a,b)是指当前位置点坐标
向量内积:inner product得到的Loss Function最小
此处是证明了为什么Gradient Descent能够work
(六)Tips 6:Limitation
saddle point:鞍点
plateau:高原