【初心者向け】CNNフィルタの中身を覗いてみよう|数字の表で特徴を見つける仕組み(第4回)

前回は「フィルタ=虫めがね」というたとえでイメージをつかみました。今回はその虫めがねの中身、つまりフィルタの実体を、実際の数字を見ながら覗いていきましょう。

1. フィルタは「3×3の数字の表」

よくあるフィルタはこんな感じです。

┌──────────┐
│ -1   0   1 │
│ -1   0   1 │   ← これだけ!たった9個の数字
│ -1   0   1 │
└──────────┘

これがさっきの「虫めがね」の正体です。

2. 実際の計算:縦線検出フィルタ

ルール:左がマイナス、右がプラス → 「左暗い・右明るい」変化に反応

ケースA:縦線がある場所に当てる

画像の一部(数字が大きい=明るい、小さい=暗い)にフィルタを当てます。

画像の3×3          フィルタ
┌──────────┐  ┌──────────┐
│  0   0   9 │  │ -1   0   1 │
│  0   0   9 │  │ -1   0   1 │
│  0   0   9 │  │ -1   0   1 │
└──────────┘  └──────────┘

計算:同じ位置どうしを掛けて、全部足す

(0×-1) + (0×0) + (9×1) = 9
(0×-1) + (0×0) + (9×1) = 9
(0×-1) + (0×0) + (9×1) = 9
─────────────────
合計 =                   27  ← 大きな数字!「縦線あり!」

ケースB:縦線がない場所に当てる

画像の3×3          フィルタ
┌──────────┐  ┌──────────┐
│  5   5   5 │  │ -1   0   1 │
│  5   5   5 │  │ -1   0   1 │
│  5   5   5 │  │ -1   0   1 │
└──────────┘  └──────────┘

計算結果: 0 + 0 + 0 = 0  ← ゼロ!「縦線なし」

合計の数字が大きい=そのフィルタが探してるものが見つかった、という合図になります。

3. いろんなフィルタの中身

横線を探すフィルタ

┌──────────┐
│ -1  -1  -1 │
│  0   0   0 │   ← 上が暗くて下が明るい場所に反応
│  1   1   1 │
└──────────┘

エッジ(境界)を探すフィルタ

┌──────────┐
│ -1  -1  -1 │
│ -1   8  -1 │   ← 真ん中だけ周りと違う場所に反応
│ -1  -1  -1 │
└──────────┘

ぼかしフィルタ

┌─────────────────┐
│ 1/9   1/9   1/9 │
│ 1/9   1/9   1/9 │   ← 周りの平均を取る = ぼかし
│ 1/9   1/9   1/9 │
└─────────────────┘

数字の組み合わせを変えるだけで、まったく違う特徴を検出できるのがフィルタの面白さです。

4. 「光った」結果=特徴マップ

縦線フィルタを画像全体にスライドさせると、こうなります。

元の画像(数字=明るさ)        フィルタを通した結果
┌──────────────┐         ┌──────────┐
│ 0  0  9  9  0  0│         │ . 27 27  . │
│ 0  0  9  9  0  0│         │ . 27 27  . │  ← 縦線の位置で
│ 0  0  9  9  0  0│   →   │ . 27 27  . │     大きな数字が
│ 0  0  9  9  0  0│         │ . 27 27  . │     並んでいる!
│ 0  0  9  9  0  0│         └──────────┘
└──────────────┘

これが 「特徴マップ」です。数字が大きいところ=そのフィルタが反応した場所、ですね。

5. ここがすごい:フィルタは「学習で育つ」

人間が手で作るんじゃないの?

昔(〜2010年頃):人間が手作業で設計。画像処理の専門家が「縦線検出にはこの数字…」と決めていました。

今(CNN):AIが自動で見つけ出す。最初はランダムな数字で、学習を通じて「正解に近づく数字」に自動調整されます。

最初:                学習後:
┌──────────┐  ┌──────────┐
│ 0.3 -0.1  0.5 │  │ -0.9  0.0  0.9 │
│-0.2  0.4 -0.3 │  │ -1.0  0.0  1.0 │  ← だんだん意味のある
│ 0.1  0.2 -0.4 │  │ -0.9  0.1  0.8 │     パターンに!
└──────────┘  └──────────┘
  ランダム             縦線検出っぽい

何百万枚もの画像で「これが猫」「これが犬」と教えると、AIは自然と「猫を見分けるのに必要な数字の並び」を見つけてくれます。

6. 実際のCNNでは何個のフィルタがある?

1つの層にフィルタが 32個・64個・128個…と並びます。

1層目(64個のフィルタ)
  縦線・横線・斜め線・丸・角・赤色・青色・明暗・ザラザラ・滑らか…
     ↓
2層目(128個のフィルタ) ← 1層目の結果を入力に使う
  目・鼻・耳の形・口…
     ↓
3層目(256個のフィルタ)
  顔っぽいパターン・体っぽいパターン…

深くなるほど数が増え、複雑な特徴を捉えるように設計されます。

7. 本物のフィルタを可視化したらどうなる?

実際に学習済みCNN(AlexNetなど)の1層目フィルタを画像化すると、縦線・横線・斜め線・丸・色などのパターンがはっきり浮かび上がります。ネットで「AlexNet first layer filters」で画像検索すると本物が見られて、人間が脳で物を見るときと似たパターンが現れていることに驚かされます。

まとめ

質問答え
フィルタの中身は?3×3や5×5の数字の表
何をしている?画像と掛け算して合計する
数字が大きい結果=?そのフィルタが探してるものが見つかった
数字は誰が決める?AIが学習で自動的に決める
何個ある?1層あたり数十〜数百個

フィルタとは、「特定のパターンに反応する数字の表」であり、その数字をAIが自分で調整しながら賢くなっていくもの——これがいちばん大事なポイントです。

では、その「数字の調整」はどうやって行われるのか? 次回は AIの学習の仕組み をやさしく解説します!

コメント

タイトルとURLをコピーしました