畳み込み層 (Convolutional Layer) のパラメータ数
畳み込みニューラルネットワーク (CNN) の中核をなす畳み込み層は、画像などのグリッド状データから空間的な特徴を抽出する役割を担います。この層には、学習を通じて最適化されるパラメータ、すなわち重み(カーネル/フィルタ)とバイアスが含まれます。パラメータ数は、モデルの表現力や複雑さ、そして学習に必要な計算リソースやデータ量を見積もる上で重要な指標となります。
パラメータ数の構成要素
畳み込み層のパラメータ数は、主に以下の要素から構成されます。
-
カーネル(フィルタ)の重み: カーネルは、入力特徴マップの局所領域に適用され、特定のパターン(エッジ、テクスチャなど)を検出するための重みの集合です。
- 1つのカーネルが持つ重みの数: これはカーネルの空間的なサイズ(高さ×幅)と、入力特徴マップの深さ(チャネル数)の積で決まります。入力がカラー画像(例: 3チャネル)であれば、カーネルも同じ深さ(3チャネル)を持つ必要があります。
$1カーネルあたりの重み数 = (カーネル高さ) × (カーネル幅) × (入力チャネル数)
$
今回の問題では、カーネルサイズ 5x5、入力チャネル数 3 なので:
$1カーネルあたりの重み数 = 5 × 5 × 3 = 75$
- カーネルの総数: 畳み込み層は通常、複数のカーネルを持ち、それぞれが異なる特徴を捉えようとします。使用するカーネルの総数は、この層の出力チャネル数(フィルタ数)と等しくなります。
- 全カーネルの重み総数: 層全体の重みの総数は、1カーネルあたりの重み数にカーネルの総数を掛けたものになります。
$ 全重み数 = (1カーネルあたりの重み数) × (フィルタ数)
$
今回の問題では、フィルタ数 16 なので:
$ 全重み数 = 75 × 16 = 1200
$
-
バイアス: 通常、各出力チャネル(各カーネル)に対して1つのバイアス項が追加されます。バイアスは、カーネルによる重み付き和の後に加算され、活性化関数の発火しきい値を調整する役割を持ちます。
$ バイアス総数 = フィルタ数(出力チャネル数)
$
今回の問題では:
$ バイアス総数 = 16$
総パラメータ数の計算
畳み込み層の総パラメータ数は、上記の全カーネルの重み総数とバイアス総数の合計です。
$総パラメータ数 = 全重み数 + バイアス総数 \\ = 1200 + 16 = 1216$
したがって、この畳み込み層のパラメータ数は 1216 となります。
重要ポイント:パラメータ数計算の特性
- 入力サイズ非依存性: 畳み込み層のパラメータ数は、カーネルサイズ、入力チャネル数、出力チャネル数(フィルタ数)によって決まり、入力特徴マップの空間的なサイズ(高さ、幅)には依存しません。これは、同じカーネルが入力の異なる場所で繰り返し適用される「重み共有」の性質によるものです。
- ストライドとパディングの影響: ストライド(カーネルの移動幅)やパディング(入力の周囲に追加するピクセル)は、出力特徴マップのサイズには影響しますが、パラメータ数には影響しません。
- モデル複雑度との関連: パラメータ数はモデルの複雑さを示す指標の一つです。パラメータ数が多いほどモデルの表現力は高まりますが、過学習のリスクが増加し、より多くの学習データや計算リソースが必要になる傾向があります。
参考:全結合層との比較
全結合層(Dense Layer)では、パラメータ数は (入力次元数 + 1) × 出力次元数 となり、入力の次元数に直接依存します。CNNの畳み込み層は重み共有により、特に高解像度の画像入力に対して、全結合層よりも大幅に少ないパラメータ数で空間的な特徴を効率的に抽出できる利点があります。