LLMファインチューニングのためのNLPと深層学習入門 #10 残差接続

ついに二桁到達です。
今回はCVMLエキスパートガイドより、『残差接続 (residual connection) [ResNet]』を勉強していきます。

1. 概要

残差接続(residual connection)とは、CNNの一種であるResNetの構成部品である「残差ブロック」において、ブロック内に配置される「スキップ接続+そのあとの2経路の出力の足し算」をする部分のことです。

「残差接続≒スキップ接続」ではありますが、ResNetにおける残差ブロックを形成するようなスキップ接続を、特に残差接続と呼びます。

ResNetは残差ブロックを多層化したことが特徴なので(前回記事参照)、スキップ接続を「残差接続」と別途呼び分けたほうが「残差ブロックを反復して構成しているネットワーク構造」と区別しやすくなります。

2. 残差接続・残差ブロックの定義

図1. ResNetの残差ブロックと残差接続
CVMLエキスパートガイドより

図1はResNetの残差ブロックの全体像と、そのブロック中の残差接続(=スキップ接続)を示したものです。

このブロックでは、入力に対して畳み込み層の前後に残差接続を接続し、出口を加算演算子で合成しています。
これにより、残差接続側には入力を元の値のままスキップさせる分岐経路を用意できます。

式に表すと、次のような関係となっています。

$$
H(x) = F(x) + x
$$

ここで、$${x}$$はブロックへの入力、$${F(x)}$$がブロック内の畳み込み層を通過した結果(残差写像)、そして$${H(x)}$$はブロック全体の出力(写像)です。

このように、残差接続を用いると、残差ブロック内の写像$${F(x)}$$は、$${x}$$に対する変化分である「非常に小さな変換」だけを担当することができます。

3. 残差ブロックで多層化する効果

図1(再掲). ResNetの残差ブロックと残差接続
CVMLエキスパートガイドより

残差ブロックを用いると、残差写像部分の$${F(x)}$$は、非常に小さな差分関数を担当することになります。
よって、この残差ブロックを大量に$${n}$$個直列接続すると、各ブロックの左(残差写像)と右(残差接続)のいずれかを通り、合計で$${2^n}$$の経路がネットワーク全体に存在することになります。

この「残差(ブロック)の多層化」の設計により、ResNetはU-NetやFPN、SegNetといった他のネットワークが持つ「長いスキップ接続」の利点を有します。
すなわち、深い層へ直接接続される経路が存在することで、学習の逆伝搬時に深い層や中間層へも大きな誤差を伝搬させることが可能です。

これにより、深いネットワークでよく見られる勾配消失や勾配爆発、そして深いネットワークが訓練が難しくなる「劣化問題」を回避できます。

まとめると、ResNetは、劣化問題を避けて収束性も良くなるので、より性能が高い大規模なモデルを多層化により学習できるようになりました。
この利点による恩恵を受けるために、その後はResNetに限らず、様々なモデルが残差接続・残差ブロックを採用することとなります。

4. スキップ接続と残差接続の呼び分け

InceptionNet, Stacked Hourglass Networks, ResNetなどのCNNモデルや、Google NMT、Transformerなどの系列対系列変換モデルなどにおいては、「短い1~2層のスキップ接続」や「残差ブロック」を形成し、それらを何度も繰り返したりするので、各スキップ接続のことをResNetに倣って「残差接続」と呼びます。

逆に、DenceNet, HighwayNetwork, U-NetやFeature Pyramid Networkを接続して拡張したCNNのような「2分岐が繰り返されて木構造化したり、ショートカットが長い」場合は、残差接続と区別して「スキップ接続」と呼ぶのが普通です。

あくまでResNetにならって「残差ブロックを直列接続した場合」にのみ、「残差接続」と呼び分けるのが通例です。

5. おわりに

今回は残差接続について学びました。
スキップ接続はネットワーク内で情報を伝達する仕組みで、特に「短い1~2層のスキップ接続」や「残差ブロック」の繰り返しのことを「残差接続」と呼び分けるということですね。

次回はレイヤー正規化について勉強していきます。
それでは。

進捗上げてます

「#AIアイネス」で日々の作業内容を更新しています。
ぜひ覗いてみて下さい。

参考


この記事が気に入ったらサポートをしてみませんか?