【最优化方法】第四次要点整理
梯度下降法
【算法原理】给定 \(x_k\),设 \(f(x)\) 一阶可微,给定 \(d \in \mathbb{R}^n\),有:
取 \(d = - \nabla f(x_k)\) 是 \(f(x)\) 在 \(x=x_k\) 处下降最快的方向。
【算法步骤】初值设为 \(x_0, \varepsilon\),迭代方程为:
其中 \(\alpha_k\) 由精确线搜索或非精确线搜索技术求得。停机准则为:
梯度下降法的收敛性
【定义 1】如果函数 \(f\) 在区间 \(D\) 上 Lipschitz 连续,那么对于 \(\forall x,y \in D\),有:
其中常数 \(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\),有:
【引理 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_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\),使得:
令 \(x_{k+1} \leftarrow x_k + \lambda_k p_k\),\(k \leftarrow k+1\),回到第二步
【最速下降法与梯度下降法的细微差别】对于梯度下降法,我们需要预先设定步长 \(\alpha\);而最速下降法的步长 \(\alpha_k\) 是通过优化函数计算得到的。也就是说两者的区别在于每次迭代的步长是否恒定。
【例题】
牛顿法
【算法原理】\(f(x)\) 在 \(x_k\) 处的二阶泰勒展开:
设 \(d_k = x_{k+1} - x_k\),则上式可变为:
那么当 \(d_k\) 取多少时,可以使 \(f(x_{k} + d_k)\) 最小?对上式两边对 \(d_k\) 求梯度得:
当 \(f(x_{k} + d_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 算法)】在每步迭代中:
【正则化牛顿法(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 算法的下降方向为:
只要 \(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\),回到第二步