5-2-3 畳み込み層の広がり

畳み込み層は、画像の一部分ずつを見ながら特徴を見つける、とても優れた仕組みです。
けれど、いつも同じ大きさの虫めがねで、同じ密度で見ていれば十分、というわけではありません。

たとえば、大きな絵を鑑賞するとき。
近くの細かい模様を見たいこともあれば、少し離れて、もっと広い範囲の形を見たいこともあります。
また、虫めがねが重すぎると、絵全体を見て回るのに時間がかかってしまいます。

畳み込み層の発展は、そんな「見方の工夫」の歴史でもあります。

Dilated Convolution / Atrous Convolution

まず出てくるのが、Dilated Convolutionです。
これは Atrous Convolutionとほぼ同じ文脈で使われることが多く、どちらも、間隔を空けながら、より広い範囲を見る畳み込みと考えてよいです。

普通の畳み込みでは、虫めがねのレンズがぴったり詰まっていて、隣り合う場所をそのまま見ています。
でも Dilated Convolutionでは、レンズのあいだに少しすき間をあけるイメージです。

たとえば、
・普通の虫めがね→ 細かいところをぎゅっと見る
・Dilatedの虫めがね→ 少し間をあけて、広い範囲を見る
という違いがあります。

画像の中には、近くの情報だけではなく、少し離れた位置どうしの関係が大切なことがあります。
たとえば、
・顔の中で目と口の位置関係を見る
・大きな物体の輪郭をつかむ
・背景を含めた広い文脈を見る
といった場面です。

普通の小さな虫めがねだと、どうしても目の前の細部ばかりを見てしまう。
そこで Dilated Convolutionを使うと、フィルタそのものを大きくしなくても、より広い範囲の情報を取り込めるようになります。
これは、同じ手を伸ばすにしても、指のあいだを少し広げて、もっと遠くまで触れるようにする感覚に近いです。

Depthwise Separable Convolution

次に出てくるのが、Depthwise Separable Convolutionです。
名前は少し長くて難しそうだけれど、考え方はシンプルです。
これは、畳み込みの計算を、いくつかの小さな仕事に分けて、軽くする方法です。

普通の畳み込みでは、たくさんのチャネルの情報をまとめて扱いながら、特徴を取り出します。
でもこれを全部いっぺんにやろうとすると、どうしても計算が重くなります。

喫茶店のたとえで言えば、「香り・苦み・酸味・コクを全部まとめて、一気に完璧なブレンドを作ろうとする」ようなもの。
それはできるけれど、手間がかかります。

そこで Depthwise Separable Convolutionでは、この仕事を二段階に分けます。
・まず、それぞれの特徴を別々に見る
・そのあとで、それらをまとめる
つまり、
・最初に「香りだけ見る」「苦みだけ見る」
・後から「じゃあ全体としてどう混ぜるか」を考える
ようなやり方です。

こうすることで、普通の畳み込みよりも
・計算量を減らせる
・パラメータ数を抑えられる
・軽いモデルを作りやすい
という利点があります。

Depthwise Separable Convolutionは、スマートフォンや小型デバイスのように、計算資源が限られた環境で特に役立ちます
つまり、できるだけ軽く、でもしっかり見たいというときに向いている方法です。
大きくて重い虫めがねを持ち歩くのではなく、軽くて扱いやすい道具で、効率よく絵を見ていく。そんな工夫だと思えばよいでしょう。

まとめ

ここまで見てきたように、畳み込み層はただ一つの決まった形ではありません。

普通の畳み込み→ 基本の虫めがね

Dilated / Atrous Convolution→ より広く見る虫めがね(間隔を空けて、より広い範囲を見る畳み込み)

Depthwise Separable Convolution→ より軽く効率よく見る虫めがね(計算を分けることで、軽く効率よくする畳み込み)

というように、目的に応じてさまざまな工夫が加えられてきました。
これは、画像を見る方法が一つではないということでもあります。
細かく見たいときもあれば、広く見たいときもある。じっくり見たいときもあれば、軽やかにたくさん見たいときもある。
畳み込み層の発展とは、そうした「見方の工夫」が積み重なってきた歴史なのです。

next ▶ 正規化層とは何か