「ベクトルで微分・行列で微分」公式まとめ

機械学習の分野で頻出の

 - スカラーをベクトルで微分
 - ベクトルをベクトルで微分
 - スカラーを行列で微分

の公式をまとめました。
順次追加予定です。

# 1. スカラーのベクトル微分
## 1.1. 計算の定義
```math
f \in \mathbb{ R },   \\ 
\boldsymbol{x}  \in \mathbb{ R }^n
```
のとき、

```math
\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. 公式

```math

\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. 計算の定義
```math
\boldsymbol{y}  \in \mathbb{ R }^m, \\ 
\boldsymbol{x}  \in \mathbb{ R }^n
```
のとき、

```math
\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. 公式

```math

\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. 計算の具体例

```math
y_{i} = f\left(z_{i}\right) \left( i=1,  \cdots , m \right),
```
```math
\boldsymbol{z} = A\boldsymbol{x}
```
```math
\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)
```

のとき、

```math
\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. 計算の定義
```math
f  \in \mathbb{ R }, \\ 
A  \in \mathbb{ R }^{n \times m}
```
のとき、

```math
\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. 公式

```math

\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. 計算の具体例

```math
P = \left(I - KH\right)B\left(I - KH\right)^T + KRK^T
```
```math
\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)
```

のとき、

```math
\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}
```

なお、途中で、

```math
U = I - KH
```

としています。
因みに、この計算は、カルマンフィルタにおいて「解析誤差共分散行列(P)の対角成分を最小にするカルマンゲイン(K)」を求める際に登場します。


# 参考文献
 - [CS229 Lecture notes](https://cs229.stanford.edu/notes2022fall/main_notes.pdf)
 - [C.M.ビショップ 著『パターン認識と機械学習 上』(丸善出版)](https://www.amazon.co.jp/%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%AA%8D%E8%AD%98%E3%81%A8%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E4%B8%8A-C-M-%E3%83%93%E3%82%B7%E3%83%A7%E3%83%83%E3%83%97/dp/4621061224)
 - <a href="https://math.stackexchange.com/questions/2128462/derivative-of-squared-frobenius-norm-of-a-matrix">linear algebra - Derivative of squared Frobenius norm of a matrix - Mathematics Stack Exchange</a>