post Image
行列微分のコツ

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

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

[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なんかをみればたいていの微分は書いてあるのですが.


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。