畳み込みニューラルネットワーク(CNN)ってよく聞きますけど、普通のニューラルネットワークと何が違うんですか?
CNNは画像認識に特化したニューラルネットワークだよ。普通のニューラルネットワーク(全結合層だけのもの)だと、画像を扱うのに大きな問題があるんだ。
これらの問題を解決するために、畳み込み層とプーリング層という仕組みを導入したのがCNNなんだ。
CNNは大きく分けて特徴抽出部分(畳み込み層 + プーリング層の繰り返し)と分類部分(全結合層)で構成されているよ。それぞれ詳しく見ていこう。
「畳み込み」って何をしているんですか?
小さな「フィルター(カーネル)」を画像の上でスライドさせながら、特定のパターン(特徴)を検出する作業だよ。
畳み込み層に関連する重要な用語も押さえておこう。
畳み込みの出力サイズってどうやって計算するんですか?
ストライドとパディングの値がわかれば、公式1つで計算できるよ。G検定でも実際に計算させる問題が出ることがあるから覚えておこう。
出力サイズ = (W - F + 2P) / S + 1
W = 入力サイズ、F = フィルタサイズ、P = パディング、S = ストライド
出力サイズ = (7 - 3 + 2x0) / 1 + 1 = 4 / 1 + 1 = 5
→ 出力は 5x5 になる
| 入力サイズ (W) | フィルタ (F) | ストライド (S) | パディング (P) | 出力サイズ |
|---|---|---|---|---|
| 7x7 | 3x3 | 1 | 0 | 5x5 |
| 7x7 | 3x3 | 1 | 1 | 7x7(サイズ維持) |
| 7x7 | 3x3 | 2 | 0 | 3x3 |
| 32x32 | 5x5 | 1 | 2 | 32x32(サイズ維持) |
フィルタサイズ F のとき、パディング P = (F-1)/2 にするとストライド1で入力と同じサイズを維持できる。
例:3x3フィルタ → P=1、5x5フィルタ → P=2
プーリング層は何をするんですか?
特徴マップのサイズを縮小する役割だよ。これによって計算量を減らし、位置の微小なズレに強くなるんだ。
| プーリングの種類 | 処理内容 | 特徴 |
|---|---|---|
| Maxプーリング | 領域内の最大値を取る | 最もよく使われる。特徴の「ある/なし」を強調 |
| Averageプーリング | 領域内の平均値を取る | 滑らかな出力。背景情報も保持 |
| Global Average Pooling | 特徴マップ全体の平均 | 最終層で使用。全結合層の代わりに使うことも |
パラメータが膨大
位置情報が失われる
位置ズレに弱い
過学習しやすい
パラメータ共有で効率的
局所的な特徴を検出
位置不変性がある
画像認識に最適
全結合層では、各ピクセルごとに別々の重みが必要。100×100画像で隠れ層100ノードなら、重みは100万個。
CNNでは、同じフィルター(例:3×3 = 9個の重み)を画像全体で使い回す。フィルター32個でも重みは288個だけ。圧倒的に少ない!
CNNが全結合層と違うポイントを整理するとどうなりますか?
CNNには3つの大きな特徴があるよ。特に「局所結合構造」はCNNの根本的な設計思想なんだ。
| 特徴 | 仕組み | 効果 |
|---|---|---|
| 局所結合構造 | 各ニューロンが局所受容野(入力の一部領域)だけに接続 | パラメータ削減、局所パターンの検出 |
| パラメータ共有 | 同じフィルター(重み)を画像全体で使い回す | さらにパラメータ削減、位置に依存しない特徴検出 |
| プーリング | 特徴マップを縮小して要約する | 位置ズレへの頑健性、計算量の削減 |
全結合層:1つのニューロンが入力の全ピクセルと接続 → パラメータ膨大、位置情報消失
CNN(局所結合):1つのニューロンが入力の小さな領域だけと接続 → パラメータ少、局所パターン検出
| 名前 | 年 | 特徴 | 覚えるポイント |
|---|---|---|---|
| LeNet | 1998 | CNNの元祖。手書き数字認識用 | ヤン・ルカンが開発 |
| AlexNet | 2012 | ILSVRC2012で圧勝。深層学習ブームの火付け役 | ReLU、ドロップアウト、GPUを活用 |
| VGGNet | 2014 | 3×3の小さいフィルターを多層に重ねる | シンプルな構造。VGG16、VGG19 |
| GoogLeNet | 2014 | Inceptionモジュールで複数サイズのフィルターを並列使用 | 22層でも効率的 |
| ResNet | 2015 | スキップ接続(残差接続)で超深層化を実現 | 152層でも学習可能。勾配消失を解決 |
ResNetのスキップ接続(Skip Connection / Residual Connection)は、入力をそのまま出力に足し算する仕組み。
これにより勾配が直接伝わるルートができるので、100層以上の深いネットワークでも勾配消失せずに学習できるようになった。現在のほとんどの深層学習モデルはこのアイデアを取り入れている。