最优化基础:一维搜索方法

精确一维搜索

精确一维搜索通常要求 在区间 上为单峰的函数,已知存在极小值,否则会计算失败。

黄金分割法

这个方法只需要计算 的值,不需要导数信息。 主要的步骤是不断压缩计算区间,假设初始计算区间 ,区间长度 ,比例系数 待定。 取内部左右两侧的两个点

  1. 如果 ,那么极小点位于 左侧,选取新的计算区间为

  2. 如果 ,那么极小点位于 右侧,选取新的计算区间为

新的计算区间长度为

我们希望可以充分利用计算的点值,以第一种情况为例,希望 可以在新计算区间 也被利用,作为右侧点,需要满足

解得 。 每次计算区间的压缩比例为 即黄金分割比。 除了第一次压缩区间之外,每一次压缩区间只需要选择一个内部点进行求值。 算法流程如下:

  1. 起始的计算区间

  2. 选取左侧点 ,右侧点 ,计算

  3. 压缩区间:

    1. 如果 ,那么极小点位于 左侧,选取新的计算区间为 可以作为下一步的

    2. 如果 ,那么极小点位于 右侧,选取新的计算区间为 可以作为下一步的

  4. 如果计算区间已经足够小,则求解结束,得到最小值点,否则回到第二步。

Remark

黄金分割法的思路是固定 , 另一种思路是动态调整 ,取一个与斐波那契数列相关的系数 ,得到斐波那契数列法。

对分法

对分法主要依赖 ,和求根的对分法基本类似,算法流程如下:

  1. 起始的计算区间

  2. 选取中点 ,计算

  3. 如果中点 ,则达到给定的导数残差容差;或者区间长度 时,输出中点作为位置近似。导数残差小本身不保证与极小点的距离小。

  4. 否则压缩区间:若 ,取左侧为新的计算区间 ;若 ,取右侧为新的计算区间

牛顿法

牛顿法需要依赖 ,并且假设 在计算区域内恒成立,否则难以保证收敛性。 本质是通过二阶泰勒展开将 局部近似为二次函数 ,然后更新到二次函数 的极小值点,得到

极小值点

因此迭代格式为

关于多维的非线性方程最小值问题:自变量 ,目标函数 足够光滑,假设目标函数存在极小值,那么牛顿迭代法的公式为

其中 是梯度向量, 是 Hesse 方阵。

要求 Hesse 方阵始终可逆,计算才可以继续,事实上我们还希望 Hesse 方阵始终对称正定,此时二阶近似才存在最小值点,否则可能不收敛。为了确保计算可以继续,从牛顿法发展出了拟牛顿法:用一族对称正定矩阵 来近似实际的 Hesse 方阵 参与计算。

非精确一维搜索

非精确一维搜索不要求直接求出最小值点,而是给定一个下降准则,求出一个点使得函数有足够的下降即可。以下 表示沿搜索方向得到的一元函数,假设它在 上连续可微,且 ,搜索正步长 。对于下文需要扩张步长的 Goldstein 和 Wolfe 搜索,还假设 在该射线上有下界。常用的下降准则有:

  1. Armijo准则:取定 ,要求 使得

  2. Goldstein准则:取定 ,要求 使得

    注意真正的最小值点也可能不满足Goldstein准则!

  3. Wolfe准则:取定 以及 ,要求 使得

    第二个条件通常会被加强为双边条件,称为强Wolfe准则

基于这些准则可以设计很多具体的非精确一维搜索算法,主要的过程都是不断使用二分法、插值法或者步长乘以比例系数的方法得到新的试探点,判定准则是否成立,成立即可结束搜索。若尚未找到步长的上界,可能需要扩张;建立上下界后,再在区间内继续搜索。以下各有一个例子。

满足 Armijo 准则的回退法

基于 Armijo 准则设计的常用算法是回退法:初始选取一个步长 ,选取一个指数衰减因子 ,检查是否满足准则。如果不满足,选取更小的步长 继续尝试,接受第一个满足准则的步长:

满足 Goldstein 准则的对分法

取初始试探步长 ,以及两个参数 ,计算 用于准则的判定。用 表示尚未找到上界,初始步长 不作为上界。

  1. 初始化 ,计算

  2. ,更新上界

  3. 否则,若 ,则两条准则均成立,输出 ;若仍不满足这条下界准则,则更新下界

  4. ,取新的试探点 ;若仍无上界,则取 扩张。计算新的 ,回到第二步。

满足 Wolfe 准则的算法

以下算法满足普通 Wolfe 准则。取初始试探步长 ,参数 ,扩张参数 ,以及插值保护参数 。计算 ,初始化

  1. 计算 。若不满足 Armijo 准则 ,更新区间为 ,可用下面的左侧二次插值生成候选点。

  2. 若满足 Armijo 准则,计算 。若 ,输出 ;否则更新为 。已有有限上界时,可用下面的右侧二次插值生成候选点。

  3. ,取 扩张。否则,只有当插值多项式为严格凸二次函数、候选点计算有效,且候选点落在

    内时才接受该候选点。若分母为零或数值上过小、曲率非正、候选点非有限或超出上述范围,则取中点

  4. 更新 ,回到第一步。保存下界处的函数值与导数,供下一次插值使用。

二次插值的具体公式如下。其中 均指本轮更新前的值, 指更新后的区间;下面的极小点公式仅在严格凸且分母有效时使用,并须经过第三步的保护检查。

  • 当调整到左侧子区间 ,取两点二次插值多项式 , 基于如下信息(我们还没有计算 的值)

    得到 的表达式

    极小点候选值为

  • 当调整到右侧子区间 时,取二次多项式 ,基于如下信息(我们已经计算了 的值)

    得到 的表达式

    极小点候选值为