LoginSignup
13
19

More than 5 years have passed since last update.

行列微分のコツ

Last updated at Posted at 2017-05-28

機械学習で必ずと言っていいほど出てくる行列微分.これ,苦手な方も多いのではないでしょうか.僕も苦手でしたが,あるパターンを見つけたので共有したいと思います.もしかしたら当たり前なのかもしれませんが....

まず,以下の式を理解する.

[AB]_{ij} = \sum_{k=1}^c A_{ik} B_{kj}

ただし,Aは$m \times c$行列で,Bは$c \times n$行列.こう書くと普通Aはm行c列の行列をさし,Bはc行n列の行列をさします.使うのはほぼこの式だけです.ちなみに普通行列とベクトルは太字で書きますが,この記事では普通に書きます.あと,sumには添字のみを表記することにします.

じゃあ例題として,$tr(X^TBX)$を扱ってみましょう.trはtraceでただの対角成分の和なので何も怖くありません.まずは対象を成分で全て書き表します.

\begin{align*}
tr(X^TBX) 
&= \sum_{i} [X^TBX]_{ii} \\
&= \sum_{i} \sum_{j} [X^T]_{ij} [BX]_{ji} \\
&= \sum_{i} \sum_{j} \sum_{k} [X^T]_{ij} B_{jk} X_{ki} \\
&= \sum_{i} \sum_{j} \sum_{k} X_{ji} B_{jk} X_{ki} \\
&= \sum_{i} \sum_{j} \sum_{k} B_{jk} X_{ji} X_{ki} \\
\end{align*}

最初の式を使って展開しただけです.ではこれを$X_{\ell\ell'}$で微分してみましょう.ここで,添字は式中の記号とは区別した方がいいです.
ここが最大のポイントなのですが,$B_{jk} X_{ji} X_{ki}$だけに注目して,各添字の組み合わせが$(\ell, \ell')$になる時だけを考えます.なぜならそれ以外は微分すれば消えるからです.ここでは,

  1. $j = \ell, i = \ell'$
  2. $k = \ell, i = \ell'$

の場合だけ考えれば良いです.

まず1の場合ですが,注目している項は$B_{\ell k} X_{\ell\ell'} X_{k\ell'}$になります.ここに出てくる添字の中で,$(\ell, \ell')$以外の添字についてはsumをとります.なので,$\sum_{k} B_{\ell k} X_{\ell\ell'} X_{k\ell'}$を考えます.ここから$X_{\ell \ell'}$を取り除きます.そうすると,残るのは$\sum_{k} B_{\ell k} X_{k\ell'}$になりますよね.そしてこれは最初の式で変形すると,$[BX]_{\ell \ell'}$となります.

2についても同様です.この場合,注目している項は$B_{j\ell} X_{j\ell'} X_{\ell\ell'}$となり,$j$が残っているのでsumをとって,$\sum_{j} B_{j\ell} X_{j\ell'} X_{\ell\ell'}$を考えます.ここから$X_{\ell\ell'}$を取り除くと,$\sum_{j} B_{j\ell} X_{j\ell'} $が残ります.これを最初の式で変形すると,$[B^T X]_{\ell\ell'}$となります.

これらを足せば,

\frac{\partial}{\partial X_{\ell \ell'}} tr(X^T B X) = [BX]_{\ell \ell'} + [B^T X]_{\ell \ell'}

となります.行列の形で書くと,

\frac{\partial}{\partial X} tr(X^T B X) = BX + B^T X

となります.そうですこれが,微分したものになっています.

今回は自分がやっている行列微分の方法を紹介してみました.まぁ実際にはmatrix cookbookなんかをみればたいていの微分は書いてあるのですが.

13
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
19