目录

上溢和下溢

病态条件

基于梯度的优化方法

KKT 方法


如果这篇文章对你有一点小小的帮助,请给个关注喔~我会非常开心的~

上溢和下溢

  • 上溢:当大量级的数字被近似为 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 时发生上溢,进一步计算会导致这些无限值变为非数字
  • 下溢:当接近零的数字被四舍五入为零时发生下溢

病态条件

条件数,表示函数相对于输入的微小变化而变化的快慢程度。

如果条件数大,有可能造成输入的舍入误差造成输出巨大变化。

函数 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 ,当 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 为 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 时具有特征值分解,条件数表示为:

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

基于梯度的优化方法

梯度是相对一个向量求导的导数,数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 的导数是包含所有偏导数的向量,记为 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 。

方向导数是在某方向上的斜率。

梯度下降是将 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 往导数的反方向移动一小步以降低损失函数。

当目标函数满足凸函数的时候,梯度下降收敛的值是全局最小值,但是在深度学习的背景下,即使找到的解不是真正最小的,但是只要它们对于损失函数显著低,就可以接受。

若有一函数 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 ,则 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 的 Jacobian 矩阵定义为:

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

对函数求二阶导数时,若导数有很多,可将其合并成一个 Hessian 矩阵,等价于梯度的 Jacobian 矩阵:

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

牛顿法,基于一个二阶泰勒展开来近似 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 附近的 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 :

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

仅使用梯度的优化算法被称为一阶优化算法。

使用 Hessian 矩阵的优化算法被称为二阶优化算法。

Lipschitz 连续,表示为:

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

KKT 方法

拉格朗日乘子法只允许等式约束。

KKT 方法是拉格朗日乘子法的推广,存在等式和不等式约束。

Karush-Kuhn-Tucker(KKT)是一种优化在约束条件下求 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 的最大值或者最小值的方法。

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 为原优化函数,数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 为等式约束,数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 为不等式约束,引入 KKT 乘子,广义拉格朗日函数定义为:

数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

原问题转换为对偶问题,数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 。

最优点满足以下必要条件:

  1. 满足 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 的梯度为零
  2. 满足所有关于 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家 和 KKT 乘子的约束条件
  3. 满足 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)-编程之家

如果这篇文章对你有一点小小的帮助,请给个关注喔~我会非常开心的~