人工ニューラルネットワークにおけるスキップ接続とは?
定義
$\mathbf{W}$を重みとし、$\mathbf{x}$を入力、$\sigma$を非線形の活性化関数としよう。レイヤー $L_{\mathbf{w}}$を次のように定義しよう。
$$ L_{\mathbf{W}}(\mathbf{x}) := \sigma(\mathbf{W} \mathbf{x}) $$
レイヤーに恒等関数が加えられた形の関数をスキップコネクションskip connectionと言う。
$$ L_{\mathbf{W}} + I : \mathbf{x} \mapsto \sigma(\mathbf{W} \mathbf{x}) + \mathbf{x} $$
説明
一般的には、入力$\mathbf{x}$と重み$\mathbf{W}$を掛け合わせ、これを活性化関数$\sigma$に適用した値$\sigma(\mathbf{W} \mathbf{x})$が次のレイヤーの入力になる。スキップコネクションは、この値に入力を再び加えた値を次の層の入力として伝える。簡単に式で表すと次の通り。
$$ \begin{align*} &\text{normal layer: } \\ &\qquad L_{\mathbf{W}_{2}} \circ L_{\mathbf{W}_{1}}(\mathbf{x}) = \sigma(\mathbf{W}_{2}\sigma(\mathbf{W}_{1} \mathbf{x})) \\ \\ &\text{skip connection: } \\ &\qquad (L_{\mathbf{W}_{2}} + I) \circ (L_{\mathbf{W}_{1}} + I)(\mathbf{x}) = \sigma(\mathbf{W}_{2}(\sigma(\mathbf{W}_{1} \mathbf{x}) + \mathbf{x})) + (\sigma(\mathbf{W}_{1} \mathbf{x}) + \mathbf{x}) \end{align*} $$
スキップコネクションが上の定義に従って厳密に定義された概念ではない。どんな方法でも入力(または前の値)が次のレイヤーに伝わるだけでスキップコネクションと呼ばれる。U-Netは、オートエンコーダーでエンコーダーの出力をデコーダーの入力に積み上げる形のスキップコネクションを使用したニューラルネットワークだ。
一般的に、レイヤーを多く重ねるとニューラルネットワークの性能が低下するが、スキップコネクションを適切に活用してレイヤーを非常に深く重ねてもよく学習されるようにするのがResNetだ。