多次元正規分布の最尤推定など、行列の最適化を行う際、
行列式の微分を計算する必要があります。
この記事では、行列式や行列式の対数を①変数で微分する方法と、②行列で微分する方法について解説します。
また、機械学習分野の著名な書籍であるPRMLで、このテーマを扱っている部分の練習問題についても解答を掲載しています。
記号の定義
この記事では、以下の記号を使用します。
- \(\mathbf{A}^{\mathrm{T}}\) :行列 \(\mathbf{A}\) の転置
- \(\mathrm{Tr}(\mathbf{A})\) :行列 \(\mathbf{A}\) のトレース(対角要素の和)
そのほかの記号については、必要になるたびに定義します。
変数による微分・対数微分
定理
正方行列 \(\mathbf{A}\) の行列式を \(|\mathbf{A}|\) と書くと、変数 \(x\) による偏微分は
$$\frac{\partial}{\partial x}|\mathbf{A}|=|\mathbf{A}|\mathrm{Tr} \left({\mathbf{A}^{-1}\frac{\partial\mathbf{A}}{\partial x}}\right)\tag{1}$$
となります。
また、行列式の対数をとって微分すると
$$\frac{\partial}{\partial x}\ln{|\mathbf{A}|}=\mathrm{Tr} \left({\mathbf{A}^{-1}\frac{\partial\mathbf{A}}{\partial x}}\right)\tag{2}$$
が成り立ちます。
証明
\(\mathbf{A}\) の \(i\) 行 \(j\) 列の要素を \(a_{ij}\) と書きます。
\(a_{ij}\) に対応する \(\mathbf{A}\) の余因子を \(\tilde{a_{ij}}\) と書くと、行列式 \(|\mathbf{A}|\) は
$$|\mathbf{A}|=\sum_k a_{ik}\tilde{a_{ik}}$$
と展開することができます。
これを \(a_{ij}\) で偏微分すると
$$\frac{\partial}{\partial a_{ij}}|\mathbf{A}|=\sum_k\left(\frac{\partial a_{ik}}{\partial a_{ij}}\tilde{a_{ik}}+a_{ik}\frac{\partial\tilde{a_{ik}}}{\partial a_{ij}}\right)=\tilde{a_{ij}}\tag{3}$$
が成り立ちます。
なぜならば、すべての \(k\) について、 \(\tilde{a_{ik}}\) は \(i\) 行の要素を持たないためです。
余因子 \(\tilde{a_{ij}}\) を \(j\) 行 \(i\) 列目にもつ行列を余因子行列 \(\tilde{\mathbf{A}}\) といいます。
つまり
$$\tilde{a_{ij}}=\left(\tilde{\mathbf{A}}^{\mathrm{T}}\right)_{ij}$$
であり、余因子行列を用いると、逆行列 \(\mathbf{A}^{-1}\) は
$$\mathbf{A}^{-1}=\frac{1}{|\mathbf{A}|}\tilde{\mathbf{A}}$$
と、あらわせます。
すなわち
$$\tilde{\mathbf{A}}=|\mathbf{A}|\mathbf{A}^{-1}$$
$$\tilde{\mathbf{A}}^{\mathrm{T}}=|\mathbf{A}|\left(\mathbf{A}^{-1}\right)^{\mathrm{T}}\tag{4}$$
$$\tilde{a_{ij}}=|\mathbf{A}|\left\{\left(\mathbf{A}^{-1}\right)^{\mathrm{T}}\right\}_{ij}=|\mathbf{A}|\left(\mathbf{A}^{-1}\right)_{ji}\tag{5}$$
となります。
行列式 \(|\mathbf{A}|\) の変数 \(x\) による偏微分は、行列 \(\mathbf{A}\) のすべての要素に対応する偏微分の和へと分解して考えられるため
$$\frac{\partial}{\partial x}|\mathbf{A}|=\sum_{i,j}\frac{\partial|\mathbf{A}|}{\partial a_{ij}}\frac{\partial a_{ij}}{\partial x}=\sum_{i,j}\tilde{a_{ij}}\frac{\partial a_{ij}}{\partial x}$$
$$=\sum_{i,j}|\mathbf{A}|\left(\mathbf{A}^{-1}\right)_{ji}\frac{\partial a_{ij}}{\partial x}$$
$$=|\mathbf{A}|\sum_{i,j}\left(\mathbf{A}^{-1}\right)_{ji}\frac{\partial a_{ij}}{\partial x}$$
と計算できます。
ここで、1行目の変換では式 \((3)\) を、2行目の変換では式 \((5)\) を使いました。
\(\frac{\partial a_{ij}}{\partial x}\) を \(i\) 行 \(j\) 列目の要素にもつ行列を
$$\frac{\partial\mathbf{A}}{\partial x}$$
と書くと
$$\frac{\partial}{\partial x}|\mathbf{A}|=|\mathbf{A}|\mathrm{Tr}\left(\mathbf{A}^{-1}\frac{\partial \mathbf{A}}{\partial x}\right)$$
として、式 \((1)\) が導けます。
この計算が成り立つ理由は、記事末の補足を見ながら要素を書き並べて確認してください。
また、式 \((1)\) を使うと
$$\frac{\partial}{\partial x}\ln{|\mathbf{A}|}=\frac{\partial\ln{|\mathbf{A}|}}{\partial |\mathbf{A}|}\frac{\partial|\mathbf{A}|}{\partial x}$$
$$=\frac{1}{|\mathbf{A}|}\cdot|\mathbf{A}|\mathrm{Tr}\left(\mathbf{A}^{-1}\frac{\partial \mathbf{A}}{\partial x}\right)=\mathrm{Tr}\left(\mathbf{A}^{-1}\frac{\partial \mathbf{A}}{\partial x}\right)$$
より、式 \((2)\) も証明することができました。
行列による微分・対数微分
定理
行列 \(\mathbf{B}\) のすべての要素 \(b_{ij}\) について偏微分を行い、その結果をまとめた行列を
$$\frac{\partial}{\partial\mathbf{B}}$$
と書くことにします。
このとき
$$\frac{\partial|\mathbf{A}|}{\partial\mathbf{A}}=\tilde{\mathbf{A}}^{\mathrm{T}}\tag{6}$$
$$\frac{\partial\ln{|\mathbf{A}|}}{\partial\mathbf{A}}=\left(\mathbf{A}^{-1}\right)^{\mathrm{T}}\tag{7}$$
が成り立ちます。
証明
式 \((6)\) は式 \((3)\) の結果を行列にまとめることによって導けます。
また、
$$\frac{\partial\ln{|\mathbf{A}|}}{\partial\mathbf{A}}=\frac{\partial\ln{|\mathbf{A}|}}{\partial|\mathbf{A}|}\frac{\partial|\mathbf{A}|}{\partial\mathbf{A}}$$
$$=\frac{1}{|\mathbf{A}|}\tilde{\mathbf{A}}^{\mathrm{T}}=\left(\mathbf{A}^{-1}\right)^{\mathrm{T}}$$
より、式 \((7)\) が証明できます。
ここでは、式 \((4)\) の関係を使用しました。
PRML・付録Cにおける位置づけ
C.M.ビショップ著「パターン認識と機械学習」(通称PRML)の上巻・付録Cにおいて、式 \((2)\) が紹介されています。
本書では \(\mathbf{A}\) が実対称行列である場合を対象に、式 \((2)\) の成立を確認することを読者への課題としています。
問題
実対称行列 \(\mathbf{A}\) について、
$$\frac{\partial}{\partial x}\ln{|\mathbf{A}|}=\mathrm{Tr} \left({\mathbf{A}^{-1}\frac{\partial\mathbf{A}}{\partial x}}\right)\tag{2}$$
が成り立つことを確認せよ。
ただし、実対称行列についての次の関係式を使ってもよい。
- $$\mathbf{u}_{i}^{\mathrm{T}}\mathbf{u}_{j}=I_{ij}\tag{8}$$
- $$\mathbf{A}=\sum_{i=1}^{M}\lambda_{i}\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\tag{9}$$
- $$\mathbf{A}^{\mathrm{T}}=\sum_{i=1}^{M}\frac{1}{\lambda_{i}}\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\tag{10}$$
- $$|\mathbf{A}|=\prod_{i=1}^{M}\lambda_{i}\tag{11}$$
ここで、 \(\lambda_{i}, \mathbf{u}_{i}\) はそれぞれ、行列 \(\mathbf{A}\) の \(i\) 番目の固有値と固有ベクトルをあらわす。
また、 \(I_{ij}\) は単位行列の \(i\) 行 \(j\) 列目の要素である。
証明
\((8)\) 式の両辺を \(x\) で微分すると
$$\frac{\partial\mathbf{u}_{i}^{\mathrm{T}}}{\partial x}\mathbf{u_{j}}+\mathbf{u}_{i}^{\mathrm{T}}\frac{\partial\mathbf{u}_{j}}{\partial x}=0\tag{12}$$
になります。
式 \((2)\) の左辺をは、式 \((11)\) を用いて
$$\frac{\partial}{\partial x}\ln{|A|}=\frac{\partial}{\partial x}\ln{\prod_{i=1}^{M}\lambda_{i}}$$
$$=\frac{\partial}{\partial x}\sum_{i=1}^{M}\ln{\lambda_{i}}$$
$$=\sum_{i=1}^{M}\frac{1}{\lambda_{i}}\frac{\partial\lambda_{i}}{\partial x}\tag{13}$$
と変形できます。
また、 \((9)\) 式の両辺を \(x\) で微分すると
$$\frac{\partial \mathbf{A}}{\partial x}=\sum_{j=1}^{M}\left\{\frac{\partial\lambda_{j}}{\partial x}\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}}+\lambda_{j}\frac{\partial(\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}})}{\partial x}\right\}$$
$$=\sum_{j=1}^{M}\left\{\frac{\partial\lambda_{j}}{\partial x}\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}}+\lambda_{j}\left(\frac{\partial\mathbf{u}_{j}}{\partial x}\mathbf{u}_{j}^{\mathrm{T}}+\mathbf{u}_{j}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\right)\right\}$$
です。
この辺々に \((10)\) を左からかけると
$$\mathbf{A}^{-1}\frac{\partial \mathbf{A}}{\partial x}=\left(\sum_{i=1}^{M}\frac{1}{\lambda_{i}}\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\right)\left[\sum_{j=1}^{M}\left\{\frac{\partial\lambda_{j}}{\partial x}\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}}+\lambda_{j}\left(\frac{\partial\mathbf{u}_{j}}{\partial x}\mathbf{u}_{j}^{\mathrm{T}}+\mathbf{u}_{j}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\right)\right\}\right]$$
$$=\sum_{i=1}^{M}\sum_{j=1}^{M}\left\{\frac{1}{\lambda_{i}}\frac{\partial\lambda_{j}}{\partial x}\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}}+\frac{\lambda_{j}}{\lambda_{i}}\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\left(\frac{\partial\mathbf{u}_{j}}{\partial x}\mathbf{u}_{j}^{\mathrm{T}}+\mathbf{u}_{j}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\right)\right\}$$
となります。
ここで、この式の両辺のトレースを取ることを考えます。
第1、第2項の固有ベクトルを含む部分について、それぞれ変形すると、
第1項は
$$\mathrm{Tr}\left[\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}}\right]=\mathrm{Tr}\left[\mathbf{u}_{i}^{\mathrm{T}}\mathbf{u}_{j}\mathbf{u}_{j}^{\mathrm{T}}\mathbf{u}_{i}\right]$$
$$=\left(\mathbf{u}_{i}^{\mathrm{T}}\mathbf{u}_{j}\right)\left(\mathbf{u}_{j}^{\mathrm{T}}\mathbf{u}_{i}\right)=I_{ij}I_{ji}=I_{ij}$$
であり、トレースを外すことができ、
第2項は
$$\mathrm{Tr}\left[\mathbf{u}_{i}\mathbf{u}_{i}^{\mathrm{T}}\left(\frac{\partial\mathbf{u}_{j}}{\partial x}\mathbf{u}_{j}^{\mathrm{T}}+\mathbf{u}_{j}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\right)\right]=\mathrm{Tr}\left[\mathbf{u}_{i}^{\mathrm{T}}\left(\frac{\partial\mathbf{u}_{j}}{\partial x}\mathbf{u}_{j}^{\mathrm{T}}+\mathbf{u}_{j}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\right)\mathbf{u}_{i}\right]$$
$$=\mathrm{Tr}\left[\mathbf{u}_{i}^{\mathrm{T}}\frac{\partial\mathbf{u}_{j}}{\partial x}\mathbf{u}_{j}^{\mathrm{T}}\mathbf{u}_{i}+\mathbf{u}_{i}^{\mathrm{T}}\mathbf{u}_{j}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\mathbf{u}_{i}\right]=\mathrm{Tr}\left[\mathbf{u}_{i}^{\mathrm{T}}\frac{\partial\mathbf{u}_{j}}{\partial x}I_{ji}+I_{ij}\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\mathbf{u}_{i}\right]$$
$$=\mathrm{Tr}\left[\mathbf{u}_{i}^{\mathrm{T}}\frac{\partial\mathbf{u}_{j}}{\partial x}+\frac{\partial\mathbf{u}_{j}^{\mathrm{T}}}{\partial x}\mathbf{u}_{i}\right]I_{ij}=0\qquad(\because (12))$$
より、トレースを取ると第2項は \(0\) になります。
したがって
$$\mathrm{Tr}\left({\mathbf{A}^{-1}\frac{\partial\mathbf{A}}{\partial x}}\right)=\sum_{i=1}^{M}\sum_{j=1}^{M}I_{ij}\frac{1}{\lambda_{i}}\frac{\partial\lambda_{j}}{\partial x}=\sum_{i=1}^{M}\frac{1}{\lambda_{i}}\frac{\partial\lambda_{i}}{\partial x}\tag{14}$$
です。
式 \((13), (14)\) より
$$\frac{\partial}{\partial x}\ln{|\mathbf{A}|}=\mathrm{Tr} \left({\mathbf{A}^{-1}\frac{\partial\mathbf{A}}{\partial x}}\right)$$
が成り立ちます。
行列による行列の対数微分
PRMLでは、式 \((2)\) と
$$\frac{\partial}{\partial\mathbf{A}}\mathrm{Tr}(\mathbf{AB})=\mathbf{B}^{\mathrm{T}}$$
の関係式を組み合わせて、行列による微分式
$$\frac{\partial}{\partial\mathbf{A}}\mathrm{ln}|\mathbf{A}|=(\mathbf{A}^{-1})^{\mathrm{T}}$$
を導いています。
(補足)対応する添字どうしの積の和を、トレースであらわす
一般に、 \(i\) 行 \(j\) 列目の要素がそれぞれ \(a_{ij},b_{ij}\) となる、
同じサイズの正方行列 \(\mathbf{A},\mathbf{B}\) について
$$\sum_{ij}a_{ij}b_{ij}=\mathrm{Tr}\left(\mathbf{A}\mathbf{B}^{\mathrm{T}}\right)$$
とあらわせます。
実際、
$$\mathbf{A}=\begin{pmatrix}a_{11} & a_{12} \\ a_{21} & a_{22}\end{pmatrix}$$
$$\mathbf{B}=\begin{pmatrix}b_{11} & b_{12} \\ b_{21} & b_{22}\end{pmatrix}$$
であるとき、
$$\mathbf{A}\mathbf{B}^{\mathrm{T}}=\begin{pmatrix}a_{11} & a_{12} \\ a_{21} & a_{22}\end{pmatrix}\begin{pmatrix}b_{11} & b_{21} \\ b_{12} & b_{22}\end{pmatrix}$$
$$=\begin{pmatrix}a_{11}b_{11}+a_{12}b_{12} & a_{11}b_{12}+a_{12}b_{22} \\ a_{21}b_{11}+a_{22}b_{12} & a_{21}b_{21}+a_{22}b_{22}\end{pmatrix}$$
より
$$\mathrm{Tr}\left(\mathbf{A}\mathbf{B}^{\mathrm{T}}\right)=a_{11}b_{11}+a_{12}b_{12}+a_{21}b_{21}+a_{22}b_{22}$$
となります。
同様の計算を行うと、
$$\mathrm{Tr}\left(\mathbf{A}\mathbf{B}^{\mathrm{T}}\right)=\mathrm{Tr}\left(\mathbf{A}^{\mathrm{T}}\mathbf{B}\right)$$
であることもわかります。
参考文献
パターン認識と機械学習―ベイズ理論による統計的予測:C.M.ビショップ著
Comments