logo

割線法: ニュートン法 📂最適化理論

割線法: ニュートン法

定義1 2

目的関数 J:RnRJ : \mathbb{R}^{n} \to \mathbb{R}を最適化する問題で、次の繰り返しアルゴリズムをニュートン法Newton’s methodという。

xn+1=xnH1(xn)J(xn) \begin{equation} \mathbf{x}_{n+1} = \mathbf{x}_{n} - H^{-1}(\mathbf{x}_{n}) \nabla J(\mathbf{x}_{n}) \end{equation}

J\nabla J勾配で、HHJJヘッセ行列だ。

導出

JJを2次導関数の項までテイラー展開で近似すると、次の通り。

J(x)J(x0)+(xx0)TJ(x0)+12!(xx0)T(H(x0))(xx0) J(\mathbf{x}) \approx J(\mathbf{x}_{0}) + (\mathbf{x} - \mathbf{x}_{0})^{T} \nabla J (\mathbf{x}_{0}) + \dfrac{1}{2!}(\mathbf{x} - \mathbf{x}_{0})^{T} (H(\mathbf{x}_{0})) (\mathbf{x} - \mathbf{x}_{0})

JJを最小にするx\mathbf{x}を見つけるためにx\mathbf{x}で微分すると(勾配とヘッセ行列の変数は省略する。)

J(x)x=J+(xx0)H=0 \dfrac{\partial J(\mathbf{x})}{\partial \mathbf{x}} = \nabla J + (\mathbf{x} - \mathbf{x}_{0}) H = \mathbf{0}     x=x0H1J \begin{equation} \implies \mathbf{x}^{\ast} = \mathbf{x}_{0} -H^{-1}\nabla J \end{equation}

説明

標準的な勾配降下法が目的関数の最適化のために1次導関数を使用するなら、ニュートン法は2次導関数まで使用する。式を比較すると、学習率α\alphaがヘッセ行列の逆行列に置き換わっている形で、適応学習率と見ることができる。

Gradient Descent: xn+1=xnαJNewton’s Method: xn+1=xnH1J \begin{align*} \text{Gradient Descent: } \mathbf{x}_{n+1} &= \mathbf{x}_{n} - \alpha \nabla J \\ \text{Newton’s Method: } \mathbf{x}_{n+1} &= \mathbf{x}_{n} - H^{-1} \nabla J \end{align*}

導出時にテイラー展開の2次項まで使用されたことに注目しよう。もしJJが(局所的に)2次関数なら、(2)(2)は(局所的に)最適解x\mathbf{x}^{\ast}を一度で見つける式だ。もちろん、一般にそう良い状況に遭遇するのは難しいので、(1)(1)を繰り返してx\mathbf{x}^{\ast}を見つけなければならない。

逆行列の計算が含まれることを考えると、実際に使用するには便利なアルゴリズムではないかもしれないと推測できる。ヘッセ行列を保存するだけでも多くのメモリを消費し、n×nn \times n行列の逆行列を計算するコストはO(n3)\mathcal{O}(n^{3})で、nnが大きい場合には、逆行列を計算する時間で普通に勾配降下法を何度か行った方が効率的かもしれない。特にディープラーニングでは、人工ニューラルネットワークが高性能を発揮するためには多くのパラメータが必要で、ChatGPT-3.5が1750億個のパラメータを持っていることを考えると、ニュートン法で学習させることを期待するのは難しい。ヘッセ行列の高い計算コストを克服するための様々な改良アルゴリズムが考案されている。

下に、一変数の時の式を見ると根を見つける際のニュートン法と同じ形になっているのがよくわかるだろう。

xn+1=xnf(xn)f(xn) x_{n+1} = x_{n} - \dfrac{f^{\prime}(x_{n})}{f^{\prime \prime}(x_{n})}


  1. Ian Goodfellow, Deep Learning, 8.6.1 Newton’s Method ↩︎

  2. 오일석, 기계 학습(MACHINE LEARNING) (2017), Ch 5.6.1 뉴턴 방법 ↩︎