1.二阶收敛为什么比一阶收敛更快?
一阶收敛是以1/n的速度收敛,二阶收敛是以1/(n^2)的速度收敛,所以速度比较快。
附:最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
直观上的理解:梯度下降法,确定了一个方向(负梯度方向),迭代点沿着这个方向走 能够使得目标函数的值下降,具体走多大步还需要通过设置迭代步长。而牛顿法则是在某一个初始点处用二阶泰勒展开去近似原目标函数,通过对这个近似目标函数的导数为零 建立迭代关系式,所以牛顿法不仅考虑了目标函数的梯度而且还考虑了目标函数梯度的变化。梯度下降,只知道梯度的信息,相当于只知道了当前点的速度,如果速度(梯度)不为零,那么目标函数还没有到最优值,沿着负梯度方向走(对于一维函数来说梯度方向要不向左,要不向右),直到走到梯度为零的点,此时就是使得目标函数最优的点。牛顿法不仅知道当前点的速度还知道了当前点的加速度信息(速度的变化),所以它知道哪个点的速度为零,从而直接求出速度为零的这个点。 所以梯度下降法每一次迭代都在不断的试探,直到试探到梯度为零的地方, 而牛顿法则是每一步迭代都找到了梯度为零的点,因此牛顿法更快。
2.为什么BFGS效果要好于DFP?
BFGS优于DFP的原因在于,BFGS有自校正的性质(self-correcting property)。通俗来说,如果某一步BFGS对Hessian阵的估计偏了,导致优化变慢,那么BFGS会在较少的数轮迭代内(取决于线搜索的质量),校正估计的Hessian阵。
3.L1范数的最优化过程是怎么样的?梯度下降遇到不可导点怎么办?
最小角方法方法可以解决这个问题,但是方法不直观并且难以操作。
ADMM(Alternating Direction Method of Multipliers)算法可以较好的解决这个问题。首先ADMM基于对偶上升法,对于凸函数的优化问题,对偶上升法核心思想就是引入一个对偶变量,然后利用交替优化的思路,使得两者同时达到optimal。一个凸函数的对偶函数其实就是原凸函数的一个下界,因此可以证明一个较好的性质:在强对偶性假设下,即最小化原凸函数(primal)等价于最大化对偶函数(dual),两者会同时达到optimal。这种转化可以将原来很多的参数约束条件变得少了很多,以利于做优化他的思想就是想把primal变量、目标函数拆分,但是不再像对偶上升法那样,将拆分开的xi都看做是x的一部分,后面融合的时候还需要融合在一起,而是最先开始就将拆开的变量分别看做是不同的变量x和z,同时约束条件也如此处理,这样的好处就是后面不需要一起融合x和z,保证了前面优化过程的可分解性。
4.为什么共轭梯度法不适用于深度学习中的网络训练?
共轭梯度法在普通优化问题上的优点来自于两个方面:方向间的共轭性和线搜索。共轭梯度法使用以前的搜索信息来修正当前的梯度方向,使得搜索方向之间相互共轭。但是在深度学习这种情况下,由于梯度本身是小批量样本计算来的,具有随机性,这样方向间的共轭性就不能保证了。这种情况下,使用线搜索自然也就没有意义了。另一方面,神经网络中的动量项方法其实可以看成是一种粗糙的共轭梯度法的变体。在共轭梯度的公式中使用常数的值,这就是momentum方法,momentum 实际是共轭梯度法的近似 。
Steepest descent with momentum for quadratic functions is a version of the conjugate gradient method
Momentum的作用也和共轭梯度法的作用相似,即通过使用历史搜索方法对当前梯度方向的修正来抵消在ill-conditioned 问题上的来回震荡。比较这两种方法的效果,都是增大沿着长轴的方向的分量。从这个意义上来说,虽然放弃了共轭梯度法有限步收敛等性质,但其本质性质得以保留并广泛应用在了深度学习的训练中。
5.梯度消失、梯度爆炸
梯度消失:这本质上是由于激活函数的选择导致的, 最简单的sigmoid函数为例,在函数的两端梯度求导结果非常小(饱和区),导致后向传播过程中由于多次用到激活函数的导数值使得整体的乘积梯度结果变得越来越小,也就出现了梯度消失的现象。
梯度爆炸:同理,出现在激活函数处在激活区,而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。
解决过拟合方法
早停止:如在训练中多次迭代后发现模型性能没有显著提高就停止训练
数据集扩增:原有数据增加、原有数据加随机噪声、重采样
正则化
交叉验证
特征选择/特征降维
#