1. ベクトル解析#

機械学習アルゴリズムの多くは、目的関数と呼ばれる関数の最小化に基づいている。例えば:

  • 線形回帰(≒曲線のフィッティング)では、尤度が最大となるように重みパラメータを調整する。

  • ニューラルネットワークでは、損失関数が最小となるように重みやバイアスと呼ばれるパラメータを調整する。

  • クラスタリングでは、クラスタの中心がデータ点から最も近いように調整する。

  • オートエンコーダでは、入力データと復元されたデータの差が最小となるようにパラメータを調整する。

  • 混合ガウスモデル(GMM)では、各ガウス分布の平均・分散を調整して尤度が最大となるようにする。

これらの問題は、勾配に基づく最適化アルゴリズムを用いて解くことが多い。

こうした目的関数を最小化するためには、一般に多変数の関数の微分を計算する必要がある。

\[\begin{split} \begin{align} f: \mathbb{R}^D &\to \mathbb{R} \\ \mathbf{x} &\mapsto f(\mathbf{x}) = f(x_1, x_2, \ldots, x_D) \end{align} \end{split}\]

上で関数\(f\)\(D\)次元の実数値ベクトル\(\mathbf{x}\)を入力として受け取り、実数値を出力する関数である。

\(N\)個のデータ点を持つデータセット \(\{(x_i, y_i)\}_{i=1}^N\) が与えられた際、直線\(f(x)=ax+b\)で近似する線形回帰を考えるとする。この際、最小化すべき目的関数は次のように定義される。

\[ \begin{align} f(a, b) &= \frac{1}{N} \sum_{i=1}^N (y_i - (ax_i + b))^2 \end{align} \]

ここで、\(y_i\)\(i\)番目のデータ点の出力値、\(x_i\)\(i\)番目のデータ点の入力値である。 データ点が固定されているとき、傾きと切片のパラメータ\((a, b)\)を調整して 目的関数\(f(a, b)\)を最小化することが目的となる。 これはまさに上の多変数関数の定義の特殊な場合になっている。

1.1. 一変数の微分#

関数\(f\)が一変数のとき、微分は次のように定義される。

\[ \begin{align} \frac{df}{dx} &= \lim_{h \to 0} \frac{f(x + h) - f(x)}{h} \end{align} \]

1.1.1. テイラー展開#

定義: テイラー級数

滑らかな関数\(f \in C^\infty\)が点\(x_0\)で定義されているとき、\(f\)のテイラー級数は次のように定義される。

(1.1)#\[ \begin{align} T_\infty(x) &= \sum_{n=0}^\infty \frac{f^{(n)}(x_0)}{n!} (x - x_0)^n \end{align} \]

特に\(x_0 = 0\)のとき、テイラー級数はマクローリン級数と呼ばれる。

また、\(f(x) = T_\infty(x)\)が成り立つとき、\(f\)\(x_0\)でテイラー展開可能であるという。

問題

多項式関数\(f(x) = x^3\)があるとき、\(x_0 = 1\)におけるテイラー多項式

\[ T_k(x) \equiv \sum_{n=0}^k \frac{f^{(n)}(x_0)}{n!} (x - x_0)^n \]

の次数\(k\)に応じた展開を求め、テイラー級数がもとの関数\(f\)と一致することを確認せよ。\(T^4\)以降が0であることは用いて良い。

1.1.2. 微分の基本的性質#

  • 線形性: \(\frac{d}{dx}(af(x) + bg(x)) = a\frac{df}{dx} + b\frac{dg}{dx}\)

  • 積の微分: \(\frac{d}{dx}(f(x)g(x)) = f(x)\frac{dg}{dx} + g(x)\frac{df}{dx}\)

  • 商の微分: \(\frac{d}{dx}\left(\frac{f(x)}{g(x)}\right) = \frac{f(x)\frac{dg}{dx} - g(x)\frac{df}{dx}}{g(x)^2}\)

  • 合成関数の微分: \(\frac{d}{dx}f(g(x)) = f'(g(x))\frac{dg}{dx}\)

特に合成関数の微分は連鎖律(チェインルール)とも呼ばれ、ニューラルネットワークの逆伝播アルゴリズムにおいて重要な役割を果たす。

問題

以下の関数\(f,g\)で定義される合成関数\(h(x) = f(g(x))\)の微分を求めて、連鎖律を確認せよ。

\[\begin{split} \begin{align} f(x) &= x^2 + 3x + 1 \\ g(x) &= \exp(x) \end{align} \end{split}\]

1.2. 偏微分: 多変数への拡張#

ここまでの議論を、多変数関数に拡張しよう。

定義: 偏微分

\(n\)個の変数\(x_1, x_2, \ldots, x_n\)を持つ関数\(f(\mathbf{x})\)の偏微分は、次のように定義される。

\[ \begin{align} \frac{\partial f}{\partial x_i} &= \lim_{h \to 0} \frac{f(x_1, \ldots, x_i + h, \ldots, x_n) - f(x_1, \ldots, x_i, \ldots, x_n)}{h} \end{align} \]

これらの偏微分をまとめた行ベクトルを勾配(gradient)と呼ぶ。

\[ \begin{align} \nabla_{\mathbf{x}} f \equiv \mathrm{grad} f &= \begin{bmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_n} \end{bmatrix} \in \mathbb{R}^{1 \times n} \end{align} \]

※文献によっては、勾配を列ベクトルとして定義することもある。

多変数の場合のチェインルールを整理しておこう。

二変数関数\(f: \mathbb{R}^2 \to \mathbb{R}\)\(t\)に依存する変数\(x_1(t), x_2(t)\)を持つとき、\(f\)\(t\)に関する微分は次のように定義される。

\[\begin{split} \begin{align} \frac{d}{dt} f(x_1(t), x_2(t)) &= \begin{bmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} \end{bmatrix} \begin{bmatrix} \frac{\partial x_1}{\partial t} \\ \frac{\partial x_2}{\partial t} \end{bmatrix} = \frac{\partial f}{\partial x_1} \frac{\partial x_1(t)}{\partial t} + \frac{\partial f}{\partial x_2} \frac{\partial x_2(t)}{\partial t} \end{align} \end{split}\]

あるいは、\(x_1, x_2\)\(s, t\)に依存する変数であるとき、次のように書くこともできる。

\[\begin{split} \begin{align} \frac{df}{d (s,t)} & = \frac{df}{d \mathbf{x}} \frac{d \mathbf{x}}{d (s,t)} = \begin{bmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} \end{bmatrix} \begin{bmatrix} \frac{\partial x_1}{\partial s} & \frac{\partial x_1}{\partial t} \\ \frac{\partial x_2}{\partial s} & \frac{\partial x_2}{\partial t} \end{bmatrix} \end{align} \end{split}\]

1.3. ベクトル値関数の微分#

実数値関数\(f: \mathbb{R}^n \to \mathbb{R}\)に対する偏微分と勾配を、より一般のベクトル値関数\(\mathbf{f}: \mathbb{R}^n \to \mathbb{R}^m\)に拡張する。

\[\begin{split} \begin{align} \mathbf{f}(\mathbf{x}) &= \begin{bmatrix} f_1(\mathbf{x}) \\ f_2(\mathbf{x}) \\ \vdots \\ f_m(\mathbf{x}) \end{bmatrix} \in \mathbb{R}^m \end{align} \end{split}\]

このベクトル値関数の変数\(x_i, \quad i= 1, \ldots, n\)に関する偏微分は次のように定義される。

\[\begin{split} \begin{align} \frac{\partial \mathbf{f}}{\partial x_i} &= \begin{bmatrix} \frac{\partial f_1}{\partial x_i} \\ \frac{\partial f_2}{\partial x_i} \\ \vdots \\ \frac{\partial f_m}{\partial x_i} \end{bmatrix} \end{align} \end{split}\]

上で実数値関数の場合に、勾配を各変数で偏微分した行ベクトルで定義したのに対し、ベクトル値関数の場合は各変数で偏微分した列ベクトルで定義していることに注意しよう。したがって、ベクトル値関数の勾配は次のように定義される。

\[\begin{split} \begin{align} \frac{d\mathbf{f}(\mathbf{x})}{d \mathbf{x}} &= \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \vdots &\ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} \in \mathbb{R}^{m \times n} \end{align} \end{split}\]

これはまさに、ベクトル値関数\(\mathbf{f}: \mathbb{R}^n \to \mathbb{R}^m\)のヤコビ行列の定義を与えている:

\[\begin{split} \begin{align} \mathbf{J} = \nabla_{\mathbf{x}} \mathbf{f} = \frac{d\mathbf{f}(\mathbf{x})}{d \mathbf{x}} &= \begin{bmatrix} \frac{\partial \mathbf{f}}{\partial x_1} & \frac{\partial \mathbf{f}}{\partial x_2} & \cdots & \frac{\partial \mathbf{f}}{\partial x_n} \end{bmatrix} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \vdots &\ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} \in \mathbb{R}^{m \times n} \end{align} \end{split}\]

Jacobi行列(Jacobian)は、変数変換によるスケール変化を表す行列でもあり、確率密度分布や再パラメータ化などの文脈でも重要な役割を果たす。

とくに、変数変換を伴う重積分では、ヤコビ行列の行列式が重要な役割を果たす。 ヤコビ行列の行列式は、変数変換による体積の変化を表す。 例えば、2次元の変数変換\((x, y) \to (u, v)\)において、ヤコビ行列は次のように定義される。

\[\begin{split} \begin{align} \mathbf{J} &= \begin{bmatrix} \frac{\partial u}{\partial x} & \frac{\partial u}{\partial y} \\ \frac{\partial v}{\partial x} & \frac{\partial v}{\partial y} \end{bmatrix} \end{align} \end{split}\]

このとき、

\[ \begin{align} \int_A f(x, y) dxdy &= \int_B g(u, v) |\det(J)| dudv \end{align} \]

となる。ここで、\(A\)\((x, y)\)平面上の領域、\(B\)\((u, v)\)平面上の領域、\(g(u, v)\)は変数変換後の関数である。 ヤコビ行列の行列式(Jacobian)の絶対値が積分に現れている。

1.3.1. Hessian#

2階微分可能な実数値関数\(f: \mathbb{R}^n \to \mathbb{R}\)に対して、各変数で2回偏微分した行列をヘッセ行列(Hessian matrix)と呼ぶ。

\[\begin{split} \begin{align*} \boldsymbol{H}_f & = \frac{\partial^2 f}{\partial \boldsymbol{x}^2} = \nabla^2 f = \begin{pmatrix} \frac{\partial^2 f}{\partial x^2_1} & \cdots & \frac{\partial^2 f}{\partial x_1 x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n x_1} & \cdots & \frac{\partial^2 f}{\partial x^2_n} \end{pmatrix} \end{align*} \end{split}\]

微分が可換である(すなわち、\(f\)が2階連続微分可能である)ならば、ヘッセ行列は対称行列になる。 ヘッセ行列は、関数\(f\)の2次微分に関する情報を提供し、最適化問題において重要な役割を果たす。

視覚的には、ヘッセ行列は関数\(f\)の曲率を表し、関数の極値(最小値・最大値)の性質を理解するのに役立つ。

パラメータが2次元の誤差関数をイメージしてみるとよい。 ヘッセ行列の固有値が正であれば、その点は局所的な最小値であり、負であれば局所的な最大値である。固有値が混在している場合、その点は鞍点(saddle point)である。

1.4. 条件つき最適化#

機械学習モデルのような特定のモデルでデータの説明を試みる場合、モデルのパラメータや変数に対して制約条件が課されることがある。 こうした場合、制約条件を満たしつつ目的関数を最小化する必要がある。 そのような問題を条件つき最適化問題と呼ぶが、中でも非常によく用いられる手法が ラグランジュ未定乗数法 (Lagrange multipliers) である。

\[\begin{split} \begin{align*} \text{minimize} \quad & f(\mathbf{x}) \\ \text{subject to} \quad & g_i(\mathbf{x}) = 0, \quad i = 1, \ldots, m \end{align*} \end{split}\]

上の式の意味するところは、\(m\)個の制約条件\(g_i(\mathbf{x}) = 0\)を満たしつつ、目的関数\(f(\mathbf{x})\)を最小化せよ、ということである。 制約条件がない場合は、単に\(\nabla f(\mathbf{x}) = 0\)を解けばよいが、制約条件がある場合は以下のようにする。

\[\begin{split} \begin{align*} \mathcal{L}(\mathbf{x}, \boldsymbol{\lambda}) &= f(\mathbf{x}) + \sum_{i=1}^m \lambda_i g_i(\mathbf{x}) \\ \nabla_{\mathbf{x}} \mathcal{L}(\mathbf{x}, \boldsymbol{\lambda}) &= 0 \\ \nabla_{\boldsymbol{\lambda}} \mathcal{L}(\mathbf{x}, \boldsymbol{\lambda}) &= 0 \end{align*} \end{split}\]

この勾配の情報と、制約条件\(g_i(\mathbf{x}) = 0\)を同時に満たす点を探すことで、条件つき最適化問題を解くことができる。

練習問題

制約条件\(x+y=1\)のもとで、関数\(f(x,y) = x^2 + y^2\)を最小化せよ。

\[\begin{split} \begin{align*} \mathcal{L}(x,y,\lambda) &= f(x,y) + \lambda (g(x,y)) \\ &= x^2 + y^2 + \lambda (x+y-1) \end{align*} \end{split}\]
\[\begin{split} \begin{align*} \nabla_{(x,y,\lambda)} \mathcal{L}(x,y,\lambda) &= \begin{bmatrix} 2x + \lambda \\ 2y + \lambda \\ x + y - 1 \end{bmatrix} = 0 \end{align*} \end{split}\]

したがって、\(x = y = \frac{1}{2}\)が最適解である。

問題の式をみると、\(f(x,y)\)\(x,y\)の二乗和でありこれを\(r^2\)とおけば、原点を中心とする半径\(r\)の円上の点を表せる。 一方で、制約条件\(x+y=1\)は、\(x\)軸と\(y\)軸の交点\((1,0)\)\((0,1)\)を結ぶ直線を表す。 したがって今の問題は、原点を中心とする半径\(r\)の円が、直線\(x+y=1\)に接するような\(r\)と接点を求める問題である事がわかる。

簡単な問題の場合は、こうした幾何学的な解釈を行うことで、最適解を直感的に理解できることがあるが、より複雑な問題の場合は、ラグランジュ未定乗数法のような一般的な手法を用いるのが良いだろう。

問題

表面積が一定である直方体のうち、体積が最大となるものが立方体であることを示せ。