GD 和Newton法其实都属于导数下降方法。区别是GD以一阶导数方向作为下降方向,牛顿法作优化问题时可以看做二阶方法,牛顿法比GD有更快的下降速度,证明可以参考斯坦福大学Boyd大神的凸优化。导数方法最大优点是简洁高效,缺点是遇到鞍点就玩完了。这就是为什么目前训练深度学习网络结构需要drop out避免过拟合。非凸问题比较难,目前可以参考进化算法比如GA PSO DE。或者利用Wotao Yin大神的Nonconvex ADMM,原理是针对不同的变量构造不同导数方向根据Augment Lagrange 函数实现。
最后说点理论,因为根据范数等价原理,GD在其二阶导数有界条件下,调节步长可以等效为Banach空间的压缩算子,又因为有限范数线性组合是凸问题,所以利用压缩映像原理,一定收敛于全局最优即不动点。当然,牛顿法有类似结论。对于深度学习中的drop out,是为了防止其梯度陷入局部最优值,如果在有限维的Banach空间讨论,可以看做有界连续算子,利用闭图像原理证明。其他情形,可以经过简化抽象为紧算子,利用列紧的ε网证明即可。还有,GD 和Newton在有限迭代情况下,其收敛点集合可以看做Fσ型集合,一定条件下也可以看做σ代数。顺便说下,GD 和Newton方法都可以看做一类算子的强收敛,弱于算子的一致收敛。
最后补充一点,最近刚刚实现了并行的Nonconvex ADMM用的 Proximal Proximal GD求稀疏解,CUDA 8.0实现的并行化,nvcc compiler 和 CMake file头都大了…
联系客服