thumbnail

【簡単】ベクトル・行列の微分の基礎を完全解説

スカラ値関数やベクトル値関数を、ベクトルや行列で微分する際の概念や結果をまとめております。ラプラシアンやヘッセ行列との関係も扱っています。

ベクトル・行列の微分公式一覧はこちらから

本記事では、ベクトルと行列による微分の基本の説明をしています。

基本は知っており、公式だけが知りたい方は以下のチートシートをご覧ください。

それでは、以下の章からベクトルと行列の微分の基礎について解説します。

スカラ値関数のベクトル微分

列ベクトルで微分〜勾配〜

f:RNRf:\mathbb{R}^N\to\mathbb{R}をN変数実数値関数とし、N変数(次元)ベクトルx=[x1,,xN]\mathbf{x}=\begin{bmatrix}x_1,\cdots,x_N\end{bmatrix}^\topで微分することを考える。

つまり、N変数スカラ値関数y=f(x1,x2,,xN)y=f(x_1,x_2,\cdots,x_N)をベクトルx\mathbf{x}で微分する。

  • スカラ値関数とは、結果が1変数になる、いわば中高で扱うようなy=f()y=f(・)で表せる関数のこと。
    対して、ベクトル値関数はyがベクトルで、y=[y1,,yM]=f()\mathbf{y}=[y_1,\cdots,y_M]^\top=\mathbf{f}(・)のように表せる関数をいう。

スカラ値関数ffをN変数の列ベクトルx\mathbf{x}で微分すると、その結果もN変数の列ベクトルとなる。

各要素は、スカラ値関数ffを、微分に用いたベクトルx\mathbf{x}の各要素それぞれについて微分したものとなる。

fx=[fx1 fx2 fxN]\frac{\partial{f}}{\partial{\mathbf{x}}}=\begin{bmatrix}\dfrac{\partial{f}}{\partial{x_1}}\\~\\\dfrac{\partial{f}}{\partial{x_2}}\\\vdots\\~\\\dfrac{\partial{f}}{\partial{x_N}}\end{bmatrix}

上記の演算は勾配演算とも呼び、以下の表記はいずれも同じ演算である。

fx=f=gradf\dfrac{\partial{f}}{\partial{\mathbf{x}}}=\nabla{f}=\mathrm{grad}{f}

つまり、

=x\nabla = \dfrac{\partial}{\partial{\mathbf{x}}}

行ベクトルでの微分

行ベクトルx\mathbf{x}^\topで微分すると、その結果も行ベクトルとなる。

先ほどと同様に、元の関数を微分に用いたベクトルの要素それぞれで微分したものになっている。

fx=[fx1 fx2  fxN]\frac{\partial{f}}{\partial{\mathbf{x}^\top}}=\begin{bmatrix}\dfrac{\partial{f}}{\partial{x_1}}~\dfrac{\partial{f}}{\partial{x_2}}~\cdots~\dfrac{\partial{f}}{\partial{x_N}}\end{bmatrix}

また、次が成り立つ。

fx=(fx)\frac{\partial{f}}{\partial{\mathbf{x}^\top}}=\Biggl(\frac{\partial{f}}{\partial{\mathbf{x}}}\Biggr)^\top

ベクトルで2階微分〜ヘッセ行列〜

行ベクトルで微分した後、列ベクトルで微分したものをヘッセ行列(へシアン)という。

2fxx=[2fxixj]\dfrac{\partial^2f}{\partial\mathbf{x}\partial\mathbf{x}^\top}=\begin{bmatrix} \dfrac{\partial^2f}{\partial{x}_i\partial{x}_j}\end{bmatrix}

この演算は\nablaのテンソル積でも表現できる。

f=2fxx\nabla\otimes\nabla{f}=\dfrac{\partial^2f}{\partial\mathbf{x}\partial\mathbf{x}^\top}

【補足】ラプラシアン

2\nabla^2\nabla\nablaの内積で、この演算子をラプラシアンといいΔ\Deltaで表す。つまり、

Δf=2f=f\Delta{f}=\nabla^2f=\nabla\cdot\nabla{f}

ラプラシアンは次の演算を行う演算子である。

Δf=i=1N2fxi2\Delta{f}=\sum_{i=1}^N\dfrac{\partial^2f}{\partial{x}_i^2}

ベクトル値関数のベクトル値微分

f:RNRM\mathbf{f}:\mathbb{R}^N\to\mathbb{R}^Mをベクトル値関数、x=[x1,,xN]\mathbf{x}=\begin{bmatrix}x_1,\cdots,x_N\end{bmatrix}^\topをN変数ベクトルとする。

つまり、次のように定義する。

f(x)=[f1(x)f2(x)fM(x)]\mathbf{f}(\mathbf{x})=\begin{bmatrix}f_1(\mathbf{x})\\f_2(\mathbf{x})\\\vdots\\f_M(\mathbf{x})\end{bmatrix}

ベクトルをベクトルで微分

ベクトルをベクトルで微分すると、行列になる。

ここで、行列には簡略的な表記法を使い、n×mn\times{m}の行列をA=[ai,j]\mathbf{A}=\begin{bmatrix}a_{i,j}\end{bmatrix}と表記する。iが行、jが列を表している。

fx=[fjxi]・\dfrac{\partial\mathbf{f}}{\partial\mathbf{x}}=\begin{bmatrix} \dfrac{\partial{f}_j}{\partial{x}_i}\end{bmatrix}
fx=[fixj]・\dfrac{\partial\mathbf{f}}{\partial\mathbf{x}^\top}=\begin{bmatrix} \dfrac{\partial{f}_i}{\partial{x}_j}\end{bmatrix}

2つ目の行列をヤコビ行列(ヤコビアン)という。

スカラ値関数を行列で微分

n×mn\times{m}の行列をA=[ai,j]\mathbf{A}=\begin{bmatrix}a_{i,j}\end{bmatrix}と簡略的に表記する。スカラ値関数ffを行列A\mathbf{A}で微分した値は、A\mathbf{A}の各成分ai,ja_{i,j}ffを微分した行列となり、元の行列と同じ大きさとなる。

fA=[fai,j]\dfrac{\partial{f}}{\partial\mathbf{A}}=\begin{bmatrix}\dfrac{\partial{f}}{\partial{a_{i,j}}}\end{bmatrix}

公式一覧

次のチートシートにまとめてあります。