CNNについてClaude Opus 4.5に説明してもらいました。
自分は間違いを指摘したり、構成を整理しました。
なぜCNNが必要なのか ?
画像認識において、従来の全結合ニューラルネットワークには大きな問題があります。例えば、MNISTの28×28ピクセルの画像を処理する場合を考えてみましょう。
全結合層の限界
28×28のMNIST画像でさえ、1層の全結合で約10万のパラメータが必要です。カラー画像(例 : 224x224x3)では、1層で約1500万のパラメータになります !
28×28のMNIST画像でさえ、1層の全結合で約10万のパラメータが必要です。カラー画像(例 : 224x224x3)では、1層で約1500万のパラメータになります !
CNNのアイデア : 局所的な特徴を捉える
CNNは、画像の「局所的なパターン」に注目します。人間が文字を認識するとき、画像全体を一度に見るのではなく、エッジや曲線などの部分的な特徴を組み合わせて認識しています。
CNNの核心
CNNは「小さな窓(フィルタ)」を使って画像をスキャンし、局所的なパターンを検出します。この方法により、パラメータ数を大幅に削減しながら、画像の空間的な構造を保持できます。
CNNは「小さな窓(フィルタ)」を使って画像をスキャンし、局所的なパターンを検出します。この方法により、パラメータ数を大幅に削減しながら、画像の空間的な構造を保持できます。
畳み込み(Convolution)とは ?
畳み込みは、フィルタ(カーネル)を画像上でスライドさせながら、フィルタと画像の対応する部分の積和を計算する操作です。
畳み込みの数式は以下のように表されます:
\[
\displaystyle (I * K)(i, j) = \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} I(i+m, j+n) \cdot K(m, n)
\]
ここで:
- \(I\) は入力画像
- \(K\) はフィルタ(カーネル)
- \(k_h, k_w\) はフィルタの高さと幅
- \((i, j)\) は出力の位置
フィルタをスライドさせる
畳み込みでは、フィルタを入力画像上で1ピクセルずつスライドさせ、各位置で積和を計算します。これにより、入力より少し小さい「特徴マップ」が得られます。
出力サイズの計算式(パディングなし、ストライド1の場合)
\[
\text{出力サイズ} = \text{入力サイズ} – \text{フィルタサイズ} + 1
\]
例 : 28×28の入力に3×3フィルタを適用 → 26×26の出力
\[
\text{出力サイズ} = \text{入力サイズ} – \text{フィルタサイズ} + 1
\]
例 : 28×28の入力に3×3フィルタを適用 → 26×26の出力
MNISTでの畳み込みのイメージ
MNISTの28×28画像に3×3フィルタを適用すると、26×26の特徴マップが得られます。この特徴マップは、元の画像の各位置でフィルタが「反応した強さ」を表しています。
フィルタの数と特徴マップ
CNNでは通常、1つの畳み込み層で複数のフィルタ(例 : 32個、64個)を使用します。各フィルタは異なるパターン(縦エッジ、横エッジ、角など)を検出し、フィルタの数だけ特徴マップが生成されます。
CNNでは通常、1つの畳み込み層で複数のフィルタ(例 : 32個、64個)を使用します。各フィルタは異なるパターン(縦エッジ、横エッジ、角など)を検出し、フィルタの数だけ特徴マップが生成されます。
なぜ畳み込みが効果的なのか
まとめ
この章で学んだこと
- 全結合層の問題:パラメータが多すぎる、空間情報の喪失、平行移動に弱い
- CNNの基本アイデア:局所受容野、重み共有、階層的な特徴抽出
- 畳み込み演算:フィルタを画像上でスライドさせながら積和を計算
- 特徴マップ:畳み込みの結果として得られる、フィルタの反応を表す出力
- 畳み込みの利点:パラメータの大幅削減、平行移動不変性
広告
さくらのレンタルサーバムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト
【FRONTIER】
AdGuard Ad Blocker
AdGuard VPN
AdGuard DNS