ML算法——最优化|凸优化随笔【机器学习】【端午节创作】

数学预备知识

1、最优化问题

最优化问题指的是在给定条件下,找到一个目标函数的最优解,即找到能够使目标函数取得最大值或最小值的变量取值。常用的优化方法包括线性规划、整数规划、动态规划、遗传算法、模拟退火等。最终,通过对最优解的检验和实施,可以实现资源的最优分配或其他最优解决方案。

最优化的基本数学模型:

m i n f ( x ) min f(x) minf(x)

s . t . h i ( x ) = 0 , g j ( x ) ≤ 0 s.t. \quad h_i(x)= 0 ,\quad g_j(x)≤ 0 s.t.hi(x)=0,gj(x)0

  • 设计变量:x 是一个实数域范围内的n维向量,被称为决策变量或问题的解;
  • 目标函数: f(x) 为目标函数;
  • 约束条件: h i ( x ) = 0 , g j ( x ) ≤ 0 \quad h_i(x)= 0 ,\quad g_j(x)≤ 0 hi(x)=0,gj(x)0
  • 数学公式中的s.t.是subject to的缩写,表示约束条件。

超平面和半空间

二维空间的超平面就是一条线(可以是曲线),三维空间下的超平面是一个面(可以是曲面)。

简单来说,超平面是具有一个变量的空间中的直线、平面等概念的推广。半空间是数学中的一个概念,通常指一个空间中,其中一个方向的值被限定为非负数。例如,在三维空间中,一个半空间可以表示为z≥0,其中z表示垂直于x-y平面的方向。数学表达式如下:

超平面: H = { x ∈ R n ∣ a 1 x 1 + a 2 x 2 + . . . + a n x n = b } H = \{x ∈R^n | a_1x_1+a_2x_2+...+a_nx_n=b\} H={xRna1x1+a2x2+...+anxn=b}

半空间: H + = { x ∈ R n ∣ a 1 x 1 + a 2 x 2 + . . . + a n x n ≥ b } H^+ = \{x ∈R^n | a_1x_1+a_2x_2+...+a_nx_n≥b\} H+={xRna1x1+a2x2+...+anxnb}

凸集分离定理

凸集,凸函数,详见 数学预备知识 2.1梯度下降

凸集分离定理是凸集理论中最基本的定理之一,它表明两个不相交的凸集总可以用超平面分离。这个定理在凸优化理论中有重要的应用,因为它提供了将多变量问题转化为多个单变量问题的方法。

如何实现的多变量问题转换为多个单变量问题?

凸集分离定理可以将多变量问题转换为多个单变量问题。具体来说,如果需要将两个不相交的凸集C和D分离,可以通过以下步骤实现:

  1. 找到一个超平面,使得它与C和D的交点分别为x和y,且x和y分别位于超平面的两侧。
  2. 将超平面方程中的多个变量化为单个变量,例如将x1, x2, x3化为x1,将y1, y2, y3化为y1。
  3. 将超平面方程表示为一个关于x1的单变量函数f(x1),使得f(x1) = 0。
  4. 对于每个变量xi,分别求解f(xi) = 0,得到一组单变量方程。
  5. 对于每个单变量方程,求解其根xi,如果xi同时满足C和D的定义域,则将xi代入超平面方程中得到超平面方程中的常数项a。
  6. 将超平面方程中的常数项a表示为多个变量的函数g(x1, x2, …, xn),其中每个变量对应一个单变量方程。
  7. 将超平面方程中的常数项a表示为多个变量的函数g(x1, x2, …, xn)后,可以将其代入原多变量问题中,得到一个新的多变量问题,这个问题的解即为原问题的解。

通过以上步骤,就可以将多变量问题转换为多个单变量问题。这种方法在凸优化理论中有重要的应用,因为它可以将多变量问题转化为多个单变量问题,从而简化问题的求解。

(暂不理解这个步骤2的替换如何实现的)

2、凸优化

2.1、梯度下降

传送门:ML算法—梯度下降随笔

2.2、牛顿法

求解无约束最优化问题,优点是收敛速度快。

牛顿法是一种迭代算法,用于求解方程式的根。其基本思想是利用函数的导数信息,不断迭代以逼近方程的根。

1)比梯度下降快的原因?

微分解释,牛顿法是二阶收敛,梯度下降是一阶收敛,牛顿法在选择方向时,不仅可以考虑坡度是否够大,还可以考虑走了一步后坡度是否会更大,因此能更快地走到最底部。

几何解释,牛顿法就是用一个二次曲面去拟合当前所处位置的局部曲面,梯度下降法使用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合效果会比平面更好。

在这里插入图片描述

2)牛顿法算法过程

牛顿法的推导过程基于以下公式: x k + 1 = x k − α ⋅ f ′ ( x k ) x_{k+1} = x_k - α·f'(x_k) xk+1=xkαf(xk)

其中 x k x_k xk是第 k 次迭代时 x 的值,α 是步长, f ′ ( x k ) f′(x_k) f(xk) 是函数 f(x) 在 x k x_k xk 处的导数值。

  1. 初始化一个点 x0。
  2. 求解函数 f(x) 在 x k x_k xk 处的导数, f ′ ( x k ) f′(x_k) f(xk)即切线斜率 m【m 也可以用梯度表示,即 m = ▽ f ( x k ) m =▽f(x_k) m=f(xk)
  3. 求解函数 f(x) 在 x k x_k xk 处的二阶导数 , f ′ ( x k ) f′(x_k) f(xk)即切线曲率 n
  4. f ′ ( x k ) f'(x_k) f(xk) f ′ ′ ( x k ) f''(x_k) f′′(xk)代入牛顿迭代公式 中, x k + 1 = x k − α ⋅ m x_{k+1} = x_k - α·m xk+1=xkαm,其中 α 是步长。
  5. 重复执行步骤 2-4,直到满足预设的阈值条件,如 ∣ x k + 1 − x k ∣ < ϵ ∣x_{k+1}−x_k∣<ϵ xk+1xk∣<ϵ,其中 ϵ 是预设的阈值。
  6. 最终得到的解即为方程 f(x)=0 的根。

需要注意的是,牛顿法对于非线性方程的求解效果较好,但对于线性方程的求解则可能不收敛。必须保证 f(x) 二阶导连续,否则牛顿法可能无法收敛。

在推导过程的步骤4.中,谈到的牛顿迭代公式是如何代入得切线曲率?

使用牛顿-拉夫森方法(Newton-Raphson method)来求解 α,即:

α = f ′ ( x k ) f ′ ′ ( x k ) α = \frac{f'(x_k)}{f''(x_k)} α=f′′(xk)f(xk)

α 代入牛顿迭代公式中,得到:

x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) ⋅ f ′ ( x k ) x_{k+1} = x_k - \frac{f'(x_k)}{f''(x_k)}·f'(x_k) xk+1=xkf′′(xk)f(xk)f(xk)

2.3、阻尼牛顿法

1)较牛顿法的改进?

牛顿法迭代公式中没有步长因子,是定步长迭代。对于非二次型目标函数,不能保证函数值稳定的下降,有时会出现 f ( x k + 1 ) > f ( x k ) f(x_{k+1})>f(x_k) f(xk+1)>f(xk),走过头了,为消除定步长迭代的弊端,阻尼牛顿法每次迭代方向仍然是 x k x_k xk,但每次迭代会沿此方向做一维搜索,寻找最优的步长因子 λ k λ_k λk,即:

λ k = m i n f ( x k + λ d k ) λ_k = minf(x_k+\lambda d_k) λk=minf(xk+λdk)

2)阻尼牛顿法算法过程

  1. 给定初值x0,精度阈值 ϵ ,令 k = 0;
  2. 计算 x k 和 H k 计算x_k 和 H_k 计算xkHk
  3. ∣ ∣ g k ∣ ∣ < ϵ ||g_k|| < ϵ ∣∣gk∣∣<ϵ 则停止迭代,否则确定搜索方向: d k = − H k − 1 ⋅ g k d_k = -H_k^{-1}·g_k dk=Hk1gk
  4. 计算新的迭代点 x k + 1 = x k + d k x_{k+1} = x_k + d_k xk+1=xk+dk
  5. 令 k = k +1,重复执行步骤 2-5。

其中, H k 为海森矩阵( H e s s e n ) H_k为海森矩阵(Hessen) Hk为海森矩阵(Hessen,每个点处x=(x1,x2,x3,…,xn),都要计算一次:

在这里插入图片描述

g k g_k gk为一阶导数

2.4、拟牛顿法

1)较牛顿法的改进?

牛顿法每一步都要求解目标函数的Hessen 矩阵的逆矩阵,计算量比较大,提出一种改进,通过正定矩阵近似代替 H k − 1 H_k^{-1} Hk1,简化这一计算过程,改进后的方法称为拟牛顿法。

2)拟牛顿法算法过程

  1. 将 f(x)在 x k + 1 x_{k+1} xk+1处展开,得到:

    f ( x ) = f ( x k + 1 ) + f ′ ( x k + 1 ) ( x − x k + 1 ) + 1 2 f ′ ′ ( x k + 1 ) ( x − x k + 1 ) 2 f(x) = f(x_k+1)+f'(x_{k+1})(x-x_{k+1})+\frac{1}{2}f''(x_{k+1})(x-x_{k+1})^2 f(x)=f(xk+1)+f(xk+1)(xxk+1)+21f′′(xk+1)(xxk+1)2

  2. 两边同时取梯度,得:

    f ′ ( x ) = f ′ ( x k + 1 ) + f ′ ′ ( x k + 1 ) ( x k − x k + 1 ) f'(x) = f'(x_{k+1})+ f''(x_{k+1})(x_k-x_{k+1}) f(x)=f(xk+1)+f′′(xk+1)(xkxk+1)

  3. x = x k x = x_k x=xk,得:

    f ′ ( x k ) = f ′ ( x k + 1 ) + f ′ ′ ( x k + 1 ) ( x k − x k + 1 ) f'(x_k) = f'(x_{k+1})+ f''(x_{k+1})(x_k-x_{k+1}) f(xk)=f(xk+1)+f′′(xk+1)(xkxk+1)

    整理,得:

    f ′ ( x k + 1 ) − f ′ ( x k ) = f ′ ′ ( x k + 1 ) ( x k + 1 − x k ) f'(x_{k+1}) -f'(x_k)= f''(x_{k+1}) (x_{k+1}-x_k) f(xk+1)f(xk)=f′′(xk+1)(xk+1xk)

    即:

    g k + 1 − g k = H k + 1 ( x k + 1 − x k ) g_{k+1} -g_k = H_{k+1}(x_{k+1} - x_k) gk+1gk=Hk+1(xk+1xk)

    可得:

    H k + 1 − 1 ( g k + 1 − g k ) = x k + 1 − x k H_{k+1}^{-1}(g_{k+1} -g_k )=x_{k+1} - x_k Hk+11(gk+1gk)=xk+1xk 该式称为拟牛顿条件,对Hessen矩阵具有约束作用。

2.5、总结

重点是梯度下降法,利用一阶导数,而二阶导数涉及到海森矩阵,具有较大的计算量,因此,往往采用梯度下降算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来杯Sherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值