数值优化方法:梯度下降,最速梯度下降与共轭梯度下降

数值优化方法:梯度下降,最速梯度下降与共轭梯度下降

本文对常见的数值优化方法进行总结,重点关注优化方法的原理、迭代过程和计算复杂度。常见的数值优化方法包括梯度下降法(最速梯度下降法)、牛顿法、共轭梯度下降法等。本笔记的算法思路只是便于对各种优化方法进行理解,并不是完整的逻辑推导,如果想了解其中的数学推导,建议还是查看相关教材。(文章里公式渲染有点慢,需要等一会)

本文相关代码在https://github.com/flztiii/numerical_optimization_test.git

梯度下降算法

算法思路

考虑到以下问题,找到一个 x ∗ x^* x使 f ( x ∗ ) < f ( x ) , ∀ x ∈ R n f(x^*) < f(x), \forall x \in R^n f(x)<f(x),xRn。梯度下降算法的思路很简单:每一次迭代的点要比上一次次迭代点的值更小。用公式表达就是

f ( x k + 1 ) f(x_{k+1}) f(xk+1) < f ( x k ) ( 1 ) f(x_{k}) \quad (1) f(xk)(1)

接下来就是如何根据这个思路得到从 x k x_k xk x k + 1 x_{k+1} xk+1的增量 Δ x \Delta x Δx。可以对 f ( x ) f(x) f(x)进行一阶泰勒展开,表达式如下所示

f ( x + Δ x ) = f ( x ) + f ′ ( x ) ⋅ Δ x ( 2 ) f(x+\Delta x) = f(x) + f^{'}(x) \cdot \Delta x \quad (2) f(x+Δx)=f(x)+f(x)Δx(2)

再根据公式(2),可以得到

f ( x + Δ x ) − f ( x ) = f ′ ( x ) ⋅ Δ x f(x+\Delta x) - f(x) = f^{'}(x) \cdot \Delta x f(x+Δx)f(x)=f(x)Δx < 0 ( 3 ) 0 \quad (3) 0(3)

那么,只要满足公式(4)的条件,就可以得到 f ( x + Δ x ) f(x+\Delta x) f(x+Δx) < f ( x ) f(x) f(x)。为了使公式(4)成立,可以令(总所周知,平方大于0)

Δ x = − α ⋅ f ′ ( x ) , α \Delta x = -\alpha \cdot f^{'}(x),\alpha Δx=αf(x),α > 0 ( 4 ) 0 \quad (4) 0(4)

所以,可以得到从 x k x_k xk x k + 1 x_{k+1} xk+1的迭代过程满足

x k + 1 = x k + Δ x = x k − α ⋅ f ′ ( x k ) ( 5 ) x_{k+1} = x_k + \Delta x = x_k - \alpha \cdot f^{'}(x_k) \quad (5) xk+1=xk+Δx=xkαf(xk)(5)

时,始终存在 f ( x k + 1 ) < f ( x k ) f(x_{k+1}) < f(x_k) f(xk+1)<f(xk)。也就是一开始谈到的思路,只要不断寻找值更小的点,就可以最终找到最小值。

算法过程
  1. 给出初始点 x 0 x_0 x0,学习率 α \alpha α
  2. 计算 x 0 x_0 x0处的梯度 f ′ ( x 0 ) f^{'}(x_0) f(x0)
  3. 判断 ∣ f ′ ( x 0 ) ∣ |f^{'}(x_0)| f(x0)是否小于阈值 δ \delta δ,如果小于,停止迭代,算法结束
  4. 得到下一个迭代点 x 1 = x 0 − α ⋅ f ′ ( x 0 ) x_1 = x_0 - \alpha \cdot f^{'}(x_0) x1=x0αf(x0)
  5. 重复2-4过程
算法总结

梯度下降算法是最为基础的优化方法之一,它只需要知道梯度方法,不需要计算海森矩阵。计算复杂度较低。但是此方法容易陷入局部极小值,收敛结果对初始点和学习率的要求较高。

最速梯度下降

算法思路

最速梯度下降算法与梯度下降算法思路相似,都是希望每一次迭代的点要比上一次次迭代点的值更小。但是最速梯度下降算法与梯度下降算法的不同之处在于,它对学习率进行了调整,使学习率并不是一个固定值,而是不断变化的。

最速梯度下降算法希望在 x k x_k xk处沿梯度方法 f ( x k ) f(x_k) f(xk)下降时,找到一个学习率 α k \alpha_k αk,使得沿 f ( x k ) f(x_k) f(xk)下降量比选择其他 α \alpha α都要大。用公式表达就是

α k = a r g m i n α f ( x k − α ⋅ f ′ ( x k ) ) ( 6 ) \alpha_k = argmin_{\alpha} f(x_k - \alpha \cdot f^{'}(x_k)) \quad (6) αk=argminαf(xkαf(xk))(6)

以上就是最速梯度下降算法的核心。接下来,使用二次型为例子,继续进行说明。(因为二次型具有比较好的性质)我们假设

f ( x ) = 1 2 x T A x − b T x ( 7 ) f(x) = \frac{1}{2} x^T A x - b^T x \quad (7) f(x)=21xTAxbTx(7)

则可以计算得到f(x)的梯度和海森矩阵分别为

f ′ ( x ) = A x − b ( 8 ) f^{'}(x) = Ax - b \quad (8) f(x)=Axb(8)
f ′ ′ ( x ) = A ( 9 ) f^{''}(x) = A \quad (9) f(x)=A(9)

同时我们可以令

g ( α ) = f ( x k + 1 ) = f ( x k − α f ′ ( x k ) ) ( 10 ) g(\alpha) = f(x_{k+1})= f(x_k - \alpha f^{'}(x_k)) \quad (10) g(α)=f(xk+1)=f(xkαf(xk))(10)

则公式(6)的必要条件为 d g ( α ) d α = 0 \frac{d g(\alpha)}{d \alpha} = 0 dαdg(α)=0。因此,我们通过公式(10)中可以得到

g ′ ( α ) = − f ′ ( x k + 1 ) T f ′ ( x k ) = 0 ( 11 ) g^ {'} (\alpha)= -f^ {'} (x_{k+1})^ T f ^ {'}(x_k)=0 \quad (11) g(α)=f(xk+1)Tf(x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值