深層学習

受容野

ある出力画素に影響し得る入力上の範囲を、カーネル・ストライド・ダイレーションから追跡する設計指標です。

  • B|標準
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

受容野(receptive field)は、ある出力の1画素が入力画像のどの範囲から情報を受け取れるかを表します。局所的な演算でも層を重ねれば、後段の1画素は前段の複数画素を経由して、より広い入力範囲に結び付きます。

小さな窓から街を観察する人を、層ごとに後ろへ下げていくイメージです。1枚の窓は小さくても、前の人が見た範囲を次の人がまとめて見るため、最後の人の視野は広がります。

なぜ必要か

分類なら画像全体、検出なら物体の輪郭、時系列に近い空間処理なら広い文脈が必要です。最終出力の解像度だけを見ていると、その画素が本当に必要な範囲を見ているか判断できません。受容野は、ネットワークが局所情報だけで答えているのか、タスクの文脈まで届いているのかを設計段階で点検する物差しです。

理論上の受容野は「影響し得る範囲」です。重みが小さい経路や入力の状態によって、実際の出力変化に強く寄与する範囲はそれより狭くなります。したがって、理論値が入力サイズに達しただけで「画像全体を十分に理解した」とは判断しません。必要な対象の大きさと、実効的に寄与している範囲を分けて見ます。

設計で確認するもの受容野から読めること
理論受容野出力画素に影響し得る入力範囲
実効的な寄与範囲実際に出力変化へ強く効いている範囲
タスクの対象サイズ必要な文脈を覆えているかの基準

仕組み

空間の1方向について、層 ll のカーネル幅を klk_l、ストライドを sls_l、ダイレーションを dld_l とします。ダイレーションはカーネル点の間隔です。層 ll の実効カーネル幅は dl(kl−1)+1d_l(k_l-1)+1 なので、受容野 rlr_l と、隣接出力画素が入力上で離れる間隔(ジャンプ)jlj_l は次で更新します。

rl=rl−1+(dl(kl−1))jl−1,jl=jl−1slr_l = r_{l-1} + \bigl(d_l(k_l-1)\bigr)j_{l-1}, \qquad j_l = j_{l-1}s_l

r0=1r_0=1、j0=1j_0=1 は入力画素を基準にした初期値です。ストライドが1なら、各層の増分はその時点のジャンプに比例します。先にストライドを置くと後段のカーネルがより大きな入力間隔をまたぐため、受容野の広がりが線形に加速します。ダイレーションは層内の点を飛ばして参照するため、パラメータ数を増やさずに増分だけを大きくできます。

なお、パディングは受容野の大きさの再帰式を直接増やしませんが、端の出力が実データではなくパディング領域を含むかどうかを変えます。サイズ計算では kernel_size、stride、padding、dilation が別々に効くため、出力サイズと受容野を同じ式だと思わないことが要点です。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
多層の受容野を計算rr と jj を層ごとに更新する全層のカーネル幅を単純加算する
ストライドの影響次層以降の増分に、それまでの jj が掛かる現在の層のカーネル幅だけを見る
ダイレーションの影響kk を d(k−1)+1d(k-1)+1 とみなす点数が kk のままなので受容野も不変とする
端の画素を評価パディングを含む理論範囲と実入力の範囲を区別する全出力画素が同じ実データ範囲を持つとする

実装で確かめる

次のコードは、2方向が同じ設定の層列について rr と jj を追跡します。(k, s, d) は順にカーネル幅、ストライド、ダイレーションです。

layers = [(3, 1, 1), (3, 2, 1), (3, 1, 2)]
r, j = 1, 1
for k, s, d in layers:
    r += d * (k - 1) * j
    j *= s
    print(r, j)

実行結果は 3 1、5 2、13 2 です。3層目はカーネルの点数が3のままでも、ダイレーション2によって幅5相当を参照し、ジャンプ2も受け継ぐため受容野が8広がります。

取り違えやすいもの

用語受容野との切り分け
出力サイズ出力の縦横の画素数。受容野は各画素が見得る入力範囲で、別の指標です
カーネル幅1層が直接参照する幅。受容野は前段を含めた合成結果です
ジャンプ隣接する出力画素の入力上の間隔。受容野そのものではありません
実効的な受容野理論範囲のうち、実際の出力変化へ強く寄与する範囲。理論値と一致するとは限りません

想起チェック

受容野の再帰式で、ストライドはどこに効くか

現在の受容野の増分ではなく、次層以降の入力上の間隔 jj を広げます。そのため早い層のストライドほど後段へ累積します。

ダイレーション2、カーネル幅3の実効幅はいくつか

d(k−1)+1=2(3−1)+1=5d(k-1)+1=2(3-1)+1=5 です。参照する点の数は3ですが、点と点の間隔が広がっています。

理論受容野が十分な大きさでも確認すべきことは何か

理論値は影響し得る範囲なので、重みや入力に依存した実効的な寄与範囲がタスクの対象を覆うかを別に確認します。

出典