CNNとは?畳み込みニューラルネットワークの仕組みと応用

顔認証も自動運転も、その「目」の役割を担うのがCNN(畳み込みニューラルネットワーク)です。画像の特徴を段階的に捉える畳み込みの仕組みを、図解イメージで丁寧に解説します。

CNNとは?畳み込みニューラルネットワークの仕組みと応用

AI初心者

AIを知りたい

画像認識でよく使われる「CNN」って何ですか?

AIエンジニア

AIエンジニア

CNN(Convolutional Neural Network)は畳み込みニューラルネットワークと呼ばれ、画像処理に特化したディープラーニングの手法です。人間の視覚野の仕組みにヒントを得て設計されており、画像の特徴を階層的に学習します。

AI初心者

AIを知りたい

普通のニューラルネットワークとは何が違うのですか?

AIエンジニア

AIエンジニア

通常のニューラルネットワーク(全結合層)は入力の全てのピクセルを個別に扱いますが、CNNはフィルタ(カーネル)を使って画像の局所的なパターンを検出します。これによりパラメータ数が大幅に削減され、位置が少しずれても同じ特徴を検出できるという利点があります。

CNN(畳み込みニューラルネットワーク)とは、畳み込み層・プーリング層・全結合層を組み合わせたニューラルネットワークで、画像認識の基盤技術です。

1998年にYann LeCunが開発したLeNetが起源で、2012年のAlexNetによるImageNetでの圧勝をきっかけにディープラーニングブームが始まりました。画像分類、物体検出、セマンティックセグメンテーションなど幅広い画像タスクで使われています。

畳み込み層の仕組み

AI初心者

AIを知りたい

「畳み込み」って具体的に何をしているんですか?

AIエンジニア

AIエンジニア

小さなフィルタ(例:3×3のマス)を画像上でスライドさせながら、フィルタの値と画像のピクセル値を掛け合わせて足し算する操作です。このフィルタが「エッジ」や「角」などの特徴を検出するフィルタになるよう学習が進みます。

AI初心者

AIを知りたい

層が深くなるとどうなるんですか?

AIエンジニア

AIエンジニア

浅い層ではエッジや色などの単純な特徴を検出し、深い層に進むほど目や耳などの部品、さらに顔全体といった高度な特徴を学習します。この階層的な特徴抽出がCNNの本質で、人間の視覚処理に似た仕組みです。

CNNの基本構成要素

AI初心者

AIを知りたい

CNNはどんな層で構成されていますか?

AIエンジニア

AIエンジニア

主に3つの層があります。畳み込み層でフィルタを使って特徴マップを生成。プーリング層で特徴マップのサイズを縮小して計算量を減らし位置ずれに強くする。最後に全結合層で抽出された特徴から分類を行います。これらを何層も積み重ねます。

AI初心者

AIを知りたい

プーリングにはどんな種類がありますか?

AIエンジニア

AIエンジニア

Max Poolingは領域内の最大値を取る方法で、最も一般的です。Average Poolingは平均値を取ります。例えば2×2のMax Poolingは、2×2の領域から最大値を1つ選んで出力するので、サイズが縦横半分になります。最近はGlobal Average Poolingで全結合層を置き換える設計も多いです。

層 役割 出力
畳み込み層 局所パターンの検出 特徴マップ
活性化関数(ReLU) 非線形変換 活性化マップ
プーリング層 サイズ縮小・位置不変性 縮小された特徴マップ
全結合層 分類・回帰 クラス確率

代表的なCNNアーキテクチャ

AI初心者

AIを知りたい

有名なCNNモデルにはどんなものがありますか?

AIエンジニア

AIエンジニア

歴史的に重要なモデルがいくつかあります。AlexNet(2012年)はディープラーニングブームの火付け役。VGGはシンプルな構造で理解しやすい。ResNetはスキップ接続で100層以上の深いネットワークを実現しました。最近ではEfficientNetが効率と精度のバランスに優れています。

AI初心者

AIを知りたい

今でもCNNは使われていますか?Transformerに置き換わったのでは?

AIエンジニア

AIエンジニア

Vision Transformer(ViT)が台頭していますが、CNNは今でも広く使われています。特にエッジデバイスやリアルタイム処理ではCNNの軽量さが有利です。またConvNeXtのようにCNNの設計をTransformer時代のテクニックで更新したモデルも登場し、ViTに匹敵する性能を出しています。

モデル 年 層数 特徴
AlexNet 2012 8 GPU学習、ReLU、Dropout
VGG-16 2014 16 3×3フィルタの積み重ね
GoogLeNet 2014 22 Inceptionモジュール
ResNet 2015 152 スキップ接続(残差学習)
EfficientNet 2019 可変 複合スケーリング

まとめ

CNNは画像認識の基盤となるディープラーニング技術です。畳み込み・プーリング・全結合の3つの層で画像の特徴を階層的に学習し、画像分類から物体検出まで幅広く活用されています。ResNetのスキップ接続で超深層化が可能になり、EfficientNetで効率と精度の両立が実現しました。Transformerとの融合も進む中、CNNは依然としてコンピュータビジョンの中核技術です。

関連記事

KerasでCNNを実装してみよう

MNISTの手書き数字画像(28×28ピクセル)を畳み込みニューラルネットワークで分類する最小構成のコードです。Conv2D→MaxPooling→Flattenという基本の流れを体験できます。

import numpy as np
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

# データの準備
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
X_test = X_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

# CNNモデルの構築
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation="relu"),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(64, activation="relu"),
    layers.Dense(10, activation="softmax"),
])

model.compile(optimizer="adam",
              loss="categorical_crossentropy",
              metrics=["accuracy"])

# 構造を確認
model.summary()
# Total params: 34,826
# Conv2D(32) → MaxPool → Conv2D(64) → MaxPool → Flatten → Dense

# 学習と評価
model.fit(X_train, y_train, epochs=3, batch_size=128, validation_split=0.1)
loss, acc = model.evaluate(X_test, y_test)
print(f"テスト精度: {acc:.4f}")
# 3エポックでも約99%の精度が出る

Conv2Dが「画像の局所パターン(エッジや角)」を検出し、MaxPoolingが「位置ずれへの頑健性」を与えます。この2層の繰り返しがCNNの基本構造であり、画像認識が得意な理由です。層を深くしたりフィルタ数を増やすと表現力は上がりますが、過学習とのバランスを意識しましょう。