最优化方法小结

线性搜索方法

梯度下降

在我的文章深度学习中常见的优化器小结中已经提到梯度下降法,这里,将重要的部分提炼过来。

其计算方法是:
给定待优化模型参数 θ ∈ R d \theta \in R^d θRd和目标函数 J ( θ ) J(\theta) J(θ)后,算法沿着梯度的相反方向更新 θ \theta θ来最小化 J ( θ ) J(\theta) J(θ)。学习率 η \eta η决定了每一时刻的更新步长。对于每一时刻t用以下步骤来说明梯度下降的流程:
(1)计算目标函数关于参数的梯度 g t = ∇ θ J ( θ ) g_t=\nabla_\theta J(\theta) gt=θJ(θ)

(2)更新模型参数
θ t + 1 = θ − η g t \theta_{t+1}=\theta-\eta g_t θt+1=θηgt

梯度下降与一阶泰勒展开:
假设损失函数是 J ( θ ) J(\theta) J(θ),对其做一阶泰勒展开:
J ( θ ) = J ( θ 0 ) + ( θ − θ 0 ) ∇ θ J ( θ 0 ) J(\theta) = J(\theta_0)+(\theta-\theta_0)\nabla_\theta J(\theta_0) J(θ)=J(θ0)+(θθ0)θJ(θ0)
假设, θ − θ 0 = λ d ⃗ \theta-\theta_0=\lambda \vec d θθ0=λd ,其中 d ⃗ \vec d d 是方向向量, λ \lambda λ为标量,描述其长度。不难得出:
( θ − θ 0 ) ∇ θ J ( θ 0 ) = λ ∣ d ⃗ ∣ ∣ ∇ θ J ( θ 0 ) ∣ c o s ( α ) (\theta-\theta_0)\nabla_\theta J(\theta_0) =\lambda |\vec d| |\nabla_\theta J(\theta_0)|cos(\alpha) (θθ0)θJ(θ0)=λd θJ(θ0)cos(α),这里的 α \alpha α是两个向量的夹角。如果我们期望梯度下降的方向最大,那么易知, d ⃗ \vec d d 与梯度是反向的,则: d ⃗ = − ∇ θ J ( θ 0 ) ∣ ∣ ∇ θ J ( θ 0 ) ∣ ∣ \vec d=\frac{-\nabla_\theta J(\theta_0)}{||\nabla_\theta J(\theta_0)||} d =θJ(θ0)θJ(θ0)
那么,我们有:
θ − θ 0 = λ d ⃗ = λ − ∇ θ J ( θ 0 ) ∣ ∣ ∇ θ J ( θ 0 ) ∣ ∣ θ = θ 0 − λ ∣ ∣ ∇ θ J ( θ 0 ) ∣ ∣ ∇ θ J ( θ 0 ) \theta-\theta_0=\lambda \vec d = \lambda \frac{-\nabla_\theta J(\theta_0)}{||\nabla_\theta J(\theta_0)||} \\ \theta = \theta_0 - \frac{\lambda}{||\nabla_\theta J(\theta_0)||}\nabla_\theta J(\theta_0) θθ0=λd =λθJ(θ0)θJ(θ0)θ=θ0θJ(θ0)λθJ(θ0)
也就得到了梯度下降的公式。

牛顿法

在这里插入图片描述
红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。
从几何的角度出发,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

牛顿法是怎么推导出来的呢?之前做梯度下降的时候我们对其进行了泰勒一阶展开,那么这里我们对其进行二阶展开,可得:
J ( θ ) = J ( θ 0 ) + ( θ − θ 0 ) ∇ θ J ( θ 0 ) + 1 2 ( θ − θ 0 ) T H ( θ 0 ) ( θ − θ 0 ) J(\theta) = J(\theta_0)+(\theta-\theta_0)\nabla_\theta J(\theta_0)+\frac{1}{2}(\theta-\theta_0)^TH(\theta_0)(\theta-\theta_0) J(θ)=J(θ0)+(θθ0)θJ(θ0)+21(θθ0)TH(θ0)(θθ0)
我们想要在 θ \theta θ处取得极值点,那么只需要 ∇ θ J ( θ ) = 0 \nabla_\theta J(\theta)=0 θJ(θ)=0,于是我们对上式求导,易得:
∇ θ J ( θ ) = ∇ θ J ( θ 0 ) + H ( θ 0 ) ( θ − θ 0 ) = 0 \nabla_\theta J(\theta)=\nabla_\theta J(\theta_0)+H(\theta_0)(\theta-\theta_0)=0 θJ(θ)=θJ(θ0)+H(θ0)(θθ0)=0
有:
θ t + 1 = θ t − H t − 1 g t \theta_{t+1}=\theta_t-H_t^{-1}g_t θt+1=θtHt1gt

这就是牛顿法。

拟牛顿法

我们知道求解海瑟矩阵的逆是一个非常复杂的计算,考虑使用一个n阶矩阵 G G G 替代 H − 1 H^{-1} H1 , 这就是拟牛顿法。

条件1:G 需要满足正定矩阵:
从牛顿法可知:
θ t + 1 = θ t − H t − 1 g t \theta_{t+1}=\theta_t-H_t^{-1}g_t θt+1=θtHt1gt
其实会在其中再增加一个学习率,也就是:
θ t + 1 = θ t − λ H t − 1 g t θ t + 1 − θ t = − λ H t − 1 g t \theta_{t+1}=\theta_t-\lambda H_t^{-1}g_t \\ \theta_{t+1}-\theta_t=-\lambda H_t^{-1}g_t θt+1=θtλHt1gtθt+1θt=λHt1gt
带入到一阶泰勒展开式中,我们有:
J ( θ ) = J ( θ 0 ) − λ g t T H t − 1 g t J(\theta) = J(\theta_0)-\lambda g_t^TH_t^{-1}g_t J(θ)=J(θ0)λgtTHt1gt
因为 H − 1 H^{-1} H1正定,所以, g t T H t − 1 g t > 0 g_t^TH_t^{-1}g_t >0 gtTHt1gt>0。易知 J ( θ ) < J ( θ 0 ) J(\theta) < J(\theta_0) J(θ)<J(θ0)
那么,要有一个 G G G去拟合 H − 1 H^{-1} H1,显然,他需要是正定的

条件2:
显然,只有一个正定条件是不行的,首先牛顿法满足这样的性质:
∇ θ J ( θ ) = ∇ θ J ( θ 0 ) + H ( θ 0 ) ( θ − θ 0 ) ⇒ g t + 1 = g t + H t ( θ t + 1 − θ t ) ⇒ g t + 1 − g t = H t ( θ t + 1 − θ t ) \nabla_\theta J(\theta)=\nabla_\theta J(\theta_0)+H(\theta_0)(\theta-\theta_0) \\ ⇒ g_{t+1} = g_{t}+H_{t}(\theta_{t+1}-\theta_t) \\ ⇒ g_{t+1}-g_t = H_t(\theta_{t+1}-\theta_t) θJ(θ)=θJ(θ0)+H(θ0)(θθ0)gt+1=gt+Ht(θt+1θt)gt+1gt=Ht(θt+1θt)
y t = g t + 1 − g t , δ t = θ t + 1 − θ t y_{t}=g_{t+1}-g_t,\delta_{t}=\theta_{t+1}-\theta_t yt=gt+1gt,δt=θt+1θt
y t = H t δ t ⇒ H t − 1 y t = δ t y_{t}=H_t\delta_{t} \\ ⇒ H_t^{-1}y_{t}=\delta_{t} yt=HtδtHt1yt=δt
成为拟牛顿条件,因此 G t G_t Gt需要满足这样的拟牛顿条件,则有:
G t y t = δ t G_ty_t=\delta_t Gtyt=δt
我们希望有 G t + 1 = G t + Δ G t G_{t+1}=G_t+\Delta G_t Gt+1=Gt+ΔGt。有以下两种算法:
DFP(Davidon-Fletcher-Powell)算法(DFP algorithm)
在这里插入图片描述
BFGS(Broyden-Fletcher-Goldfard-Shano)算法(BFGS algorithm):
在这里插入图片描述

置信域方法

在这里插入图片描述
在信赖域方法的每次迭代中,先确定一个信赖域半径,然后在该半径内计算目标函数的二阶近似的极小值。如果该极小值使得目标函数取得了充分的下降,则进入下一个迭代,并扩大信赖域半径,如果该极小值不能令目标函数取得充分的下降,则说明当前信赖域区域内的二阶近似不够可靠,需要缩小信赖域半径,重新计算极小值。如此迭代下去,直到满足收敛所需的条件。我们结合上图做进一步的解释。

图中,实线表示的是目标函数的等高线,虚线是泰勒二阶近似的等高线:
在这里插入图片描述
因为泰勒二阶近似并不与目标函数完全相同,后面还有个高阶无穷小的值,因此他们的等高线不相同。如果我们使用牛顿法,那么他就会走到 m k ( p ) m_k(p) mk(p)的极值点。但从图中不难看出,这个点根本没有充分的下降,在信頼域内最好的步骤是Trust region step,这个点比牛顿法的结果要好很多(在该例下)。

不过,这一现象比较依赖于信赖域半径的选取。可以想象,如果信赖域半径非常大,我们仍然会找到 m k ( p ) m_k(p) mk(p) 的极小值点,但此时,这一步长是不能接受的,我们不会进入下一次迭代,而是要重新设置信赖域半径,重新计算步长。那么步长是否可接受的条件是什么呢?定义变量
在这里插入图片描述
分母表示目标函数的二阶近似的减小量,分子表示目标函数的减小量。如果结果接近于1,说明二阶近似很接近目标函数,这一步长是可以接受的。如果结果接近于0甚至小于0,说明二阶近似与真实的目标函数差距较大,我们需要减小信赖域半径,并重新计算步长。

那么,问题只剩下,如何找到 m k ( p ) m_k(p) mk(p)的极小值,这里只介绍Cauchy Point这一种方案,对Dogleg感兴趣的同学可以看信頼域这篇文章。

柯西点(Cauchy Point):
这是一种近似求解的方法,固定 p p p方向是梯度下降的方向,沿着这个方向寻找极小值,有:
在这里插入图片描述
可以看出,步长为 τ k Δ k \tau_k\Delta_k τkΔk,方向为负梯度方向。至于 τ k \tau_k τk的来源,可以直接将4.7的结果带入4.3
在这里插入图片描述
在这里插入图片描述
下面展示这种方法在例子中的效果:
在这里插入图片描述

启发式算法

在我的博文启发式算法中已经详细的介绍了相关算法,这里就不再赘述。

参考资料

梯度下降与一阶泰勒展开的关系
李航:《统计学习方法》,清华大学出版社
梯度下降法、牛顿法和拟牛顿法
信頼域

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值