48
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Nesterovの加速募配法Nesterov's Accelerated Gradient Method

48
Last updated at Posted at 2018-03-22

はじめに

募配法の加速法にはいろいろ提案されおいたすが、ここでは前回曞いた近接募配法の加速にも䜿えるNesterovの加速法に぀いお曞きたす。

Momentum法

Nesterovの加速法の前に、類䌌した手法であるMomentum法に぀いおも簡単に芋おおきたす。
募配法の曎新匏は $\boldsymbol{x}_k - \eta \bigtriangledown f(\boldsymbol{x}_k)$ ですが、Momentum法では次のように曎新したす。

\begin{align}
\boldsymbol{x}_{k+1} &= \boldsymbol{x}_k - \eta \bigtriangledown f(\boldsymbol{x}_k) + \alpha \Delta \boldsymbol{x}_k
\end{align}

ここで$\alpha$は$0 < \alpha < 1$です。1ステップ前の曎新方向$\Delta \boldsymbol{x}_k = \boldsymbol{x}_k - \boldsymbol{x}_{k-1}$にも曎新する、すなわち慣性Momentumを持たせおいたす。
この匏を展開するず、

\begin{align}
\boldsymbol{x}_{k+1}
 &= \boldsymbol{x}_k - \eta \sum_{l=0}^{k} \alpha^l \bigtriangledown f(\boldsymbol{x}_{k-l})
\end{align}

ずなり、過去の募配の$\alpha$による指数枛衰和方向に曎新しおいるこずになりたす。
いい感じに動けば、最近の曎新で䜕床曎新しおも同様の方向ぞの募配成分があったずきにはその方向ぞの曎新が加速され、逆に振動成分は抑制されそうです。が、逆に慣性項が収束に悪さをするずきもありそうです。
では、本題のNesterovの加速法に進みたす。

Nesterovの加速法Nesterov's Accelerated Gradient Method

Nesterovの加速法では次のように曎新したす。

\begin{align}
\boldsymbol{x}_{k+1}
 &= \bar{\boldsymbol{x}}_k - \eta \bigtriangledown f(\bar{\boldsymbol{x}}_k) \\
\bar{\boldsymbol{x}}_k &= \boldsymbol{x}_k + \gamma_k \Delta \boldsymbol{x}_k \\
\gamma_k &= \frac{\rho_{k-1} - 1}{\rho_k} \\
\rho_k &= \frac{1 + \sqrt{1 + 4\rho_{k-1}^2}}{2}
\end{align}

Momentum法ず比范しやすいように曞くず

\begin{align}
\boldsymbol{x}_{k+1}
 &= \boldsymbol{x}_k - \eta \bigtriangledown f(\bar{\boldsymbol{x}}_k) + \gamma_k \Delta \boldsymbol{x}_k
\end{align}

ずなり、違いは募配を蚈算する䜍眮にありたす。
曎新を(1)二぀目の匏の「慣性による曎新」ず(2)䞀぀目の匏の「募配による曎新」の2ステップに分けお考えるず、(2)の募配による曎新においお、Momentum法では(1)の曎新前の点$\boldsymbol{x}_k$における募配で曎新しおしたっおいるのに察しお、Nesterovでは募配法による曎新の起点が(1)の曎新埌の点$\bar{\boldsymbol{x}}_k = \boldsymbol{x}_k + \gamma_k \Delta \boldsymbol{x}_k$における募配で曎新しおいたす。
すなわち、Nesterovの加速法は広い意味でのMomentum法の䞀皮ですが、䞊述のシンプルなMomentum法の改良版ず蚀えたす。

Nesterov法は募配蚈算の起点を修正しおいるだけでなく、$\gamma_k$ず$\rho_k$の曎新匏を䞊蚘の匏のように構成しおいるずころがミ゜で、これにより$\beta$-平滑な凞関数$f$に察しお、収束レヌトが

\begin{align}
f(\boldsymbol{x}_k) - f(\boldsymbol{x}^*) \leq \frac{2\beta \parallel \boldsymbol{x}_1 - \boldsymbol{x}^* \parallel^2}{k^2}
\end{align}

ずなるこずが瀺されたす[1] p.277-282, [2]加速しない堎合の収束レヌトは分母が$k$。
たた、実甚䞊は、Momentum法では$\alpha$がハむパヌパラメヌタになっおいたのに察しお、Nesterov法では$\gamma_k$は曎新匏で䞎えられる利点もありたす。$\rho_0=1$からスタヌトするこずで$\gamma_1=0$ずなり、最初の1ステップはただの募配法による曎新ずなりたす。

「加速」の盎感的理解

Momentum法ず同様に展開するず

\begin{align}
\boldsymbol{x}_{k+1}
 &= \boldsymbol{x}_k - \eta \sum_{l=0}^{k} \left(\prod_{m=0}^{l-1} \gamma_{k-m} \right) \bigtriangledown f(\bar{\boldsymbol{x}}_{k-l})
\end{align}

ずなりたす。曎新匏に埓っお$\gamma_k$ず$\rho_k$を蚈算しおいくず、$k \rightarrow \infty$で$\gamma_k \rightarrow 1$です。そこで理解のために$\gamma=1$ずしおしたえば

\begin{align}
\boldsymbol{x}_{k+1}
 &= \boldsymbol{x}_k - \eta \sum_{l=0}^{k} \bigtriangledown f(\bar{\boldsymbol{x}}_{k-l})
\end{align}

ずなり、募配の环積和方向に曎新しおいるこずになりたす。たずえばステップ幅$\eta$が小さすぎるなどで、曎新しおも曎新しおも求たる募配ベクトルが同じだったずするず、$k$回目の曎新での曎新幅は$k\eta$、环積曎新幅は$k(k+1) \eta / 2$ずなりたす。加速をしなかった堎合の曎新幅は$\eta$、环積曎新幅は$k \eta$なので、加速が適切な状況では収束レヌトのオヌダヌが$1/k$から$1/k^2$に改善するのも頷けたす。実際、加速が進んでいるずきには目的関数の枛少幅は線圢に増えおいき、あるずころから枛少幅が小さくなっおいくような挙動が芋られたす。
ちゃんずした蚌明は参考文献[1] p.277-282, [2]をご参照頂きたいのですが、蚌明からは「加速」が盎感的に理解できなかったので、このような倧雑把な解釈をしおみたした。

リスタヌト

Nesterovの加速法は$k$が倧きくなるに぀れお、このようにアグレッシブになっおいくので、曎新し続けるず目的関数が振動したり、かえっお収束性が悪化するこずがありたす。
そこで、停止条件を満たしたらリスタヌト$\rho_k$に$1$をセットする方法が提案されおいたす[1] p.278, [3]。文献[3]の実隓のグラフだけでも芋おみる䟡倀があり、リスタヌトによっお劇的に収束が早くなっおいたす。
$f(\boldsymbol{x})$を最小化するずきの停止条件ずしおは

  • $f(\boldsymbol{x}_k) > f(\boldsymbol{x}_{k-1})$
  • $\bigtriangledown f(\bar{\boldsymbol{x}}_{k-1})^T (\boldsymbol{x}_k - \boldsymbol{x}_{k-1}) > 0$

などが提案されおいたす。䞀぀目の停止条件は「目的関数が増加したら」ずいうもので、二぀目の停止条件は(1)慣性による曎新ず(2)募配による曎新の(2)では募配降䞋方向に曎新するので、慣性項がなければ曎新ベクトルずの内積は負になるはず、ずいうずころから来おいたす。これらはどちらかだけ甚いるのでも良いようです。近接募配法で$F(\boldsymbol{x})=f(\boldsymbol{x})+g(\boldsymbol{x})$を最小化する堎合は、$\bar{\boldsymbol{x}}_{k-1}$から$\boldsymbol{x}_k = {\rm prox}_{\eta g}( \bar{\boldsymbol{x}}_{k-1} - \eta \bigtriangledown f(\bar{\boldsymbol{x}}_{k-1}) )$ぞの曎新方向$\boldsymbol{x}_k-\bar{\boldsymbol{x}}_{k-1}$の笊号を反転したものを$\bigtriangledown F(\boldsymbol{x}_{k-1})$の近䌌ずしお甚いるこずができたす[1] p.277-282。
前回曞いた蚘事のバックトラッキング法によるステップ幅の探玢アルゎリズムに、Nesterovの加速法ずリスタヌトを組み蟌むず次のようになりたす。前回に匕き続き近接募配法で曞いおいたす。$\hat{f}_\eta(\boldsymbol{x};\boldsymbol{y})$の定矩に぀いおは前回の蚘事をご参照ください。

\begin{align}
&\bar{\boldsymbol{x}}_0 = \boldsymbol{x}_0, \; \eta = \eta_0, \; \rho_0 = 1 \\
&{\rm for} \; k=1 \; {\rm to} \; K \; {\rm do} \\
&\quad {\rm while \; not \; broken \; do} \\
&\qquad \boldsymbol{x}_k = {\rm prox}_{\eta g}( \bar{\boldsymbol{x}}_{k-1} - \eta \bigtriangledown f(\bar{\boldsymbol{x}}_{k-1}) ) \\
&\qquad {\rm if} \; f(\boldsymbol{x}_k) \leq \hat{f}_\eta(\boldsymbol{x}_k;\bar{\boldsymbol{x}}_{k-1}) \; {\rm then}\\
&\qquad \quad {\rm break} \\
&\qquad {\rm else} \\
&\qquad \quad \eta \leftarrow \beta \eta \\
&\qquad {\rm end \; if} \\
&\quad {\rm end \; while} \\
&\quad {\rm if}\; F(\boldsymbol{x}_k) > F(\boldsymbol{x}_{k-1}) \;{\rm or}\; (\boldsymbol{x}_k-\bar{\boldsymbol{x}}_{k-1})^T (\boldsymbol{x}_k - \boldsymbol{x}_{k-1}) < 0 \;{\rm then} \\
&\qquad \eta = \eta_0 \\
&\qquad \rho_{k-1} = 1 \\
&\quad {\rm end \; if} \\
&\quad \rho_k = \frac{1 + \sqrt{1 + 4\rho_{k-1}^2}}{2} \\
&\quad \gamma_k = \frac{\rho_{k-1} - 1}{\rho_k} \\
&\quad \bar{\boldsymbol{x}}_k = \boldsymbol{x}_k + \gamma_k \Delta \boldsymbol{x}_k \\
&{\rm end \; for}
\end{align}

実際のずころ・・

序盀の数回の曎新で$\eta$が調敎されるず、その埌の倚くの反埩では内郚のバックトラッキング法によるステップ幅の探玢は1回で抜けるこずが倚いです。䞊蚘アルゎリズムでは$f(\boldsymbol{x}_k)$ず$f(\bar{\boldsymbol{x}}_k)$䞡方の関数評䟡が必芁になりたす。関数評䟡が重いモデルの孊習時にはここがボトルネックになっおきたす。
私の実隓では、単に$F(\boldsymbol{x}_k) < F(\boldsymbol{x}_{k-1})$だけをチェックしおルヌプを抜ける方法が䞊蚘アルゎリズムず同皋床の反埩で収束し、䞀反埩あたりの蚈算時間が短くなり、動䜜ずしおも安定しおいたした。$\eta$を$\eta_{\rm MIN}$より小さくしおも目的関数を小さくできない(1)の慣性による曎新が倧きすぎお、(2)の募配法による曎新をしおも(1)ず(2)トヌタルの曎新で目的関数が増加しおしたう堎合、$\boldsymbol{x}_k=\boldsymbol{x}_{k-1}$曎新しないずしおルヌプを抜けお加速法のリスタヌトをしたす。アルゎリズムずしおは次のようになりたす。

\begin{align}
&\bar{\boldsymbol{x}}_0 = \boldsymbol{x}_0, \; \eta = \eta_0, \; \rho_0 = 1 \\
&{\rm for} \; k=1 \; {\rm to} \; K \; {\rm do} \\
&\quad {\rm while \; not \; broken \; do} \\
&\qquad \boldsymbol{x}_k = {\rm prox}_{\eta g}( \bar{\boldsymbol{x}}_{k-1} - \eta \bigtriangledown f(\bar{\boldsymbol{x}}_{k-1}) ) \\
&\qquad {\rm if} \; F(\boldsymbol{x}_k) < F(\boldsymbol{x}_{k-1}) \;{\rm then}\\
&\qquad \quad {\rm break} \\
&\qquad {\rm else \; if} \; \eta < \eta_{\rm MIN} \;{\rm then}\\
&\qquad \quad \boldsymbol{x}_k = \boldsymbol{x}_{k-1} \\
&\qquad \quad {\rm break} \\
&\qquad {\rm else} \\
&\qquad \quad \eta \leftarrow \beta \eta \\
&\qquad {\rm end \; if} \\
&\quad {\rm end \; while} \\
&\quad {\rm if}\; F(\boldsymbol{x}_k) \geq F(\boldsymbol{x}_{k-1}) \;{\rm then} \\
&\qquad \eta = \eta_0 \\
&\qquad \rho_{k-1} = 1 \\
&\quad {\rm end \; if} \\
&\quad \rho_k = \frac{1 + \sqrt{1 + 4\rho_{k-1}^2}}{2} \\
&\quad \gamma_k = \frac{\rho_{k-1} - 1}{\rho_k} \\
&\quad \bar{\boldsymbol{x}}_k = \boldsymbol{x}_k + \gamma_k \Delta \boldsymbol{x}_k \\
&{\rm end \; for}
\end{align}

参考文献

[1] 金森敬文, 鈎朚倧慈, 竹内䞀郎, 䜐藀䞀誠. 機械孊習のための連続最適化機械孊習プロフェッショナルシリヌズ. 講談瀟. 2016.
[2] Sebastien Bubeck. ORF523: Nesterov's Accelerated Gradient Descent (I'm a bandit). 2013
[3] Brendan O'donoghue, and Emmanuel Candes. Adaptive restart for accelerated gradient schemes. 2012.

48
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?