証明集 第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}} = \mathrm{diag}(\boldsymbol{x}) \frac{\partial \boldsymbol{y}}{\partial \boldsymbol{z}} + \mathrm{diag}(\boldsymbol{y}) \frac{\partial \boldsymbol{x}}{\partial \boldsymbol{z}}$
条件:$\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}

これをJacobi行列 $\boldsymbol{J} \in \mathbb{R}^{N \times M}$(分母レイアウトでは $\mathbb{R}^{M \times N}$)の成分として書くと、行列形式では次のようになる。

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

ここで $\mathrm{diag}(\boldsymbol{x})$ は $\boldsymbol{x}$ の成分を対角に並べた行列であり、$\mathrm{diag}(\boldsymbol{x}) \boldsymbol{A}$ の各行 $i$ は $\boldsymbol{A}$ の行 $i$ を $x_i$ 倍したものとなる。これにより成分ごとの積 $x_i \cdot (\partial y_i / \partial z_j)$ が正しく表現される。

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

参考文献