CNNのフィルタ数の決め方について

AI実装検定のご案内

CNN(畳み込みニューラルネットワーク)の設計において、フィルタ数(出力チャネル数)をどう決めるかは、モデル性能・計算コスト・汎化性能のすべてに影響する重要な設計要素です。

しかし、この値には一意の正解は存在せず、多くの場合は経験則と検証の積み重ねによって最適化されます。

本稿では、

  • フィルタ数の意味
  • なぜ定番パターンが存在するのか
  • 少なすぎる/多すぎる場合に何が起きるのか
  • 実務でどう調整すべきか

を誤解のない形で整理します。

目次

フィルタ数とは何か(基本の確認)

CNNにおけるフィルタ数 = 出力チャネル数です。

  • 1つのフィルタ
    → 入力特徴マップ全体に対して畳み込みを行い
    1枚の特徴マップ(1チャネル)を出力する
  • フィルタ数が N
    → 出力は N チャネルの特徴マップになる

つまり、フィルタ数とは

その層で同時に学習・表現できる特徴の種類の数

と考えて問題ありません。

※通常の畳み込み(groups=1)を前提としています。Depthwise Convolution などでは意味合いが変わる点には注意が必要ですが、一般的なCNN設計ではこの理解で十分です。

なぜ「最適なフィルタ数」は理論的に決まらないのか

フィルタ数に絶対的な正解が存在しない理由は以下にあります。

  • データの種類・複雑さが異なる
  • 学習データ量が異なる
  • タスクの難易度(単純分類/検出/分割など)が異なる
  • 計算資源(GPUメモリ・推論速度)の制約が異なる
  • 正則化やデータ拡張の強さが異なる

このため、実務では

まず無難な構成から始め、学習曲線を見て調整する

というアプローチが最も効率的です。

よく使われるフィルタ数の基本パターン

倍増ルール(経験則)

多くのCNNでは、層が深くなるにつれてフィルタ数を増やします。

代表的な例は次のような構成です。

32 → 64 → 128 → 256 → 512

また、軽量モデルや小規模データセットでは:

16 → 32 → 64 → 128

といった構成も一般的です。

なぜ深くなるほどフィルタ数を増やすのか

  • 浅い層
    → エッジ・色・単純なパターンなど、低レベル特徴
    → 少数のフィルタで十分
  • 深い層
    → 形状・構造・意味的特徴など、高レベル特徴
    → より多様な組み合わせが必要

その結果、

空間解像度を下げながら、チャネル方向で表現力を増やす

という設計が自然に生まれます。

入力サイズとフィルタ数の関係

小さな入力画像(例:28×28、32×32)

  • MNIST、CIFAR-10 など
Conv1: 32
Conv2: 64
Conv3: 128

入力が小さい場合でも深いモデルは成立しますが、

  • ダウンサンプリングが早すぎると空間情報が失われやすい
  • フィルタ数を増やしすぎると過剰なモデル容量になりやすい

という点に注意が必要です。

大きな入力画像(例:224×224)

  • ImageNet 系タスク
64 → 128 → 256 → 512

高解像度画像では、

  • 抽出すべき特徴が多い
  • 空間情報を段階的に圧縮しながら、表現力を増やす必要がある

ため、チャネル数を多めに設定するのが一般的です。

フィルタ数とパラメータ数・計算量の関係

畳み込み層のパラメータ数

通常の畳み込み層(groups=1)のパラメータ数は次式で表されます。

カーネルサイズ × 入力チャネル数 × 出力チャネル数

  • 3×3 カーネル
  • 入力 64ch → 出力 128ch
3 × 3 × 64 × 128 = 73,728

重要な注意点

  • 出力チャネル(フィルタ数)だけを2倍にする
    → パラメータ数はほぼ2倍
  • 層全体でチャネル数を2倍にする設計
    → 次層では入力チャネルも増えるため
    → パラメータ数・計算量は 約4倍規模 になることが多い

この違いを意識しないと、モデルが急激に重くなります。

フィルタ数が少なすぎる場合

起こりやすい現象

  • 学習精度・検証精度ともに低い
  • ロスが早い段階で頭打ちになる

原因

  • モデルの表現力不足(アンダーフィッティング)

対策

  • フィルタ数を段階的に増やす
  • 層を深くする
  • 高解像度を保つステージを増やす

フィルタ数が多すぎる場合

起こりやすい現象

  • 学習精度は高いが検証精度が伸びない
  • 学習が遅い、メモリ不足が発生する

原因

  • モデル容量過多
  • データ量に対して冗長な表現

※ただし、大規模データ・強い正則化・強力なデータ拡張がある場合は、チャネル数を増やした方が汎化性能が向上するケースも多い点には注意が必要です。

タスク別のフィルタ数設計の目安

単純な画像分類

32 → 64 → 128

物体検出・セグメンテーション

64 → 128 → 256 → 512

軽量・リアルタイム用途

16 → 32 → 64

加えて、Depthwise Convolution や Bottleneck 構造を併用して計算量を抑えるのが一般的です。

実務での現実的な決め方(推奨手順)

まずは定番構成から始める

学習曲線(train / val)を確認する

フィルタ数を一段階ずつ調整する

  • 64 → 96 → 128
  • 128 → 192 → 256

精度・速度・メモリのバランスで判断する

まとめ

  • フィルタ数は「特徴の種類の数」を決める重要なハイパーパラメータ
  • 理論的な唯一解は存在しない
  • 基本は「浅い層は少なく、深い層は多く」
  • 倍増ルールは強力な初期解だが、条件付きの経験則
  • 調整は学習曲線を見ながら段階的に行うのが最短ルート

以上、CNNのフィルタ数の決め方についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次