本記事は数学の徹底解説シリーズに含まれます。
初学者の分かりやすさを優先するため,多少正確でない表現が混在することがあります。もし致命的な間違いがあればご指摘いただけると助かります。
スカラーのベクトルによる微分の公式
$n$次元縦ベクトル$\va=(a_{1},\ldots,a_{n})^{T}$,$\vx=(x_{1},\ldots,x_{n})^{T}$と$n$次元正方行列$A$,$B$に対し,以下が成り立つ。
\frac{\partial}{\partial \vx}\va^{T}\vx &= \va \label{最初}\\[0.7em]
\frac{\partial}{\partial \vx}\vx^{T}\va &= \va \\[0.7em]
\frac{\partial}{\partial \vx}\vx^{T}\vx &= 2\vx \label{二乗}\\[0.7em]
\frac{\partial}{\partial \vx}\vx^{T}A\vx &= (A+A^{T})\vx\label{二次形式}\\[0.7em]
\frac{\partial}{\partial \vx}(\vx-\va)^{T}(\vx-\va) &= 2(\vx-\va) \\[0.7em]
\frac{\partial}{\partial \vx}(A\vx-\vb)^{T}(A\vx-\vb) &= 2A^{T}(A\vx-\vb) \\[0.7em]
\frac{\partial}{\partial \vx}(A\vx-\vb)^{T}B(A\vx-\vb) &= A^{T}(B+B^{T})(A\vx-\vb) \label{最後}\\[0.7em]
\end{align}
機械学習を勉強すると必ず出現する公式です。微分操作の具体的なイメージを湧かせられるように,一度は証明を手で追ってみましょう。
証明
式($\ref{最初}$)から式($\ref{最後}$)までを,スカラーのベクトルによる微分の定義に基づいて証明していきます。
式(1)
$\va^{T}\vx$を展開して,スカラーのベクトルによる微分の定義を利用します。
\frac{\partial}{\partial \vx}\va^{T}\vx &= \frac{\partial}{\partial \vx}(a_{1}x_{1}+a_{2}x_{2}+\cdots+a_{n}x_{n}) \\[0.7em]
&= \left(a_{1},a_{2},\ldots,a_{n}\right)^{T} \\[0.7em]
&= \va
\end{align}
式(2)
スカラー$\vx^{T}\va$は転置しても変わらないため,式($\ref{最初}$)より以下が成り立ちます。
\frac{\partial}{\partial \vx}\vx^{T}\va &= \frac{\partial}{\partial \vx}\left(\vx^{T}\va\right)^{T} \\[0.7em]
&=\frac{\partial}{\partial \vx}\va^{T}\vx \\[0.7em]
&= \va
\end{align}
式(3)
式($\ref{二次形式}$)において,$A$に$n$次元単位行列$I$を代入すると得られます。もしくは,$\vx^{T}\vx$を展開してスカラーのベクトルによる微分の定義を利用しても示すことができます。
\frac{\partial}{\partial \vx}\vx^{T}\vx &= \frac{\partial}{\partial \vx}(x_{1}^{2}+x_{2}^{2}+\cdots+x_{n}^{2}) \\[0.7em]
&= \left(2x_{1},2x_{2},\ldots,2x_{n}\right)^{T} \\[0.7em]
&= 2\vx
\end{align}
式(4)
$A$の$(i, j)$要素を$A_{i,j}$と書くと,二次形式は以下のように表されます。
\vx^{T}A\vx &= \sum_{i=1}^{n}\sum_{j=1}^{n}A_{i, j}x_{i}x_{j}
\end{align}
まずは,二次形式を$\vx$の$k$番目の要素$x_{k}$で微分することを考えます。
\frac{\partial}{\partial x_{k}}\vx^{T}A\vx &= \frac{\partial}{\partial x_{k}}\sum_{i=1}^{n}\sum_{j=1}^{n}A_{i, j}x_{i}x_{j} \\[0.7em]
&= \sum_{i=1}^{n}\sum_{j=1}^{n}A_{i, j}\frac{\partial}{\partial x_{k}}\left(x_{i}x_{j}\right) \label{デルタ導入前}
\end{align}
ここで,表記を簡潔にするために以下のクロネッカーのデルタを導入します。
\delta_{i,j} &=
\begin{cases}
1&(i=j)\\[0.7em]
0&(i\neq j)
\end{cases}
\end{align}
すると,式($\ref{デルタ導入前}$)は以下のように表されます。
\frac{\partial}{\partial x_{k}}\vx^{T}A\vx
&= \sum_{i=1}^{n}\sum_{j=1}^{n}A_{i, j}\left(\delta_{ki}x_{i}+x_{i}\delta_{kj}\right) \\[0.7em]
&= \sum_{i=1}^{n}\sum_{j=1}^{n}A_{i, j}\delta_{ki}x_{i} + \sum_{i=1}^{n}\sum_{j=1}^{n}A_{i, j}x_{i}\delta_{kj} \\[0.7em]
&= \sum_{j=1}^{n}A_{k, j}x_{k} + \sum_{i=1}^{n}A_{i, k}x_{i} \\[0.7em]
&= \sum_{j=1}^{n}A_{k, j}x_{k} + \sum_{i=1}^{n}A^{T}_{k,i}x_{i} \\[0.7em]
&= \left[A\vx\right]_{k} + \left[A^{T}\vx\right]_{k} \\[0.7em]
&= \left[(A+A^{T})\vx\right]_{k}
\end{align}
ただし,$[\cdot]_{k}$はベクトルの$k$番目の要素を表しています。以上より,スカラーのベクトルによる微分の定義に基づくと式($\ref{二次形式}$)が示されました。
式(5)
式($\ref{二乗}$)において,$\vx$の代わりに$\vx-\va$を考えると示すことができます。
式(6)
式($\ref{二次形式}$)において,$B$に$n$次元単位行列$I$を代入すると得られます。もしくは,今まで示してきた公式を利用して証明することもできます。
\frac{\partial}{\partial \vx}(A\vx-\vb)^{T}(A\vx-\vb) &= \frac{\partial}{\partial \vx}\left(\vx^{T}A^{T}-\vb^{T})(A\vx-\vb\right) \\[0.7em]
&= \frac{\partial}{\partial \vx}\left(\vx^{T}A^{T}A\vx-\vx^{T}A^{T}\vb-\vb^{T}A\vx+\vb^{T}\vb\right)\\[0.7em]
&=2A^{T}A\vx-A^{T}\vb-A^{T}\vb+0\\[0.7em]
&= 2A^{T}(A\vx-\vb)
\end{align}
式(7)
$\vy=A\vx-\vb$と置くと,式($\ref{最後}$)は以下のように表されます。
\frac{\partial}{\partial \vx}(A\vx-\vb)^{T}B(A\vx-\vb)
&= \frac{\partial}{\partial \vx}\vy^{T}B\vy \label{公式適用前}
\end{align}
スカラーの合成関数のベクトルによる微分と上で示してきた公式を利用すると,式($\ref{公式適用前}$)は以下のように変形できます。
\frac{\partial}{\partial \vx}\vy^{T}B\vy
&= \frac{\partial \vy}{\partial \vx}\frac{\partial}{\partial \vy}\vy^{T}B\vy \\[0.7em]
&= A^{T}(B+B^{T})\vy \\[0.7em]
&= A^{T}(B+B^{T})(A\vx-\vb)
\end{align}
以上より,式($\ref{最後}$)が示されました。
コメント