机器学习常见的优化算法:
1.梯度下降法:
梯度:如果函数是一维的变量,则梯度就是导数的方向;
如果是大于一维的,梯度就是在这个点的法向量,并指向数值更高的等值线,这就是为什么求最小值的时候要用负梯度。
梯度下降法的缺点:
(1)靠近极小值时收敛速度减慢,如下图所示;
(2)直线搜索时可能会产生一些问题;
(3)可能会“之字形”地下降。
三种梯度下降方法:
1.批量梯度下降法(BGD)(适合小量样本)
2.随机梯度下降(SGD)(适合大量样本)
3.共轭梯度法
SGD和BGD的比较:
SGD的问题是噪音比BGD要多,使得SGD不是每次迭代都向着整体最优的方向,SGD以损失一部分精确度和增加一定的迭代次数为代价,
换取了总体的优化效率的提升,增加的迭代次数远小于样本的数量。
BGD:最小化所有训练样本的损失函数,使得最终求解的是全局最优解,即使得求解的风险函数最小,但是对于大规模样本效率较低。
SGD:最小化所择的每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优的方向,但是大方向是全局最优解,
最终的结果往往是在全局最优解的附近,适用于大规模的训练样本情况。
2.牛顿法:
优点:二阶收敛,收敛速度快;
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
3.拟牛顿法:
拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,
它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。
梯度下降法和牛顿法的比较:
1.从本质来说,梯度下降法是一阶收敛,牛顿法是二阶收敛,所以牛顿法的收敛速度更快。
2.梯度下降法每次考虑的是当前位置的负梯度下降,而牛顿法不但考虑当前位置下降的是否够快,
还会考虑下一步下降的是否够大,也就是说牛顿法目标更长远一点。
3.牛顿法是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法使用一个平面去拟合当前的局部曲面,
通常情况二次曲面拟合会比平面更好,所以牛顿法的下降路径会更符合真实的最优下降路径。
4.启发式优化方法:
包括模拟退火方法、遗传算法、蚁群算法、粒子群算法等
5.EM算法:
EM算法的思想和过程:
E-step:E的全称是Exception,即期望的意思;也就是获取期望的过程,即E过程。
M-step:M的全称是Maximization,即最大化的意思,是期望最大化的过程;
得到一轮期望值以后,重新计算模型参数,以最大化期望值。这个过程为最大化过程,即M过程。
EM算法结果:
EM算法不一定能保证获得全局最优解,但如果我们优化的目标函数是一个凸函数,那么一定能保证得到全局最优,否则可能获得局部最优;
因为如果优化的目标函数有多个峰值点,则如果优化到某个不是最高的峰值点处,则会无法再继续下去,这样获得的是局部最优。
常见的EM算法有:隐含马尔科夫模型的训练方法Baum-Welch算法、最大熵模型的训练方法GIS算法等。
小结:
在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。
梯度下降法和最小二乘法相比:
梯度下降法需要选择步长,而最小二乘法不需要;梯度下降法是迭代求解,最小二乘法是计算解析解;
如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快;
但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解了,使用迭代的梯度下降法比较有优势。
梯度下降法和牛顿法/拟牛顿法相比:
两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。
相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。