面经:阿里巴巴机器学习算法与数据挖掘岗(3):牛顿法与SGD的对比

四、为什么不使用二阶导求解优化算法?它的时间复杂度是多少?

4.1 最优化问题的重要性

对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化学习,最后一般都归结为求解最优化问题(通过目标函数对原模型求解转化为求最优化问题的解)。

4.2 机器学习的解决问题的步骤

总体来看,机器学习的核心目标
(1) 给出一个模型(一般是映射函数);
(2) 然后定义对这个模型好坏的评价函数(目标函数);
(3) 求解目标函数的极大值或者极小值,以确定模型的参数,从而得到我们想要的模型。
在这三个关键步骤中,前两个是机器学习要研究的问题,建立数学模型第三个问题是纯数学问题,即最优化方法,为本文所讲述的核心。

4.3 最优化算法的分类

最优化算法的分类: 公式解、数值优化
前者给出一个最优化问题精确的公式解,也称为解析解,一般是理论结果。后者是在要给出极值点的精确计算公式非常困难的情况下,用数值计算方法近似求解得到最优点。

4.4 优化算法的评价标准

好的优化算法需满足:
(1) 找到全局最小值;
(2) 速度快

4.5 最优化问题的求解方法

对于一个可导函数,寻找其极值的统一做法是寻找导数为0的点,即费马定理。对于多元函数,则是梯度为0. 导数为0的点称为驻点。需要注意的是,导数为0只是函数取得极值的必要条件而不是充分条件,它只是疑似极值点。是不是极值,是极大值还是极小值,还需要看更高阶导数. 对于多元函数,假设x是驻点:
(1) 如果Hessian矩阵正定,函数在该点有极小值
(2) 如果Hessian矩阵负定,函数在该点有极大值
(3) 如果Hessian矩阵不定,则不是极值点
在导数为0的点处,函数可能不取极值,这称为鞍点(驻点包括鞍点和极值点(包括局部极值点和全局极值点)). 除鞍点外,最优化算法可能还会遇到另外一个问题:局部极值问题. 典型的避免局部极值问题的优化问题是凸优化, 它要求优化变量的可行域是凸集,目标函数是凸函数(所以如果能使数据和优化算法都接近凸优化问题, 那么一定可以找到全局最优值. ).而机器学习算法中, 经常是先找到驻点, 再判断其是否是极值点.

4.6 拉格朗日成数法与费马定理的关系

费马定理给出的不带约束条件下的函数极值的必要条件。对于一些实际应用问题,一般还带有等式或者不等式约束条件。对于带等式约束的极值问题,经典的解决方案是拉格朗日乘数法。

4.7 KKT条件与拉格朗日乘数法的关系

KKT条件是拉格朗日乘数法的推广,用于求解既带有等式约束,又带有不等式约束的函数极值。KKT条件只是取得极值的必要条件而不是充分条件(SVM)。KKT约束条件和拉格朗日乘数(乘子法)法相似, 在满足自身约束条件的情况下, 满足目标函数倒数为0, KKT乘子大于等于0, 以及不等式项约束为0.

4.8 什么是数值优化算法?(为什么使用数值优化算法?)

前面讲述的三种方法在理论推导、某些可以得到方程组的求根公式的情况(如线性函数,正态分布的最大似然估计)中可以使用,但对绝大多数函数来说,梯度等于0的方程组是没法直接解出来的,如方程里面含有指数函数、对数函数之类的超越函数。**对于这种无法直接求解的方程组,我们只能采用近似的算法来求解,即数值优化算法。**这些数值优化算法一般都利用了目标函数的导数信息,如一阶导数和二阶导数(泰勒展开式)。如果采用一阶导数,则称为一阶优化算法。如果使用了二阶导数,则称为二阶优化算法。(工程实现常用迭代法, 核心是得到这样的由上一个点确定下一个点的迭代公式 x k + 1 = h ( x k ) x_{k+1}=h(x_k) xk+1=h(xk))

一阶数值优化算法:
4.8.1 梯度下降法
为什么学习率要设置的足够小(比较小)?
根据函数的一阶泰勒展开,在负梯度方向,函数值是下降的。只要学习率设置的足够小,并且没有到达梯度为0的点处,每次迭代时函数值一定会下降。需要设置学习率为一个非常小的正数的原因是要保证迭代之后的 x k + 1 x_{k+1} xk+1位于迭代之前的值 x k x_k xk的邻域内,从而可以忽略泰勒展开中的高次项(高阶无穷小),保证迭代时函数值下降。
4.8.2 动量法
4.8.3 AdaGrad
4.8.4 RMSprop
4.8.5 AdaDelta
4.8.6 Adam
4.8.7 随机梯度下降法

二阶数值优化算法:
4.8.8 牛顿法
(1) 牛顿法起始点不能离局部极小点太远, 牛顿法不能保证每次迭代时函数值下降,也不能保证收敛到极小值点。
(2) 牛顿法比梯度下降法有更快的收敛速度

  从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。
  如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,
  梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,
  牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。
  所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
  (牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
  根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,
  而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,
  所以牛顿法选择的下降路径会更符合真实的最优下降路径。

在这里插入图片描述
(3) 每次迭代时需要计算Hessian矩阵,并求解一个线性方程组,运算量大。
(4) 如果Hessian矩阵不可逆,则这种方法失效。
== 4.8.9 拟牛顿法==
牛顿法在每次迭代时需要计算出Hessian矩阵,并且求解一个以该矩阵为系数矩阵的线性方程组,Hessian矩阵可能不可逆。为此提出了一些改进的方法,典型的代表是拟牛顿法。拟牛顿法的思路是不计算目标函数的Hessian矩阵然后求逆矩阵,而是通过其他手段得到一个近似Hessian矩阵逆的矩阵。具体做法是构造一个近似Hessian矩阵或其逆矩阵的正定对称矩阵,用该矩阵进行牛顿法的迭代。拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。
== 4.8.10 可信域牛顿法==
标准牛顿法可能不会收敛到一个最优解,也不能保证函数值会按照迭代序列递减。解决这个问题可以通过调整牛顿方向的步长来实现,目前常用的方法有两种:直线搜索和可信区域法。可信域牛顿法是截断牛顿法的一个变种,用于求解带界限约束的最优化问题。
4.8.11 共轭梯度法
共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

分治法:
分治法是一种算法设计思想,它将一个大的问题分解成子问题进行求解。根据子问题解构造出整个问题的解。在最优化方法中,具体做法是每次迭代时只调整优化向量x的一部分分量,其他的分量固定住不动。
4.8.12 坐标下降法
4.8.13 SMO算法
应用于支持向量机
SMO算法的核心思想是每次在优化变量中挑出两个分量 α i \alpha _i αi α j \alpha _j αj进行优化,让其他分量固定,这样能保证满足等式约束条件。之所以要选择两个变量进行优化而不是选择一个变量,是因为这里有等式约束,如果只调整一个变量的值,将会破坏等式约束。

假设选取的两个分量为 α i \alpha _i αi α j \alpha _j αj ,其他分量都固定即当成常数。对这两个变量的目标函数是一个二元二次函数。这个问题还带有等式和不等式约束条件。对这个子问题可以直接求得公式解,就是某一区间内的一元二次函数的极值。

时间复杂度

sgd:O(n)
牛顿法:O( n 3 n^3 n3)
拟牛顿法:O( n 2 n^2 n2)

参考文章:
https://blog.csdn.net/SIGAI_CSDN/article/details/81979837
https://blog.csdn.net/owen7500/article/details/51601627#_label1

五、ResNet什么结构决定了它可以训练更深的网络?

六、Boost方法和Stacking方法的优缺点?

七、XGBoost与GBDT的区别和联系?

八、两个有序数组合并, 计算中值

其余的整理见下篇

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值