CNN(畳み込みニューラルネットワーク)における特徴マップ(Feature Map / 特徴量マップ)とは、
入力データに対して畳み込み演算を行った結果として得られる、空間的に並んだ特徴の反応を表す配列
を指します。
画像を入力とするCNNでは、特徴マップは通常 2次元の空間構造(高さ×幅) を持ち、それが複数枚(チャンネル方向)積み重なった形で扱われます。
畳み込み層と特徴マップの関係
畳み込み層の役割
畳み込み層は、入力画像(または前段の特徴マップ)に対して小さな重み行列(フィルタ/カーネル)をスライドさせながら演算を行い、局所的な特徴を抽出する層です。
この畳み込み演算の出力が、特徴マップの元になります。
フィルタと特徴マップの対応関係(重要)
畳み込み層では通常、複数のフィルタが同時に用いられます。
- フィルタ1つにつき、出力される特徴マップは1枚
- したがって
出力される特徴マップの枚数 = フィルタ数(出力チャンネル数)
という関係が成り立ちます。
入力が多チャンネルの場合の注意点
RGB画像など、入力が複数チャンネルの場合
- フィルタは単なる「2次元行列」ではなく
- 入力チャンネル数分の厚みを持つ3次元構造(例:3×3×3)
になります。
このフィルタは、
- 各入力チャンネルに対して畳み込みを行い
- その結果をチャンネル方向に足し合わせ
- 最終的に 1枚の特徴マップ を生成します。
活性化関数と特徴マップ
活性化関数の位置づけ
畳み込み演算の直後には、通常 活性化関数(ReLUなど) が適用されます。
- 畳み込みの出力(活性化前)
- 活性化関数を通した後の出力
このどちらを指しても、文脈によっては「特徴マップ」と呼ばれます。
ReLU後の特徴マップの解釈
ReLU(Rectified Linear Unit)は次の関数です。
ReLU(x) = max(0, x)
ReLUを通した後の特徴マップでは:
- 0
→ その位置・そのユニットが 発火していない状態 - 正の値
→ 対応する特徴に反応しており、値が大きいほど反応が強い
と解釈されることが一般的です。
ただし、「0=特徴が存在しない」と断定するのは厳密ではなく、あくまでそのユニットが反応していない状態と捉えるのが正確です。
層の深さと特徴マップの性質の変化
CNNでは、層が深くなるにつれて特徴マップの性質が変化します。
浅い層の特徴マップ
ネットワークの初期層では、比較的単純で局所的な特徴が抽出されます。
例
- エッジ(縦・横・斜め)
- 明暗の境界
- 色の変化
- 単純なテクスチャ
これらは人間にも直感的に理解しやすい特徴です。
深い層の特徴マップ
層が深くなるにつれて、特徴はより抽象的になります。
例
- パーツの組み合わせ
- 物体の一部分らしさ
- 特定クラスに特徴的な形状やパターン
これらの特徴マップは、人間には直接的に意味を読み取りにくいものの、分類・検出などのタスクにとって有用な表現になっています。
※このような階層的特徴抽出は多くのCNNで観察されますが、必ずしもすべてのモデル・タスクで同じ形になるわけではありません。
特徴マップのサイズとチャンネル数
空間サイズが変化する理由
特徴マップの縦・横サイズは、次の要素によって変化します。
- カーネルサイズ
- ストライド(stride)
- パディング(padding)
- プーリング層の有無
一般的なCNNでは、層が進むにつれて空間解像度は小さくなる設計が多く見られます。
チャンネル数の変化
一方で、層が深くなるにつれて
- 抽出される特徴の種類が増えるため
- 特徴マップの枚数(チャンネル数)は増える
という設計がよく用いられます。
ただし、U-NetやFPNなど、解像度を再び上げる構造や複数解像度を同時に扱うモデルも存在します。
特徴マップとテンソルの形状表現
特徴マップはテンソルとして扱われますが、フレームワークによって次元の並びが異なる点に注意が必要です。
- TensorFlow / Keras
(N, H, W, C) - PyTorch
(N, C, H, W)
ここで
N:バッチサイズH, W:高さ・幅C:特徴マップの枚数(チャンネル数)
を表します。
プーリング層と特徴マップ
プーリング層は、特徴マップの空間情報を要約する役割を持ちます。
- プーリング後の出力も
- 次の層への入力となる特徴表現であるため
広い意味では特徴マップ(特徴量マップ)と呼ばれることがあります。
ただし、
「畳み込みによって生成された特徴マップを、プーリングで要約したもの」
と理解すると整理しやすくなります。
学習による特徴マップの変化
学習前
- フィルタはランダム
- 特徴マップに意味はほとんどない
学習後
- 誤差逆伝播によってフィルタが最適化され
- タスクに有用な特徴に強く反応する特徴マップが形成される
CNNの性能は、どれだけ有効な特徴マップを学習できるかに大きく依存します。
まとめ
- 特徴マップは 畳み込み層の出力として得られる特徴の反応分布
- フィルタ1つにつき、出力される特徴マップは1枚
- 入力が多チャンネルの場合、フィルタはチャンネル方向に厚みを持つ
- 浅い層では単純な特徴、深い層では抽象的な特徴が表現されやすい
- フレームワークによってテンソル形状の表記が異なる点に注意が必要
以上、CNNにおける特徴マップについてでした。
最後までお読みいただき、ありがとうございました。
