凸优化 3:最优化方法
- 最优化方法
- 适用场景对比
- 费马引理
- 一阶优化算法
- 梯度下降
- 最速下降
- 二阶优化算法
- 牛顿法
- Hessian矩阵
- Hessian矩阵的逆
- Hessian矩阵和梯度的区别
- 牛顿法和梯度下降法的区别
- 拟牛顿法
- DFP、BFGS/L-BFGS
- 数值优化算法
- 坐标下降法
- SMO算法
- 基于导数的函数优化
- 解析优化算法/精确解
- 无约束问题-求解驻点方程
- 有等式约束问题-拉格朗日乘数法
- 有等式和不等式约束问题-KKT条件
- 基于随机数函数优化
- 启发式搜索
- 遗传算法
- 模拟退火
- 蚁群优化
- 多目标函数优化
- 函数标量化
- ϵ \epsilon ϵ 约束法
- 泛函优化
- 欧拉-拉格朗日方程
- 拉格朗日乘法
为了找到函数的局部最小值,一阶导数(或梯度)等于零是极小值存在的必要条件,但不足以保证这是极小值点。
比如,线性回归模型:
y = mx + b
,其中 m
是斜率,b
是截距。m
和 b
值,使得这条直线与所有数据点的总误差最小。费马引理应用:
m
和 b
的导数,并将这些导数设置为零。拆解步骤:
m
和 b
的导数。m
和 b
的值。在实际的机器学习实践中,我们通常使用算法(如梯度下降法)来自动进行这些计算和优化。
梯度下降法会迭代地调整 m
和 b
的值,以逐步逼近导数为零的点。
局限性:
费马引理在机器学习中的应用是通过找到损失函数的潜在极值点来优化模型参数,而这通常是通过计算导数并将其设置为零来实现的。
一阶算法(如梯度下降和最速下降)主要依赖一阶导数,而二阶算法(如牛顿法和拟牛顿法)则进一步利用了二阶导数信息。
二阶算法通常更精确且收敛速度更快,但计算成本也更高,特别是在高维问题中。
假设你正在使用线性回归模型来预测房屋价格。
你的模型试图通过公式 y = mx + b
(其中 y
是房屋价格,x
是房屋大小,m
和 b
是模型参数)来拟合数据。
m
和 b
值,使得预测价格与实际价格之间的差异(损失)最小。m
和 b
的梯度(即导数)来实现。梯度告诉你损失函数上升最快的方向。因此,你需要往梯度的相反方向调整 m
和 b
(因为你想最小化损失)。m
和 b
,你的模型逐渐逼近损失函数的最小值。这个过程很直观,但可能需要很多迭代才能找到最小值,尤其是在复杂的数据集上。
根据一系列特征来预测电子邮件是否为垃圾邮件。
最速下降法比普通梯度下降更快地接近最小值点,但需要谨慎选择步长,否则可能会越过最小值点或导致不稳定的收敛。
梯度下降注重于确定下降的方向,而最速下降则在此基础上进一步优化步长,以加快收敛速度。
二阶算法在处理复杂问题时非常有效,但在大规模问题上可能不太实用。
牛顿法是一种迭代算法,用于近似求解方程的根。
其基本思想是从一个初始估计值出发,通过泰勒近似和迭代不断逼近方程的实际解。
在迭代过程中,新的近似值 是通过当前近似值 减去 函数值与其导数 的比值得到的:
每次迭代都会使新的近似值更接近实际解。
以方程x^3 - 2x - 5 = 0
为例,我们使用牛顿法来找到它的一个根。假设初始猜测为x0 = 2
。
第一次迭代:
f(2) = 2^3 - 2*2 - 5 = -1
。f'(2) = 3*2^2 - 2 = 10
。x
: x_new = 2 - (-1) / 10 = 2.1
。第二次迭代:
x = 2.1
开始。x
。这个过程重复进行,每次迭代都会使x
的值更接近方程的实际根。牛顿法的效率通常很高,特别是当初始猜测接近实际根时。
通过这种方式,我们可以逐渐逼近并最终找到满足方程的x
的值。
在使用牛顿法进行迭代求根时,初始值的选择非常关键。
如果初始值选得不合适,可能导致求解过程失效。
例如,设想一个函数f(x)
,其导数在某点附近变化很快。
如果选取的初始点x0
使得比值f(x0) / f'(x0)
很大,那么每次迭代可能会在真实根附近摆动,而不是逐渐接近它。
例如,对于函数f(x) = x^2 - 2
,如果选择x0 = -2
作为初始点,迭代可能会在正负根之间摆动,而难以快速收敛到实际根sqrt(2)
。
正确选择初始点有助于加快收敛速度并避免无效迭代。
定义:这是一阶导数的进一步推广,形成了一个矩阵。它告诉我们函数在各个方向上的曲率,也就是变化的变化速度。
具体来说,对于一个具有多个参数的函数,Hessian矩阵包含了这个函数关于这些参数的所有二阶偏导数。
想象你在一座山上,Hessian矩阵就像是告诉你这个山在每个方向上的陡峭程度。
对于机器学习中的优化问题,这就像是了解你的模型参数改变时,预测误差会如何变化。
如果在某点这个矩阵是半正定的(所有特征值非负),那么这个点可能是极小值点。如果这个矩阵是正定的(所有特征值都是正的),这个点就是严格的局部极小值点。
定义:Hessian矩阵的逆是这个矩阵的倒数,用于牛顿法中优化问题的解决方案。
如果Hessian矩阵告诉你山的陡峭程度,那么它的逆就像是提供一种“调节器”,帮助你调整每一步的大小和方向,以便更有效地到达山谷(最小误差点)。
在机器学习中的应用:
当你训练一个模型(比如线性回归或神经网络)时,你的目标是最小化一个损失函数,这个函数衡量了模型预测和实际值之间的差异。
使用Hessian矩阵:
使用Hessian矩阵的逆:
Hessian矩阵和它的逆在机器学习中的优化问题中非常重要,它们提供了关于如何调整模型参数以最小化损失函数的重要信息。
牛顿法等高级优化技术利用这些信息,以期更快速、更精确地找到最优解。
梯度和Hessian矩阵都提供了关于函数形状的重要信息,但它们关注的方面有所不同。
梯度:
Hessian矩阵:
所以,区别在于:
在机器学习的优化问题中,使用梯度可以找到下降最快的方向,但不一定能提供最快到达最低点的路径。
而Hessian矩阵则可以提供更精确的信息,帮助更有效地调整步长和方向,尤其是在复杂的非线性问题中。
然而,计算Hessian矩阵和它的逆通常更为复杂和计算量更大,这是它的一个主要缺点。
牛顿法和梯度下降法都是迭代算法,但它们在更新参数、收敛速度和计算复杂度等方面有区别。
更新参数的方法:
收敛速度:
计算复杂度:
对初始点的敏感度:
梯度下降法在处理大规模问题时更加高效和实用,尽管收敛速度较慢。
牛顿法在计算资源充足且问题规模较小的情况下可以更快地收敛,但计算成本和对初始点的敏感度较高。
牛顿法是一种改进的牛顿法,它不需要计算二阶导数(Hessian 矩阵)。
在训练一个神经网络时,拟牛顿法通过仅使用一阶导数信息来估计Hessian矩阵,这样可以减少计算量并加速训练过程,尤其在处理大型数据集时。
DFP、BFGS 算法属于拟牛顿法的一种,使用一阶导数信息来逼近Hessian矩阵或其逆矩阵,从而避免了直接计算Hessian矩阵的高成本。
DFP和BFGS算法在每次迭代中更新Hessian矩阵的近似值,并使用这个近似值来更新参数。
它们在很多情况下能提供类似牛顿法的快速收敛,同时减少了计算复杂度。
L-BFGS是BFGS算法的一个变种,专为处理大规模优化问题设计。
与BFGS不同的是,L-BFGS不会存储整个近似的Hessian矩阵,而是只保存最近几步的更新信息。
这使得L-BFGS在内存使用上更加高效,特别适用于那些参数数量巨大的问题,例如大规模机器学习应用。
当解析方法不可行时,数值优化算法(如迭代近似求解、分治法)提供了一种替代方案。
这些方法适用于解析解难以求得或问题规模过大的情况,例如高维优化问题。
在多变量线性回归中,我们试图找到一组参数,使得预测误差最小化。
使用坐标下降法,可以通过交替固定其他变量,一次只优化一个变量来实现。
例如,如果我们有两个参数 w1 和 w2,我们可以先固定 w2,优化 w1,然后固定 w1,优化 w2,如此反复,直到找到最优解。
在训练支持向量机时,我们需要解决一个复杂的优化问题来找到最佳的决策边界。
SMO算法通过将这个大问题分解为一系列小问题来实现优化。
它每次只选择一对参数进行优化,而固定其他所有参数。
这种方法使得问题变得更容易处理,可以有效地加速支持向量机的训练过程。
从解析优化算法的基本理论开始,到无约束问题的求解,再到处理有约束问题的拉格朗日乘数法,最后是适用于更广泛情况的KKT条件。
每一步都在之前的基础上增加了更多的复杂性和适用性。
案例:单变量线性回归模型的参数优化。
假设你有一个简单的线性回归模型 y = wx + b
,其中 w
和 b
是模型参数。
你的目标是找到这些参数的值,使得模型的预测误差最小。
在这种情况下,你会设置一个损失函数,比如均方误差,并找到这个损失函数的驻点(梯度为零的点)。
通过求解 d(Loss)/dw = 0
和 d(Loss)/db = 0
的方程组,你可以找到损失函数的最小值点,从而得到最优的 w
和 b
。
案例:带约束的资源分配问题。
假设你需要在不同的项目间分配固定数量的资金,并最大化总收益。
每个项目的收益是资金的非线性函数。
这里,资金总量的限制就是一个等式约束。
使用拉格朗日乘数法,你可以将这个约束条件加入到优化问题中,从而找到在给定资金总量下的最优资金分配方案。
案例:支持向量机(SVM)的优化。
在训练支持向量机时,目标是最大化分类间隔的同时确保数据点正确分类。
这里,最大化间隔和数据点分类的正确性都是约束条件(包括等式和不等式约束)。
KKT条件在这里提供了一个框架,它结合了拉格朗日乘数法和额外的条件(互补松弛性),来求解这个复杂的优化问题。
通过满足KKT条件,SVM能有效地找到最优的决策边界。
这些方法展示了如何根据问题的不同约束条件选择合适的优化策略。
无约束优化适用于简单问题,拉格朗日乘数法适合处理有等式约束的问题,而KKT条件适用于更复杂的情况,包括等式和不等式约束。
当问题具有多个局部最优解时,基于随机数的方法(如遗传算法、模拟退火)可以帮助找到全局最优解。
这些方法通过引入随机性来避免局部最优,但可能需要较长时间来找到满意的解。
多目标优化涉及同时优化多个目标,这些方法(如函数标量化、e约束法)试图在多个目标间取得平衡。
这些方法通常用于需要在多个目标间权衡取舍的复杂决策问题。