証明集 第6章: Hadamard積の微分

Proofs: Derivative of Hadamard Product

本章では、Hadamard積(要素ごとの積)の微分を証明する。 ニューラルネットワークの逆伝播では、活性化関数の微分がHadamard積の形で勾配に作用する。 本章の公式はその基礎となるものである。

前提知識: 第4章(行列微分の基本公式)、 第5章(トレースの微分)。 関連する章: 第14章(行列連鎖律)。

本章の前提条件
本章の公式は、特に断りのない限り、以下の条件下で成立する:
  • すべての公式は分母レイアウト(denominator layout)に基づく
  • Hadamard積 $\odot$ は同じ次元のベクトル(または行列)間の要素ごとの積を表す

6.1 Hadamard積の微分

公式:$\displaystyle\frac{\partial (\boldsymbol{x} \odot \boldsymbol{y})}{\partial \boldsymbol{z}} = \frac{\partial \boldsymbol{y}}{\partial \boldsymbol{z}} \mathrm{diag}(\boldsymbol{x}) + \frac{\partial \boldsymbol{x}}{\partial \boldsymbol{z}} \mathrm{diag}(\boldsymbol{y})$
条件:$\boldsymbol{x}, \boldsymbol{y} \in \mathbb{R}^N$ はともに $\boldsymbol{z} \in \mathbb{R}^M$ の関数
証明

Hadamard積の $i$ 番目の成分は次のように定義される。

\begin{equation} (\boldsymbol{x} \odot \boldsymbol{y})_i = x_i \, y_i \label{eq:6-1-1} \end{equation}

これを $z_j$ で偏微分する。スカラの積の微分(Leibniz則)を適用すると次のようになる。

\begin{equation} \frac{\partial (x_i \, y_i)}{\partial z_j} = x_i \frac{\partial y_i}{\partial z_j} + y_i \frac{\partial x_i}{\partial z_j} \label{eq:6-1-2} \end{equation}

分母レイアウトでは、$\partial (\boldsymbol{x} \odot \boldsymbol{y}) / \partial \boldsymbol{z}$ や $\partial \boldsymbol{y} / \partial \boldsymbol{z}$ は $M \times N$ 行列で、その $(j, i)$ 成分が \eqref{eq:6-1-2} の $\partial (\cdot)_i / \partial z_j$ である。行列形式では次のようになる。

\begin{equation} \frac{\partial (\boldsymbol{x} \odot \boldsymbol{y})}{\partial \boldsymbol{z}} = \frac{\partial \boldsymbol{y}}{\partial \boldsymbol{z}} \mathrm{diag}(\boldsymbol{x}) + \frac{\partial \boldsymbol{x}}{\partial \boldsymbol{z}} \mathrm{diag}(\boldsymbol{y}) \label{eq:6-1-3} \end{equation}

ここで $\mathrm{diag}(\boldsymbol{x})$ は $\boldsymbol{x}$ の成分を対角に並べた行列であり、$\boldsymbol{A}\,\mathrm{diag}(\boldsymbol{x})$ の各列 $i$ は $\boldsymbol{A}$ の列 $i$ を $x_i$ 倍したものとなる。これにより、$(j, i)$ 成分の積 $x_i \cdot (\partial y_i / \partial z_j)$ が正しく表現される。分子レイアウト($N \times M$ の通常のヤコビ行列)で書くと、右辺は $\mathrm{diag}(\boldsymbol{x})\,\partial \boldsymbol{y}/\partial \boldsymbol{z} + \mathrm{diag}(\boldsymbol{y})\,\partial \boldsymbol{x}/\partial \boldsymbol{z}$ となる。

補足:$\boldsymbol{x}$ が $\boldsymbol{z}$ に依存しない定数ベクトルの場合、$\partial \boldsymbol{x}/\partial \boldsymbol{z} = \boldsymbol{O}$ となり、公式は $\dfrac{\partial \boldsymbol{y}}{\partial \boldsymbol{z}}\,\mathrm{diag}(\boldsymbol{x})$ に簡約される。

参考文献