序言
在深度学习的广阔领域中,模型优化是提升模型性能与效率的关键环节。随着数据量的激增和模型复杂度的提升,传统的一阶优化方法如梯度下降法虽被广泛使用,但其收敛速度和准确性已难以满足当前需求。因此,研究者们提出了二阶近似方法,以期通过利用目标函数的二阶导数信息,实现更精准、更快速的参数优化。
二阶近似方法
- 在本篇中,我们会讨论训练深度神经网络的二阶方法。参看
LeCun and Cortes
\text{LeCun and Cortes}
LeCun and Cortes(1998) 了解该问题的早期处理方法。为表述简单起见,我们只考察目标函数为经验风险:
J ( θ ) = E x , y ∼ p ^ data ( x , y ) [ L ( f ( x ; θ ) , y ) ] = 1 m ∑ i = 1 m L ( f ( x ( i ) ; θ ) , y ( i ) ) J(\boldsymbol{\theta})=\mathbb{E}_{\bold{x},\text{y}\sim\hat{p}_{\text{data}(\boldsymbol{x},y)}}[L(f(\boldsymbol{x};\boldsymbol{\theta}),y)]=\frac{1}{m}\sum\limits_{i=1}^mL(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),y^{(i)}) J(θ)=Ex,y∼p^data(x,y)[L(f(x;θ),y)]=m1i=1∑mL(f(x(i);θ),y(i)) — 公式1 \quad\textbf{---\footnotesize{公式1}} —公式1 - 然而,我们在这里讨论的方法很容易扩展到更一般的目标函数,例如,深度学习中的正则化技术(系列篇章,文末已给出相关链接)中讨论的包括参数正则项的函数。
牛顿法
- 在数值计算篇 - 基于梯度的优化方法,我们介绍了二阶梯度方法。与一阶方法相比,二阶方法使用二阶导数改进了优化。
- 最广泛使用的二阶方法是牛顿法。我们现在更详细地描述牛顿法,重点在其应用于神经网络的训练。
- 牛顿法是基于二阶泰勒级数展开在某点
θ
0
\boldsymbol{\theta}_0
θ0附近来近似
J
(
θ
)
J(\boldsymbol{\theta})
J(θ)的优化方法,其忽略了高阶导数:
θ ∗ = θ 0 − H − 1 ∇ θ J ( θ 0 ) \boldsymbol{\theta}^\ast=\boldsymbol{\theta}_0-\boldsymbol{H}^{-1}\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_0) θ∗=θ0−H−1∇θJ(θ0) — 公式2 \quad\textbf{---\footnotesize{公式2}} —公式2 - 因此,对于局部的二次函数(具有正定的 H \boldsymbol{H} H),用 H − 1 \boldsymbol{H}^{-1} H−1重新调整梯度,牛顿法会直接跳到极小值。如果目标函数是凸的但非二次的(有高阶项),该更新会是迭代的,得到和牛顿法相关的算法,如算法1所示。
- 对于非二次的表面,只要
Hessian
\text{Hessian}
Hessian保持正定,牛顿法能够迭代地使用。这意味着一个两步迭代过程。
- 首先,更新或计算 Hessian \text{Hessian} Hessian逆(通过更新二阶近似)。
- 其次,根据公式2更新参数。
- 在神经网络优化中的挑战篇 - 高原、鞍点和其他平坦区域中,我们讨论了牛顿法只适用于
Hessian
\text{Hessian}
Hessian是正定的情况。
- 在深度学习中,目标函数的表面通常具有非凸的很多特点,如鞍点。
- 因此使用牛顿法是有问题的。如果 Hessian \text{Hessian} Hessian矩阵的特征值并不都是正的,例如,靠近鞍点处,牛顿法实际上会导致更新朝错误的方向移动。
- 这种情况可以通过正则化
Hessian
\text{Hessian}
Hessian来避免。
- 常用的正则化策略包括在 Hessian \text{Hessian} Hessian矩阵对角线上增加常数 α \alpha α。
- 正则化更新变为: θ ∗ = θ 0 − [ H ( f ( θ 0 ) ) + α I ] − 1 ∇ θ f ( θ 0 ) \boldsymbol{\theta}^\ast=\boldsymbol{\theta}_0-[H(f(\boldsymbol{\theta}_0))+\alpha\boldsymbol{I}]^{-1}\nabla_{\boldsymbol{\theta}}f(\boldsymbol{\theta}_0) θ∗=θ0−[H(f(θ0))+αI]−1∇θf(θ0) — 公式3 \quad\textbf{---\footnotesize{公式3}} —公式3
- 这个正则化策略用于牛顿法的近似,例如 Levenberg-Marquardt \text{Levenberg-Marquardt} Levenberg-Marquardt算法( Levenberg, 1944; Marquardt, 1963 \text{Levenberg, 1944; Marquardt, 1963} Levenberg, 1944; Marquardt, 1963),只要 Hessian \text{Hessian} Hessian矩阵的负特征值仍然相对接近零,就会效果很好。
- 在曲率有更极端方向的情况下, α \alpha α的值必须足够大,以抵消负特征值。
- 然而,如果 α \alpha α持续增加, Hessian \text{Hessian} Hessian矩阵会变得由对角矩阵 α I \alpha\boldsymbol{I} αI主导,通过牛顿法所选择的方向会收敛到普通梯度除以 α \alpha α。
- 当很强的负曲率存在时, α \alpha α可能需要特别大,以至于牛顿法比选择合适学习速率的梯度下降的步长更小。
- 除了目标函数的某些特征带来的挑战,如鞍点,牛顿法用于训练大型神经网络还受限于其显著的计算负担。
- Hessian \text{Hessian} Hessian矩阵中元素数目是参数数量的平方,因此,如果参数数目为 k k k(甚至是在非常小的神经网络中 k k k也可能是百万级别),牛顿法需要计算 k × k k × k k×k矩阵的逆,计算复杂度为 O ( k 3 ) \Omicron(k^3) O(k3)。
- 另外,由于参数将每次更新都会改变,每次训练迭代都需要计算 Hessian \text{Hessian} Hessian矩阵的逆。其结果是,只有参数很少的网络才能在实际中用牛顿法训练。
- 在本篇章接下来的剩余部分,我们将讨论一些试图保持牛顿法优点,同时避免计算障碍的替代算法。
共轭梯度
- 共轭梯度是一种通过迭代下降的共轭方向(
conjugate directions
\text{conjugate directions}
conjugate directions) 以有效避免
Hessian
\text{Hessian}
Hessian矩阵求逆计算的方法。
- 这种方法的灵感来自于最速下降方法弱点的仔细研究(详细信息请参看数值计算篇 - 基于梯度的优化方法),其中线性搜索迭代地用于梯度相关的方向中。
- 图例1说明了该方法在二次碗型目标中如何表现的,是一个相当无效的来回往复,锯齿形模式。
- 这是因为每一个由梯度给定的线性搜索方向,都保证正交于上一个线性搜索方向。
- 假设上一个搜索方向是
d
t
−
1
\boldsymbol{d}_{t-1}
dt−1。
- 在极小值处,线性搜索终止,方向 d t − 1 \boldsymbol{d}_{t-1} dt−1处的方向导数为零: ∇ θ J ( θ ) ⋅ d t − 1 = 0 \nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta})\cdot\boldsymbol{d}_{t-1}=0 ∇θJ(θ)⋅dt−1=0。
- 因为该点的梯度定义了当前的搜索方向, d t = ∇ θ J ( θ ) \boldsymbol{d}_t=\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}) dt=∇θJ(θ)将不会贡献于方向 d t − 1 \boldsymbol{d}_{t-1} dt−1。
- 因此方向 d t \boldsymbol{d}_t dt正交于 d t − 1 \boldsymbol{d}_{t-1} dt−1。
- 最速下降多次迭代中,方向 d t − 1 \boldsymbol{d}_{t-1} dt−1和 d t \boldsymbol{d}_t dt之间的关系如图例1所示。如图展示的,下降正交方向的选择不会保持前一搜索方向上的最小值。这产生了锯齿形的过程。在当前梯度方向下降到极小值,我们必须重新最小化之前梯度方向上的目标。
- 因此,通过遵循每次线性搜索结束时的梯度,我们在某种意义上撤销了在之前线性搜索的方向上取得的进展。共轭梯度试图解决这个问题。
- 在共轭梯度法,我们寻求一个和先前线性搜索方向共轭(
conjugate
\text{conjugate}
conjugate)的搜索方向,即它不会撤销该方向上的进展。
- 在训练迭代
t
t
t时,下一步的搜索方向
d
t
\boldsymbol{d}_t
dt的形式如下:
d t = ∇ θ J ( θ ) + β t d t − 1 \boldsymbol{d}_t=\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta})+\beta_t\boldsymbol{d}_{t-1} dt=∇θJ(θ)+βtdt−1 — 公式4 \quad\textbf{---\footnotesize{公式4}} —公式4 - 其中,系数 β t \beta_t βt的大小控制我们应沿方向 d t − 1 \boldsymbol{d}_{t-1} dt−1加回多少到当前搜索方向上。
- 两个方向 d t \boldsymbol{d}_t dt和 d t − 1 \boldsymbol{d}_{t-1} dt−1被称为共轭的,如果 d t ⊤ H d t − 1 = 0 \boldsymbol{d}_t^\top\boldsymbol{H}\boldsymbol{d}_{t-1}=0 dt⊤Hdt−1=0,其中 H \boldsymbol{H} H是 Hessian \text{Hessian} Hessian矩阵。
- 在训练迭代
t
t
t时,下一步的搜索方向
d
t
\boldsymbol{d}_t
dt的形式如下:
- 适应共轭的直接方法会涉及到
H
\boldsymbol{H}
H特征向量的计算以选择
β
t
\beta_t
βt。
- 这将无法满足我们发展对于大问题比牛顿法更加计算可行的方法的目标。
- 我们能不进行这些计算而得到共轭方向么?幸运的是这个问题的答案是肯定的。
- 两种用于计算
β
t
\beta_t
βt的流行方法是:
-
1. Fletcher-Reeves
\text{1. Fletcher-Reeves}
1. Fletcher-Reeves:
β
t
=
∇
θ
J
(
θ
t
)
⊤
∇
θ
J
(
θ
t
)
∇
θ
J
(
θ
t
−
1
)
⊤
∇
θ
J
(
θ
t
−
1
)
\beta_t=\frac{\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_t)^\top\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_t)}{\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1})^\top\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1})}
βt=∇θJ(θt−1)⊤∇θJ(θt−1)∇θJ(θt)⊤∇θJ(θt)
—
公式5
\quad\textbf{---\footnotesize{公式5}}
—公式5
\qquad - 2. Polak-Ribi e ˋ re \text{2. Polak-Ribière} 2. Polak-Ribieˋre: β t = ( ∇ θ J ( θ t ) − ∇ θ J ( θ t − 1 ) ) ⊤ ∇ θ J ( θ t ) ∇ θ J ( θ t − 1 ) ⊤ ∇ θ J ( θ t − 1 ) \beta_t=\frac{(\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_t)-\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1}))^\top\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_t)}{\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1})^\top\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1})} βt=∇θJ(θt−1)⊤∇θJ(θt−1)(∇θJ(θt)−∇θJ(θt−1))⊤∇θJ(θt) — 公式6 \quad\textbf{---\footnotesize{公式6}} —公式6
-
1. Fletcher-Reeves
\text{1. Fletcher-Reeves}
1. Fletcher-Reeves:
β
t
=
∇
θ
J
(
θ
t
)
⊤
∇
θ
J
(
θ
t
)
∇
θ
J
(
θ
t
−
1
)
⊤
∇
θ
J
(
θ
t
−
1
)
\beta_t=\frac{\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_t)^\top\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_t)}{\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1})^\top\nabla_{\boldsymbol{\theta}}J(\boldsymbol{\theta}_{t-1})}
βt=∇θJ(θt−1)⊤∇θJ(θt−1)∇θJ(θt)⊤∇θJ(θt)
—
公式5
\quad\textbf{---\footnotesize{公式5}}
—公式5
- 对于二次曲面而言,共轭方向确保梯度沿着前一方向大小不变。因此,我们在前一方向上仍然是极小值。其结果是,在 k − k- k−维参数空间中, 共轭梯度只需要至多 k k k次线性搜索就能达到极小值。共轭梯度算法如算法2所示。
- 非线性共轭梯度:
- 目前,我们已经讨论了共轭梯度法用于二次目标函数。
- 当然,本篇章我们主要关注于探索训练神经网络和其他相关深度学习模型的优化方法,其对应的目标函数比二次函数复杂得多。
- 或许令人惊讶,共轭梯度法在这种情况下仍然是适用的,尽管有一些修改。
- 没有目标是二次的保证,共轭方向也不再保证在以前方向上目标仍是极小值。
- 其结果是,非线性共轭梯度算法会包括一些偶尔的重设,共轭梯度法沿未修改的梯度重启线性搜索。
- 实践者报告在实践中使用非线性共轭梯度算法训练神经网络是合理的,尽管在开始非线性共轭梯度前使用随机梯度下降迭代若干步来初始化效果更好。
- 另外,尽管(非线性)共轭梯度算法传统上作为批方法, minibatch \text{minibatch} minibatch版本已经成功用于训练神经网络( Le Roux et al., 2011 \text{Le Roux et al., 2011} Le Roux et al., 2011)。针对神经网路的共轭梯度应用早已被提出,例如放缩的共轭梯度算法( Moller, 1993 \text{Moller, 1993} Moller, 1993)。
BFGS
- B r o y d e n \bold{Broyden} Broyden- F l e t c h e r \bold{Fletcher} Fletcher- G o l d f a r b \bold{Goldfarb} Goldfarb- S h a n n o \bold{Shanno} Shanno( BFGS \text{BFGS} BFGS)算法具有牛顿法的一些优点,但没有牛顿法的计算负担。在这方面, BFGS \text{BFGS} BFGS和 CG \text{CG} CG很像。
- 然而,
BFGS
\text{BFGS}
BFGS使用了一个更直接的方法近似牛顿更新。回顾牛顿更新由下式给出:
θ ∗ = θ 0 − H − 1 ∇ J ( θ 0 ) \boldsymbol{\theta}^\ast=\boldsymbol{\theta}_0-\boldsymbol{H}^{-1}\nabla J(\boldsymbol{\theta}_0) θ∗=θ0−H−1∇J(θ0) — 公式7 \quad\textbf{---\footnotesize{公式7}} —公式7- 其中, H \boldsymbol{H} H是 J J J相对于 θ \boldsymbol{\theta} θ的 Hessian \text{Hessian} Hessian矩阵在 θ 0 \boldsymbol{\theta}_0 θ0处的估计。
- 运用牛顿法的主要计算难点在于计算 Hessian \text{Hessian} Hessian逆 H − 1 \boldsymbol{H}^{-1} H−1。
- 拟牛顿法所采用的方法( BFGS \text{BFGS} BFGS是其中最突出的)是用矩阵 M t \boldsymbol{M}_t Mt近似逆,迭代地低秩更新精度以更好近似 H − 1 \boldsymbol{H}^{-1} H−1。
- BFGS \text{BFGS} BFGS近似的说明和推导出现在很多关于优化的教科书中,包括 Luenberger ( 1984 ) \text{Luenberger}(1984) Luenberger(1984)。
- 当 Hessian \text{Hessian} Hessian逆近似 M t \boldsymbol{M}_t Mt更新时,下降方向 ρ t \boldsymbol{\rho}_t ρt为 ρ t = M t g t \boldsymbol{\rho}_t=\boldsymbol{M}_t\boldsymbol{g}_t ρt=Mtgt。该方向上的线性搜索用于决定该方向上的步长 ϵ ∗ \epsilon^\ast ϵ∗。参数的最后更新为: θ t + 1 = θ t + ϵ ∗ ρ t \boldsymbol{\theta}_{t+1}=\boldsymbol{\theta}_t+\epsilon^\ast\boldsymbol{\rho}_t θt+1=θt+ϵ∗ρt — 公式8 \quad\textbf{---\footnotesize{公式8}} —公式8
- 和共轭梯度法相似,
BFGS
\text{BFGS}
BFGS算法迭代一系列线性搜索,其方向含二阶信息。
- 然而和共轭梯度不同的是,该方法的成功并不严重依赖于线性搜索寻找该方向上和真正极小值很近的一点。
- 因此,相比于共轭梯度, BFGS \text{BFGS} BFGS的优点是其花费更少的时间改进每个线性搜索。
- 在另一方面, BFGS \text{BFGS} BFGS算法必须存储 Hessian \text{Hessian} Hessian逆矩阵 M \boldsymbol{M} M,需要 O ( n 2 ) \Omicron(n^2) O(n2)的存储空间,使 BFGS \text{BFGS} BFGS不适用于大多数具有百万级参数的现代深度学习模型。
-
存储限制的
B
F
G
S
(或
L
−
B
F
G
S
)
\bold{存储限制的BFGS(或L-BFGS)}
存储限制的BFGS(或L−BFGS)通过避免存储完整的
Hessian
\text{Hessian}
Hessian逆近似
M
\boldsymbol{M}
M,
BFGS
\text{BFGS}
BFGS算法的存储代价可以显著降低。
- L-BFGS \text{L-BFGS} L-BFGS算法使用和BFGS算法相同的方法计算 M \boldsymbol{M} M的近似,但起始假设是 M ( t − 1 ) \boldsymbol{M}^{(t-1)} M(t−1)是单位矩阵,而不是一步一步都要存储近似。
- 如果使用精确的线性搜索, L-BFGS \text{L-BFGS} L-BFGS定义的方向会是相互共轭的。
- 然而,不同于共轭梯度法,即使只是近似线性搜索的极小值,该过程的效果仍然不错。
- 这里描述的无存储的 L-BFGS \text{L-BFGS} L-BFGS方法可以拓展为包含 Hessian \text{Hessian} Hessian矩阵更多的信息,每步存储一些用于更新 M \boldsymbol{M} M的向量,且每步的存储代价是 O ( n ) \Omicron(n) O(n)。
-
-
将最速下降法应用于二次代价表面。
-
说明:
- 在每个步骤,最速下降法沿着由初始点处的梯度定义的线跳到最低代价的点。
- 这解决了梯度之上Jacobian和Hessian矩阵篇 - 图例3中使用固定学习速率所遇到的一些问题,但即使使用最佳步长,算法仍然朝最优方向曲折前进。
- 根据定义,在沿着给定方向的目标最小值处,最终点处的梯度与该方向正交。
-
-
算法1描述:目标为 J ( θ ) = 1 m ∇ θ ∑ i = 1 m L ( f ( x ( i ) ; θ ) , y ( i ) ) J(\boldsymbol{\theta})=\frac{1}{m}\nabla_{\boldsymbol{\theta}}\sum_{i=1}^m L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) J(θ)=m1∇θ∑i=1mL(f(x(i);θ),y(i))的牛顿法
伪代码:
R e q u i r e \bold{Require} Require: 初始参数 θ 0 \boldsymbol{\theta}_0 θ0
R e q u i r e \bold{Require} Require: 包含 m m m个样本的训练集
w h i l e \quad\bold{while} while 没有达到停止准则 d o \bold{do} do
\qquad 从训练集中采包含 m m m个样本 { x ( i ) , … , x ( m ) } \{\boldsymbol{x}^{(i)},\dots,\boldsymbol{x}^{(m)}\} {x(i),…,x(m)}的 minibatch \text{minibatch} minibatch,对应目标为 y ( i ) \boldsymbol{y}^{(i)} y(i)
\qquad 计算梯度: g ← 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}\gets\frac{1}{m}\nabla_{\boldsymbol{\theta}}\sum_i L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) g←m1∇θ∑iL(f(x(i);θ),y(i))
\qquad 计算 Hessian \text{Hessian} Hessian: H ← 1 m ∇ θ 2 L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{H}\gets\frac{1}{m}\nabla_{\boldsymbol{\theta}}^2L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) H←m1∇θ2L(f(x(i);θ),y(i))
\qquad 计算 Hessian \text{Hessian} Hessian逆: H − 1 \boldsymbol{H}^{-1} H−1
\qquad 计算更新: Δ θ = − H − 1 g \Delta\boldsymbol{\theta}=-\boldsymbol{H}^{-1}\boldsymbol{g} Δθ=−H−1g
\qquad 应用更新: θ ← θ + Δ θ \boldsymbol{\theta}\gets\boldsymbol{\theta}+\Delta\boldsymbol{\theta} θ←θ+Δθ
e n d \quad\bold{end} end w h i l e \bold{while} while
-
算法2描述:共轭梯度方法
伪代码:
R e q u i r e \bold{Require} Require: 初始参数 θ 0 \boldsymbol{\theta}_0 θ0
R e q u i r e \bold{Require} Require: 包含 m m m个样本的训练集
\quad 初始化 ρ 0 = 0 \boldsymbol{\rho}_0=0 ρ0=0
\quad 初始化 g 0 = 0 g_0=0 g0=0
\quad 初始化 t = 1 t=1 t=1
w h i l e \quad\bold{while} while 没有达到停止准则 d o \bold{do} do
\qquad 初始化梯度 g t = 0 \boldsymbol{g}_t=0 gt=0
\qquad 从训练集中采包含 m m m个样本 { x ( i ) , … , x ( m ) } \{\boldsymbol{x}^{(i)},\dots,\boldsymbol{x}^{(m)}\} {x(i),…,x(m)}的 minibatch \text{minibatch} minibatch,对应目标为 y ( i ) \boldsymbol{y}^{(i)} y(i)
\qquad 计算梯度: g t ← 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g}_t\gets\frac{1}{m}\nabla_{\boldsymbol{\theta}}\sum_i L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}),\boldsymbol{y}^{(i)}) gt←m1∇θ∑iL(f(x(i);θ),y(i))
\qquad 计算 β t = ( g t − g t − 1 ) ⊤ g t g t − 1 ⊤ g t − 1 \beta_t=\frac{(\boldsymbol{g}_t-\boldsymbol{g}_{t-1})^\top\boldsymbol{g}_t}{\boldsymbol{g}_{t-1}^\top\boldsymbol{g}_{t-1}} βt=gt−1⊤gt−1(gt−gt−1)⊤gt ( Polak-Ribi e ˋ re ) \quad(\text{Polak-Ribière}) (Polak-Ribieˋre)
\qquad (非线性共轭梯度:视情况可重置 β t \beta_t βt为零,例如 t t t是常数 k k k的倍数时,如 k = 5 k = 5 k=5)
\qquad 计算搜索方向: ρ t = − g t + β t ρ t − 1 \boldsymbol{\rho}_t=-\boldsymbol{g}_t+\beta_t\boldsymbol{\rho}_{t-1} ρt=−gt+βtρt−1
\qquad 执行线搜索寻找: ϵ ∗ = arg min ϵ 1 m ∑ i = 1 m L ( f ( x ( i ) ; θ t + ϵ ρ t ) , y ( i ) ) \epsilon^\ast=\argmin_\epsilon \frac{1}{m}\sum_{i=1}^m L(f(\boldsymbol{x}^{(i)};\boldsymbol{\theta}_t+\epsilon\boldsymbol{\rho}_t),\boldsymbol{y}^{(i)}) ϵ∗=argminϵm1∑i=1mL(f(x(i);θt+ϵρt),y(i))
\qquad (对于真正二次的代价函数,存在 ϵ ∗ \epsilon^\ast ϵ∗的解析解,而无需显示搜索)
\qquad 应用更新: θ t + 1 = θ t + ϵ ∗ ρ t \boldsymbol{\theta}_{t+1}=\boldsymbol{\theta}_t+\epsilon^\ast\boldsymbol{\rho}_t θt+1=θt+ϵ∗ρt
\qquad t ← t + 1 t\gets t+1 t←t+1
e n d \quad\bold{end} end w h i l e \bold{while} while
总结
- 二阶近似方法,作为深度模型优化中的高级策略,其核心在于利用
Hessian
\text{Hessian}
Hessian矩阵(即目标函数的二阶导数矩阵)来近似描述函数的局部曲率,从而更准确地确定最优的权重和偏置。
- 这种方法不仅提升了收敛速度。
- 还增强了优化的稳定性。
- 在众多二阶优化算法中, L-BFGS \text{L-BFGS} L-BFGS( Limited-memory Broyden–Fletcher–Goldfarb–Shanno \text{Limited-memory Broyden–Fletcher–Goldfarb–Shanno} Limited-memory Broyden–Fletcher–Goldfarb–Shanno)因其高效的存储和计算复杂度而备受青睐。 L-BFGS \text{L-BFGS} L-BFGS通过近似计算 Hessian \text{Hessian} Hessian矩阵的逆来更新权重,既避免了直接计算 Hessian \text{Hessian} Hessian矩阵的高昂代价,又保持了二阶优化的优势。
- 此外,二阶近似方法在自然语言处理、图像识别、推荐系统及金融预测等多个领域均展现出显著效果,推动了深度学习技术的广泛应用与深入发展。
- 未来,随着对二阶优化方法的进一步研究和改进,我们有理由相信,其在深度模型优化中的潜力将得到更充分的释放,为人工智能技术的进步贡献更大力量。
往期内容回顾
深度学习中的正则化技术 - 引言篇
深度学习中的正则化技术 - 参数范数惩罚篇
深度学习中的正则化技术 - 作为约束的范数惩罚篇
深度学习中的正则化技术 - 正则化和欠约束问题篇
深度学习中的正则化技术 - 数据集增强篇
深度学习中的正则化技术 - 噪声鲁棒性篇
深度学习中的正则化技术 - 半监督学习篇
深度学习中的正则化技术 - 多任务学习篇
深度学习中的正则化技术 - 提前终止篇
深度学习中的正则化技术 - 参数绑定和参数共享篇
深度学习中的正则化技术 - 稀疏表示篇
深度学习中的正则化技术 - Bagging和其他集成方法篇
深度学习中的正则化技术 - Dropout篇
深度学习中的正则化技术 - 对抗训练篇
深度学习中的正则化技术 - 切面距离、正切传播和流形正切分类器篇