機械学習の分野で頻出の
- スカラーをベクトルで微分
- ベクトルをベクトルで微分
- スカラーを行列で微分
の公式をまとめました。
順次追加予定です。
1. スカラーのベクトル微分
1.1. 計算の定義
f \in \mathbb{ R }, \\
\boldsymbol{x} \in \mathbb{ R }^n
のとき、
\frac{ \partial f }{ \partial \boldsymbol{x} } =
\left(
\begin{array}{ccccc}
\frac{ \partial f }{ \partial {x}_{1} }, & \cdots &
\frac{ \partial f }{ \partial {x}_{i} }, & \cdots &
\frac{ \partial f }{ \partial {x}_{n} }\
\end{array}
\right)^T
\in \mathbb{ R }^n
1.2. 公式
\begin{eqnarray*}
\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 A\boldsymbol{x}
&=& (A+A^T)\boldsymbol{x} \\
\frac{ \partial }{ \partial \boldsymbol{x} }
\left(\boldsymbol{x} - \boldsymbol{a} \right)^T
\left(\boldsymbol{x} - \boldsymbol{a} \right)
&=& 2\left(\boldsymbol{x} - \boldsymbol{a} \right) \\
\frac{ \partial }{ \partial \boldsymbol{x} }
\left(A\boldsymbol{x} - \boldsymbol{b} \right)^T
\left(A\boldsymbol{x} - \boldsymbol{b} \right)
&=& 2A^T \left( A \boldsymbol{x} -\boldsymbol{b} \right) \\
\frac{ \partial }{ \partial \boldsymbol{x} }
\left(A\boldsymbol{x} - \boldsymbol{b} \right)^T C
\left(A\boldsymbol{x} - \boldsymbol{b} \right)
&=& A^T \left(C+C^T\right)\left( A \boldsymbol{x} - \boldsymbol{b} \right) \\
\end{eqnarray*}
2. ベクトルのベクトル微分
2.1. 計算の定義
\boldsymbol{y} \in \mathbb{ R }^m, \\
\boldsymbol{x} \in \mathbb{ R }^n
のとき、
\frac{ \partial \boldsymbol{y} }{ \partial \boldsymbol{x} } =
\left(
\begin{array}{ccccc}
\frac{ \partial {y}_{1} }{ \partial {x}_{1} } & \cdots &
\frac{ \partial {y}_{j} }{ \partial {x}_{1} } & \cdots &
\frac{ \partial {y}_{m} }{ \partial {x}_{1} }\\
\vdots & \ddots & & & \vdots \\
\frac{ \partial {y}_{1} }{ \partial {x}_{i} } & &
\frac{ \partial {y}_{j} }{ \partial {x}_{i} } & &
\frac{ \partial {y}_{m} }{ \partial {x}_{i} } \\
\vdots & & & \ddots & \vdots \\
\frac{ \partial {y}_{1} }{ \partial {x}_{n} } & \cdots &
\frac{ \partial {y}_{j} }{ \partial {x}_{n} } & \cdots &
\frac{ \partial {y}_{m} }{ \partial {x}_{n} }\end{array}
\right)
\in \mathbb{ R }^{n \times m}
※これの行と列を入れ替えたものを定義としているケースも多いようですが、個人的にはこっちの定義の方がしっくり来ます。
以下の5つの公式のうち2つ目と3つ目の式は、この定義に基づいた場合に導き出されるものです。
2.2. 公式
\begin{eqnarray*}
\frac{ \partial }{ \partial \boldsymbol{x} }
\boldsymbol{x}
&=& I \\
\frac{ \partial }{ \partial \boldsymbol{x} }
A\boldsymbol{x}
&=& A^T \\
\frac{ \partial }{ \partial \boldsymbol{x} }
f \left(\boldsymbol{u} = g\left(\boldsymbol{x}\right)\right)
&=& \frac{ \partial g\left(\boldsymbol{x}\right) }{ \partial \boldsymbol{x} }
\frac{ \partial f\left(\boldsymbol{u}\right) }{ \partial \boldsymbol{u} }
\\
\frac{ \partial }{ \partial \boldsymbol{x} }
\left(
\begin{array}{ccccc}
f\left({x}_{1}\right), & \cdots &
f\left({x}_{i}\right), & \cdots &
f\left({x}_{n}\right)\
\end{array}
\right)
&=&
\left(
\begin{array}{ccccc}
f'\left({x}_{1}\right) &
0 & \cdots & \cdots &
0\\
0 & \ddots & & & \vdots \\
\vdots & &
f'\left({x}_{i}\right) & &
\vdots \\
\vdots & & & \ddots & 0 \\
0 & \cdots &
\cdots & 0 &
f'\left({x}_{n}\right)\end{array}
\right)\\
\frac{\partial}{\partial {\boldsymbol x}}\left( {\boldsymbol x}\odot {\boldsymbol y}\right) &=& diag(y_1, ..., y_n)
\end{eqnarray*}
2.3. 計算の具体例
y_{i} = f\left(z_{i}\right) \left( i=1, \cdots , m \right),
\boldsymbol{z} = A\boldsymbol{x}
\left(
\begin{array}{ccccc}
\boldsymbol{y}, \boldsymbol{z} \in \mathbb{ R }^m \\
\boldsymbol{x} \in \mathbb{ R }^n \\
A \in \mathbb{ R }^{m \times n}
\end{array}
\right)
のとき、
\begin{eqnarray}
\frac{ \partial \boldsymbol{y} }{ \partial \boldsymbol{x} } &=&
\frac{ \partial \boldsymbol{z}}{ \partial \boldsymbol{x} }
\frac{ \partial \boldsymbol{y}}{ \partial \boldsymbol{z} } \\
&=&
\frac{ \partial A\boldsymbol{x}}{ \partial \boldsymbol{x} }
\frac{ \partial f\left(\boldsymbol{z}\right)}{ \partial \boldsymbol{z} } \\
&=&
A^T
\left(
\begin{array}{ccccc}
f'\left({z}_{1}\right) &
0 & \cdots & \cdots &
0\\
0 & \ddots & & & \vdots \\
\vdots & &
f'\left({z}_{i}\right) & &
\vdots \\
\vdots & & & \ddots & 0 \\
0 & \cdots &
\cdots & 0 &
f'\left({z}_{m}\right)\end{array}
\right)
\in \mathbb{ R }^{n \times m}
\end{eqnarray}
3. スカラーの行列微分
3.1. 計算の定義
f \in \mathbb{ R }, \\
A \in \mathbb{ R }^{n \times m}
のとき、
\frac{ \partial f }{ \partial A } =
\left(
\begin{array}{ccccc}
\frac{ \partial f }{ \partial {A}_{11} } & \cdots &
\frac{ \partial f }{ \partial {A}_{1j} } & \cdots &
\frac{ \partial f }{ \partial {A}_{1m} }\\
\vdots & \ddots & & & \vdots \\
\frac{ \partial f }{ \partial {A}_{i1} } & &
\frac{ \partial f }{ \partial {A}_{ij} } & &
\frac{ \partial f }{ \partial {A}_{im} } \\
\vdots & & & \ddots & \vdots \\
\frac{ \partial f }{ \partial {A}_{n1} } & \cdots &
\frac{ \partial f }{ \partial {A}_{nj} } & \cdots &
\frac{ \partial f }{ \partial {A}_{nm} }\end{array}
\right)
\in \mathbb{ R }^{n \times m}
3.2. 公式
\begin{eqnarray*}
\frac{ \partial }{ \partial A }
tr \left( A \right)
&=& I \\
\frac{ \partial }{ \partial A }
tr \left( AB \right)
&=& B^T \\
\frac{ \partial }{ \partial A }
tr \left( BA \right)
&=& B^T \\
\frac{ \partial }{ \partial A }
tr \left( ABA^T \right)
&=& A\left(B + B^T \right)\\
\frac{ \partial }{ \partial A }
tr \left( BAB^T \right)
&=& B^TB \\
\frac{ \partial }{ \partial A }
tr \left(f \left(U = g\left(A\right)\right)\right)
&=& \frac{ \partial }{ \partial U }
tr \left(f \left(U\right)\right)
\frac{ \partial }{ \partial A } tr\left(g\left(A\right)\right)
\\
\frac{ \partial }{ \partial A^T }
f \left( A \right)
&=& \left(\frac{ \partial }{ \partial A }
f \left( A \right) \right)^T\\
\frac{ \partial }{ \partial A } |A|
&=& |A|\left(A^{-1} \right)^T\\
\frac{ \partial }{ \partial A } \ln|A|
&=& \left(A^{-1} \right)^T\\
\frac{ \partial }{ \partial X } ||AX - B||_F^2
&=& 2A^T\left(AX - B \right)\\
\frac{ \partial }{ \partial X } ||XA - B||_F^2
&=& 2\left(XA - B \right) A^T\\
\end{eqnarray*}
※ 最後の2式だけ、$X$で微分しているので注意してください。
3.3. 計算の具体例
P = \left(I - KH\right)B\left(I - KH\right)^T + KRK^T
\left(
\begin{array}{ccccc}
P, B \in \mathbb{ R }^{n \times n}\\
R \in \mathbb{ R }^{m \times m} \\
H \in \mathbb{ R }^{m \times n} \\
K \in \mathbb{ R }^{n \times m} \\
B^T=B \\
R^T=R
\end{array}
\right)
のとき、
\begin{eqnarray}
\frac{ \partial }{ \partial K } tr \left( P \right) &=&
\frac{ \partial }{ \partial K } tr \left( \left(I - KH\right)B\left(I - KH\right)^T\right) + \frac{ \partial }{ \partial K }tr\left(KRK^T \right) \\
&=&
\frac{ \partial }{ \partial U } tr \left( UBU^T \right)\frac{ \partial }{ \partial K } tr \left( I-KH \right) + \frac{ \partial }{ \partial K } tr \left( KRK^T \right) \\
&=&
U\left(B + B^T \right) \left(-H^T\right) + K\left(R + R^T\right) \\
&=&
-2UBH^T + 2KR \\
&=&
-2\left(I - KH\right)BH^T + 2KR \\
&=&
-2BH^T+2K\left(HBH^T + R\right)
\in \mathbb{ R }^{n \times m}
\end{eqnarray}
なお、途中で、
U = I - KH
としています。
因みに、この計算は、カルマンフィルタにおいて「解析誤差共分散行列(P)の対角成分を最小にするカルマンゲイン(K)」を求める際に登場します。