$ $
$$
\begin{align}
&\text{We offer no explanation as to why these architectures seem to work;}\\
&\text{we attribute their success, as all else, to divine benevolence.}\\
\\
&\text{これらのアーキテクチャがなぜうまく機能するのかについて、我々は説明を与えない。}\\
&\text{その成功は、他のすべてと同様に、神の慈悲によるものと考える。}
\end{align}
$$
$$
\text{Noam Shazeer, “GLU Variants Improve Transformer”, arXiv:2002.05202, 2020}
$$
$ $
深層学習では、ある構成が経験的にうまく機能する一方で、
その理由が論文中で十分には説明されないこともある。
$ $
例えば、Noam Shazeer は $\text{Transformer}$ の $\text{FFN}$ における $\text{GLU}$ 変種について、
以上のように述べている。
本節では、Neural Network の学習で必要となる 勾配を効率よく計算するための基本的な仕組みとして、$\text{backpropagation}$ を定義する。
多層ニューラルネットワークでは、入力から出力へ向かって計算を進めることで予測値を得る。
学習のためには、予測値と教師信号(正解値)のずれを表す損失関数を小さくする方向に、各層の重みとバイアスを更新したい。
$ $
そのためには、損失関数を各パラメータで微分した量、すなわち勾配を計算する必要がある。
$\text{Backpropagation}$ は、この勾配を効率よく計算するための方法である。
$ $
より正確には、$\text{backpropagation}$ は、
合成関数の微分法である連鎖律に基づき、出力側から入力側へ向かって中間的な偏微分を再利用しながら、
各層の重みとバイアスに関する損失関数の偏微分を計算する方法である。
$ $
したがって、$\text{backpropagation}$ は単に「誤差を後ろへ戻す方法」ではない。
それは、多層ニューラルネットワーク全体を一つの合成関数と見なし、その微分を後ろ向きに効率よく計算する方法である。
$$ $$
$$
\begin{align}
\text{学習する機械}\\
\end{align}
$$
$$ $$
機械学習の問題設定において、モデルへの入力として許す対象全体の集合を、ここでは 入力空間 という。
本稿では、入力空間を
$$
\mathcal{X}
$$
で表す。
本稿で扱う入力
$$
x\in\mathcal{X}
$$
とは、モデルに与えられる対象である。
例えば、表形式データ、画像、文章、音声波形などは、適切な数学的表現を通して入力空間 $\mathcal{X}$ の元として扱うことができる。
$ $
特に、前回の記事(
詳しくはコチラ
)ではニューラルネットワークの入力として扱う行ベクトル
$$
\mathbf{x}\in\mathbb{R}^{1\times d_{\mathrm{in}}}
$$
を入力ベクトルという。$d_{\mathrm{in}}$ を入力次元という。
入力空間 $\mathcal{X}$ は、定義上、任意の集合でよい。
したがって、$\mathcal{X}$ は必ずしも実ベクトル空間である必要はない。
$ $
ただし、ニューラルネットワークでは、入力を実数ベクトルとして扱うことが多い。
この場合、ある $d\in\mathbb{N}_{>0}$ に対して、
$$
\mathcal{X}\subseteq\mathbb{R}^{1\times d}
$$
または
$$
\mathcal{X}=\mathbb{R}^{1\times d}
$$
のように定めることが多い。
このとき、入力を
$$
\mathbf{x}\in\mathcal{X}
$$
と太字で書くことがある。
入力空間 $\mathcal{X}$ は、モデルに入る前の対象そのものの集合として定めてもよいし、
前処理や特徴量化の後に得られる数値表現の集合として定めてもよい。
$ $
例えば、手書き数字画像を分類する問題では、入力を画像そのものと見なすこともできる。
一方で、各画像を画素値のベクトルとして表せば、入力空間を
$$
\mathcal{X}\subseteq\mathbb{R}^{1\times d}
$$
のように定めることができる。
ここで、$d$ は入力を表すために用いる特徴量の数である。
教師あり学習の問題設定において、入力に対して比較対象として与えられる値の取り得る集合を、教師信号の集合という。
本稿では、教師信号の集合を
$$
\mathcal{Y}
$$
で表す。$\mathcal{Y}$ の元を教師信号という。
分類問題では、教師信号をラベルということが多い。
特に、正しいものとして与えられたラベルであることを強調するとき、正解ラベルということがある。
回帰問題では、教師信号を目標値または目的変数の値ということがある。
入力空間を $\mathcal{X}$ とし、教師信号の集合を $\mathcal{Y}$ とする。$N\in\mathbb{N}_{>0}$ とする。
各 $i\in\{1,\ldots,N\}$ に対して、
$$
\mathbf{x}_i\in\mathcal{X},\quad y_i\in\mathcal{Y}
$$
とする。
このとき、有限列
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
を訓練データという。
すなわち、訓練データは
$$
D\in(\mathcal{X}\times\mathcal{Y})^N
$$
である。
各 $(\mathbf{x}_i,y_i)$ を教師付きサンプルという。
特に分類問題では、各 $(\mathbf{x}_i,y_i)$ をラベル付きサンプルということがある。
訓練データを集合
$$
\{(\mathbf{x}_i,y_i)\mid i\in\{1,\ldots,N\}\}
$$
として書くことも多い。
ただし、集合として扱うと、同じ教師付きサンプルが複数回現れた場合に重複が消えてしまう。
そのため、本稿では訓練データを有限列
$$
((\mathbf{x}_i,y_i))_{i=1}^{N}\in(\mathcal{X}\times\mathcal{Y})^N
$$
として扱う。
教師あり学習では、各訓練入力に対して、モデルの予測値と比較される教師信号が与えられている。
教師信号の集合
$$
\mathcal{Y}
$$
とは、教師信号として取り得る値全体の集合である。
したがって、訓練データ
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
において、
$$
y_i\in\mathcal{Y}
$$
は、第 $i$ 番目の訓練入力 $\mathbf{x}_i$ に対応して与えられた教師信号を表す。
-このように、教師信号の集合 $\mathcal{Y}$ は、問題設定によって異なる。
分類問題では有限集合として定めることが多く、回帰問題では実数集合や実数ベクトル空間として定めることが多い。
入力空間を $\mathcal{X}$ とし、予測値の集合を $\widehat{\mathcal{Y}}$ とする。また、パラメータ空間を $\Theta$ とする。
各 $\theta\in\Theta$ に対して、写像
$$
f_\theta:\mathcal{X}\to\widehat{\mathcal{Y}}
$$
が定まっているとする。
すなわち、モデルの族
$$
\{f_\theta:\mathcal{X}\to\widehat{\mathcal{Y}}\mid \theta\in\Theta\}
$$
が与えられているとする。
このとき、$\theta\in\Theta$ と入力 $x\in\mathcal{X}$ に対して、
$$
\hat y:=f_\theta(x)
$$
と定める。
この $\hat y$ を、パラメータ $\theta$ をもつモデル $f_\theta$ による、入力 $x$ に対する予測値または予測出力という。
直前の Feed-Forward Network の定義では、
$$
f_\theta:\mathbb{R}^{1\times d_0}\to\mathbb{R}^{1\times d_L}
$$
としていた。
この場合は、
$$
\mathcal{X}:=\mathbb{R}^{1\times d_0},
\quad
\widehat{\mathcal{Y}}:=\mathbb{R}^{1\times d_L}
$$
と見なせばよい。
ここで、$\mathcal{X}$ は入力空間であり、$\widehat{\mathcal{Y}}$ はモデルの予測値が属する集合である。
一方、教師信号が属する集合は
$$
\mathcal{Y}
$$
と書く。
通常、後述する損失関数では、予測値
$$
\hat y\in\widehat{\mathcal{Y}}
$$
と教師信号
$$
y\in\mathcal{Y}
$$
を比較する。
したがって、一般には損失関数を
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
のように定める。
$\widehat{\mathcal{Y}}$ と $\mathcal{Y}$ は一致してもよいが、一般には一致しなくてもよい。
例えば、実数値回帰では
$$
\widehat{\mathcal{Y}}=\mathcal{Y}=\mathbb{R}
$$
とできる。
一方、$K$ クラス分類では、教師信号の集合を
$$
\mathcal{Y}:=\{c_1,\ldots,c_K\}
$$
とし、モデルの予測値が属する集合を
$$
\widehat{\mathcal{Y}}:=\mathbb{R}^{1\times K}
$$
とすることがある。
この場合、$f_\theta(\mathbf{x})$ は各クラスに対応するスコアベクトルであり、教師信号 $y\in\mathcal{Y}$ そのものではない。
$\mathcal{Y}$ を教師信号の集合とする。$\widehat{\mathcal{Y}}$ を予測値の集合とする。
本稿では、写像
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
を損失関数という。
予測値 $\hat y\in\widehat{\mathcal{Y}}$ と教師信号 $y\in\mathcal{Y}$ に対して、
$$
\ell(\hat y,y)
$$
は、予測値 $\hat y$ が教師信号 $y$ に対してどれだけ不適合であるかを表す非負実数である。
損失関数は、予測値と教師信号を比較する関数である。
ただし、損失関数は一般に距離関数である必要はない。
すなわち、損失関数は対称性や三角不等式を満たすとは限らない。
$q\in\mathbb{N}_{>0}$ とする。
回帰問題では、例えば
$$
\widehat{\mathcal{Y}}=\mathcal{Y}=\mathbb{R}^{1\times q}
$$
として、
$$
\ell(\hat y,y)
:=
\|\hat y-y\|_2^2
$$
と定めることがある。
ここで、
$$
\hat y=(\hat y_1,\ldots,\hat y_q),\quad
y=(y_1,\ldots,y_q)
$$
と書けば、
$$
\|\hat y-y\|_2^2
=
\sum_{j=1}^{q}(\hat y_j-y_j)^2
$$
である。この損失関数を平方損失という。
損失関数は、$1$ つの教師付きサンプルに対する予測の不適合度を測る関数である。
一方、訓練データ全体に対する平均的な損失は、経験損失として別に定義する。
すなわち、損失関数
$$
\ell(\hat y,y)
$$
は $1$ つの予測値と $1$ つの教師信号を比較する関数であり、この後で定義する経験損失
$$
\mathcal{L}_D(\theta)
$$
は訓練データ全体にわたって損失を平均した関数である。
損失関数
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
は、一般には予測値と教師信号を比較するための写像として定義される。
したがって、損失関数を定義するだけであれば、必ずしも微分可能性を仮定する必要はない。
$ $
しかし、$\text{backpropagation}$ によって勾配を計算する場合には、
損失関数を合成関数の一部として微分する必要がある。
$ $
そのため、予測値の集合 $\widehat{\mathcal{Y}}$ が実ベクトル空間の部分集合である場合、例えば
$$
\widehat{\mathcal{Y}}\subseteq\mathbb{R}^{1\times d_{\mathrm{out}}}
$$
である場合には、各教師信号 $y\in\mathcal{Y}$ を固定して得られる写像
$$
\ell_y:\widehat{\mathcal{Y}}\to\mathbb{R}_{\geq 0}
$$
を
$$
\ell_y(\hat y):=\ell(\hat y,y)
$$
で定める。
$\text{backpropagation}$ で通常の勾配を用いるためには、この写像 $\ell_y$ が予測値 $\hat y$ について微分可能であることを仮定する。
$ $
すなわち、固定された教師信号 $y\in\mathcal{Y}$ に対して、損失
$$
\ell(\hat y,y)
$$
を予測値 $\hat y$ の関数と見たとき、その勾配
$$
\nabla_{\hat y}\ell(\hat y,y)
$$
が定義できる必要がある。
この勾配が、出力層から前の層へ向かって勾配を伝播させる際の出発点になる。
$ $
ただし、教師信号 $y$ は分類問題ではラベルのような離散的な対象であることもある。
そのため、$\text{backpropagation}$ に必要なのは、通常、教師信号 $y$ に関する微分可能性ではなく、予測値 $\hat y$ に関する微分可能性である。
$ $
例えば、平方損失
$$
\ell(\hat y,y)=\|\hat y-y\|_2^2
$$
は、$\hat y$ に関して微分可能である。
一方、分類問題における $0$-$1$ 損失
$$
\ell(\hat y,y)=\mathbf{1}\{\operatorname{class}(\hat y)\neq y\}
$$
は、通常の意味では $\hat y$ に関して微分可能ではない。
そのため、ニューラルネットワークの学習では、$0$-$1$ 損失そのものではなく、交差エントロピー損失などの微分可能な代理損失を用いることが多い。
$ $
さらに、損失関数だけが微分可能であっても、
パラメータに関する勾配が自動的に定義できるわけではない。
パラメータ $\theta$ に関する損失
$$
\theta\mapsto \ell(f_\theta(x),y)
$$
を微分するためには、モデルの写像
$$
\theta\mapsto f_\theta(x)
$$
も適切な意味で微分可能である必要がある。
したがって、$\text{backpropagation}$ を定義する節では、
損失関数を単なる写像として定めたあとで、勾配計算に用いる追加仮定として、損失関数とモデルの微分可能性を明記する必要がある。
$N\in\mathbb{N}_{>0}$ とする。入力空間を $\mathcal{X}$ とし、教師信号の集合を $\mathcal{Y}$ とする。
各 $i\in\{1,\ldots,N\}$ に対して、
$$
\mathbf{x}_i\in\mathcal{X},
\quad
y_i\in\mathcal{Y}
$$
とする。
訓練データを有限列
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
で定める。
予測値の集合を $\widehat{\mathcal{Y}}$ とし、パラメータ空間を $\Theta$ とする。
各 $\theta\in\Theta$ に対して、モデル
$$
f_\theta:\mathcal{X}\to\widehat{\mathcal{Y}}
$$
が定まっているとする。
また、損失関数を
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
とする。
このとき、写像
$$
\mathcal{L}_D:\Theta\to\mathbb{R}_{\geq 0}
$$
を、各 $\theta\in\Theta$ に対して
$$
\mathcal{L}_D(\theta)
:=
\frac{1}{N}\sum_{i=1}^{N}
\ell(f_\theta(\mathbf{x}_i),y_i)
$$
で定める。
この $\mathcal{L}_D$ を、訓練データ $D$ に対する経験損失という。
経験損失は、訓練データ上での平均的な損失を表す。
実際の学習では、経験損失に 正則化項を加えた目的関数 を最小化することもある。
経験損失
$$
\mathcal{L}_D(\theta)
$$
は、訓練データ上での平均的な損失を表す。しかし、経験損失だけを小さくしようとすると、
モデルが訓練データに過度に適合(データのバラつきまで学習してしまう事)することがある。この現象を 過学習 という。
過学習が起きると、訓練データ上では損失が小さいにもかかわらず、未知のデータに対する予測性能が悪くなることがある。
$ $
そこで、学習パラメータが大きくなりすぎたり、
モデルが複雑になりすぎたりすることを抑えるために、目的関数に追加の項を加えることがある。
この追加の項を 正則化項 という。
$ $
パラメータ空間を $\Theta$ とし、正則化項を
$$
\Omega:\Theta\to\mathbb{R}_{\geq 0}
$$
とする。また、
$$
\lambda\geq 0
$$
とする。
このとき、経験損失に正則化項を加えた目的関数を
$$
J_D:\Theta\to\mathbb{R}_{\geq 0}
$$
として、各 $\theta\in\Theta$ に対して
$$
J_D(\theta)
:=
\mathcal{L}_D(\theta)+\lambda\Omega(\theta)
$$
と定めることがある。ここで、$\lambda$ は正則化の強さを表すハイパーパラメータである。
$\lambda$ が大きいほど、正則化項の影響が強くなる。
一方で、
$$
\lambda=0
$$
の場合には、
$$
J_D(\theta)=\mathcal{L}_D(\theta)
$$
となり、正則化項を加えない場合に戻る。
$L\in\mathbb{N}_{>0}$ とする。同様に $d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
各 $\ell\in\{1,\ldots,L\}$ に対して、重み行列を
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell}
$$
とする。
-正則化項を加える目的は、訓練データ上の損失を最小にすることだけではなく、
未知データに対してもよい予測を行うようなモデルを得ることである。
この意味で、正則化はモデルの 汎化性能 を高めることを意図した工夫である。
本稿で定義した経験損失
$$
\mathcal{L}_D(\theta)
=
\frac{1}{N}
\sum_{i=1}^{N}
\ell(f_\theta(\mathbf{x}_i),y_i)
$$
は、一般の損失関数 $\ell$ によって訓練データ上の平均的な損失を測る量である。
この量を、文脈によっては訓練損失、訓練誤差、経験リスクということもある。
$ $
ただし、分類問題において訓練誤差という場合には、特に $0$-$1$ 損失に基づく誤分類率
$$
\frac{1}{N}
\sum_{i=1}^{N}
\mathbf{1}\{h(\mathbf{x}_i)\neq y_i\}
$$
を指すことが多い。
そのため、本稿では混同を避けるため、一般の損失関数による平均損失を経験損失と呼び、分類問題における誤分類率を訓練誤差率と呼ぶ。
パラメータ空間を $\Theta$ とする。
経験損失を
$$
\mathcal{L}_D:\Theta\to\mathbb{R}_{\ge 0}
$$
とする。
ニューラルネットワークの学習では、典型的には
$$
\min_{\theta\in\Theta}\mathcal{L}_D(\theta)
$$
という最適化問題を考える。
すなわち、訓練データ上の平均的な損失である経験損失
$$
\mathcal{L}_D(\theta)
$$
ができるだけ小さくなるような学習パラメータ $\theta\in\Theta$ を探索することを考える。
この考え方を、経験損失最小化 または 経験リスク最小化 という。
$ $
一般には、この最適化問題の大域的最小解を厳密に求めることは難しい。
特に、深いニューラルネットワークでは、目的関数が非凸になることが多く、単純な凸最適化問題として扱えない。
$ $
そのため、実際には 勾配降下法、確率的勾配降下法、ミニバッチ確率的勾配降下法やその変種 を用いて、
経験損失を小さくする パラメータを逐次的に探索 する。
入力空間を $\mathcal{X}$ とし、教師信号の集合を $\mathcal{Y}$ とする。
また、予測値の集合を $\widehat{\mathcal{Y}}$ とする。
仮説集合を
$$
\mathcal{H}\subseteq \widehat{\mathcal{Y}}^{\mathcal{X}}
$$
とする。
すなわち、各 $h\in\mathcal{H}$ は写像
$$
h:\mathcal{X}\to\widehat{\mathcal{Y}}
$$
である。
また、損失関数を
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
とする。
$N\in\mathbb{N}_{>0}$ とし、訓練データ
$$
D:=((x_i,y_i))_{i=1}^{N}\in(\mathcal{X}\times\mathcal{Y})^N
$$
が与えられているとする。
各 $h\in\mathcal{H}$ に対して、$D$ 上の経験損失を
$$
\widehat{R}_D(h)
:=
\frac{1}{N}\sum_{i=1}^{N}\ell(h(x_i),y_i)
$$
で定める。
このとき、訓練データ $D$ を用いて、経験損失 $\widehat{R}_D(h)$ が小さくなるような予測関数
$$
h_D\in\mathcal{H}
$$
を選ぶ問題を、教師あり学習という。
特に、
$$
h_D\in\operatorname*{arg\,min}_{h\in\mathcal{H}}\widehat{R}_D(h)
$$
を満たす $h_D$ を選ぶことを、経験損失最小化 または 経験リスク最小化 という。
例えば、$1$ 次元の回帰問題を考える。
入力空間と教師信号の集合を
$$
\mathcal{X}:=\mathbb{R}^{1\times 1},
\quad
\mathcal{Y}:=\mathbb{R}^{1\times 1}
$$
とする。
訓練データを
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{3}
$$
とし、具体的に
$$
\mathbf{x}_1=(1),\quad y_1=(2)
$$
$$
\mathbf{x}_2=(2),\quad y_2=(4)
$$
$$
\mathbf{x}_3=(3),\quad y_3=(5)
$$
とする。
モデルを
$$
f_\theta:\mathbb{R}^{1\times 1}\to\mathbb{R}^{1\times 1}
$$
とし、例えば
$$
f_\theta(\mathbf{x})=2\mathbf{x}
$$
であるとする。
このとき、各入力に対する予測値は
$$
f_\theta(\mathbf{x}_1)=f_\theta((1))=(2)
$$
$$
f_\theta(\mathbf{x}_2)=f_\theta((2))=(4)
$$
$$
f_\theta(\mathbf{x}_3)=f_\theta((3))=(6)
$$
である。
損失関数として平方損失
$$
\ell(\hat y,y):=\|\hat y-y\|_2^2
$$
を用いる。
このとき、各訓練サンプルに対する損失は
$$
\ell(f_\theta(\mathbf{x}_1),y_1)
=
\|(2)-(2)\|_2^2
=
0
$$
$$
\ell(f_\theta(\mathbf{x}_2),y_2)
=
\|(4)-(4)\|_2^2
=
0
$$
$$
\ell(f_\theta(\mathbf{x}_3),y_3)
=
\|(6)-(5)\|_2^2
=
1
$$
である。
したがって、訓練データ $D$ に対する経験損失は
$$
\begin{align}
\mathcal{L}_D(\theta)
&=
\frac{1}{3}
\sum_{i=1}^{3}
\ell(f_\theta(\mathbf{x}_i),y_i)
\\
&=
\frac{1}{3}
\left(
\ell(f_\theta(\mathbf{x}_1),y_1)
+
\ell(f_\theta(\mathbf{x}_2),y_2)
+
\ell(f_\theta(\mathbf{x}_3),y_3)
\right)
\\
&=
\frac{1}{3}(0+0+1)
\\
&=
\frac{1}{3}
\end{align}
$$
である。
つまり、この例では、モデル $f_\theta$ の訓練データ上での平均的な損失は
$$
\frac{1}{3}
$$
である。
この値が小さいほど、モデルは訓練データに対してよく当てはまっていると考えられる。
ただし、経験損失が小さいことは、未知のデータに対しても必ずよく予測できることを意味しない。
入力空間を可測空間 $(\mathcal{X},\mathcal{A}_{\mathcal{X}})$ とし、教師信号の集合を可測空間 $(\mathcal{Y},\mathcal{A}_{\mathcal{Y}})$ とする。
また、予測値の集合を可測空間 $(\widehat{\mathcal{Y}},\mathcal{A}_{\widehat{\mathcal{Y}}})$ とする。
直積集合
$$
\mathcal{Z}:=\mathcal{X}\times\mathcal{Y}
$$
に積 $\sigma$-加法族
$$
\mathcal{A}_{\mathcal{Z}}
:=
\mathcal{A}_{\mathcal{X}}\otimes\mathcal{A}_{\mathcal{Y}}
$$
を入れる。すなわち、
$$
(\mathcal{Z},\mathcal{A}_{\mathcal{Z}})
$$
を入力と教師信号の組からなる可測空間とする。また、$\mathcal{Z}$ 上の確率測度を $P$ とする。
パラメータ空間を $\Theta$ とし、各 $\theta\in\Theta$ に対して、可測写像
$$
f_\theta:\mathcal{X}\to\widehat{\mathcal{Y}}
$$
が定まっているとする。
また、損失関数を可測写像
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
とする。
各 $\theta\in\Theta$ に対して、写像
$$
g_\theta:\mathcal{Z}\to\mathbb{R}_{\geq 0}
$$
を
$$
g_\theta(x,y)
:=
\ell(f_\theta(x),y)
$$
で定める。このとき、$g_\theta$ は可測である。
さらに、各 $\theta\in\Theta$ に対して $g_\theta$ が $P$ に関して可積分であると仮定する。
確率変数の組
$$
(X,Y)\sim P
$$
を考えると、
$$
R_P(\theta)
=
\mathbb{E}_{(X,Y)\sim P}
\left[
\ell(f_\theta(X),Y)
\right]
$$
と書くこともできる。
すなわち、真のリスクは、分布 $P$ から生成される未知の入力と教師信号の組に対する期待損失である。
すなわち、本稿では、汎化性能を未知データに対する予測のよさとして捉え、その数学的な指標を真のリスク $R_P(\theta)$ によって表す。
汎化性能は、未知データに対する予測のよさを表す概念である。
損失関数を用いる場合、汎化性能の数学的な指標は真のリスク
$$
R_P(\theta)
$$
である。
この値が小さいほど、損失関数 $\ell$ の意味で汎化性能が高いと考える。
$ $
一方、精度や正解率のように値が大きいほどよい指標を用いる場合には、汎化性能を別の評価関数で表すこともある。
したがって、汎化性能を論じるときには、どの損失関数または評価指標を用いるかを明確にする必要がある。
文献によっては、真のリスク $R_P(\theta)$ を汎化誤差と呼ぶこともある。
一方、経験損失 $\mathcal{L}_D(\theta)$ と真のリスク $R_P(\theta)$ の差を強調する場合には、
汎化ギャップという語を用いる。
$ $
本稿では、混同を避けるため、未知データ上の期待損失を真のリスク、経験損失との差を汎化ギャップと呼ぶ。
汎化ギャップ
$$
G_D(\theta)
=
R_P(\theta)-\mathcal{L}_D(\theta)
$$
は、分布 $P$ 上の期待損失である真のリスクと、訓練データ $D$ 上の平均損失である経験損失の差を表す。
この値が正で大きい場合、訓練データ上の損失に比べて、分布 $P$ から生成される未知データ上の損失が大きいことを意味する。
一方、この値は定義上、負になることもある。
$ $
また、文献や文脈によっては、符号を無視して
$$
\left|G_D(\theta)\right|
=
\left|R_P(\theta)-\mathcal{L}_D(\theta)\right|
$$
を汎化ギャップと呼ぶこともある。
本稿では、符号付きの量を $G_D(\theta)$ と呼び、必要に応じて絶対値
$$
\left|G_D(\theta)\right|
$$
を考える。
訓練データ $D$ が分布 $P$ から独立同分布に生成される場合には、
$$
D\sim P^N
$$
と書くことがある。
すなわち、
$$
(\mathbf{x}_1,y_1),\ldots,(\mathbf{x}_N,y_N)
$$
が独立同分布であり、各 $i\in\{1,\ldots,N\}$ に対して
$$
(\mathbf{x}_i,y_i)\sim P
$$
であることを意味する。
この場合、経験損失 $\mathcal{L}_D(\theta)$ は訓練データ $D$ に依存する量であり、
$D$ を確率的に見るなら確率変数である。
汎化性能を論じるときには、訓練データが分布 $P$ から独立同分布に生成されると仮定することが多い。
厳密には、直積可測空間
$$
(\mathcal{Z}^N,\mathcal{A}_{\mathcal{Z}}^{\otimes N})
$$
上の確率測度
$$
P^N
$$
を考える。
訓練データを表す確率変数
$$
\mathbb{D}:\Omega\to\mathcal{Z}^N
$$
が
$$
\mathbb{D}\sim P^N
$$
を満たすとき、訓練データ $\mathbb{D}$ は分布 $P$ から独立同分布に生成されるという。
このことを、略して
$$
\mathbb{D}\sim P^N
$$
と書く。
この場合、
$$
\mathbb{D}
=
((X_i,Y_i))_{i=1}^{N}
$$
と書けば、
$$
(X_1,Y_1),\ldots,(X_N,Y_N)
$$
は独立同分布であり、各 $i\in\{1,\ldots,N\}$ に対して
$$
(X_i,Y_i)\sim P
$$
である。
$ $
このとき、固定された $\theta\in\Theta$ に対して、経験損失
$$
\mathcal{L}_{\mathbb{D}}(\theta)
$$
は訓練データ $\mathbb{D}$ に依存する確率変数である。
一方、真のリスク
$$
R_P(\theta)
$$
は分布 $P$ とパラメータ $\theta$ によって定まる値であり、固定された $\theta$ に対しては確率変数ではない。
したがって、固定された $\theta\in\Theta$ に対して、汎化ギャップ
$$
G_{\mathbb{D}}(\theta)
=
R_P(\theta)-\mathcal{L}_{\mathbb{D}}(\theta)
$$
も訓練データ $\mathbb{D}$ に依存する確率変数である。
$p\in\mathbb{N}_{>0}$ とする。微分可能な関数
$$
J:\mathbb{R}^{p}\to\mathbb{R}
$$
を考える。
初期値
$$
\theta_0\in\mathbb{R}^{p}
$$
とパラメータ
$$
\eta>0
$$
を固定する。
各 $t\in\mathbb{Z}_{\geq 0}$ に対して、
$$
\theta_{t+1}
:=
\theta_t-\eta\nabla J(\theta_t)
$$
と更新する方法を、勾配降下法という。
ここで、$\eta$ を学習率という。
$p\in\mathbb{N}_{>0}$ とする。
開集合
$$
U\subseteq\mathbb{R}^{p}
$$
と、微分可能な関数
$$
J:U\to\mathbb{R}
$$
を考える。
ここで、微分可能とは、各点で全微分可能であることを意味する。
点
$$
\theta\in U
$$
における $J$ の全微分を
$$
DJ(\theta):\mathbb{R}^{p}\to\mathbb{R}
$$
とする。
標準的なユークリッド内積を
$$
\cdot
$$
で表す。
このとき、ただ $1$ つのベクトル
$$
\nabla J(\theta)\in\mathbb{R}^{p}
$$
が存在して、任意の $h\in\mathbb{R}^{p}$ に対して
$$
DJ(\theta)[h]
=
\nabla J(\theta)\cdot h
$$
が成り立つ。
この $\nabla J(\theta)$ を、$J$ の $\theta$ における勾配という。
$J$ が $\theta$ において微分可能であるとき、勾配は偏微分を用いて
$$
\nabla J(\theta)
=
\left(
\frac{\partial J}{\partial \theta_1}(\theta),
\ldots,
\frac{\partial J}{\partial \theta_p}(\theta)
\right)
$$
と書ける。
ただし、これは単に偏微分が存在するという意味ではなく、$J$ が全微分可能であることを前提としている。
$p\in\mathbb{N}_{>0}$ とする。
開集合 $U\subseteq\mathbb{R}^{p}$ と、微分可能な関数
$$
J:U\to\mathbb{R}
$$
を考える。
$\theta\in U$ とする。$J$ が $\theta$ で微分可能であるため、$\theta+h\in U$ を満たす十分小さい $h\in\mathbb{R}^{p}$ に対して、
$$
J(\theta+h)
=
J(\theta)
+
\nabla J(\theta)\cdot h
+
o(\|h\|)
$$
が成り立つ。
したがって、$\nabla J(\theta)$ は、$J$ の $\theta$ 付近における一次近似を与えるベクトルである。
$p\in\mathbb{N}_{>0}$ とする。
開集合 $U\subseteq\mathbb{R}^{p}$ と、微分可能な関数
$$
J:U\to\mathbb{R}
$$
を考える。
$\theta\in U$ とし、
$$
\nabla J(\theta)\neq 0
$$
とする。
単位ベクトル $v\in\mathbb{R}^{p}$ に対する方向微分は
$$
DJ(\theta)[v]
=
\nabla J(\theta)\cdot v
$$
である。
Cauchy-Schwarz の不等式より、
$$
-\|\nabla J(\theta)\|
\leq
\nabla J(\theta)\cdot v
\leq
\|\nabla J(\theta)\|
$$
が成り立つ。
等号
$$
\nabla J(\theta)\cdot v
=
-\|\nabla J(\theta)\|
$$
が成り立つのは
$$
v
=
-\frac{\nabla J(\theta)}{\|\nabla J(\theta)\|}
$$
のときである。
したがって、標準的なユークリッド内積とユークリッドノルムに関して、負の勾配方向
$$
-\nabla J(\theta)
$$
は、$J$ が局所的に最も減少しやすい方向である。
勾配降下法では、学習率
$$
\eta>0
$$
が $1$ 回の更新で進む大きさを決める。
ただし、任意の $\eta>0$ に対して、常に
$$
J(\theta_{t+1})\leq J(\theta_t)
$$
が成り立つわけではない。
学習率が大きすぎる場合には、目的関数の値が増加したり、反復列が発散したりすることがある。
$ $
したがって、勾配降下法の収束や目的関数値の単調減少を主張するには、
$J$ の凸性、勾配の Lipschitz 連続性、学習率の条件などを別途仮定する必要がある。
もっとも簡単な例として、$1$ 変数関数
$$
J(\theta):=(\theta-3)^2
$$
を考える。この関数は、$\theta=3$ のとき最小値 $0$ をとる。
実際、
$$
J(3)=(3-3)^2=0
$$
である。
この最小値を、勾配降下法によって近似的に探すことを考える。
-この例では、勾配
$$
\nabla J(\theta_t)
$$
が現在の点 $\theta_t$ において関数 $J$ が増加しやすい方向を表す。
そのため、勾配降下法では、その反対方向
$$
-\nabla J(\theta_t)
$$
へ進むことで、$J$ の値を小さくすることを目指す。
$m,n\in\mathbb{N}_{>0}$ とする。$A,B\in\mathbb{R}^{m\times n}$ とする。
このとき、行列
$$
A\odot B\in\mathbb{R}^{m\times n}
$$
を、各 $i\in\{1,\ldots,m\}$、各 $j\in\{1,\ldots,n\}$ に対して
$$
(A\odot B)_{i,j}
:=
A_{i,j}B_{i,j}
$$
で定める。
この行列 $A\odot B$ を、$A$ と $B$ のアダマール積という。
アダマール積は、同じ大きさの行列どうしに対して、対応する成分どうしを掛ける演算である。
したがって、通常の行列積とは異なる。
$ $
例えば、通常の行列積 $AB$ は、$A$ の列数と $B$ の行数が一致するときに定義される。
一方、アダマール積 $A\odot B$ は、$A$ と $B$ の行数と列数がそれぞれ一致するときに定義される。
$p\in\mathbb{N}_{>0}$ とする。
行ベクトル
$$
\mathbf{u}=(u_1,\ldots,u_p)\in\mathbb{R}^{1\times p}
$$
と
$$
\mathbf{v}=(v_1,\ldots,v_p)\in\mathbb{R}^{1\times p}
$$
を考える。このとき、
$$
\mathbf{u}\odot\mathbf{v}
:=
(u_1v_1,\ldots,u_pv_p)
$$
で定める。
この行ベクトル $\mathbf{u}\odot\mathbf{v}$ を、$\mathbf{u}$ と $\mathbf{v}$ のアダマール積という。
$ $
行ベクトルは $1\times p$ 行列と見なせる。
したがって、行ベクトルに対するアダマール積は、行列に対するアダマール積の特殊例である。
$\text{Backpropagation}$ では、同じ大きさの行ベクトルどうしの成分ごとの積を用いる。
$ $
$d_\ell\in\mathbb{N}_{>0}$ とし、活性化前の行ベクトルを
$$
\mathbf{a}^{(\ell)}
=
(a_1^{(\ell)},\ldots,a_{d_\ell}^{(\ell)})
\in\mathbb{R}^{1\times d_\ell}
$$
とする。
また、活性化関数
$$
\sigma_\ell:\mathbb{R}\to\mathbb{R}
$$
が各 $a_j^{(\ell)}$ において微分可能であるとする。
このとき、成分ごとの活性化によって
$$
\mathbf{h}^{(\ell)}
:=
\sigma_\ell^{[d_\ell]}(\mathbf{a}^{(\ell)})
=
\left(
\sigma_\ell(a_1^{(\ell)}),
\ldots,
\sigma_\ell(a_{d_\ell}^{(\ell)})
\right)
$$
と定める。
さらに、
$$
\sigma_\ell'(\mathbf{a}^{(\ell)})
$$
を
$$
\sigma_\ell'(\mathbf{a}^{(\ell)})
:=
\left(
\sigma_\ell'(a_1^{(\ell)}),
\ldots,
\sigma_\ell'(a_{d_\ell}^{(\ell)})
\right)
$$
で定める。
$ $
本稿では、
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
$$
という記法を、行ベクトル
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
:=
\left(
\frac{\partial J}{\partial h_1^{(\ell)}},
\ldots,
\frac{\partial J}{\partial h_{d_\ell}^{(\ell)}}
\right)
\in\mathbb{R}^{1\times d_\ell}
$$
の意味で用いる。
このとき、
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
\in\mathbb{R}^{1\times d_\ell},
\quad
\sigma_\ell'(\mathbf{a}^{(\ell)})
\in\mathbb{R}^{1\times d_\ell}
$$
であるため、両者のアダマール積
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
\odot
\sigma_\ell'(\mathbf{a}^{(\ell)})
$$
が定義できる。
すなわち、
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
=
(g_1,\ldots,g_{d_\ell})
$$
かつ
$$
\sigma_\ell'(\mathbf{a}^{(\ell)})
=
(s_1,\ldots,s_{d_\ell})
$$
であるとき、
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
\odot
\sigma_\ell'(\mathbf{a}^{(\ell)})
=
(g_1s_1,\ldots,g_{d_\ell}s_{d_\ell})
$$
である。
このように、$\odot$ は成分ごとの積を表す。
$L\in\mathbb{N}_{>0}$ とする。$d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
各 $\ell\in\{1,\ldots,L\}$ に対して、重み行列とバイアス行ベクトルを
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell},
\quad
\mathbf{b}_\ell\in\mathbb{R}^{1\times d_\ell}
$$
とする。
また、各 $\ell\in\{1,\ldots,L\}$ に対して、写像
$$
\sigma_\ell^{[d_\ell]}:\mathbb{R}^{1\times d_\ell}\to\mathbb{R}^{1\times d_\ell}
$$
が定まっているとする。
パラメータを
$$
\theta:=((W_\ell,\mathbf{b}_\ell))_{\ell=1}^{L}
$$
と書く。
-固定されたパラメータ $\theta$ と入力 $\mathbf{x}$ に対して、
$$
\mathbf{h}^{(0)},\mathbf{a}^{(1)},\mathbf{h}^{(1)},\ldots,\mathbf{a}^{(L)},\mathbf{h}^{(L)}
$$
を入力側から出力側へ順に計算する手続きを、$\text{forward propagation}$ という。
このとき、
$$
f_\theta(\mathbf{x})=\mathbf{h}^{(L)}
$$
である。
$\sigma_\ell^{[d_\ell]}$ は、スカラー値関数
$$
\sigma_\ell:\mathbb{R}\to\mathbb{R}
$$
を成分ごとに適用する写像として定めることが多い。
すなわち、
$$
\mathbf{a}^{(\ell)}
=
(a_1^{(\ell)},\ldots,a_{d_\ell}^{(\ell)})
$$
であるとき、
$$
\sigma_\ell^{[d_\ell]}(\mathbf{a}^{(\ell)})
=
\left(
\sigma_\ell(a_1^{(\ell)}),
\ldots,
\sigma_\ell(a_{d_\ell}^{(\ell)})
\right)
$$
である。
文脈上明らかな場合には、
$$
\sigma_\ell^{[d_\ell]}(\mathbf{a}^{(\ell)})
$$
を単に
$$
\sigma_\ell(\mathbf{a}^{(\ell)})
$$
と書くことがある。
出力層に活性化関数を置かない形の Feed-Forward Network もある。
その場合は、出力層の写像
$$
\sigma_L^{[d_L]}:\mathbb{R}^{1\times d_L}\to\mathbb{R}^{1\times d_L}
$$
を恒等写像
$$
\sigma_L^{[d_L]}(\mathbf{u})=\mathbf{u}
$$
として定めれば、上の定義に含めることができる。
Feed-Forward Network は、固定されたパラメータ $\theta$ に対して定まる写像
$$
f_\theta:\mathbb{R}^{1\times d_0}\to\mathbb{R}^{1\times d_L}
$$
である。
一方、$\text{forward propagation}$ は、具体的な入力
$$
\mathbf{x}\in\mathbb{R}^{1\times d_0}
$$
を与えたときに、
$$
\mathbf{h}^{(0)},\mathbf{a}^{(1)},\mathbf{h}^{(1)},\ldots,\mathbf{a}^{(L)},\mathbf{h}^{(L)}
$$
を順に計算する手続きである。
したがって、Feed-Forward Network は写像であり、$\text{forward propagation}$ はその写像の値を計算する手続きである。
$L\in\mathbb{N}_{>0}$ とし、$d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
$1$ つの教師付きサンプル
$$
(\mathbf{x},y)\in\mathbb{R}^{1\times d_0}\times\mathcal{Y}
$$
を固定する。
各 $\ell\in\{1,\ldots,L\}$ に対して、重み行列とバイアス行ベクトルを
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell},
\quad
\mathbf{b}_\ell\in\mathbb{R}^{1\times d_\ell}
$$
とする。
また、各 $\ell\in\{1,\ldots,L\}$ に対して、成分ごとに作用する活性化写像
$$
\sigma_\ell^{[d_\ell]}:\mathbb{R}^{1\times d_\ell}\to\mathbb{R}^{1\times d_\ell}
$$
が定まっているとする。
入力
$$
\mathbf{h}^{(0)}:=\mathbf{x}
$$
から出発し、各 $\ell\in\{1,\ldots,L\}$ に対して
$$
\mathbf{a}^{(\ell)}
:=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
$$
および
$$
\mathbf{h}^{(\ell)}
:=
\sigma_\ell^{[d_\ell]}(\mathbf{a}^{(\ell)})
$$
を定める。
これにより定まる Feed-Forward Network を
$$
f_\theta:\mathbb{R}^{1\times d_0}\to\mathbb{R}^{1\times d_L}
$$
とする。
損失関数を
$$
\ell:\mathbb{R}^{1\times d_L}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
とし、固定した教師信号 $y\in\mathcal{Y}$ に対して、損失を
$$
J
:=
\ell(\mathbf{h}^{(L)},y)
$$
で定める。
各 $r\in\{1,\ldots,L\}$ に対して、$J$ を中間変数 $\mathbf{a}^{(r)}$ の関数として見た写像が、点 $\mathbf{a}^{(r)}$ において微分可能であると仮定する。
このとき、
$$
\boldsymbol{\delta}^{(r)}
:=
\frac{\partial J}{\partial \mathbf{a}^{(r)}}
:=
\left(
\frac{\partial J}{\partial a_1^{(r)}},
\ldots,
\frac{\partial J}{\partial a_{d_r}^{(r)}}
\right)
\in\mathbb{R}^{1\times d_r}
$$
を、第 $r$ 層の誤差信号という。
ここで、
$$
\frac{\partial J}{\partial \mathbf{a}^{(\ell)}}
$$
は、行ベクトル
$$
\left(
\frac{\partial J}{\partial a_1^{(\ell)}},
\ldots,
\frac{\partial J}{\partial a_{d_\ell}^{(\ell)}}
\right)
$$
を意味する。
上の定義において、
$$
\frac{\partial J}{\partial \mathbf{a}^{(r)}}
$$
という記法は、$\mathbf{x}$、$y$、および各層のパラメータを固定した上で、第 $r$ 層の活性化前の値
$$
\mathbf{a}^{(r)}
$$
を中間変数として見たときの勾配を表す。
より具体的には、$\mathbf{u}\in\mathbb{R}^{1\times d_r}$ に対して
$$
\widetilde{\mathbf{h}}^{(r)}
:=
\sigma_r^{[d_r]}(\mathbf{u})
$$
と定め、その後、各 $k\in\{r+1,\ldots,L\}$ に対して
$$
\widetilde{\mathbf{a}}^{(k)}
:=
\widetilde{\mathbf{h}}^{(k-1)}W_k+\mathbf{b}_k
$$
および
$$
\widetilde{\mathbf{h}}^{(k)}
:=
\sigma_k^{[d_k]}(\widetilde{\mathbf{a}}^{(k)})
$$
を順に定める。
ただし、$k=r+1$ のときは
$$
\widetilde{\mathbf{h}}^{(r)}
$$
を用いる。
このとき、写像
$$
\Phi_r:\mathbb{R}^{1\times d_r}\to\mathbb{R}
$$
を
$$
\Phi_r(\mathbf{u})
:=
\ell(\widetilde{\mathbf{h}}^{(L)},y)
$$
で定める。このとき、
$$
\frac{\partial J}{\partial \mathbf{a}^{(r)}}
$$
とは、
$$
\nabla \Phi_r(\mathbf{a}^{(r)})
$$
を行ベクトルとして表したものである。
誤差信号
$$
\boldsymbol{\delta}^{(r)}
=
\frac{\partial J}{\partial \mathbf{a}^{(r)}}
$$
は、第 $r$ 層の活性化前の値
$$
\mathbf{a}^{(r)}
$$
を少し変化させたときに、最終的な損失
$$
J
$$
がどのように変化するかを表す行ベクトルである。
$\text{backpropagation}$ では、この誤差信号を出力層から入力側へ向かって再帰的に計算する。
そして、誤差信号を用いて、各層の重み行列とバイアス行ベクトルに関する勾配を計算する。
典型的には、
$$
\frac{\partial J}{\partial W_r}
=
(\mathbf{h}^{(r-1)})^{\top}\boldsymbol{\delta}^{(r)}
$$
および
$$
\frac{\partial J}{\partial \mathbf{b}_r}
=
\boldsymbol{\delta}^{(r)}
$$
の形で、パラメータに関する勾配が表される。
上の定義では、損失を中間変数
$$
\mathbf{a}^{(r)}
$$
の関数として見た写像が、必要な点で微分可能であることを仮定している。
これは、損失関数
$$
\ell
$$
と、各層の活性化写像
$$
\sigma_k^{[d_k]}
$$
が、連鎖律を適用できる程度に微分可能であることを要求する。
$ $
ただし、$\text{ReLU}$ のように一部の点で微分可能でない活性化関数を用いる場合には、通常の意味での誤差信号が定義できない点がある。
実装上は、そのような点で便宜的な値を選んだり、劣勾配を用いたりすることがある。
本稿で通常の勾配による $\text{backpropagation}$ を扱う場合には、必要な点で微分可能であると仮定する。
$L\in\mathbb{N}_{>0}$ とし、$d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
$1$ つの教師付きサンプル
$$
(\mathbf{x},y)\in\mathbb{R}^{1\times d_0}\times\mathcal{Y}
$$
を固定する。
各 $\ell\in\{1,\ldots,L\}$ に対して、重み行列とバイアス行ベクトルを
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell},
\quad
\mathbf{b}_\ell\in\mathbb{R}^{1\times d_\ell}
$$
とする。
また、各 $\ell\in\{1,\ldots,L\}$ に対して、成分ごとに作用する微分可能な活性化関数
$$
\sigma_\ell:\mathbb{R}\to\mathbb{R}
$$
を考える。
パラメータを
$$
\theta:=((W_\ell,\mathbf{b}_\ell))_{\ell=1}^{L}
$$
と書く。入力
$$
\mathbf{h}^{(0)}:=\mathbf{x}
$$
から出発し、各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
\mathbf{a}^{(\ell)}
:=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
\in\mathbb{R}^{1\times d_\ell}
$$
および
$$
\mathbf{h}^{(\ell)}
:=
\sigma_\ell(\mathbf{a}^{(\ell)})
\in\mathbb{R}^{1\times d_\ell}
$$
を順に定める。ただし、$\sigma_\ell(\mathbf{a}^{(\ell)})$ は、$\sigma_\ell$ を成分ごとに適用することを表す。
これにより定まる Feed-Forward Network を
$$
f_\theta:\mathbb{R}^{1\times d_0}\to\mathbb{R}^{1\times d_L}
$$
とする。
損失関数を
$$
\ell_{\mathrm{loss}}:\mathbb{R}^{1\times d_L}\times\mathcal{Y}\to\mathbb{R}
$$
とし、固定した教師付きサンプル $(\mathbf{x},y)$ に対する損失を
$$
J_{\mathbf{x},y}(\theta)
:=
\ell_{\mathrm{loss}}(f_\theta(\mathbf{x}),y)
$$
で定める。
以下では、現在のパラメータ $\theta$ における forward propagation の値
$$
\mathbf{a}^{(1)},\mathbf{h}^{(1)},\ldots,\mathbf{a}^{(L)},\mathbf{h}^{(L)}
$$
を用いる。
また、以下で現れる微分がすべて存在し、連鎖律を適用できると仮定する。
-このように、連鎖律を用いて出力側から入力側へ誤差信号を再帰的に計算し、
各層の学習パラメータに関する勾配を求める方法を、$\text{Backpropagation}$ または誤差逆伝播法という。
ここで、
$$
\odot
$$
はアダマール積である。
すなわち、同じ大きさの行ベクトルどうしの成分ごとの積を表す。
また、
$$
\sigma_\ell'(\mathbf{a}^{(\ell)})
$$
は、成分ごとの微分
$$
\left(
\sigma_\ell'(a_1^{(\ell)}),
\ldots,
\sigma_\ell'(a_{d_\ell}^{(\ell)})
\right)
$$
を表す。
記法
$$
\frac{\partial J_{\mathbf{x},y}}{\partial \mathbf{a}^{(\ell)}}
$$
は、計算グラフ上で損失 $J_{\mathbf{x},y}$ を中間変数
$$
\mathbf{a}^{(\ell)}
$$
の関数として見たときの勾配を表す。
すなわち、
$$
\frac{\partial J_{\mathbf{x},y}}{\partial \mathbf{a}^{(\ell)}}
$$
は行ベクトル
$$
\left(
\frac{\partial J_{\mathbf{x},y}}{\partial a_1^{(\ell)}},
\ldots,
\frac{\partial J_{\mathbf{x},y}}{\partial a_{d_\ell}^{(\ell)}}
\right)
\in\mathbb{R}^{1\times d_\ell}
$$
を意味する。
同様に、
$$
\frac{\partial J_{\mathbf{x},y}}{\partial \mathbf{h}^{(\ell)}}
$$
は行ベクトル
$$
\left(
\frac{\partial J_{\mathbf{x},y}}{\partial h_1^{(\ell)}},
\ldots,
\frac{\partial J_{\mathbf{x},y}}{\partial h_{d_\ell}^{(\ell)}}
\right)
\in\mathbb{R}^{1\times d_\ell}
$$
を意味する。
上の出力層の式
$$
\boldsymbol{\delta}^{(L)}
=
\frac{\partial J_{\mathbf{x},y}}{\partial \mathbf{h}^{(L)}}
\odot
\sigma_L'(\mathbf{a}^{(L)})
$$
は、出力層の活性化関数が成分ごとに作用する場合の式である。
出力層の写像が成分ごとに作用しない場合には、この形では書けない。
例えば、$\text{softmax}$ は
$$
\mathbb{R}^{1\times d_L}\to\mathbb{R}^{1\times d_L}
$$
の写像であるが、各成分がすべての入力成分に依存する。
そのため、その微分は成分ごとの導関数ではなくヤコビ行列で表される。
この場合、出力層の誤差信号は、ヤコビ行列を用いて別途計算する必要がある。
$\text{Backpropagation}$ は、学習パラメータを直接更新する方法ではない。
$\text{Backpropagation}$ は、損失関数の学習パラメータに関する勾配
$$
\nabla_\theta J(\theta)
$$
を効率的に計算する方法である。
一方、勾配降下法は、その勾配を用いて
$$
\theta_{t+1}
=
\theta_t-\eta\nabla_\theta J(\theta_t)
$$
のように学習パラメータを更新する方法である。
したがって、
$$
\text{Backpropagation}
=
\text{勾配を計算する方法}
$$
であり、
$$
\text{勾配降下法}
=
\text{勾配を用いてパラメータを更新する方法}
$$
である。
訓練データを
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
とする。
ディープラーニングの実際の学習では、訓練データ全体を一度に用いて勾配を計算するとは限らない。
訓練データをいくつかの部分に分け、その各部分を用いて損失と勾配を計算することが多い。
$ $
この部分集合または部分列をバッチという。
特に、訓練データ全体より小さいバッチをミニバッチということが多い。
$ $
バッチに含まれる教師付きサンプルの個数をバッチサイズという。
バッチサイズを $B\in\mathbb{N}_{>0}$ と書く。
$ $
$1$ つのバッチを用いて、
forward propagation、損失計算、backpropagation、パラメータ更新を $1$ 回行うことを、$1$ イテレーションまたは $1$ ステップという。
$ $
訓練データ全体を $1$ 回使い切ることを、$1$ エポックという。
したがって、$1$ エポックの中には、通常、複数のイテレーションが含まれる。
上の定義は、$1$ つの教師付きサンプル
$$
(\mathbf{x},y)
$$
に対する損失
$$
J_{\mathbf{x},y}(\theta)
$$
の勾配を計算するものである。
ミニバッチ
$$
B:=((\mathbf{x}_i,y_i))_{i=1}^{M}
$$
に対する平均損失を
$$
J_B(\theta)
:=
\frac{1}{M}
\sum_{i=1}^{M}
\ell_{\mathrm{loss}}(f_\theta(\mathbf{x}_i),y_i)
$$
で定める場合、各パラメータに関する勾配は、各サンプルに対する勾配の平均になる。
例えば、
$$
\frac{\partial J_B}{\partial W_\ell}
=
\frac{1}{M}
\sum_{i=1}^{M}
\frac{\partial J_{\mathbf{x}_i,y_i}}{\partial W_\ell}
$$
であり、
$$
\frac{\partial J_B}{\partial \mathbf{b}_\ell}
=
\frac{1}{M}
\sum_{i=1}^{M}
\frac{\partial J_{\mathbf{x}_i,y_i}}{\partial \mathbf{b}_\ell}
$$
である。
したがって、$1$ サンプルの場合の式
$$
\frac{\partial J_{\mathbf{x},y}}{\partial \mathbf{b}_\ell}
=
\boldsymbol{\delta}^{(\ell)}
$$
は、ミニバッチの場合にはサンプル方向に平均を取る形に変わる。
$N\in\mathbb{N}_{>0}$ とする。
訓練データを
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
とする。
$M\in\mathbb{N}_{>0}$ かつ $M\leq N$ とする。
添字列
$$
\mathcal{I}:=(i_1,\ldots,i_M)
$$
を考える。ただし、各 $r\in\{1,\ldots,M\}$ に対して
$$
i_r\in\{1,\ldots,N\}
$$
であるとする。
このとき、有限列
$$
D_{\mathcal{I}}
:=
((\mathbf{x}_{i_r},y_{i_r}))_{r=1}^{M}
$$
を、サイズ $M$ のミニバッチという。
この $M$ を、このミニバッチのバッチサイズという。
添字列
$$
\mathcal{I}:=(i_1,\ldots,i_M)
$$
において、添字 $i_1,\ldots,i_M$ は互いに異なると仮定することも多い。
この場合、ミニバッチは訓練データから重複なしで選ばれた部分列である。
$ $
一方、確率的にサンプルを抽出する場合には、復元抽出により同じ添字が複数回現れることもある。
そのため、一般にはミニバッチを添字集合ではなく添字列から定めると、重複を含む場合も扱える。
訓練データを
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
とする。
確率的なサンプリングを用いる場合には、
$1$ エポックを、各教師付きサンプルがおおよそ $1$ 回ずつ用いられる程度の更新回数の区切りとして扱うことがある。
訓練データ数を $N$ とし、基準となるバッチサイズを $B\in\mathbb{N}_{>0}$ とする。
各エポックで訓練データを重複なくミニバッチに分けるとする。
最後のミニバッチのサイズが $B$ より小さくてもよい場合、$1$ エポックあたりのステップ数は
$$
\left\lceil\frac{N}{B}\right\rceil
$$
である。
一方、最後の不完全なミニバッチを捨てる場合、$1$ エポックあたりのステップ数は
$$
\left\lfloor\frac{N}{B}\right\rfloor
$$
である。
訓練データを
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}
$$
とする。
ミニバッチを
$$
D_{\mathcal{I}}
:=
((\mathbf{x}_{i_r},y_{i_r}))_{r=1}^{M}
$$
とする。
モデルを
$$
f_\theta:\mathcal{X}\to\widehat{\mathcal{Y}}
$$
とし、損失関数を
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
とする。
このとき、
$$
\mathcal{L}_{D_{\mathcal{I}}}(\theta)
:=
\frac{1}{M}
\sum_{r=1}^{M}
\ell(f_\theta(\mathbf{x}_{i_r}),y_{i_r})
$$
を、ミニバッチ $D_{\mathcal{I}}$ 上のミニバッチ損失という。
ミニバッチ学習では、訓練データ全体に対する経験損失
$$
\mathcal{L}_{D}(\theta)
$$
の勾配を毎回正確に計算する代わりに、ミニバッチ損失
$$
\mathcal{L}_{D_{\mathcal{I}}}(\theta)
$$
の勾配を用いてパラメータを更新する。
これにより、各更新で使う計算量を小さくできる。
訓練データ全体を用いて経験損失の勾配を計算し、パラメータを更新する方法を、
バッチ勾配降下法という。
$ $
$1$ つの教師付きサンプルだけを用いて損失の勾配を計算し、パラメータを更新する方法を、確率的勾配降下法ということがある。
$ $
訓練データの一部であるミニバッチを用いて損失の勾配を計算し、パラメータを更新する方法を、ミニバッチ確率的勾配降下法という。
ただし、実務上は、ミニバッチを用いる場合も含めて単に $\text{SGD}$ と呼ぶことが多い。
ディープラーニングでは、実際にはミニバッチを用いることが多い。
$N,p\in\mathbb{N}_{>0}$ とする。
入力空間を $\mathcal{X}$ とし、教師信号の集合を $\mathcal{Y}$ とする。予測値の集合を $\widehat{\mathcal{Y}}$ とする。
訓練データを有限列
$$
D:=((\mathbf{x}_i,y_i))_{i=1}^{N}\in(\mathcal{X}\times\mathcal{Y})^N
$$
とする。
また、パラメータ空間を開集合
$$
\Theta\subseteq\mathbb{R}^{p}
$$
とする。
各 $\theta\in\Theta$ に対して、モデル
$$
f_\theta:\mathcal{X}\to\widehat{\mathcal{Y}}
$$
が定まっているとする。
また、損失関数を
$$
\ell:\widehat{\mathcal{Y}}\times\mathcal{Y}\to\mathbb{R}_{\geq 0}
$$
とする。
経験損失を、各 $\theta\in\Theta$ に対して
$$
\mathcal{L}_D(\theta)
:=
\frac{1}{N}
\sum_{i=1}^{N}
\ell(f_\theta(\mathbf{x}_i),y_i)
$$
で定める。
各 $i\in\{1,\ldots,N\}$ に対して、写像
$$
\theta
\mapsto
\ell(f_\theta(\mathbf{x}_i),y_i)
$$
は $\Theta$ 上で微分可能であると仮定する。
各更新時刻 $t\in\mathbb{Z}_{\geq 0}$ において、空でない添字集合
$$
B_t\subseteq\{1,\ldots,N\}
$$
をランダムに選ぶ。この $B_t$ を、第 $t$ 時刻のミニバッチ添字集合という。
また、
$$
D_{B_t}:=((\mathbf{x}_i,y_i))_{i\in B_t}
$$
を、第 $t$ 時刻のミニバッチという。
ミニバッチ $D_{B_t}$ に対するミニバッチ損失を、各 $\theta\in\Theta$ に対して
$$
\mathcal{L}_{B_t}(\theta)
:=
\frac{1}{|B_t|}
\sum_{i\in B_t}
\ell(f_\theta(\mathbf{x}_i),y_i)
$$
で定める。
-このように、ランダムに選ばれたミニバッチに対する損失の勾配を用いてパラメータを逐次的に更新する方法を、ミニバッチ確率的勾配降下法という。
ただし、すべての $t\in\mathbb{Z}_{\geq 0}$ に対して、
上の勾配が存在し、更新後の点 $\theta_{t+1}$ が $\Theta$ に属する場合を考える。
各時刻 $t$ において、$B_t$ が $\{1,\ldots,N\}$ からサイズ $M$ の部分集合として
一様ランダムに選ばれるとする。ただし、
$$
1\leq M\leq N
$$
とする。
このとき、固定された $\theta\in\Theta$ に対して、
$$
\nabla_\theta\mathcal{L}_{B_t}(\theta)
=
\frac{1}{M}
\sum_{i\in B_t}
\nabla_\theta
\ell(f_\theta(\mathbf{x}_i),y_i)
$$
である。
また、ミニバッチの選び方に関する期待値をとると、
$$
\mathbb{E}_{B_t}
\left[
\nabla_\theta\mathcal{L}_{B_t}(\theta)
\right]
=
\nabla_\theta\mathcal{L}_D(\theta)
$$
が成り立つ。
この意味で、一様ランダムに選ばれたミニバッチに基づく勾配は、全訓練データに対する経験損失の勾配の不偏推定量である。
ただし、これはミニバッチの選び方に依存する性質であり、任意のランダムな選び方で常に成り立つわけではない。
ミニバッチ確率的勾配降下法では、訓練データ全体ではなく、その一部であるミニバッチ
$$
B_t
$$
を用いて勾配を計算する。
そのため、
$$
\nabla_\theta\mathcal{L}_{B_t}(\theta_t)
$$
は、訓練データ全体に対する勾配
$$
\nabla_\theta\mathcal{L}_{D}(\theta_t)
$$
の代わりとして用いられる。
特に、$B_t$ が適切にランダムに選ばれる場合には、ミニバッチ勾配は全訓練データに対する勾配の推定量と見なせる。
実際の深層学習では、このミニバッチ損失の勾配を $\text{Backpropagation}$ によって計算し、その勾配を用いてパラメータを更新することが多い。
特別な場合として、$|B_t|=1$ のときは、$1$ つの教師付きサンプルだけを用いて更新する。
この場合を特に確率的勾配降下法ということがある。
一方、
$$
B_t=\{1,\ldots,N\}
$$
の場合は、訓練データ全体を用いるバッチ勾配降下法になる。
したがって、ミニバッチ確率的勾配降下法は、$1$ サンプルだけを用いる確率的勾配降下法と、全データを用いるバッチ勾配降下法の中間にある方法と見なせる。
Feed-Forward Network において、層数 $L$ が大きいものを深いネットワークということがある。
深いネットワークは高い表現力をもつ一方で、
単に層を多く積み重ねるだけでは学習が難しくなることがある。
$ $
例えば、$\text{Backpropagation}$ では、連鎖律により多くの微分係数が積として現れる。
そのため、これらの積の大きさが非常に小さくなると、入力側の層に勾配が十分に伝わりにくくなることがある。
この現象を勾配消失という。
$ $
逆に、これらの積の大きさが非常に大きくなると、勾配が過度に大きくなることがある。
この現象を勾配爆発という。
$ $
深いネットワークの学習の困難は、勾配消失や勾配爆発だけに限られない。
層を増やしたにもかかわらず訓練損失が改善しない、あるいは悪化する現象も知られている。
このような問題に対して、$\text{residual connection}$ や $\text{normalization}$ などの構造が広く用いられる。
$m,n\in\mathbb{N}_{>0}$ とする。
$\mathbb{R}^{1\times m}$ と $\mathbb{R}^{1\times n}$ には、それぞれ $\mathbb{R}^m$ と $\mathbb{R}^n$ と同一視して通常のユークリッド位相を入れる。
開集合
$$
U\subseteq\mathbb{R}^{1\times m}
$$
をとる。
写像
$$
F:U\to\mathbb{R}^{1\times n}
$$
が $U$ 上で全微分可能であるとする。
また、関数
$$
\varphi:\mathbb{R}^{1\times n}\to\mathbb{R}
$$
が $\mathbb{R}^{1\times n}$ 上で全微分可能であるとする。
各 $\mathbf{x}\in U$ に対して、
$$
F(\mathbf{x})
=
(F_1(\mathbf{x}),\ldots,F_n(\mathbf{x}))
$$
と書く。
このとき、合成関数
$$
J:=\varphi\circ F
$$
は $U$ 上で全微分可能であり、任意の $\mathbf{x}\in U$ と任意の $k\in\{1,\ldots,m\}$ に対して
$$
\frac{\partial J}{\partial x_k}(\mathbf{x})
=
\sum_{j=1}^{n}
\frac{\partial \varphi}{\partial z_j}(F(\mathbf{x}))
\frac{\partial F_j}{\partial x_k}(\mathbf{x})
$$
が成り立つ。
任意に
$$
\mathbf{x}\in U
$$
をとる。
$F$ は $\mathbf{x}$ で全微分可能であり、$\varphi$ は $F(\mathbf{x})$ で全微分可能である。
全微分の連鎖律(証明要)より、
$$
DJ(\mathbf{x})
=
D(\varphi\circ F)(\mathbf{x})
=
D\varphi(F(\mathbf{x}))\circ DF(\mathbf{x})
$$
である。
-$r$ は任意であるから、任意の $k\in\{1,\ldots,m\}$ に対して
$$
\frac{\partial J}{\partial x_k}(\mathbf{x})
=
\sum_{j=1}^{n}
\frac{\partial \varphi}{\partial z_j}(F(\mathbf{x}))
\frac{\partial F_j}{\partial x_k}(\mathbf{x})
$$
が成り立つ。
$$ \Box$$
$d_L\in\mathbb{N}_{>0}$ とする。
損失関数
$$
\ell:\mathbb{R}^{1\times d_L}\times\mathcal{Y}\to\mathbb{R}
$$
が第 $1$ 変数について微分可能であるとする。
また、活性化関数
$$
\sigma_L:\mathbb{R}\to\mathbb{R}
$$
が微分可能であるとする。
出力層の活性化前の行ベクトルを
$$
\mathbf{a}^{(L)}
=
(a_1^{(L)},\ldots,a_{d_L}^{(L)})
\in\mathbb{R}^{1\times d_L}
$$
とし、出力層の活性化後の行ベクトルを
$$
\mathbf{h}^{(L)}
=
(h_1^{(L)},\ldots,h_{d_L}^{(L)})
\in\mathbb{R}^{1\times d_L}
$$
とする。
出力層では、各 $i\in\{1,\ldots,d_L\}$ に対して
$$
h_i^{(L)}
=
\sigma_L(a_i^{(L)})
$$
であるとする。
固定された教師信号 $y\in\mathcal{Y}$ に対して、損失を
$$
J
:=
\ell(\mathbf{h}^{(L)},y)
$$
で定める。
このとき、出力層の誤差信号
$$
\boldsymbol{\delta}^{(L)}
:=
\frac{\partial J}{\partial \mathbf{a}^{(L)}}
$$
は
$$
\boldsymbol{\delta}^{(L)}
=
\frac{\partial J}{\partial \mathbf{h}^{(L)}}
\odot
\sigma_L'(\mathbf{a}^{(L)})
$$
で与えられる。
ここで、
$$
\sigma_L'(\mathbf{a}^{(L)})
:=
\left(
\sigma_L'(a_1^{(L)}),
\ldots,
\sigma_L'(a_{d_L}^{(L)})
\right)
$$
である。
出力層では、各 $i\in\{1,\ldots,d_L\}$ に対して
$$
h_i^{(L)}
=
\sigma_L(a_i^{(L)})
$$
である。
また、
$$
J
=
\ell(\mathbf{h}^{(L)},y)
$$
である。
任意に $j\in\{1,\ldots,d_L\}$ をとる。
多変数の連鎖律より、
$$
\frac{\partial J}{\partial a_j^{(L)}}
=
\sum_{i=1}^{d_L}
\frac{\partial J}{\partial h_i^{(L)}}
\frac{\partial h_i^{(L)}}{\partial a_j^{(L)}}
$$
である。
一方、各 $i\in\{1,\ldots,d_L\}$ に対して
$$
h_i^{(L)}
=
\sigma_L(a_i^{(L)})
$$
であるから、
$$
\frac{\partial h_i^{(L)}}{\partial a_j^{(L)}}
=
\begin{cases}
\sigma_L'(a_j^{(L)}) & (i=j)\\
0 & (i\neq j)
\end{cases}
$$
である。
したがって、
$$
\begin{align}
\frac{\partial J}{\partial a_j^{(L)}}
&=
\sum_{i=1}^{d_L}
\frac{\partial J}{\partial h_i^{(L)}}
\frac{\partial h_i^{(L)}}{\partial a_j^{(L)}}
\\
&=
\frac{\partial J}{\partial h_j^{(L)}}
\sigma_L'(a_j^{(L)})
\end{align}
$$
である。
$j$ は任意であるから、成分ごとに並べると
$$
\left(
\frac{\partial J}{\partial a_1^{(L)}},
\ldots,
\frac{\partial J}{\partial a_{d_L}^{(L)}}
\right)
=
\left(
\frac{\partial J}{\partial h_1^{(L)}},
\ldots,
\frac{\partial J}{\partial h_{d_L}^{(L)}}
\right)
\odot
\left(
\sigma_L'(a_1^{(L)}),
\ldots,
\sigma_L'(a_{d_L}^{(L)})
\right)
$$
である。
すなわち、
$$
\boldsymbol{\delta}^{(L)}
=
\frac{\partial J}{\partial \mathbf{h}^{(L)}}
\odot
\sigma_L'(\mathbf{a}^{(L)})
$$
である。
$$ \Box$$
この命題では、出力層の活性化関数が成分ごとに作用することを仮定している。
すなわち、
$$
h_i^{(L)}
=
\sigma_L(a_i^{(L)})
$$
であり、$h_i^{(L)}$ は $a_i^{(L)}$ だけに依存する。
そのため、
$$
\frac{\partial h_i^{(L)}}{\partial a_j^{(L)}}=0
\quad (i\neq j)
$$
となり、アダマール積の形で誤差信号を書ける。
一方、$\text{softmax}$ のように各成分がすべての入力成分に依存する写像では、この形にはならない。
その場合には、出力層の微分は成分ごとの積ではなく、ヤコビ行列を用いて表す必要がある。
$L\in\mathbb{N}_{>0}$ とし、$L\geq 2$ とする。$d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell},
\quad
\mathbf{b}_\ell\in\mathbb{R}^{1\times d_\ell}
$$
とする。
各 $\ell\in\{1,\ldots,L-1\}$ に対して、活性化関数
$$
\sigma_\ell:\mathbb{R}\to\mathbb{R}
$$
は微分可能であるとする。
また、各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
\mathbf{a}^{(\ell)}
=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
$$
とし、各 $\ell\in\{1,\ldots,L-1\}$ に対して、
$$
\mathbf{h}^{(\ell)}
=
\sigma_\ell(\mathbf{a}^{(\ell)})
$$
とする。
ただし、$\sigma_\ell(\mathbf{a}^{(\ell)})$ は $\sigma_\ell$ を成分ごとに適用することを表す。
各 $\ell\in\{1,\ldots,L\}$ に対して、誤差信号を
$$
\boldsymbol{\delta}^{(\ell)}
:=
\frac{\partial J}{\partial \mathbf{a}^{(\ell)}}
$$
で定める。
このとき、各 $\ell\in\{1,\ldots,L-1\}$ に対して、
$$
\boldsymbol{\delta}^{(\ell)}
=
\left(
\boldsymbol{\delta}^{(\ell+1)}
W_{\ell+1}^{\top}
\right)
\odot
\sigma_\ell'(\mathbf{a}^{(\ell)})
$$
が成り立つ。
任意に $\ell\in\{1,\ldots,L-1\}$ をとる。
第 $\ell+1$ 層では、
$$
\mathbf{a}^{(\ell+1)}
=
\mathbf{h}^{(\ell)}W_{\ell+1}+\mathbf{b}_{\ell+1}
$$
である。
成分表示すると、各 $r\in\{1,\ldots,d_{\ell+1}\}$ に対して
$$
a_r^{(\ell+1)}
=
\sum_{j=1}^{d_\ell}
h_j^{(\ell)}(W_{\ell+1})_{j,r}
+
(b_{\ell+1})_r
$$
である。
したがって、各 $j\in\{1,\ldots,d_\ell\}$ に対して、
$$
\frac{\partial a_r^{(\ell+1)}}{\partial h_j^{(\ell)}}
=
(W_{\ell+1})_{j,r}
$$
である。
多変数の連鎖律より、
$$
\frac{\partial J}{\partial h_j^{(\ell)}}
=
\sum_{r=1}^{d_{\ell+1}}
\frac{\partial J}{\partial a_r^{(\ell+1)}}
\frac{\partial a_r^{(\ell+1)}}{\partial h_j^{(\ell)}}
$$
である。
よって、
$$
\frac{\partial J}{\partial h_j^{(\ell)}}
=
\sum_{r=1}^{d_{\ell+1}}
\delta_r^{(\ell+1)}
(W_{\ell+1})_{j,r}
$$
である。
これは行ベクトル表示で
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
=
\boldsymbol{\delta}^{(\ell+1)}W_{\ell+1}^{\top}
$$
と書ける。
次に、各 $i\in\{1,\ldots,d_\ell\}$ に対して
$$
h_i^{(\ell)}
=
\sigma_\ell(a_i^{(\ell)})
$$
である。
任意に $j\in\{1,\ldots,d_\ell\}$ をとる。
多変数の連鎖律より、
$$
\frac{\partial J}{\partial a_j^{(\ell)}}
=
\sum_{i=1}^{d_\ell}
\frac{\partial J}{\partial h_i^{(\ell)}}
\frac{\partial h_i^{(\ell)}}{\partial a_j^{(\ell)}}
$$
である。
成分ごとの活性化関数であるから、
$$
\frac{\partial h_i^{(\ell)}}{\partial a_j^{(\ell)}}
=
\begin{cases}
\sigma_\ell'(a_j^{(\ell)}) & (i=j)\\
0 & (i\neq j)
\end{cases}
$$
である。
したがって、
$$
\frac{\partial J}{\partial a_j^{(\ell)}}
=
\frac{\partial J}{\partial h_j^{(\ell)}}
\sigma_\ell'(a_j^{(\ell)})
$$
である。
$j$ は任意であるから、成分ごとに並べると、
$$
\boldsymbol{\delta}^{(\ell)}
=
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
\odot
\sigma_\ell'(\mathbf{a}^{(\ell)})
$$
である。
先に示した
$$
\frac{\partial J}{\partial \mathbf{h}^{(\ell)}}
=
\boldsymbol{\delta}^{(\ell+1)}W_{\ell+1}^{\top}
$$
を代入すると、
$$
\boldsymbol{\delta}^{(\ell)}
=
\left(
\boldsymbol{\delta}^{(\ell+1)}
W_{\ell+1}^{\top}
\right)
\odot
\sigma_\ell'(\mathbf{a}^{(\ell)})
$$
である。
$$ \Box$$
$L\in\mathbb{N}_{>0}$ とし、$d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell},
\quad
\mathbf{b}_\ell\in\mathbb{R}^{1\times d_\ell}
$$
とする。
第 $\ell$ 層の活性化前の行ベクトルを
$$
\mathbf{a}^{(\ell)}
=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
\in\mathbb{R}^{1\times d_\ell}
$$
とする。
$1$ つの訓練サンプル $(\mathbf{x},y)$ に対する損失を
$$
J(\theta)
:=
\ell(f_\theta(\mathbf{x}),y)
$$
とする。
第 $\ell$ 層の誤差信号を
$$
\boldsymbol{\delta}^{(\ell)}
:=
\frac{\partial J}{\partial \mathbf{a}^{(\ell)}}
=
\left(
\frac{\partial J}{\partial a_1^{(\ell)}},
\ldots,
\frac{\partial J}{\partial a_{d_\ell}^{(\ell)}}
\right)
$$
とする。
このとき、各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
\frac{\partial J}{\partial W_\ell}
=
(\mathbf{h}^{(\ell-1)})^{\top}
\boldsymbol{\delta}^{(\ell)}
$$
が成り立つ。
ここで、
$$
\frac{\partial J}{\partial W_\ell}
$$
は、第 $(i,j)$ 成分が
$$
\frac{\partial J}{\partial (W_\ell)_{i,j}}
$$
である行列を表す。
任意に $\ell\in\{1,\ldots,L\}$ をとる。
第 $\ell$ 層では、
$$
\mathbf{a}^{(\ell)}
=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
$$
である。
成分表示すると、各 $r\in\{1,\ldots,d_\ell\}$ に対して
$$
a_r^{(\ell)}
=
\sum_{s=1}^{d_{\ell-1}}
h_s^{(\ell-1)}(W_\ell)_{s,r}
+
(b_\ell)_r
$$
である。
任意に $i\in\{1,\ldots,d_{\ell-1}\}$ と $j\in\{1,\ldots,d_\ell\}$ をとる。
このとき、各 $r\in\{1,\ldots,d_\ell\}$ に対して、
$$
\frac{\partial a_r^{(\ell)}}{\partial (W_\ell)_{i,j}}
=
\begin{cases}
h_i^{(\ell-1)} & (r=j)\\
0 & (r\neq j)
\end{cases}
$$
である。
多変数の連鎖律より、
$$
\frac{\partial J}{\partial (W_\ell)_{i,j}}
=
\sum_{r=1}^{d_\ell}
\frac{\partial J}{\partial a_r^{(\ell)}}
\frac{\partial a_r^{(\ell)}}{\partial (W_\ell)_{i,j}}
$$
である。
したがって、
$$
\begin{align}
\frac{\partial J}{\partial (W_\ell)_{i,j}}
&=
\sum_{r=1}^{d_\ell}
\frac{\partial J}{\partial a_r^{(\ell)}}
\frac{\partial a_r^{(\ell)}}{\partial (W_\ell)_{i,j}}
\\
&=
\frac{\partial J}{\partial a_j^{(\ell)}}
h_i^{(\ell-1)}
\\
&=
\delta_j^{(\ell)}h_i^{(\ell-1)}
\end{align}
$$
である。
一方、行列
$$
(\mathbf{h}^{(\ell-1)})^{\top}
\boldsymbol{\delta}^{(\ell)}
$$
の第 $(i,j)$ 成分は
$$
h_i^{(\ell-1)}\delta_j^{(\ell)}
$$
である。
よって、任意の $i\in\{1,\ldots,d_{\ell-1}\}$ と任意の $j\in\{1,\ldots,d_\ell\}$ に対して、第 $(i,j)$ 成分が一致する。
したがって、
$$
\frac{\partial J}{\partial W_\ell}
=
(\mathbf{h}^{(\ell-1)})^{\top}
\boldsymbol{\delta}^{(\ell)}
$$
である。
$$ \Box$$
$L\in\mathbb{N}_{>0}$ とし、$d_0,d_1,\ldots,d_L\in\mathbb{N}_{>0}$ とする。
各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
W_\ell\in\mathbb{R}^{d_{\ell-1}\times d_\ell},
\quad
\mathbf{b}_\ell\in\mathbb{R}^{1\times d_\ell}
$$
とする。
第 $\ell$ 層の活性化前の行ベクトルを
$$
\mathbf{a}^{(\ell)}
=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
\in\mathbb{R}^{1\times d_\ell}
$$
とする。
$1$ つの教師付きサンプル $(\mathbf{x},y)$ に対する損失を
$$
J(\theta):=\ell(f_\theta(\mathbf{x}),y)
$$
とする。
第 $\ell$ 層の誤差信号を
$$
\boldsymbol{\delta}^{(\ell)}
:=
\frac{\partial J}{\partial \mathbf{a}^{(\ell)}}
=
\left(
\frac{\partial J}{\partial a_1^{(\ell)}},
\ldots,
\frac{\partial J}{\partial a_{d_\ell}^{(\ell)}}
\right)
$$
とする。
このとき、各 $\ell\in\{1,\ldots,L\}$ に対して、
$$
\frac{\partial J}{\partial \mathbf{b}_\ell}
=
\boldsymbol{\delta}^{(\ell)}
$$
が成り立つ。
ここで、
$$
\frac{\partial J}{\partial \mathbf{b}_\ell}
$$
は、行ベクトル
$$
\left(
\frac{\partial J}{\partial (b_\ell)_1},
\ldots,
\frac{\partial J}{\partial (b_\ell)_{d_\ell}}
\right)
$$
を表す。
任意に $\ell\in\{1,\ldots,L\}$ をとる。
第 $\ell$ 層では、
$$
\mathbf{a}^{(\ell)}
=
\mathbf{h}^{(\ell-1)}W_\ell+\mathbf{b}_\ell
$$
である。
成分表示すると、各 $r\in\{1,\ldots,d_\ell\}$ に対して
$$
a_r^{(\ell)}
=
\sum_{i=1}^{d_{\ell-1}}
h_i^{(\ell-1)}(W_\ell)_{i,r}
+
(b_\ell)_r
$$
である。
任意に $j\in\{1,\ldots,d_\ell\}$ をとる。
このとき、各 $r\in\{1,\ldots,d_\ell\}$ に対して、
$$
\frac{\partial a_r^{(\ell)}}{\partial (b_\ell)_j}
=
\begin{cases}
1 & (r=j)\\
0 & (r\neq j)
\end{cases}
$$
である。
多変数の連鎖律より、
$$
\frac{\partial J}{\partial (b_\ell)_j}
=
\sum_{r=1}^{d_\ell}
\frac{\partial J}{\partial a_r^{(\ell)}}
\frac{\partial a_r^{(\ell)}}{\partial (b_\ell)_j}
$$
である。
したがって、
$$
\begin{align}
\frac{\partial J}{\partial (b_\ell)_j}
&=
\sum_{r=1}^{d_\ell}
\frac{\partial J}{\partial a_r^{(\ell)}}
\frac{\partial a_r^{(\ell)}}{\partial (b_\ell)_j}
\\
&=
\frac{\partial J}{\partial a_j^{(\ell)}}
\\
&=
\delta_j^{(\ell)}
\end{align}
$$
である。
$j$ は任意であるから、成分ごとに並べると、
$$
\frac{\partial J}{\partial \mathbf{b}_\ell}
=
\boldsymbol{\delta}^{(\ell)}
$$
である。
$$ \Box$$
機械学習全般において、以下の命題も重要であるので知っておくと良い(´・ω・`)
$x\in\mathcal{X}$ を固定する。
実数値の応答を考え、固定した $x$ に対する新しい応答を
$$
Y_x:=f(x)+\epsilon_x
$$
とする。
-このとき、期待値と分散が存在すれば、
$$
\mathbb{E}_{\mathcal{D},\epsilon_x}
\left[
\left(
\hat f_{\mathcal{D}}(x)-Y_x
\right)^2
\right]
=
\left(
\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]-f(x)
\right)^2
+
\mathbb{E}_{\mathcal{D}}
\left[
\left(
\hat f_{\mathcal{D}}(x)
-
\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]
\right)^2
\right]
+
\sigma^2(x)
$$
が成り立つ。
すなわち、
$$
\operatorname{MSE}(x)
=
\operatorname{Bias}(\hat f_{\mathcal{D}}(x))^2
+
\operatorname{Var}(\hat f_{\mathcal{D}}(x))
+
\sigma^2(x)
$$
である。
ただし、
$$
\operatorname{Bias}(\hat f_{\mathcal{D}}(x))
:=
\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]-f(x)
$$
および
$$
\operatorname{Var}(\hat f_{\mathcal{D}}(x))
:=
\mathbb{E}_{\mathcal{D}}
\left[
\left(
\hat f_{\mathcal{D}}(x)
-
\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]
\right)^2
\right]
$$
と定める。
$x\in\mathcal{X}$ を固定する。
簡単のため、
$$
\hat f:=\hat f_{\mathcal{D}}(x),
\quad
\mu:=\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]
$$
と書く。また、
$$
Y_x=f(x)+\epsilon_x
$$
である。
したがって、
$$
\begin{align}
\mathbb{E}_{\mathcal{D},\epsilon_x}
\left[
(\hat f-Y_x)^2
\right]
&=
\mathbb{E}_{\mathcal{D},\epsilon_x}
\left[
(\hat f-f(x)-\epsilon_x)^2
\right]
\\
&=
\mathbb{E}_{\mathcal{D},\epsilon_x}
\left[
(\hat f-f(x))^2
\right]
-
2
\mathbb{E}_{\mathcal{D},\epsilon_x}
\left[
\epsilon_x(\hat f-f(x))
\right]
+
\mathbb{E}_{\epsilon_x}
\left[
\epsilon_x^2
\right]
\end{align}
$$
である。
-以上より、
$$
\begin{align}
\mathbb{E}_{\mathcal{D},\epsilon_x}
\left[
(\hat f_{\mathcal{D}}(x)-Y_x)^2
\right]
&=
\mathbb{E}_{\mathcal{D}}
\left[
\left(
\hat f_{\mathcal{D}}(x)
-
\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]
\right)^2
\right]
\\
&\quad
+
\left(
\mathbb{E}_{\mathcal{D}}[\hat f_{\mathcal{D}}(x)]
-
f(x)
\right)^2
+
\sigma^2(x)
\end{align}
$$
である。
したがって、
$$
\operatorname{MSE}(x)
=
\operatorname{Bias}(\hat f_{\mathcal{D}}(x))^2
+
\operatorname{Var}(\hat f_{\mathcal{D}}(x))
+
\sigma^2(x)
$$
が成り立つ。
$$ \Box$$
この命題は、固定した入力 $x\in\mathcal{X}$ に対する平均二乗予測誤差が、$3$ つの項に分解できることを述べている。
すなわち、予測値
$$
\hat f_{\mathcal{D}}(x)
$$
と新しい応答
$$
Y_x=f(x)+\epsilon_x
$$
の二乗誤差の期待値は、
$$
\text{バイアスの二乗}
+
\text{分散}
+
\text{ノイズ}
$$
に分解される。
$ $
-この命題が示している重要な点は、予測誤差を小さくするには、
単に訓練データによく当てはまるモデルを選べばよいわけではない、ということである。
$ $
モデルを柔軟にすれば、バイアスは小さくなりやすい。
しかし、その一方で、訓練データの違いに対して予測が大きく変わりやすくなり、分散が大きくなることがある。
$ $
逆に、モデルを単純にすれば、分散は小さくなりやすい。
しかし、その一方で、真の関係を十分に表せず、バイアスが大きくなることがある。
$ $
したがって、学習では、バイアスを小さくすることと分散を小さくすることの間に緊張関係が生じる。
この緊張関係を、$\text{Bias–Variance dilemma}$ または $\text{Bias–Variance tradeoff}$ という。
$ $
本稿の文脈では、この命題は、経験損失を小さくすることだけでは汎化性能を十分に説明できないことを示している。
訓練データ上の損失が小さくても、分散が大きい場合には、未知データに対する予測誤差が大きくなることがある。
$ $
そのため、ニューラルネットワークの学習では、
正則化、モデル構造、データ数、ミニバッチ学習、初期化、最適化手法などを通して、バイアスと分散のバランスを考える必要がある。