机器学习-最优化-梯度下降-牛顿法等(梯度消失爆炸))
铺垫
微分意义
1. 函数图像中,某点的切线的斜率
2. 函数的变化率
梯度意义
梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用<>包括起来,说明梯度其实一个向量。
1. 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
2. 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号
梯度下降法(Gradient Descent)
梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢
梯度下降法的缺点:
(1)靠近极小值时收敛速度减慢,;
(2)直线搜索时可能会产生一些问题;
(3)可能会“之字形”地下降。
$
theta^1=theta^0 - alphanabla(j(theta)$
是关于Θ的一个函数,我们当前所处的位置为Θ0点,要从这个点走到J的最小值点
$\nabla$ 是梯度,$\alpha$是学习率或者步长
批量梯度下降法
将$j(\theta)$对$\theta$求偏导,得到每个$\theta$对应的的梯度:每个参数$\theta$的梯度负方向,来更新每个$\theta$
优点:它得到的是一个全局最优解
缺点:数据量大,计算缓慢
随机梯度下降
随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本
优点:只用部分数据继续优化,运算量小
缺点:损失一部分进度,增加迭代次数
两者关系:
随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。
总结:
批量梯度下降--最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小,但是对于大规模样本问题效率低下。
随机梯度下降--最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近,适用于大规模训练样本情况。
牛顿法和拟牛顿法
牛顿法是一种在实数域和复数域上近似求解方程的方法。牛顿法最大的特点就在于它的收敛速度很快。
单变量
例如:方法使用函数$f(x)$的泰勒级数的前面几项来寻找方程$f(x)= 0$的根。
- 选择一个接近函数$ f (x)$零点的 $x_0$,计算相应的$ f (x_0)$ 和切线斜率$f ' (x_0)$(这里$f ' $表示函数$ f $ 的导数)。然后我们计算穿过点$(x_0, f (x_0))$ 并且斜率为$f '(x_0)$的直线和 $x $轴的交点的$x$坐标,也就是求如下方程的解:
$x*f'(x_0)+f(x_0)-x_0*f'(x_0)=0$
求得新的$x$坐标$x_1$,$x_1$比$x_0$更加接近收敛值的解,也就是使得$f(x)=0$,单变量迭代公式:
$x_n+1=x_n-f(x_n)/f'(x_n)$
如果$f '$ 是连续的,牛顿法必定收敛
多变量的话,需要用到雅可比矩阵和海森矩阵。
总结:
牛顿法的优缺点
优点:二阶收敛,收敛速度快;
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
<font color=red>牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快</font>
牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
Hessian 矩阵非正定(非凸)导致无法收敛;
Hessian 矩阵维度过大带来巨大的计算量。
拟牛顿法(Quasi-Newton Methods)
拟牛顿法是求解非线性优化问题最有效的方法之一。
拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用<font color=red>正定矩阵来近似Hessian矩阵的逆</font>,从而简化了运算的复杂度。只需要用到一阶导数,不需要计算Hessian矩阵 以及逆矩阵,因此能够更快收敛
正定矩阵:
如果$X^TAX>0$
判定定理1:对称阵A为正定的充分必要条件是:A的特征值全为正。
判定定理2:对称阵A为正定的充分必要条件是:A的各阶顺序主子式都为正。
判定定理3:任意阵A为正定的充分必要条件是:A合同于单位阵。
拉格朗日乘子法
作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有(n+k)个变量的无约束优化问题。拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。
典型:
求函数$z=f(x,y)$在满足$b(x,y)=0$下的条件极值
转化为函数$F(x,y,\alpha)=f(x,y)+\alpha b(x,y)$的无条件极值问题
列题:
给定椭球:$x^2/a^2+y^2/b^2+z^2/c^2=1$(约束条件),求内接长方体最大体积,求极值问题,求$f(x,y,z)=8xyz$的最大值
用拉格朗日乘子法:转化为
$F(x,y,z,\alpha)=f(x,y,z)+\alpha b(x,y,z)$
$=8xyz+\alpha(x^2/a^2+y^2/b^2+z^2/c^2-1)$
对$F(x,y,z,\alpha)$求偏导得
然后联立三个方程的$bx=ay,az=cx$,带入第四个方程解
解为:
共轭梯度法
共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
梯度不稳定
什么是梯度不稳定问题:深度神经网络中的梯度不稳定性,前面层中的梯度或会消失,或会爆炸。
原因:前面层上的梯度是来自于后面层上梯度的乘乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景,如梯度消失和梯度爆炸。
后果:训练很难进行,不收敛了
- loss过早地不再下降
- 精确度过早地不在提高
梯度消失
梯度消失:
一是在深层网络中;
二是采用了不合适的损失函数,比如sigmoid。sigmoid导数最大为1/4,故只有当abs(w)>4时才可能出现。先前传递误差就很小,前端网络w几乎没什么变化,等于这一层没能学习什么东西,网络层数越多就浪费了
解决方法:
- 初始化一个合适的w
- 选合适的激励函数
relu、leakrelu、elu等激活函数
relu函数:目前使用最多的激活函数
$Relu(x)=max(x,0)$
函数图像:
relu的主要贡献在于:
优点:
- -- 解决了梯度消失、爆炸的问题
- -- 计算方便,计算速度快
- -- 加速了网络的训练
缺点: - 由于负数部分恒为0,会导致一些神经元无法激活(可通过设置小学习率部分解决)
- 输出不是以0为中心的
leakrelu:leakrelu就是为了解决relu的0区间带来的影响
$leakrelu=max(k*x,x)$
函数图像:
爆炸问题
梯度爆炸:
一般出现在深层网络和权值初始化值太大的情况下。当权值过大,前面层比后面层梯度变化更快,会引起梯度爆炸问题。