機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

行列の微分

行列の微分の定義

スカラを返す関数 fにおいて、行列


  \mathbf A = \left(
    \begin{array}{cccc}
      A_{11} & A_{12} & \ldots & A_{1N} \\
      A_{21} & A_{22} & \ldots & A_{2N} \\
      \vdots & \vdots & \ddots & \vdots \\
      A_{M1} & A_{M2} & \ldots & A_{MN}
    \end{array}
  \right) \tag{1}

での微分係数は以下のように定義されます。


\displaystyle
  \frac{\partial f}{\partial \mathbf{A}} = \left(
    \begin{array}{cccc}
      \frac{\partial f}{\partial A_{11}} & \frac{\partial f}{\partial A_{12}} & \ldots & \frac{\partial f}{\partial A_{1N}} \\
      \frac{\partial f}{\partial A_{21}} & \frac{\partial f}{\partial A_{22}} & \ldots & \frac{\partial f}{\partial A_{2N}} \\
      \vdots & \vdots & \ddots & \vdots \\
      \frac{\partial f}{\partial A_{M1}} & \frac{\partial f}{\partial A_{M2}} & \ldots & \frac{\partial f}{\partial A_{MN}}
    \end{array}
  \right) \tag{2}


 \mathbf{a}^T \mathbf{A}\mathbf{b}の微分

ベクトル \mathbf{a}=(a_1,a_2, \ldots ,a_M)^T,\mathbf{b}=(b_1,b_2, \ldots ,b_N)^T に対し、 \mathbf{a}^T \mathbf{A}\mathbf{b}の微分を考えます。

まず\mathbf{a}^T \mathbf{A}\mathbf{b}を計算していきますと、


\displaystyle \mathbf{a}^T \mathbf{A} = \left(  \sum_{k=1}^{M}a_k A_{k1} ,\sum_{k=1}^{M}a_k A_{k2} , \cdots , \sum_{k=1}^{M}a_k A_{kN}\right) \tag{3}

ですから、


\displaystyle \mathbf{a}^T \mathbf{A}\mathbf{b} =  b_1 \sum_{k=1}^{M}a_k A_{k1} +b_2 \sum_{k=1}^{M}a_k A_{k2} + \cdots + b_N \sum_{k=1}^{M}a_k A_{kN} \tag{4}

となります。行列\mathbf Aij成分での微分 \displaystyle \frac{\partial}{\partial A_{ij}} \mathbf{a}^T \mathbf{A}\mathbf{b}は、式(4)よりa_i b_jとなることがわかります。これは\mathbf{a} \mathbf{b}^Tij成分ですから、


\displaystyle \frac{\partial}{\partial \mathbf A} \mathbf{a}^T \mathbf{A}\mathbf{b} = \mathbf{a} \mathbf{b}^T \tag{5}
となります。


 \mathbf{a}^T \mathbf{A}\mathbf{A}^T \mathbf{b}の微分

次に \mathbf{a}^T \mathbf{A}\mathbf{A}^T \mathbf{b}の微分を考えます。ここで\mathbf{b}=(b_1,b_2, \ldots ,b_M)^Tとします。同じように計算してけば、


\displaystyle \mathbf{a}^T \mathbf{A}\mathbf{A}^T \mathbf{b} = \sum_{k=1}^{M}a_k A_{k1} \sum_{k=1}^{M}b_k A_{k1} +\cdots + \sum_{k=1}^{M}a_k A_{kN} \sum_{k=1}^{M}b_k A_{kN} \tag{6}

となります。式(6)においてA_{ij}での微分を考えると、積の微分公式より


\displaystyle \frac{\partial}{\partial A_{ij}}\mathbf{a}^T \mathbf{A}\mathbf{A}^T \mathbf{b} = a_i \sum_{k=1}^{M}b_k A_{kj} +  b_i \sum_{k=1}^{M}a_k A_{kj} \tag{7}

です。A_{ij}成分が含まれるのは式(6)のj番目の項のみですから、それ以外は微分したら0です。

ここで式(7)右辺の1番目の項は、 \mathbf{a}\mathbf{b}^T \mathbf{A}ij成分、2番目の項は \mathbf{b}\mathbf{a}^T \mathbf{A}ij成分となっていますから、


\displaystyle \frac{\partial}{\partial \mathbf A}\mathbf{a}^T \mathbf{A}\mathbf{A}^T \mathbf{b} =(\mathbf{a}\mathbf{b}^T +\mathbf{b}\mathbf{a}^T  )\mathbf{A} \tag{8}

となります。


今回の導出は、解がわかっていたので、それに向かって計算していったので何とかなりました。「式(7)右辺の1番目の項は、 \mathbf{a}\mathbf{b}^T \mathbf{A}ij成分」、とかさらっと書いていますが、解から逆算しました。もっとまともな導出があるかもしれません。

関連:ベクトルの微分行列の微分(2)