机器学习-最优化-梯度下降-牛顿法等(梯度消失爆炸))
微分意义
1. 函数图像中,某点的切线的斜率
2. 函数的变化率
梯度意义
梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用<>包括起来,说明梯度其实一个向量。
1. 在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率
2. 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号
梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢
梯度下降法的缺点:
(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的根。
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矩阵的逆矩阵,计算比较复杂。
牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。 Hessian 矩阵非正定(非凸)导致无法收敛;
Hessian 矩阵维度过大带来巨大的计算量。
拟牛顿法是求解非线性优化问题最有效的方法之一。
拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用<font color=red>正定矩阵来近似Hessian矩阵的逆</font>,从而简化了运算的复杂度。只需要用到一阶导数,不需要计算Hessian矩阵 以及逆矩阵,因此能够更快收敛
正定矩阵:如果X^TAX>0
作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有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矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。
什么是梯度不稳定问题:深度神经网络中的梯度不稳定性,前面层中的梯度或会消失,或会爆炸。
原因:前面层上的梯度是来自于后面层上梯度的乘乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景,如梯度消失和梯度爆炸。
后果:训练很难进行,不收敛了
梯度消失: 一是在深层网络中; 二是采用了不合适的损失函数,比如sigmoid。sigmoid导数最大为1/4,故只有当abs(w)>4时才可能出现。先前传递误差就很小,前端网络w几乎没什么变化,等于这一层没能学习什么东西,网络层数越多就浪费了
解决方法:
relu、leakrelu、elu等激活函数
relu函数:目前使用最多的激活函数Relu(x)=max(x,0)函数图像:
relu的主要贡献在于:
优点:
leakrelu:leakrelu就是为了解决relu的0区间带来的影响
leakrelu=max(k*x,x)函数图像:
梯度爆炸: 一般出现在深层网络和权值初始化值太大的情况下。当权值过大,前面层比后面层梯度变化更快,会引起梯度爆炸问题。