全プロセスの詳細解説
-
28×28の入力マップと3×3 sobel-xカーネルに対する出力マップのサイズ 6 ステップ
レイヤー:28×28の入力マップ、3×3のsobel-xカーネル、ストライド1、パディングsame。 出力マップのサイズと、1パスの積和演算コストを求めよ。さらに、単一の出力ピクセルが画像全体のすべてのピクセルに依存するようになるまでに、このようなレイヤーを何層積み重ねる必要があるかを求めよ。
-
パディングによってサイズが固定されるため、まずこれを確定する。sameはマップの周囲に0の1ピクセルの枠線を配置する。これにより、3×3のウィンドウが端からはみ出すことなく、角のピクセルを中心として配置されるのにちょうど十分となる。カーネルが必要とする枠線の幅は、中心を除いたカーネルサイズの半分である。
-
ウィンドウを1行に沿ってスライドさせる。その左端は0から始まり、右端がパディングされた行の末尾に達するまでストライド分進む。したがって、出力ピクセルのカウントは植木算のカウントとなる。すなわち、進んだ回数に開始位置の1を加えたものである。ストライド1では、枠線によってカーネルが取り除く2列が正確に補われる。これがsameという名称の由来である。
-
784個の出力ピクセルのそれぞれは、9個の入力値の加重和である。sobel-xの重みを加算すると相殺されて0になるため、9個の入力がすべて等しいウィンドウは、その領域がどれほど明るくても正確に0を返す。画像が平坦な部分はマップが暗くなり、ウィンドウの左列と右列が異なる場合にのみ反応する。
-
計算コストは以下の通りである。出力ピクセルあたり9回の積和演算であり、ウィンドウ位置ごとに1つの出力ピクセルとなる。パネルにはその数値が表示される。
-
興味深いのは深さ(層数)である。1つのレイヤーを経ると、出力ピクセルは横方向に3個の入力ピクセルを参照する。2層目を追加すると、それら3個の各ピクセル自体が3のウィンドウであったことになるが、隣接するウィンドウは2だけ重複するため、スパンは9ではなく5に達する。さらに3×3、ストライド1のレイヤーを重ねるごとに、スパンは正確に2ずつ広がる。
-
全28列をカバーするようにスパンを設定し、必要な深さを求める。13層では27に達し、1列不足する。14層目が、出力ピクセルが画像全体の影響を受け得る最初のレイヤーとなる。
解答
出力は28×28、レイヤーあたり7056回の積和演算、そして1つのピクセルが画像全体を参照するまでに14層。 次に、その受容野のコストを計算する。積み重ねられた14層は、出力ピクセルあたり14 × 9 = 126回の積和演算を費やす。同じ範囲に到達する単一レイヤーには29×29のカーネルが必要となり、出力ピクセルあたり841回となる。これは、まったく同じ受容野に対して6.7倍の計算量である。深さは幅よりもはるかに安価に受容野を広げる。これが、ビジョンネットワークが大型カーネルの短いスタックではなく、3×3カーネルの長いスタックで構成される理由である。
-
参考文献 (1)
- Insight block 3 — the operation called convolution is cross-correlation: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, ch. 9. MIT Press, 2016. ISBN 978-0-262-03561-3 — "many machine learning libraries implement cross-correlation but call it convolution".