panda大学習帳外伝

仕事が忙しくなってくると無性に始めたくなること。

メインページ | panda大学習帳 | 第三倉庫 | 用語集📒 | 本サイトについて | プライバシーポリシー


ちょっと気になる行列の微分の公式

最終更新日: Sun Dec 27 10:54:19 2020 +0900

はじめに

機械学習の本や論文を読んでいると時々登場するかもしれない行列の微分ですが、多変数(かつ多出力)の線形回帰分析を行う際に登場する、 \begin{align} \frac{\partial \| XW - Y \|^2_F}{\partial W} &= 2X^T (XW-Y) \label{eq:frobeniusnorm} \end{align} ($X \in \mathbb{R}^{n_1\times n_2}, W \in \mathbb{R}^{n_2\times n_3}, Y \in \mathbb{R}^{n_1\times n_3}, X^T$は$X$の転置行列、$n_1,n_2,n_3 \in \mathbb{N},\|\cdot\|_F$は$\cdot$のフロベニウスノルムを表します。)の導出方法が気になったので、成分ごとに書き下して計算してみることにします。

スポンサーリンク

サクサク計算します。

成分ごとに書き下します。

最初に$XW-Y=U (U \in \mathbb{R}^{n_1\times n_3})$とおいて、$U$の$i,j$成分$u_{ij}$を計算してみます。

すると… \begin{align} u_{ij} &= \sum_{k=1}^{n_2} x_{ik}w_{kj} - y_{ij} \label{eq:ufirst} \end{align} となります。

したがって、$\| XW-Y \|^2_F$のフロベニウスノルムは(\ref{eq:ufirst})式を用いて、 \begin{align} \| XW-Y \|^2_F &= \sum_{i=1}^{n_1}\sum_{j=1}^{n_3}\left(\sum_{k=1}^{n_2} x_{ik}w_{kj} - y_{ij}\right)^2 \label{eq:usecond} \end{align} と書くことができます。

スポンサーリンク

行列の成分ごとに微分します。

次に、行列$W$の成分ごとに微分していきますが、前節まででsuffixを使いまくっているので、$W$の成分を(自然数っぽい感じではないですが、)$w_{\alpha\beta} (\alpha, \beta \in \mathbb{N})$で表すことにします。

すると… \begin{align} \frac{\partial \| XW - Y \|^2_F}{\partial w_{\alpha\beta}} &= \frac{\partial}{\partial w_{\alpha\beta}} \left[ \sum_{i=1}^{n_1}\sum_{j=1}^{n_3}\left(\sum_{k=1}^{n_2} x_{ik}w_{kj} - y_{ij}\right)^2 \right] \label{eq:frobeniusnormsecond} \end{align} となります。ここで、(\ref{eq:frobeniusnormsecond})式右辺のsummationのうち、2番目のものについては$j=\beta$の場合のみ$w_{\alpha\beta}$を含む項が存在し、かつそれらの項は$w_{\alpha\beta}$で偏微分しても0になりません。

したがって、(\ref{eq:frobeniusnormsecond})式の右辺は、 \begin{align} \frac{\partial \| XW - Y \|^2_F}{\partial w_{\alpha\beta}} &= \frac{\partial}{\partial w_{\alpha\beta}} \left[ \sum_{i=1}^{n_1}\left(\sum_{k=1}^{n_2} x_{ik}w_{k\beta} - y_{i\beta}\right)^2 \right] \label{eq:frobeniusnormthird} \end{align} と書き換えることができます。

ここで、(\ref{eq:frobeniusnormthird})式右辺の括弧内に(\ref{eq:ufirst})式を用いて$w_{\alpha\beta}$で偏微分すると… \begin{align} \frac{\partial u_{i\beta}}{\partial w_{\alpha\beta}}\,\cdot\,\frac{\partial}{\partial u_{i\beta}}u_{i\beta}^2 &= x_{i\alpha}\,\cdot\,2u_{i\beta} \nonumber \cr &= 2x_{i\alpha}\left(\sum_{k=1}^{n_2} x_{ik}w_{k\beta} - y_{i\beta}\right) \label{eq:frobeniusnormfourth} \end{align} (\ref{eq:frobeniusnormfourth})式を使って(\ref{eq:frobeniusnormthird})式を書き換えると… \begin{align} \frac{\partial | XW - Y |^2_F}{\partial w_{\alpha\beta}} &= 2\sum_{i=1}^{n_1}x_{i\alpha}\left(\sum_{k=1}^{n_2} x_{ik}w_{k\beta} - y_{i\beta}\right) \label{eq:frobeniusnormfifth} \end{align} $x_{i\alpha}$は$X$の$(i,\alpha)$成分を表しますが、$X$の転置行列$X^T$及びその$(\alpha,i)$成分である$x_{\alpha i}^T$を考えると、$x_{i\alpha} = x_{\alpha i}^T$が成り立ちます。

よって、 \begin{align} \frac{\partial \| XW - Y \|^2_F}{\partial w_{\alpha\beta}} &= 2\sum_{i=1}^{n_1}x_{\alpha i}^T\left(\sum_{k=1}^{n_2} x_{ik}w_{k\beta} - y_{i\beta}\right) \label{eq:frobeniusnormfinal} \end{align} と書き換えることができます。(\ref{eq:frobeniusnormfinal})式の右辺は行列$X^T(XW-Y)$の$(\alpha,\beta)$成分を表しますので、(\ref{eq:frobeniusnorm})式が成り立つことがわかります。$\blacksquare$

スポンサーリンク

まとめ

$W$は重みづけ関数、$X$は変数、$Y$は出力の意味合いでそれぞれ使用されることが多いようです。

また、$X$を$n_2$の横ベクトル(入力ベクトル)を$n_1$個積み重ねたものと考えると、(\ref{eq:frobeniusnorm})式において、 \begin{align} \frac{1}{n_1}\|XW-Y\|^2_F &= L(W) \label{eq:lossfunction} \end{align} とおくと、$L(W)$は損失関数そのものを表していたりします。

したがって、$L(W)=0$とおくと(詳細は触れませんが、)$W$が求まったりします。

ただ、これらの式を丸暗記というのはあまり筋の良いやり方ではないような気もするので、要素ごとの計算ができるようになっておいた方が良さそうです。

この記事は以上です。

スポンサーリンク

参考文献

  1. Ordinary Least Squares Linear Regression
  2. 「ベクトルで微分・行列で微分」公式まとめ
  3. Derivative of squared Frobenius norm of a matrix

リンク

メインページ | panda大学習帳 | 第三倉庫 | 用語集📒 | 本サイトについて | プライバシーポリシー


スポンサーリンク