[最优化方法笔记] 线搜索方法

1. 线搜索方法

1.1 无约束优化问题求解

无约束优化问题求解的基本方法是迭代算法,通过逐步逼近的方法来逼近精确解。

假设精确解所在的点为 \(x^*\),初始点为 \(x_0\),通过不断迭代 \(x^1, x^2, ... x^k\) 使得 \(x \rightarrow x^*\)

一般的迭代过程如下

  1. 给定一个初始点 \(x^0\)

  2. 根据指定的准则确定 下降方向 \(d_k\)

  3. 按照某种准则确定 步长 \(\alpha_k\),使得 \(f(x^k + \alpha_k d^k) < f(x^k)\)

  4. \(x^{k + 1} = x^k + \alpha_k d^k\),并不断重复步骤2,3


一般有两种主要的求解方式

  • 线搜索

    • 确定 下降方向:负梯度、牛顿方向、拟牛顿方向...... ( 满足 \(\nabla f(x^k)^T d^k < 0\) )

    • 确定 步长:一些准则......

  • 信赖域


1.2 迭代算法终止准则

  • $||\nabla f(x^{k + 1})|| < \varepsilon $,精确解 \(x^*\) 满足 \(\nabla f(x) = 0\)

  • \(||x^k - x^{k + 1}|| < \varepsilon\),表示迭代点的改变小于阈值

  • \(|f(x^k) - f(x^{k + 1})| < \varepsilon\),表示目标函数的改变小于某一阈值




2. 步长的选取

2.1 精确线搜索

构造一元辅助函数:

\[\phi(\alpha) = f(x^k + \alpha d^k) \]

其中 \(d^k\)下降方向\(\alpha > 0\) 是辅助函数的 自变量

选取的 \(\alpha\) 尽可能让 \(\phi (\alpha_k)\) 小,故有最优化问题:

\[\alpha_k = \text{arg} \min_{\alpha > 0} \phi(\alpha) \]

\(\alpha_k\) 为当前的最佳步长。

根据最优解的一阶必要条件,选取的 \(\alpha_k\) 满足:

\[\phi ^{'}(\alpha) = \nabla f(x^k + \alpha d^k)^T d^k = 0 \]

根据等式求出解析解,并通过 \(\text{Hessen}\) 矩阵判断是否为最优解。

但是,该方法存在一些 缺点

  • 求解 梯度\(\text{Hessian}\) 矩阵 的计算量较大

  • 对于一些非光滑函数或导数表达式复杂的函数无法应用精确搜索法


2.2 直接搜索

采用 基于搜索区间直接搜索法,要求事先知道一个包含最优解 \( \alpha_k\) 的搜索区间。

\(\alpha_k\)\(\phi(\alpha)\) 的极小点,若存在区间 \([l, r]\) ,使得 \(\alpha_k \in [l, r]\) ,并且要求 \(\phi(\alpha)\) 在此区间是 单峰函数

搜索区间的确定

一般采用 进退算法 确定 初始的搜索区间初始点 。进退算法的步骤一般如下:

  1. 任选一个初始点 \(\alpha_0\) 和初始步长 \(h > 0\),计算 \(\phi(\alpha_0)\)

  2. 向前进一步搜索得到 \(\alpha_0 + h\),如果该点的目标函数值较之前 减小,那么加大步长 \(h\),并继续向前搜索;如果反而 减小 了,那么取步长 \(h = -h\),向反方向进行搜索。

  3. 不断迭代得到一个确定的区间 \([l, r]\),并设定初始点为 \(\frac{l + r}{2}\)


常见的直接搜索法

  • 二分查找

    因为 \(\phi(\alpha)\) 是单峰函数,其导数满足单调性。(学过算法的人都知道这个)

  • 黄金分割法

  • 均匀搜索法


2.3 非精确线搜索

求解 \(\phi(\alpha)\) 的精确解会导致计算量很大,而且有时候复杂的导数表达式使得难以求解。

可以适当放松对 \(\alpha_k\) 的要求,只要求满足适当的条件即为 \(\phi(\alpha)\) 的最优解。

  • \(\text{Armijo}\) 准则

    步长 \(\alpha\) 满足 \(\text{Armijo}\) 准则 即:

    \[f(x^k + \alpha d^k) \le f(x^k) + c_1 \alpha \nabla f(x^k)^Td^k \]

    其中 \(d^k\) 为点 \(x^k\) 处的下降方向,\(c_1 \in (0, 1)\) 是一个常数。

    可以看出,点 \((\alpha, \phi(\alpha))\) 位于直线 \(l(\alpha) = \phi(0) + c_1 \alpha \nabla f(x^k)^Td^k\) 的下方,区间 \([0, \alpha_1]\) 内的所有点均满足 \(\text{Armijo}\) 准则。

    通常 \(c_1\) 是一个很小的正数,例如 \(c_1 = 10^{-3}\)


  • \(\text{Goldstein}\) 准则

    步长 \(\alpha\) 满足 \(\text{Goldstein}\) 准则 即:

    \[\begin{split} & f(x^k + \alpha d^k) \le f(x^k) + c \alpha \nabla f(x^k)^T d^k \\\\ & f(x^k + \alpha d^k) \ge f(x^k) + (1 - c)\alpha \nabla f(x^k)^Td^k \end{split} \]

    其中 \(d^k\) 为点 \(x^k\) 处的下降方向,\(c \in (0, \frac{1}{2})\) 是一个常数。

    可以看出,区间 \([\alpha_1, \alpha_2]\) 内的点位于直线 \(l_1(\alpha) = \phi(0) + c \alpha \nabla f(x^k)^Td^k\) 的下方,而位于 \(l_2(\alpha) = \phi(0) + (1-c) \alpha \nabla f(x^k)^Td^k\) 上方。


  • \(\text{Wolfe}\) 准则

    步长 \(\alpha\) 满足 \(\text{Wolfe}\) 准则 即:

    \[\begin{split} & f(x^k + \alpha d^k) \le f(x^k) + c_1 \alpha \nabla f(x^k)^T d^k \\\\ & \nabla f(x^k + \alpha d^k)^T d^k \ge c_2 \alpha \nabla f(x^k)^Td^k \end{split} \]

    其中 \(d^k\) 为点 \(x^k\) 处的下降方向,\(c_1, c_2 \in (0, 1)\) 是常数,且 \(c_1 < c_2\)

    \(\nabla f(x^k + \alpha d^k)^T d^k\) 恰好就是 \(\phi(\alpha)\) 的导数,要求 \(\phi (\alpha)\) 在点α 处切线的斜率不能小于 \(\phi ^{'} (0)\)\(c_2\) 倍。

    \(\phi(\alpha)\) 的极小值点 \(\alpha^*\) 处有 \(\phi^{'}(\alpha^*) = \nabla f(x^k + \alpha^* d^k)^T d^k = 0\),且永远满足条件二。

    选择较小的 \(c_1\) 可使得 \(\alpha^*\) 同时满足条件一。\(\text{Wolfe}\) 准则在绝大多数情况下会包含线搜索子问题的精确解。




参考

刘浩洋, 户将, 李勇锋, 文再文《最优化:建模、算法与理论》

数值优化| 线搜索方法

最优化方法复习笔记(一)梯度下降法、精确线搜索与非精确线搜索(推导+程序)

03 线搜索算法(Line Search Methods) - STEP LENGTH

posted @ 2023-12-15 03:55  MarisaMagic  阅读(606)  评论(2编辑  收藏  举报