G
N
I
D
A
O
L

【最优化方法】第四次要点整理

梯度下降法

【算法原理】给定 \(x_k\),设 \(f(x)\) 一阶可微,给定 \(d \in \mathbb{R}^n\),有:

\[\begin{aligned} f'(x_k, d) &= \lim_{t\rightarrow 0^{+}} \frac{f(x_k + td) - f(x_k)}{t} \\ (泰勒展开) &= \lim_{t\rightarrow 0^{+}} \frac{f(x_k) + \nabla f(x_k)^\top td + o(t) - f(x_k)}{t} \\ &= \nabla f(x_k)^\top d \end{aligned} \]

\(d = - \nabla f(x_k)\)\(f(x)\)\(x=x_k\) 处下降最快的方向。

【算法步骤】初值设为 \(x_0, \varepsilon\),迭代方程为:

\[x_{k+1} = x_k - \alpha_k \nabla f(x_k) \]

其中 \(\alpha_k\) 由精确线搜索或非精确线搜索技术求得。停机准则为:

\[|| \nabla f(x_k) || \leq \varepsilon \]

梯度下降法的收敛性

【定义 1】如果函数 \(f\) 在区间 \(D\) 上 Lipschitz 连续,那么对于 \(\forall x,y \in D\),有:

\[\exists L > 0, \ || \nabla f(x) - \nabla f(y) || \leq L ||x-y|| \]

其中常数 \(L\) 称为 \(f\) 在区间 \(D\) 上的 Lipschitz 常数。

【定义 2】若 \(f(x)\) 在区间 \(D\)\(k\) 阶连续可微,且 \(f(x)\)\(p\) 阶导数在区间 \(D\) 上具有常数 \(L\) 的 Lipschitz 连续性,则 \(f(x) \in C^{k,p}_L(D)\)

【引理 1】设 \(f(x) \in C^{1,1}_L(\mathbb{R}^n)\),则对于 \(\forall x,y \in \mathbb{R}^n\),有:

\[|f(y) - f(x) - \nabla f(x_k)^\top (y-x)| \leq \frac{L}{2} ||y-x||^2 \]

【引理 2】设 \(f(x)\) 二阶连续可微,则\(\nabla f(x)\) 具有常数 \(L\) 的 Lipschitz 连续性当且仅当 \(|| \nabla^2 f(x) ||_2 \leq L\)

【定理】设 \(f(x) \in C^{1,1}_L(\mathbb{R}^n)\)\(f(x)\) 有下界,\(\forall \alpha \in (0, \frac{2}{L})\),且算法产生的无穷迭代点列为 \(\{x_k\}\),则:

  • \(\lim \limits_{k\rightarrow \infty} ||\nabla f(x_k)|| =0\)
  • \(\{x_k\}\) 的任一聚点 \(x^*\) 满足 \(\nabla f(x^*) = 0\)
  • \(g^*_N \leq \frac{c}{N+1} (f(x_0) - f^*)^{\frac{1}{2}}\),其中 \(c\) 为常数,\(f^* = \min f(x)\)\(g^*_N = \min \limits_{0 \leq k \leq N} ||\nabla f(x_k)||^2\)

数列的聚点是指在无限数列中,无限接近于某个数的数值。换句话说,聚点是数列中可能出现的极限值。

最速下降法

【算法原理】每一次迭代,均沿梯度的反方向:

\[x_{k+1} = x_{k} - \alpha_{k} \nabla f(x_{k}) \]

其中:

\[\alpha_{k} = \mathop{\arg\min}_{\alpha \geq 0} f(x_{k} - \alpha_{k} \nabla f(x_{k})) = \mathop{\arg\min}_{\alpha \geq 0} f(x_{k+1}) \]

【性质】最速下降法每次更新的轨迹都和上一次垂直,即:

\[\nabla f(x_{k} - \alpha_{k} \nabla f(x_{k}))^\top \cdot \nabla f(x_{k}) = 0 \]

或:

\[\nabla f(x_{k+1})^\top \cdot \nabla f(x_{k}) = 0 \]

因此,当用最速下降法寻找极小点时,其搜索路径呈直角锯齿状。

【算法步骤】

  • 第一步:选取初始点 \(x_0\),给定终止误差 \(\varepsilon > 0\) ,令 \(k=0\)
  • 第二步:计算 \(\nabla f(x_k)\),若 \(|| \nabla f(x_k) || \leq \varepsilon\),停止迭代并输出 \(x^*=x_k\);否则进行第三步
  • 第三步(确定迭代方向):取 \(p_k = -\nabla f(x_k)\)
  • 第四步(确定步长):进行一维搜索,求 \(\lambda_k\),使得:

\[f(x_k + \lambda_k p_k) = \mathop{\min}_{\lambda \geq 0} f(x_k + \lambda p_k) \]

\(x_{k+1} \leftarrow x_k + \lambda_k p_k\)\(k \leftarrow k+1\),回到第二步

【最速下降法与梯度下降法的细微差别】对于梯度下降法,我们需要预先设定步长 \(\alpha\);而最速下降法的步长 \(\alpha_k\) 是通过优化函数计算得到的。也就是说两者的区别在于每次迭代的步长是否恒定。

【例题】

image

image

牛顿法

【算法原理】\(f(x)\)\(x_k\) 处的二阶泰勒展开:

\[f(x_{k+1}) = f(x_k) + \nabla f(x_k)^\top (x_{k+1} - x_k) + \frac{1}{2} (x_{k+1} - x_k)^\top \nabla^2 f(x_k) (x_{k+1} - x_k) \]

\(d_k = x_{k+1} - x_k\),则上式可变为:

\[f(x_{k} + d_k) = f(x_k) + \nabla f(x_k)^\top d_k + \frac{1}{2} d_k^\top \nabla^2 f(x_k) d_k \]

那么当 \(d_k\) 取多少时,可以使 \(f(x_{k} + d_k)\) 最小?对上式两边对 \(d_k\) 求梯度得:

\[\nabla f(x_{k} + d_k) = \nabla f(x_k) + \nabla^2 f(x_k) d_k \]

\(f(x_{k} + d_k)\) 最小时,有:

\[\nabla f(x_{k} + d_k) = \nabla f(x_k) + \nabla^2 f(x_k) d_k = 0 \]

即:

\[d_k = - (\nabla^2 f(x_k))^{-1} \nabla f(x_k) \]

这个就是牛顿方向。

【算法步骤】

  • 第一步:选取初始点 \(x_0\),给定终止误差 \(\varepsilon > 0\) ,令 \(k=0\)
  • 第二步:计算 \(\nabla f(x_k)\),若 \(|| \nabla f(x_k) || \leq \varepsilon\),停止迭代并输出 \(x^*=x_k\);否则进行第三步
  • 第三步(确定迭代方向):取 \(d_k = -(\nabla^2 f(x_k))^{-1} \nabla f(x_k)\)
  • 第四步(迭代更新):令 \(x_{k+1} \leftarrow x_k + d_k = x_k - (\nabla^2 f(x_k))^{-1} \nabla f(x_k)\)\(k \leftarrow k+1\),回到第二步

牛顿法的适用条件:

  • 海塞矩阵 \(\nabla^2 f(x_k)\) 正定,若半正定可能会退化为线性收敛
  • \(x_0\) 要靠近 \(x^*\)(目标解为 \(x^*\)

【优缺点】

  • 优点:收敛速度非常快,是二阶收敛速度
  • 缺点:
    • 无法保证 \(\nabla^2 f(x_k)\) 正定且可逆,且计算成本较大(若 \(\nabla^2 f(x_k)\) 不是正定的,则迭代方向不是下降方向)
    • 无法保证 \(x_0\) 充分靠近 \(x^*\),否则会导致迭代不稳定,进而导致算法无法收敛(局部收敛性)

【改进】

  • 改进第一个缺点:修正 \(\nabla^2 f(x_k)\) 使其正定,于是就有了修正牛顿法
  • 改进第二个缺点:引入线搜索技术,于是就有了阻尼牛顿法

修正牛顿法

【牛顿-梯度混合下降法(Goldstein-Price 算法,或 G-P 算法)】在每步迭代中:

\[d_k = \begin{cases} -(\nabla^2 f(x_k))^{-1} \nabla f(x_k), \ \ 当 \nabla^2 f(x_k) 正定 \\ -\nabla f(x_k), \ \ 其他情况 \end{cases} \]

【正则化牛顿法(Levenberg-Marquardt 算法,或 L-M 算法)】修正方法如下:

  • \(\nabla^2 f(x_k)\) 不正定,取 \(Q_k > - \lambda_{\mathop{min}} (\nabla^2 f(x_k))\)(即取其特征值中的最小值)
  • \(\nabla^2 f(x_k)\) 正定,取 \(Q_k = 0\)

\(G_k = \nabla^2 f(x_k) + Q_k I\) 正定,其中 \(I\) 为单位阵。此时 L-M 算法的下降方向为:

\[d_k = -(\nabla^2 f(x_k) + Q_k I)^{-1} \nabla f(x_k) = - G_k \nabla f(x_k) \]

只要 \(Q_k\) 足够大,一定可以使海塞矩阵的所有特征值都大于 0。

阻尼牛顿法

【算法步骤】

  • 第一步:选取初始点 \(x_0\),给定终止误差 \(\varepsilon > 0\) ,令 \(k=0\)
  • 第二步:计算 \(\nabla f(x_k)\),若 \(|| \nabla f(x_k) || \leq \varepsilon\),停止迭代并输出 \(x^*=x_k\);否则进行第三步
  • 第三步(确定迭代方向):取 \(d_k = -(\nabla^2 f(x_k))^{-1} \nabla f(x_k)\)
  • 第四步:沿着搜索方向 \(d_k\) 进行精确或非精确线搜索,确定 \(\alpha_k\)
  • 第五步(迭代更新):令 \(x_{k+1} \leftarrow x_k + \alpha_k d_k = x_k - \alpha_k (\nabla^2 f(x_k))^{-1} \nabla f(x_k)\)\(k \leftarrow k+1\),回到第二步
posted @ 2024-12-06 11:22  漫舞八月(Mount256)  阅读(27)  评论(0编辑  收藏  举报