スカラーのベクトルによる微分の証明

機械学習

機械学習の線形回帰において行列、ベクトルによる計算が出てくる。例えば最小二乗法によって各成分の微分を取るとき、要素ごとの計算をしてもいいが、行列、ベクトルの式で計算することで実際にプログラムを書く時にもこれに反映することができるはず。

この記事ではスカラーのベクトルによる微分の紹介と実際に計算してその公式が成り立つことを確認する備忘録記事です。

スカラーのベクトルによる微分

まずは定義

$$
\boldsymbol{x} = \left(
\begin{array}{c}
x_1 \\
x_2 \\
\vdots \\
x_n
\end{array}
\right)
$$

に対して定義される関数$L(x)$の$x$による微分を次のように定義する。

$$
\frac{\partial L(\boldsymbol{x})}{\partial \boldsymbol{x}} = \left(
\begin{array}{c}
\frac{\partial L(x)}{\partial x_0} \\
\frac{\partial L(x)}{\partial x_1} \\
\vdots \\
\frac{\partial L(x)}{\partial x_n} \\
\end{array}
\right)
$$

よく使われる公式

$$
\boldsymbol{a},\boldsymbol{x}\in \mathbb{R}^n(n次元列ベクトル) , \boldsymbol{A} \in \boldsymbol{M}_n (n次正方行列)について
$$

$$
\begin{align*}
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{a}^T\boldsymbol{x} &= \boldsymbol{a} \\
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{a} &= \boldsymbol{a} \\
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{x} &= 2\boldsymbol{x} \\
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{A}\boldsymbol{x} &= (\boldsymbol{A}+\boldsymbol{A}^T)\boldsymbol{x} \\
\end{align*}
$$

これらを証明します。証明と言っても値を一般化して代入してて計算するだけです。難しかったら$n=2,3$の時を考えてみると手計算しやすくなると思います。

$$
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{a}^T\boldsymbol{x} = \boldsymbol{a}の証明
$$

$$
\begin{align*}
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{a}^T\boldsymbol{x} &=
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{a}^T\boldsymbol{x} \\
&= \frac{\partial}{\partial \boldsymbol{x}}
\left(\begin{array}{cccc}
a_1 & a_2 & \cdots & a_n
\end{array}\right)
\left(
\begin{array}{c}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{array}
\right) \\
&= \frac{\partial}{\partial \boldsymbol{x}}
(a_1x_1 + a_2x_2 + \cdots + a_nx_n) \\
&= \left(
\begin{array}{c}
\frac{\partial}{\partial x_1} (a_1x_1 + a_2x_2 + \cdots + a_nx_n)\\
\frac{\partial}{\partial x_2} (a_1x_1 + a_2x_2 + \cdots + a_nx_n)\\
\vdots \\
\frac{\partial}{\partial x_n} (a_1x_1 + a_2x_2 + \cdots + a_nx_n)\\
\end{array}
\right) \\
&= \left(
\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_n \\
\end{array}
\right) \\
&= \boldsymbol{a}
\end{align*}
$$


$$
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{a} = \boldsymbol{a} の証明 \\
$$

$$
\begin{align*}
\boldsymbol{x}^T\boldsymbol{a} &=
\left(\begin{array}{cccc}
x_1 & x_2 & \cdots & x_n
\end{array}\right)
\left(
\begin{array}{c}
a_1 \\
a_2 \\
\vdots \\
a_n \\
\end{array}
\right) \\
&= a_1x_1 + a_2x_2 + \cdots + a_nx_n \\
&= \left(\begin{array}{cccc}
a_1 & a_2 & \cdots & a_n
\end{array}\right)
\left(
\begin{array}{c}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{array}
\right) \\
&= \boldsymbol{a}^T\boldsymbol{x}
\end{align*}
$$

よって

$$
\begin{align*}
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{a} &=
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{a}^T\boldsymbol{x} \\
&= \boldsymbol{a}
\end{align*}
$$


$$
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{x} = 2\boldsymbol{x}の証明
$$

$$
\begin{align*}
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{x}
&= \frac{\partial}{\partial \boldsymbol{x}}
\left(\begin{array}{cccc}
x_1 & x_2 & \cdots & x_n
\end{array}\right)
\left(
\begin{array}{c}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{array}
\right) \\
&= \frac{\partial}{\partial \boldsymbol{x}}
\left(
x_1^2 + x_2^2 + \cdots + x_n^2
\right) \\
&= \left(
\begin{array}{c}
\frac{\partial}{\partial x_1} (x_1^2 + x_2^2 + \cdots + x_n^2)\\
\frac{\partial}{\partial x_2} (x_1^2 + x_2^2 + \cdots + x_n^2)\\
\vdots \\
\frac{\partial}{\partial x_n} (x_1^2 + x_2^2 + \cdots + x_n^2)\\
\end{array}
\right) \\
&= \left(
\begin{array}{c}
2x_1 \\
2x_2 \\
\vdots \\
2x_n \\
\end{array}
\right) \\
&= 2\left(
\begin{array}{c}
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{array} \\
\right) \\
&= 2\boldsymbol{x}
\end{align*}
$$


$$
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{A}\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^T)\boldsymbol{x} の証明
$$

$$
\begin{align*}
\frac{\partial}{\partial \boldsymbol{x}}\boldsymbol{x}^T\boldsymbol{A}\boldsymbol{x} &=
\frac{\partial}{\partial \boldsymbol{x}}
\left(
\begin{array}{ccc}
x_1 & \cdots & x_n
\end{array}
\right)
\left(
\begin{array}{ccc}
a_{11} & \cdots & a_{1n} \\
\vdots & a_{ij} & \vdots \\
a_{n1} & \cdots & a_{nn}\\
\end{array}
\right)
\left(
\begin{array}{c}
x_1 \\
\vdots \\
x_n \\
\end{array}
\right) \\
&= \frac{\partial}{\partial \boldsymbol{x}}
\left(
\begin{array}{ccc}
x_1 & \cdots & x_n
\end{array}
\right)
\left(
\begin{array}{c}
a_{11}x_1 + \cdots + a_{1n}x_n \\
\vdots \\
a_{n1}x_1 + \cdots + a_{nn}x_n \\
\end{array}
\right) \\
&= \frac{\partial}{\partial \boldsymbol{x}}
\left(
\begin{array}{ccc}
x_1 & \cdots & x_n
\end{array}
\right)
\left(
\begin{array}{c}
\sum_{i=1}^{n}a_{1i}x_i \\
\vdots \\
\sum_{i=1}^{n}a_{ni}x_i \\
\end{array}
\right) \\
&= \frac{\partial}{\partial \boldsymbol{x}}
\left(
x_1\sum_{i=1}^{n}a_{1i}x_i + \cdots + x_n\sum_{i=n}^{n}a_{ni}x_i
\right) \\
&=
\left(
\begin{array}{c}
\frac{\partial}{\partial x_1}(x_1\sum_{i=1}^{n}a_{1i}x_i + \cdots + x_n\sum_{i=n}^{n}a_{ni}x_i) \\
\vdots \\
\frac{\partial}{\partial x_n}(x_1\sum_{i=1}^{n}a_{1i}x_i + \cdots + x_n\sum_{i=n}^{n}a_{ni}x_i) \\
\end{array}
\right) \\
&=
\left(
\begin{array}{c}
\sum_{i=1}^{n}a_{1i}x_i + a_{11}x_1 + \cdots + a_{n1}x_n \\
\vdots \\
a_{1n}x_1 + \cdots + \sum_{i=1}^{n}a_{ni}x_i + a_{nn}x_n
\end{array}
\right) \\
&=
\left(
\begin{array}{c}
2a_{11}x_1 + \cdots + (a_{1n} + a_{n1})x_n \\
\vdots \\
(a_{1n} + a_{n1})x_1 + \cdots + 2a_{nn}x_n \\
\end{array}
\right) \\
&=
\left(
\begin{array}{c}
2a_{11} + \cdots + (a_{1n} + a_{n1}) \\
\vdots \\
(a_{1n} + a_{n1}) + \cdots + 2a_{nn} \\
\end{array}
\right)
\left(
\begin{array}{c}
x_1 \\
\vdots \\
x_n \\
\end{array}
\right) \\
&=
\left(
\boldsymbol{A}^T + \boldsymbol{A}
\right)
\boldsymbol{x}
\end{align*}
$$

少し見にくいですね、最後の証明も長くなりそうだったので1項目とn項目しかかいてないので少しわかりにくいかも?

そもそも間違いもありそうなのでもし誤字ってたり間違ってたりしたら指摘していただけると幸いです。

コメント

タイトルとURLをコピーしました