機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

ニュートン法(多変数の場合)

ニュートン法(1変数の場合)の続きです。今回は多変数のニュートン法です。f_1(x_1, \cdots ,x_n)=0, \cdots, f_n(x_1, \cdots ,x_n)=0のようなn個の連立方程式


{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
      f_1(x_1, \cdots ,x_n)=0 \\ 
\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\vdots \\
     f_n(x_1, \cdots ,x_n)=0 \tag{1}
    \end{array}
  \right.
\end{eqnarray}
}

の解を、1変数のニュートン法と同様に各関数fを1次近似し、近似解を求めることを考えます。点(x^{\prime}_1, \cdots, x^{\prime}_n)における1次近似は、接線、接平面の公式により


g_{i}(x_1, \cdots ,x_n) = \bar{f}_{i x_{1}}(x_1-x^{\prime}_1) + \cdots +\bar{f}_{i x_{n}}(x_n-x^{\prime}_n) + f_i(x^{\prime}_1, \cdots ,x^{\prime}_n)\tag{2}

です。なおここで\bar{f}_{i x_{1}}は、f_ix_1で偏微分し、(x^{\prime}_1, \cdots, x^{\prime}_n)を代入したものを表します。各関数でg_iを求め、g_i=0を行列式でまとめて書けば、


 \left(
    \begin{array}{ccc}
      \bar{f}_{1 x_1} & \ldots & \bar{f}_{1 x_n} \\
      \vdots & \ddots & \vdots \\
      \bar{f}_{n x_1} & \ldots &\bar{f}_{n x_n} 
    \end{array}
  \right)
 \left(
\begin{array}{c}
x_1 - x^{\prime}_1 \\
\vdots \\
x_n - x^{\prime}_n
    \end{array}
  \right)
+
 \left(
\begin{array}{c}
\bar{f}_1 \\
\vdots \\
\bar{f}_n
    \end{array}
  \right)
=0 \tag{3}

となります。ここで\bar{f}_1は、f_1(x^{\prime}_1, \cdots, x^{\prime}_n)を代入したものを表します。式(3)を整理すれば、


 \left(
\begin{array}{c}
x_1 \\
\vdots \\
x_n
    \end{array}
  \right)
=
 \left(
\begin{array}{c}
x^{\prime}_1 \\
\vdots \\
 x^{\prime}_n
    \end{array}
  \right)
-
 \left(
    \begin{array}{ccc}
      \bar{f}_{1 x_1} & \ldots & \bar{f}_{1 x_n} \\
      \vdots & \ddots & \vdots \\
      \bar{f}_{n x_1} & \ldots &\bar{f}_{n x_n} 
    \end{array}
  \right)^{-1}

 \left(
\begin{array}{c}
\bar{f}_1 \\
\vdots \\
\bar{f}_n
    \end{array}
  \right)
 \tag{4}

となり、1次近似による近似解が求められました。1変数のときと同様に、これを繰り返せば真の解に近づいていきます。

さて、式(4)で求められるものはf_1=0,\cdots,f_n=0となる(x_1,\cdots,x_n)です。ある1つの関数における\displaystyle \frac{\partial f_1}{\partial x_1}=0,\cdots,\frac{\partial f_1}{\partial x_n}=0となる点が求めたければ、式(4)において\displaystyle f_1 \to \frac{\partial f_1}{\partial x_1},\cdots,f_n \to \frac{\partial f_1}{\partial x_n}と置き換えれば、


 \left(
\begin{array}{c}
x_1 \\
\vdots \\
x_n
    \end{array}
  \right)
=
 \left(
\begin{array}{c}
x^{\prime}_1 \\
\vdots \\
 x^{\prime}_n
    \end{array}
  \right)
-
 \left(
    \begin{array}{ccc}
      \bar{f}_{1 x_1 x_1} & \ldots & \bar{f}_{1 x_n x_1} \\
      \vdots & \ddots & \vdots \\
      \bar{f}_{1 x_1 x_n} & \ldots &\bar{f}_{1 x_n x_n} 
    \end{array}
  \right)^{-1}

 \left(
\begin{array}{c}
\bar{f}_{1 x_1} \\
\vdots \\
\bar{f}_{1 x_n}
    \end{array}
  \right)
=0 \tag{5}

となります。ここで右辺の行列は点(x_1,\cdots,x_n)におけるヘッセ行列になっています。(参考:ベクトルをベクトルで微分の定義とヘッセ行列\mathbf{x}=(x_1,\cdots,x_n)とし、ヘッセ行列\mathbf Hと勾配の記号を用いれば、


\mathbf{x} = \mathbf{x}^{\prime} - \bar{\mathbf{H}}^{-1} \nabla \bar{f} \tag{6}

となります。ニュートン法(1変数の場合)の式(4)を多変数に拡張した形になっていますね。

次回、式(6)を実際に使って関数の極値を求めてみたいと思います。