1. はじめに
ある計算をしていたら
\frac{\partial}{\partial \boldsymbol{x}} \left|| \boldsymbol{b} - A \boldsymbol{x} \right||^2 \tag{1.1}
の計算をする必要性に迫られた。ここで、$ \boldsymbol{b} \in \mathbb{R}^m, A \in \mathbb{R}^{m \times n}, \boldsymbol{x} \in \mathbb{R}^n $ である。ムムッ、これはどのように計算すればよいのだっけ?
まず、ノルムの二乗の部分を展開する。
\frac{\partial}{\partial \boldsymbol{x}} \left( \boldsymbol{b} - A \boldsymbol{x} \right)^T \left( \boldsymbol{b} - A \boldsymbol{x} \right).
\tag{1.2}
掛け算の微分だから積の微分公式を使って・・・。といっても $(\boldsymbol{b} - A \boldsymbol{x})^T$ を $\boldsymbol{x}$ で微分するってどういうこと?
わからない・・・。焦る。
これが発端で線形代数の微分をきちんと整理することにした。検証には参考文献 1 を利用させてもらいました。
2. 定義
ベクトルを $\boldsymbol{x} = (x_1, \dots, x_n)^T$ とすると、ベクトル $\boldsymbol{x}$ による微分の定義は
\frac{\partial}{\partial \boldsymbol{x}} =
\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\tag{2.1}
である。これは勾配ともいい、$\nabla_{\boldsymbol{x}}$ や $\mathrm{grad}_{\boldsymbol{x}}$ とも書く。たとえば
\frac{\partial}{\partial \boldsymbol{x}} \left|| \boldsymbol{b} - A \boldsymbol{x} \right||^2
= \nabla_{\boldsymbol{x}} \left|| \boldsymbol{b} - A \boldsymbol{x} \right||^2
= \mathrm{grad}_{\boldsymbol{x}} \left|| \boldsymbol{b} - A \boldsymbol{x} \right||^2
\tag{2.2}
などのように。
3. 微分の公式
内積の微分は
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{a} = \boldsymbol{a}
\tag{3.1}
である。
ただし、$\boldsymbol{x}^T \boldsymbol{a} = \boldsymbol{a}^T \boldsymbol{x}$ なので、(3.1)式は
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{a}^T \boldsymbol{x} = \boldsymbol{a}
\tag{3.1'}
としてもよい。しかし、私は(3.1)式の方を好む。理由は後述する。
次に $\boldsymbol{x}$ と $\boldsymbol{x}$ の内積、すなわちノルムの二乗 $\boldsymbol{x}^T \boldsymbol{x} = || \boldsymbol{x} ||^2$ の微分は
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{x}
= \frac{\partial}{\partial \boldsymbol{x}} || \boldsymbol{x} ||^2
= 2 \boldsymbol{x}
\tag{3.2}
である。
さらに $\boldsymbol{x}$ と $Q \boldsymbol{x}$ の内積、すなわち2次形式の微分は
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T Q \boldsymbol{x}
= (Q + Q^T) \boldsymbol{x}
\tag{3.3}
である。ただし、$Q \in \mathbb{R}^{(n \times n)}$ である。
では $A \boldsymbol{x}$ と $B \boldsymbol{x}$ の内積の微分はどうだろう(ただし $B \in \mathbb{R}^{m \times n}$)。それは
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x})^T B \boldsymbol{x}
= \frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T A^T B \boldsymbol{x}
= (A^T B + B^T A) \boldsymbol{x}
\tag{3.4}
となる。
これを利用すると $A \boldsymbol{x}$ のノルム、すなわち $|| A \boldsymbol{x} ||^2$ の微分は
\frac{\partial}{\partial \boldsymbol{x}} || A \boldsymbol{x} ||^2
= \frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x})^T A \boldsymbol{x}
= \frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T A^T A \boldsymbol{x}
= 2 A^T A \boldsymbol{x}
\tag{3.5}
となる。
さらに複雑にしてみる。今度は $A \boldsymbol{x} + \boldsymbol{a}$ と $B \boldsymbol{x} + \boldsymbol{b}$ の内積の微分である(ただし $\boldsymbol{b} \in \mathbb{R}^m$)。これは
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x} + \boldsymbol{a})^T (B \boldsymbol{x} + \boldsymbol{b})
&= A^T (B \boldsymbol{x} + \boldsymbol{b}) + B^T (A \boldsymbol{x} + \boldsymbol{a}) \\
&= (A^T B + B^T A) \boldsymbol{x} + A^T \boldsymbol{b} + B^T \boldsymbol{a}
\end{split}\end{equation}
\tag{3.6}
となる。
これを使えば $A \boldsymbol{x} + \boldsymbol{a}$ のノルムの二乗 $|| A \boldsymbol{x} + \boldsymbol{a} ||^2$ の微分などなんでもない。それは
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} || A \boldsymbol{x} + \boldsymbol{a} ||^2
&= \frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x} + \boldsymbol{a})^T (A \boldsymbol{x} + \boldsymbol{a}) \\
&= 2 A^T (A \boldsymbol{x} + \boldsymbol{b})
\end{split}\end{equation}
\tag{3.7}
となる。
もっと複雑にしてみよう。(3.6)式の応用で、$(A \boldsymbol{x} + \boldsymbol{a})^T C (B \boldsymbol{x} + \boldsymbol{b}) $ の微分を求めてみる($ただし C \in \mathbb{R}^{m \times m}$)。これは
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x} + \boldsymbol{a})^T C (B \boldsymbol{x} + \boldsymbol{b})
&= A^T C (B \boldsymbol{x} + \boldsymbol{b}) + B^T C^T (A \boldsymbol{x} + \boldsymbol{a}) \\
&= (A^T C B + B^T C^T A) \boldsymbol{x} + A^T C \boldsymbol{b} + B^T C^T \boldsymbol{a}
\end{split}\end{equation}
\tag{3.8}
となる。何とも複雑な結果だ。でも、これを使うと、$(A \boldsymbol{x} + \boldsymbol{a})^T C (A \boldsymbol{x} + \boldsymbol{a}) $ の微分は
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x} + \boldsymbol{a})^T C (A \boldsymbol{x} + \boldsymbol{a})
&= A^T (C + C^T) (A \boldsymbol{x} + \boldsymbol{a})
\end{split}\end{equation}
\tag{3.9}
と簡単になる。
4. 証明
(3.1)式の証明
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{a}
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\begin{pmatrix}
x_1 & \dots & x_n\\
\end{pmatrix}
\begin{pmatrix}
a_1 \\ \vdots \\ a_n\\
\end{pmatrix} \\
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
(x_1 a_1 + \dots x_n a_n) \\
&=\begin{pmatrix}
a_1 \\ \vdots \\ a_n
\end{pmatrix}
= \boldsymbol{a}
\end{split}\end{equation}
\tag{4.1}
この証明では $\boldsymbol{x}^T \boldsymbol{a}$ を先に計算してから $\boldsymbol{x}$ で微分したが、はじめに $\boldsymbol{x}^T$ を微分して
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T
= \begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\begin{pmatrix}
x_1 & \cdots & x_n
\end{pmatrix}
=\begin{pmatrix}
1 & 0 & \cdots & 0 \\
0 & 1 & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \cdots & 1 \\
\end{pmatrix}
= I
となることを利用して
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{a} = I \boldsymbol{a} = \boldsymbol{a}
としてもよい。この方が楽である。(3.1')式よりも(3.1)式を好むのはこれが理由である。
さらにこの応用として
\frac{\partial}{\partial \boldsymbol{x}} \left( A \boldsymbol{x} \right)^T
=\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T A^T
= I A^T = A^T
を得ることができる。
(3.2)式の証明
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{x}
&= \frac{\partial}{\partial \boldsymbol{x}} || \boldsymbol{x} ||^2 \\
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\begin{pmatrix}
x_1 & \dots & x_n\\
\end{pmatrix}
\begin{pmatrix}
x_1 \\ \vdots \\ x_n\\
\end{pmatrix} \\
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
(x_1^2 + \dots x_n^2) \\
&=\begin{pmatrix}
2 x_1 \\ \vdots \\ 2 x_n
\end{pmatrix}
= 2 \boldsymbol{x}
\end{split}\end{equation}
\tag{4.2}
(3.3)式の証明
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T Q \boldsymbol{x}
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\begin{pmatrix}
x_1 & \dots & x_n\\
\end{pmatrix}
\begin{pmatrix}
q_{1,1} & \cdots & q_{1,n}\\
\vdots & \ddots & \vdots \\
q_{m,1} & \cdots & q_{m,n} \\
\end{pmatrix}
\begin{pmatrix}
x_1 \\ \vdots \\ x_n\\
\end{pmatrix} \\
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\sum_{i=1}^{n} x_i \sum_{j=1}^{n} q_{i,j} x_j \\
&=\begin{pmatrix}
\frac{\partial}{\partial x_1} \\
\vdots \\
\frac{\partial}{\partial x_n} \\
\end{pmatrix}
\sum_{i=1}^{n} \sum_{j=1}^{n} x_i q_{i,j} x_j \\
\end{split}\end{equation}
\tag{4.3}
ここで、微分の第 $k$ 成分は
\begin{equation}\begin{split}
\frac{\partial}{\partial x_k} \sum_{i=1}^{n} \sum_{j=1}^{n} x_i q_{i,j} x_j
&= \sum_{j=1}^{n} q_{k,j} x_j + \sum_{i=1}^{n} x_i q_{i,k} \\
&= \sum_{j=1}^{n} (Q)_{k,j} x_j + \sum_{i=1}^{n} x_i (Q^T)_{k,i} \\
&= (Q \boldsymbol{x})_k + (Q^T \boldsymbol{x})_k \\
&= \lbrace (Q + Q^T) \boldsymbol{x} \rbrace_k
\end{split}\end{equation}
\tag{4.4}
であるから、(4.3)式は
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T Q \boldsymbol{x}
= (Q + Q^T) \boldsymbol{x}
\tag{3.3}
となる。
(3.4)式の証明
(3.3)式において $Q = A^T B$ とおくと
\frac{\partial}{\partial \boldsymbol{x}} \boldsymbol{x}^T A^T B \boldsymbol{x}
= \left[ A^T B + (A^T B)^T \right] \boldsymbol{x}
= (A^T B + B^T A) \boldsymbol{x}
\tag{4.5}
となる。これで(3.4)式の右辺第2項が第3項に等しいことが証明できた。
さて、ここで異なる方法で(3.3)式の微分を求める方法を紹介する。ただし、この方法には数学的な根拠は全くない。単なる暗記テクニックである。
「1. はじめに」でノルムの二乗 $||\boldsymbol{b} - A \boldsymbol{x}||^2 = (\boldsymbol{b} - A \boldsymbol{x})^T (\boldsymbol{b} - A \boldsymbol{x})$ の微分を計算する際に微分の積の公式を使おうとして途方に暮れた話をした。微分の積の公式とは
\frac{\partial}{\partial \boldsymbol{x}} f(\boldsymbol{x}) \cdot g(\boldsymbol{x})
= \frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}} \cdot g(\boldsymbol{x})
+ f(\boldsymbol{x}) \cdot \frac{\partial g(\boldsymbol{x})}{\partial \boldsymbol{x}}
\tag{4.6}
のことである。このマネをすると(3.4)式は
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x})^T B \boldsymbol{x}
= \frac{\partial (A \boldsymbol{x})^T}{\partial \boldsymbol{x}} B \boldsymbol{x} + (A \boldsymbol{x})^T \frac{\partial B \boldsymbol{x}}{\partial \boldsymbol{x}}
\tag{4.7}
となる。これはもちろん正しくない。そもそも $\partial (A \boldsymbol{x})^T / \partial \boldsymbol{x}$ など計算できない。なぜなら微分対象の $(A \boldsymbol{x})^T$ はベクトルであり勾配の計算(ベクトル $\boldsymbol{x}$ で微分すること)ができない。勾配はスカラー値(たとえば内積 $\boldsymbol{x}^T \boldsymbol{a}$)に対してのみ計算できる。しかし、そこを目をつぶってエイヤーと形式的に $\partial (A \boldsymbol{x})^T / \partial \boldsymbol{x} = A^T, \partial B \boldsymbol{x} / \partial \boldsymbol{x} = B$ と思って計算すると(4.7)式は
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x})^T B \boldsymbol{x}
= A^T B \boldsymbol{x} + (A \boldsymbol{x})^T B
\tag{4.8}
となる。さらに、右辺第2項の転置をとると
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} (A \boldsymbol{x})^T B \boldsymbol{x}
&= A^T B \boldsymbol{x} + \left[ (A \boldsymbol{x})^T B \right]^T \\
&= A^T B \boldsymbol{x} + B^T A \boldsymbol{x} \\
&= (A^T B + B^T A) \boldsymbol{x}
\end{split}\end{equation}
\tag{4.9}
となって、なんと(3.4)式が再現できるではないか!
確認のため(3.6)式に対しても同じことをやってみると
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} &(A \boldsymbol{x} + \boldsymbol{a})^T (B \boldsymbol{x} + \boldsymbol{b}) \\
&=\frac{\partial (A \boldsymbol{x} + \boldsymbol{a})^T}{\partial \boldsymbol{x}} (B \boldsymbol{x} + \boldsymbol{b})
+ \left[ (A \boldsymbol{x} + \boldsymbol{a})^T \frac{\partial (B \boldsymbol{x} + \boldsymbol{b})}{\partial \boldsymbol{x}} \right]^T \\
&=A^T (B \boldsymbol{x} + \boldsymbol{b})
+ \left[ (A \boldsymbol{x} + \boldsymbol{a})^T B \right]^T \\
&=A^T (B \boldsymbol{x} + \boldsymbol{b})
+ B^T (A \boldsymbol{x} + \boldsymbol{a}) \\
\end{split}\end{equation}
\tag{4.10}
となり、(3.6)式の右辺第1項が再現できる。
まとめると、$f(\boldsymbol{x}), g(\boldsymbol{x})$ が $\boldsymbol{x}$ についての一次形式(たとえば $A \boldsymbol{x} + \boldsymbol{a}$ など)である場合、積 $f(\boldsymbol{x})^T g(\boldsymbol{x})$ の微分は
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} f(\boldsymbol{x})^T g(\boldsymbol{x})
&= \frac{\partial f(\boldsymbol{x})^T}{\partial \boldsymbol{x}} g(\boldsymbol{x}) + \left[ f(\boldsymbol{x})^T \frac{\partial g(\boldsymbol{x})}{\partial \boldsymbol{x}} \right]^T \\
&= \frac{\partial f(\boldsymbol{x})^T}{\partial \boldsymbol{x}} g(\boldsymbol{x}) + \frac{\partial g(\boldsymbol{x})^T}{\partial \boldsymbol{x}} f(\boldsymbol{x}) \\
\end{split}\end{equation}
\tag{4.11}
で計算できる。
5. おわりに
線形代数の計算をあなどってはいけない。つい普通の代数計算の感覚で進めていたらとんでもない迷路に入り込む。「1. はじめに」で紹介したノルムの二乗の微分がその好例で、他にも行列の積は一般に非可換 $AB \ne BA$ であることなどに注意しなければならない。
そもそも(1.1)式は G. ストラングの線形代数の本2)を読んでいて、射影と最小二乗法が同じように解けると書いてあったので、その確認の計算をしているときに出くわした。任意のベクトル $\boldsymbol{b} \in \mathbb{R}^m $ を行列 $A$ の列ベクトル空間に射影したベクトルを $\boldsymbol{p} = A \boldsymbol{\hat{x}}$ として、ベクトル $\boldsymbol{\hat{x}}$ を求める際に、誤差 $\boldsymbol{e} = \boldsymbol{b} - A \boldsymbol{\hat{x}}$ の最小化問題を考える。すなわち
\boldsymbol{\hat{x}} = \mathrm{argmin}_{\boldsymbol{x}} || \boldsymbol{e} ||^2
= \mathrm{argmin}_{\boldsymbol{x}} || \boldsymbol{b} - A \boldsymbol{x} ||^2
\tag{5.1}
を解いて $\boldsymbol{\hat{x}}$ を得る。(3.7)式を用いれば
\begin{equation}\begin{split}
\frac{\partial}{\partial \boldsymbol{x}} || \boldsymbol{b} - A \boldsymbol{x} ||^2
&= - 2 A^T (\boldsymbol{b} - A \boldsymbol{x}) = 0
\end{split}\end{equation}
\tag{5.2}
となるので簡単に
A^T A \boldsymbol{x} = A^T \boldsymbol{b} \tag{5.3}
が得られ、
\boldsymbol{\hat{x}} = (A^T A )^{-1} A^T \boldsymbol{b} \tag{5.4}
という解を得ることができる。
ストラングの教科書では別のもっと洗練された「線形代数的な」やり方で(5.2)式を導出しているが、射影と最小二乗法の類似性(どちらも誤差 $\boldsymbol{e}$ を最小にする)を考えた場合、(5.2)式はまさに的を射ている方法だと思う。
ところが、その微分の計算ができなかったので今回まとめてみた次第である。
参考文献
1. @AnchorBlues(Yu Umegaki):「ベクトルで微分・行列で微分」公式まとめ. https://qiita.com/AnchorBlues/items/8fe2483a3a72676eb96d, (閲覧日:2024.1.26)
2. G. ストラング:線形代数イントロダクション 原著第4版. 近代科学社, 2015.