勾配 | 数学
数学の文脈における勾配
一般に数学では多変数関数 $f(x_{1}, \dots, x_n)$ の各変数に対する偏微分をベクトルにまとめたものを勾配と呼びます。
\[\nabla f = \left( \frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n} \right)\]Deep Learning の文脈における勾配
損失 $L$ に対する各パラメータの偏微分を指します。
\[\frac{\partial L}{\partial W}, \quad \frac{\partial L}{\partial b}, \quad \ldots\]連鎖律を使って $L$ から逆向きに辿った結果が「勾配」です。
Deep Learning は $L$ が基準
目的がパラメータを更新して $L$ を小さくすることなので $L$ に対する偏微分を考えます。
以下は SGD を用いたパラメータの更新です。
単なる偏微分係数(例:$\frac{\partial x}{\partial f}$ )は途中計算で勾配とは呼ばないのが一般的です。
数学と Deep Learning の勾配
| 文脈 | 勾配 の意味 |
|---|---|
| 数学 | 多変数関数の偏微分をベクトルにまとめたもの( $\nabla f$ ) |
| Deep Learning | 損失 $L$ に対する連鎖律の結果( $\frac{\partial L}{\partial W}$ など) |
連鎖律:1 変数関数
$L(x) = g(f(x))$ の $L$ に対する $x$ の( Deep Learning の文脈における)勾配は以下の式で定義されます。
\[\begin{aligned} L = g(z),\ z = f(x) \ \Rightarrow \quad \frac{dL}{dx} = \frac{dg}{dz}\frac{dz}{dx} \end{aligned}\]連鎖律:$g(f(x))$ f:ベクトル値関数、 g:多変数関数
$\boldsymbol{x} \in \mathbb{R}^n,\ \boldsymbol{z} \in \mathbb{R}^m$ のとき $L$ に対する $\boldsymbol{x}$ の( Deep Learning の文脈における)勾配は以下の式で定義されます。
\[\begin{aligned} \boldsymbol{z} = f(\boldsymbol{x}) \quad f: \mathbb{R}^n \to \mathbb{R}^m \\ L = g(\boldsymbol{z}) \quad g: \mathbb{R}^m \to \mathbb{R} \\ \frac{\partial L}{\partial x_i} = \sum_{j=1}^m \frac{\partial g}{\partial z_j}\frac{\partial z_j}{\partial x_i} \quad (i = 1, \dots, n) \end{aligned}\]$x_i$ が $z_1, \dots, z_m$ という複数の経路を通って $L$ に影響を与えるため、その全経路の寄与を足し合せます。
$i$ 自体は和を取る添字ではなく、どの成分について求めているかを指定するインデックスです。
$\boldsymbol{x} \in \mathbb{R}^n,\ \boldsymbol{z} \in \mathbb{R}^m$ のベクトル値関数 $f$ が線形写像(アフィン写像)の場合、$(n, m)$ 行列 $W$ によって定義できます 。
\[\begin{aligned} z = xW \end{aligned}\]$x$ は $(1, n)$ ベクトル、$W$ は $(n, m)$ 行列なので $z$ は $(1, m)$ の行ベクトルです。
勾配 $\frac{\partial L}{\partial \boldsymbol{x}}$ をベクトルしてまとめて書くなら、ヤコビ行列を使って以下の式で定義されます。
\[\frac{\partial L}{\partial \boldsymbol{x}} = \frac{\partial L}{\partial \boldsymbol{z}} \frac{\partial \boldsymbol{z}}{\partial \boldsymbol{x}}\]$\dfrac{\partial \boldsymbol{z}}{\partial \boldsymbol{x}}$ は $(m,n)$ のヤコビ行列、$\dfrac{\partial L}{\partial \boldsymbol{z}}$ は $(1,m)$ の行ベクトルなので $\frac{\partial L}{\partial \boldsymbol{x}}$ は $(1, n)$ のベクトルになります。
$z = xW$ の場合、$\frac{\partial L}{\partial \boldsymbol{x}}$ は以下の式で定義されます。
\[\frac{\partial L}{\partial \boldsymbol{x}} = \frac{\partial L}{\partial \boldsymbol{z}} W^T\]補足:ヤコビ行列
$z: \mathbb{R}^n \to \mathbb{R}^m$ のベクトル値関数のすべての偏微分をまとめた行列をヤコビ行列と呼びます。
\[J = \frac{\partial \boldsymbol{z}}{\partial \boldsymbol{x}} = \begin{pmatrix} \dfrac{\partial z_1}{\partial x_1} & \cdots & \dfrac{\partial z_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial z_m}{\partial x_1} & \cdots & \dfrac{\partial z_m}{\partial x_n} \end{pmatrix} \quad (m,n) \text{ の行列}\]- 行 $j$: 出力 $z_j$ を基準に見た偏微分
- 列 $i$: 入力 $x_i$ を基準に見た偏微分
Deep Learning の例 1
定義
\[\mathbf{x} = (x_1, x_2)\] \[W = \begin{pmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \end{pmatrix}\] \[\mathbf{z} = (z_1, z_2, z_3) = \mathbf{x} W\] \[L = A(\mathbf{z})\]成分ごとに書くと、
\[z_1 = x_1 w_{11} + x_2 w_{21}\] \[z_2 = x_1 w_{12} + x_2 w_{22}\] \[z_3 = x_1 w_{13} + x_2 w_{23}\]連鎖律($z$ に関する勾配)
\[\frac{\partial L}{\partial \mathbf{z}} = \left( \frac{\partial L}{\partial z_1},\, \frac{\partial L}{\partial z_2},\, \frac{\partial L}{\partial z_3} \right)\]連鎖律($x$ に関する勾配)
\[\frac{\partial L}{\partial x_i} = \sum_{j=1}^{3} \frac{\partial L}{\partial z_j} \, w_{ij} \qquad (i = 1,2,\; j = 1,2,3)\]行列形式
\[\left( \frac{\partial L}{\partial x_1},\, \frac{\partial L}{\partial x_2} \right) = \left( \frac{\partial L}{\partial z_1},\, \frac{\partial L}{\partial z_2},\, \frac{\partial L}{\partial z_3} \right) W^{T}\]ここで、
\[W^{T} = \begin{pmatrix} w_{11} & w_{21} \\ w_{12} & w_{22} \\ w_{13} & w_{23} \end{pmatrix}\]すなわち、
\[\frac{\partial L}{\partial \mathbf{x}} = \frac{\partial L}{\partial \mathbf{z}} \, W^{T}\]Deep Learning の例 2
Deep Learning の勾配は損失 $L$ (スカラー)対する連鎖律として求めます。
行列積(全結合レイヤ)の勾配として $L =g(\boldsymbol{z}) = |\boldsymbol{z}|^2 = \sum_j z_j^2$(二乗和)、$f(\boldsymbol{x}) = \boldsymbol{x}W$ を考えます(二乗和はあくまでも簡単な例にするためのサンプルです)。
$\boldsymbol{x}$: shape $(1,2)$、$W$: shape $(2,2)$ として、具体的に
\[\boldsymbol{x} = (1,\ 2), \qquad W = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}\]順伝播
\[\boldsymbol{z} = \boldsymbol{x}W = (1\cdot1+2\cdot3,\ \ 1\cdot2+2\cdot4) = (7,\ 10)\] \[L = 7^2+10^2 = 49+100 = 149\]逆伝播(連鎖律)
Step 1:g の局所勾配
$g(\boldsymbol{z})=\sum_j z_j^2$ なので
\[\frac{\partial L}{\partial z_j} = 2z_j \quad \Rightarrow \quad \frac{\partial L}{\partial \boldsymbol{z}} = (2\cdot7,\ 2\cdot10) = (14,\ 20)\]Step 2:全結合レイヤの逆伝播
\(\frac{\partial L}{\partial \boldsymbol{x}} = \frac{\partial L}{\partial \boldsymbol{z}}\cdot W^T = (14,\ 20)\cdot\begin{pmatrix}1 & 3\\2 & 4\end{pmatrix} = (14\cdot1+20\cdot2,\ \ 14\cdot3+20\cdot4) = (54,\ 122)\) \(\frac{\partial L}{\partial W} = \boldsymbol{x}^T\cdot\frac{\partial L}{\partial \boldsymbol{z}} = \begin{pmatrix}1\\2\end{pmatrix}\cdot(14,\ 20) = \begin{pmatrix} 14 & 20 \\ 28 & 40 \end{pmatrix}\)