畳み込みニューラルネットワーク (Convolutional Neural Network: CNN) は、特に画像データの処理に特化したディープラーニングのモデルです。人間の視覚野の仕組みをヒントに考案され、画像認識、物体検出、画像生成など、コンピュータビジョンの様々な分野で目覚ましい成功を収めています。
💡 簡単に言うと、AIがまるで「目」👁️を持つかのように画像を認識・分析できるようになるための、「賢い画像の観察・特徴抽出器」のようなものです!
なぜCNNが必要なのか? 🤔 (FCNNとの比較)
これまでの「全結合型ニューラルネットワーク (FCNN)」は、画像認識には不向きな点がいくつかありました。
-
膨大なパラメータ数:
- 例えば、100x100ピクセルの白黒画像をFCNNの入力層に直接入れると、入力ニューロン数は10,000個になります。次の隠れ層に100個のニューロンがあった場合、それだけで10,000 × 100 = 100万個もの接続(重み)が必要になります。カラー画像ならさらに3倍です。
- パラメータ数が多すぎると、計算コストが膨大になるだけでなく、データが少ない場合に過学習しやすくなります。
-
空間的特徴の無視:
- FCNNは、ピクセルを1次元のデータとして扱います。このため、ピクセル間の「近さ」や「位置関係」といった画像が持つ空間的な特徴(例えば、隣り合うピクセルが同じ色であることなど)を考慮できません。
- 画像を構成する各ピクセルがバラバラの独立した特徴量として扱われてしまうため、画像の構造を学習するのが困難でした。
-
位置のずれに対する脆弱性:
- FCNNは、学習した特徴が画像の特定の位置に強く紐づいてしまいます。例えば、猫の目が画像の左上にあったときにしか認識できない、といった問題が起こりえます。画像が少しずれただけでも、特徴を認識できなくなってしまう可能性がありました。
CNNは、これらのFCNNの課題を克服するために開発されました。
CNNの主要な層と仕組み ⚙️
CNNは、主に以下の3種類の特徴的な層を組み合わせて構築されます。
-
畳み込み層 (Convolutional Layer) 🧮
- CNNの核となる層です。画像から様々な**「特徴(Feature)」を自動的に抽出**する役割を担います。
- フィルター(Filter / カーネル Kernel) と呼ばれる小さな行列(例えば3x3や5x5)が、入力画像上をスキャンするように移動し(「畳み込み」演算)、各位置で画像の一部分と要素ごとの積和を計算します。
- このフィルターは、エッジ(輪郭)、テクスチャ、特定の形状(目や鼻など)といった局所的なパターンを検出するように学習されます。
- 複数のフィルターを使用することで、1つの畳み込み層から多様な特徴マップ(Feature Map)が生成されます。
+---+---+---+ +---+---+---+ | 1 | 2 | 3 | | 0 | 1 | 0 | +---+---+---+ x +---+---+---+ | 4 | 5 | 6 | | 1 | 1 | 1 | +---+---+---+ +---+---+---+ | 7 | 8 | 9 | | 0 | 1 | 0 | +---+---+---+ +---+---+---+ 入力画像 フィルター ↓ 畳み込み演算 +---+---+ | ? | ? | +---+---+ 特徴マップ
💡 CNNがFCNNより優れている点(畳み込み層の利点)
- パラメータの共有 (Parameter Sharing): 同じフィルターが画像全体に適用されるため、検出したい特徴が画像内のどこにあっても対応できます(位置のずれに強い)。また、学習すべきパラメータの数を大幅に削減できます。
- 局所的な受容野 (Local Receptive Fields): 各ニューロンが画像の局所的な領域にのみ接続するため、FCNNのように全てに接続する必要がなく、計算量が削減されます。
- 空間的な階層構造の学習: 複数の畳み込み層を重ねることで、浅い層ではエッジのような単純な特徴、深い層では顔や物体のような複雑な特徴を段階的に学習することができます。
-
プーリング層 (Pooling Layer) ⬇️
- 畳み込み層の後に配置されることが多い層です。
- 特徴マップのサイズを縮小(ダウンサンプリング) し、計算量を削減し、モデルの位置不変性(対象が画像内のどこに少しずれても認識できる能力) を高めます。
- 代表的なものに「Maxプーリング」があります。これは、指定された領域(例: 2x2ピクセル)内の最大値だけを取り出す方法です。
+---+---+---+---+ +---+---+ | 1 | 3 | 2 | 4 | | 3 | 5 | +---+---+---+---+ -> +---+---+ | 5 | 2 | 6 | 1 | | 8 | 9 | +---+---+---+---+ +---+---+ | 7 | 8 | 3 | 9 | +---+---+---+---+ | 2 | 1 | 5 | 4 | +---+---+---+---+ 入力特徴マップ (4x4) Maxプーリング (2x2, stride=2)
-
全結合層 (Fully Connected Layer) 🧠
- 畳み込み層とプーリング層で画像から特徴が抽出された後、その特徴マップを1次元のベクトルに変換し、一般的な全結合型ニューラルネットワークの層に渡します。
- この全結合層で、抽出された特徴に基づいて最終的な分類(例: これは猫、これは犬) や回帰が行われます。
CNNの学習プロセス 🔄
CNNの学習も、FCNNと同様に「誤差逆伝播法(Backpropagation)」と「最適化アルゴリズム」を用いて行われます。
- 順伝播(Forward Propagation): 入力画像が畳み込み層、プーリング層、全結合層を順に通過し、最終的な予測結果が出力されます。
- 損失計算: 予測結果と正解ラベルとの間の誤差(損失)が計算されます。
- 逆伝播(Backward Propagation): 誤差がネットワークの出力側から入力側へと逆方向に伝播され、各層のフィルター(重み)とバイアスに対する勾配(誤差を減らす方向)が計算されます。
- パラメータ更新: 計算された勾配に基づいて、フィルターの重みとバイアスが少しずつ調整されます。
このプロセスを大量の画像データに対して何回も繰り返すことで、CNNは画像から有効な特徴を自動的に抽出し、正確な認識ができるように学習していきます。
CNNの応用例 🌟
CNNは、特に視覚情報に関わるあらゆる分野で活用されています。
- 画像認識・分類: 🖼️ (例: 猫と犬の分類、手書き数字の認識、医療画像の診断)
- 物体検出: 🕵️♀️ (例: 画像内のどこに何があるかを特定 - 自動運転の歩行者検出など)
- セマンティックセグメンテーション: 🎨 (例: 画像の各ピクセルが何であるかを分類 - 背景と前景の分離)
- 画像生成: 🎨 (例: スタイル変換、超解像度化、GANなどによるリアルな画像生成)
- 顔認識: 😊 (例: 顔の特定、表情認識)
- 映像解析: 🎬 (例: 動画内の動きやイベントの認識)
- 自動運転: 🚗 (例: 道路標識、車両、歩行者の認識)
CNNは、現在私たちが目にしている多くのAIアプリケーションの基盤技術であり、コンピュータビジョンの分野を大きく進化させました。