本节可能主要是对梯度下降法理论的补充和扩展
1.Review:
梯度下降法运用到Loss函数中的基本目标
梯度的概念
在引入两个参数时,通过计算函数在初始点的偏导为向量分量的梯度,在引入步长系数可得出参数的改进方向和大小,并一步一步迭代。
在下图中,我们可以看到函数通过梯度进行一步一步迭代的过程,其中蓝色箭头代表的时目标点需要移动的方向,而运动相反方向(红色箭头方向)即为梯度方向(变化最快方向,也是运动相反方向)
2.Learning Rate(步长、学习率)
梯度下降过程中,除了考虑函数在该点的梯度来确定运动方向和大小,还有一个很重要的因素是要考虑梯度的系数“步长”。
步长在梯度下降中的作用主要是来调控迭代的运动距离,在下图中,理想化的迭代过程时红色箭头所在的过程,函数从出发点经过三次迭代可以很好的到达局部最优值的附近。
而如果步长选取的不合适则会出现一下现象:
(1)若步长选取值过小,再回出现蓝色箭头的情况,函数每次迭代距离过小,大大的提高了梯度下降法迭代的效率,并非最优选项。但是,由于步长过小,函数迭代过程中会进最大可能反映出下降过程中的所有变化,在到达低点时相比较其他几条不同步长线路会更好的靠近局部最优点。所以理论上如果不考虑效率和运算方面的问题,步长选取为无穷小值时迭代结果最优;
(2)若步长值选取过大,如绿色和黄色线路,比较典型的就是绿色线路,当最小值谷口范围过小时,由于迭代距离过长,函数会忽略步长范围内的经过值,可能会直接略过局部最低点,由于之后Loss函数值没有更小值,导致函数在此平行运动直到model默认已经是最小值后停止,而黄线路径则是步长更长,导致直接忽略过了局部最优值的范围。
而面对以上情况,如何选定步长,主要思想是connt be one-fits-all(不能一刀切),在迭代初期距离目标低值还很远时选用
”大步长”,而到了低值附近时选用”小步长“,即每个不同的参数设定不同的步长值。
方法:AdaGrad (Adaptive Gradient) 自适应学习率
AdaGrad是一种优化方法,它可以为不同的变量提供不同的学习率。它增加了罕见但信息丰富的特征的影响。
步长系数设为下图,方便下一步的运算,加1目的是防止分母为0;
再引入一个sigmoid函数,该函数为RMS(Root Mean Square,平方平均数),将过去迭代过的所有参数的微分值(g)的平方和均分后开根号;
下图为一般迭代过程和Adagrad迭代过程,将上面定义的步长和sigmoid函数相除,来构造一个新的梯度迭代过程。
下图为Ada迭代过程,
下图为上式化简后得出的迭代过程,由于分母加入了一个平方和开根号的式子,将过去不同参数的微分进行汇总开根号,使每个参数的学习率除以先前导数的RMS。
则若当前的微分值gi存在变化之剧烈波动情况,该分母起到一个反差的作用,调节微分值的变化,使得当前迭代距离适合当前过程,起到自适应的作用,有效的防止了梯度爆炸和梯度消失的现象。
AdaGrad的优点就是可以使得梯度下降过程的自适应,做到距离目标低值距离先快后慢,不过计算量会很大。
原理:
假设以一个一元二次函数为例,初始点为x0,目标是使x移动到函数的最低点。已知一元二次函数一般式的最低点x坐标为-2a/b,使x0移动到该点的距离为绝对值内x0-(-2a/b),换个形式为绝对值(2ax+b)/2a,可以看出,分子为一元二次函数一般式的一阶微分,分母为固定值。可得出,x0与最低点x左边的关系与该函数的微分值成正比,导数(微分)越大,x0距离最低点越远,反之同理。
但是,只看一次函数确定移动关系只在单个参数情况下可行。当涉及到多个参数关系比较时,如下图,w1和w2分别为两个Loss函数,通过穿过等高线的密集程度可知,两函数一定有不同的曲率,设两函数各存在两点,w1中显然a点处微分大于b点出微分,a相较于b距离最低点更远,w2同理。若此时比较w1的a点和w2的c点谁距离最地点距离更小,则不可行。
而回到最开始那个存在微分与距离程正比的式子中,分母2a恰巧是一元二次函数一般式的二阶微分。
一个点与最低点的距离关系即与一阶微分程正比关系也与二阶导数程反比关系,引用这个关系来看不同参数函数之间点的比较,二阶导数大的距离各自最低点更近些。
以上原理如果引用到AdaGrad方法中,可以看出分子的gt为函数的微分(一阶导),化简后的分母反映了2阶微分的大小,此处并非表示用一阶微分平方和开根号来代替函数的二阶微分,而仅仅是能够反映出二阶微分的数值变化,,起到了二阶导的作用, 在不增加过分求导运算情况下模拟二次微分,减少算量。
3.SGD(Stochatic Gradient Descent)随机梯度下降
这是常规梯度下降
这是SGD梯度下降
在原梯度下降中,损失值的计算需要考虑所有变量x的loss值,而在SGD中,只需要计算某一个例子的损失函数L,就可以赶紧update 梯度,大大提高了运算效率。
4.Feature Scaling 特征缩放(特征归一化)
属于数据的预处理方法,确保神经网络等model第一层输入均值化。
当有多个因变量xi时,可能会出现input量级差距过大的现象,导致loss函数值因为坐标轴刻度量级差距过大而使得图像变形,增加了函数梯度下降的难度,而外增加AdaGrad过程。需要调整因变量对应的权重wi,使得输入特征xi变得规则,是一种数据预处理过程。
下图中,为两个参数的线性函数,左图x1和x2相差两个数量级,使得loss函数等高图被拉的椭圆化,在进行梯度下降时候,会因为不同的等高线方向而考验函数适应能力。右图中,调整了x的w权重,使得两因变量同量级,图形规则梯度下降方向明显,更有相率。
处理:
假设一组特征值(xi-xR)向量,为了防止出现上图中的图像拉扯现象,则在引用某一行向量元素是,先求出所有特征向量同行元素的均值和方差,然后用求出的方差和期望进行标准化,从而进行特征缩放。
5.Gradient Descent Theory 梯度下降原理
梯度决定方向,步长决定目的地。
taylor series:泰勒级数
泰勒公式h(x)在x0点的去心邻域内无限可微,当x·很接近x0时,(x-x0)^2随着次方的增加而无线接近与0,进取泰勒公式的前两项即可估算出x0的函数值。
而在多参数泰勒公式中同理:
泰勒公式在梯度下降中的应用:
在两参损失函数的等高线图中,存在一个点(a,b),以该点为圆心构建一个足够小的圆形去心邻域,则在此邻域中,一定存在一个损失函数值小于初始点(a,b)损失函数值的点,而初始点到这个低值点的路径就是梯度下降迭代的路径,并依次向下迭代知道loss值到达最低。
而假设圆圈足够小,损失函数值可用泰勒公式(二阶)化简,引入s、u、v量来简写方程。
化简后的损失函数方程中,s值是固定的,可以看出剩下的部分就是两个向量 的内积,那怎样让它最小,就是和向量 (u,v)方向相反的向量,(u,v)方向是损失函数偏导的方向,而梯度下降则是偏导方向的正相反方向。
引入低值点一定在以初始点(a,b)为圆心半径为d的条件,将条件的两差值表示为变化量,求最小的损失函数值就是解化简后式子。
将u、v量带入化简式中,所得公式即为梯度下降公式。
此时存在一个条件:①损失函数式子L成立;← ②去心邻域要足够小(无穷小);③ 学习率(步长)足够小(原则上式无穷小)。要满足这几个递进关系的条件,实际中,当更新参数的时候,如果学习率没有设好,有可能损失函数式是不成立的,所以导致做梯度下降的时候,损失函数没有越来越小。
损失函数式L只考虑了泰勒公式的一次式,若要用二次式来求,而需要求出函数的二阶微分,会增加很多无效率运算,侧面也证明了。梯度下降法(一次式)相比于其他法(eg 牛顿法(二次泰勒))更主流。