画像認識をはじめ空間構造を持つデータの標準アーキテクチャであるCNNを学ぶ項目です。畳み込み演算の基本要素、効率化のための特別な畳み込み、プーリングまでを一気に整理します。
📖 概要
畳み込みニューラルネットワーク(CNN)は、小さなフィルタを入力の上でスライドさせながら局所的な特徴を抽出する「畳み込み層」を中心に構成されるネットワークです。全結合層と異なり、局所的な結合と重み(フィルタ)の共有によりパラメータ数を大幅に削減でき、平行移動に対して頑健な特徴抽出が可能になります。この設計は、生物の視覚野の神経細胞の知見に着想を得ています。
本項目は3つのブロックで構成されます。第一に基本的な畳み込み演算(フィルタ・パディング・ストライド・チャネルと出力サイズの計算、実装技法のim2col)、第二に計算効率化やセグメンテーションで重要な特別な畳み込み(point-wise・depth-wise・グループ化・逆畳み込み)、第三に特徴マップを空間方向に縮約するプーリングです。
🔍 キーワード解説
単純型細胞と複雑型細胞
単純型細胞と複雑型細胞 は、視覚野の研究で見いだされた神経細胞の分類です。単純型細胞は特定の位置・向きの線分などに反応し、複雑型細胞は特徴の位置が多少ずれても反応します。CNNの畳み込み層(特徴検出)とプーリング層(位置ずれの吸収)は、この2種類の細胞の役割分担に対応づけて説明されます。
受容野(receptive field)
受容野(receptive field) は、出力のあるユニットが入力のどの範囲を「見て」いるかを表す領域です。1層では受容野はフィルタサイズと同じですが、層を重ねるごとに広がります。小さいフィルタでも層を深くすれば広い受容野を獲得できることが、深いCNNが有効な理由の一つです。
フィルタ / カーネル
フィルタ(カーネル とも呼ばれます)は、畳み込み演算に使う3x3や5x5などの小さな重みの集まりです。フィルタを入力上でスライドさせ、各位置で要素ごとの積の総和(+バイアス)を計算するのが畳み込み演算です。重みは位置によらず共有されるため、同じパターンを画像中のどこでも検出でき、この重み共有と局所結合がパラメータ削減の源泉です。
特徴マップ / チャネル
畳み込みの出力として得られる2次元の配列を 特徴マップ と呼び、1枚の特徴マップは1つのフィルタが検出した特徴の空間分布を表します。チャネル は特徴マップの枚数方向の次元で、カラー画像ならRGBの3チャネルが入力です。フィルタは入力チャネル全体にまたがる重みを持ち、フィルタの個数が出力チャネル数(特徴マップの枚数)になります。
パディング / ストライド
パディング は、入力の周囲にゼロなどの値を付け足す操作で、出力サイズの縮小を防ぎ、端の画素も中央と同様に扱えるようにします。ストライド はフィルタをスライドさせる間隔で、2にすると出力の幅・高さが約半分になりダウンサンプリングとして機能します。入力サイズ W、フィルタサイズ F、パディング P、ストライド S のとき、出力サイズは次の式で計算できます。
出力サイズ = (W + 2P - F) / S + 1
im2col
im2col は、畳み込みを行列積として実装するための変形技法です。フィルタが適用される各位置の局所領域を1列に展開して大きな行列を作り、フィルタ側も並べ替えて、畳み込み全体を1回の行列積で計算します。メモリ使用量は増えますが、最適化された行列積ライブラリによりGPUなどで高速に計算できます。
point-wise畳み込み(1x1畳み込み)
point-wise畳み込み(1x1畳み込み) は、フィルタサイズが1x1の畳み込みです。空間方向の情報は混ぜず、各位置でチャネル方向の線形結合だけを行います。チャネル数の削減・拡張やチャネル間の情報混合に使われ、ボトルネック構造やdepth-wise畳み込みとの組み合わせで計算量削減の中心的役割を果たします。
depth-wise畳み込み
depth-wise畳み込み は、入力のチャネルごとに独立した1枚のフィルタで空間方向の畳み込みを行う手法で、チャネル間の混合を行いません。これとpoint-wise畳み込みを組み合わせて通常の畳み込みを分解したものはdepth-wise separable convolutionと呼ばれ、パラメータ数と計算量を大幅に削減できるため軽量ネットワークで広く使われます。
グループ化畳み込み
グループ化畳み込み は、入力チャネルをグループに分割し、グループ内でのみ畳み込みを行う手法です。パラメータ数と計算量がグループ数分の1に減り、グループ数を入力チャネル数と同じにした極端な場合がdepth-wise畳み込みに相当します。
アップサンプリングと逆畳み込み
アップサンプリングと逆畳み込み は、特徴マップの空間解像度を拡大する操作です。アップサンプリングには最近傍補間や双線形補間などの固定的な拡大が使われます。逆畳み込み(転置畳み込み)は学習可能な重みを持つ拡大操作で、通常の畳み込みの入出力関係を逆向きにした計算に相当し、セグメンテーションのデコーダや生成モデルで用いられます。数学的な逆演算そのものではない点に注意してください。
Max pooling / Lp pooling / Global Average Pooling
プーリングは、特徴マップの小領域を1つの値に集約して空間サイズを縮小する操作で、学習パラメータを持たず、微小な位置ずれへの頑健性を与えます。Max pooling は領域内の最大値を採用する最も一般的な方式です。Lp pooling は領域内の値のLpノルムに基づく一般化で、p = 1では平均プーリング的な挙動、p を無限大に近づけるとMax poolingに近づきます。Global Average Pooling は特徴マップ1枚全体の平均を取って1つの値に縮約する操作で、チャネル数分のベクトルが得られるため全結合層の代わりに出力層へ直結でき、パラメータ削減と過剰適合の抑制に役立ちます。
📝 試験でのポイント
- 出力サイズの計算 (W + 2P - F) / S + 1 は最頻出の計算問題です。パディングが「両側」に付くこと(2P)を忘れないようにしましょう
- 具体的な数値でフィルタを適用した畳み込みの積和計算や、Max poolingの結果を求める問題も定番です
- point-wise / depth-wise / グループ化畳み込みのパラメータ数・計算量の比較が問われます。「depth-wise = 空間のみ」「point-wise = チャネルのみ」の役割分担を軸に整理しましょう
- 受容野が層を重ねると広がること、重み共有によるパラメータ削減、単純型細胞 = 畳み込み・複雑型細胞 = プーリングの対応は概念問題で頻出です
- Global Average Poolingが全結合層の置き換えになる点、im2colが畳み込みを行列積化する技法である点も押さえてください
📚 まとめ
CNNは、フィルタ(カーネル)の重み共有と局所結合により、少ないパラメータで平行移動に頑健な特徴抽出を行うネットワークです。point-wise・depth-wise・グループ化畳み込みは計算量削減の、逆畳み込みは解像度復元の要素技術で、プーリングは空間縮約と頑健性を担います。出力サイズの計算式と各畳み込みの役割の違いを確実に押さえましょう。
