[機械学習のはじめ方] Part37: CNNの基本構造(Conv, Pooling, FC)

機械学習

はじめに:CNNってなんだろう?

皆さん、こんにちは!機械学習の世界へようこそ 🎉 このステップでは、特に画像認識の分野で驚くべき成果を上げている畳み込みニューラルネットワーク(Convolutional Neural Network, CNN)の基本構造について学んでいきます。

CNNは、人間の視覚野が物を見る仕組みにヒントを得て作られたモデルです。写真に写っているのが猫なのか犬なのか、あるいは手書きの数字が何なのかを高精度で認識できます。なぜそんなことができるのでしょうか?それは、CNNが持つ特殊な層構造のおかげなんです。

この記事では、CNNの核となる3つの重要な層、「畳み込み層(Convolutional Layer)」「プーリング層(Pooling Layer)」「全結合層(Fully Connected Layer)」について、それぞれの役割と仕組みをわかりやすく解説していきます。さっそく見ていきましょう!🚀

1. 畳み込み層 (Convolutional Layer):画像の特徴を見つけ出すスキャナー

畳み込み層は、CNNの「目」とも言える部分で、画像の中から特徴を見つけ出す役割を担っています。特徴とは、例えば画像の縦線、横線、斜め線、特定の色、模様といった部分的なパターンのことです。これは、画像内の隣接するピクセル間の関係性(エッジや色の変化など)から検出されます。

では、どうやって特徴を見つけるのでしょうか?畳み込み層では、「フィルター(またはカーネル)」と呼ばれる小さな行列を使います。このフィルターを画像の上で少しずつスライドさせながら、フィルターの数値と画像の一部分のピクセル値を掛け合わせて足し合わせる「畳み込み演算」という計算を行います。

フィルターの種類を変えることで、様々な特徴(エッジ、コーナー、テクスチャなど)を検出できます。例えば、縦線を検出するフィルター、角を検出するフィルターなど、複数のフィルターを使うことで、画像が持つ多様な特徴を捉えることができます。

この畳み込み演算の結果として得られるのが「特徴マップ(Feature Map)」です。特徴マップは、元の画像のどこに、どのフィルターが反応したか(つまり、どの特徴が存在したか)を示しています。これにより、画像内の情報を保持しつつ、高度な特徴抽出が可能になります。

畳み込み層には、いくつかの調整可能なパラメータ(ハイパーパラメータ)があります。

ハイパーパラメータ説明
フィルターサイズ (Kernel Size)特徴を検出するためのフィルターの大きさ(例: 3×3, 5×5)。受容野(Receptive Field)とも関連します。フィルターは通常、入力画像の幅や高さよりも小さいですが、深さ(チャンネル数)は入力と同じになります。
ストライド (Stride)フィルターを画像上でスライドさせる移動幅(ピクセル数)。
パディング (Padding)画像の周囲に余白(通常は0)を追加すること。これにより、画像の外周部にある特徴も捉えやすくなり、出力される特徴マップのサイズを調整できます。

畳み込み層は、画像全体の情報を一気に処理するのではなく、局所的な領域の特徴を捉えることに特化しています。また、同じフィルターを画像の異なる場所で再利用する「パラメータ共有(Weight Sharing)」という仕組みにより、学習するパラメータ数を大幅に削減し、効率的な学習を可能にしています。これが、画像のような空間的な構造を持つデータに対して非常に効果的な理由の一つです。

2. プーリング層 (Pooling Layer):情報を圧縮して賢く処理 🤏

畳み込み層でたくさんの特徴マップが作られましたが、このままでは情報量が多すぎて計算が大変になったり、細かい位置の違いに過敏に反応しすぎてしまうことがあります。そこで登場するのがプーリング層です。

プーリング層の主な役割は、特徴マップのサイズを縮小(ダウンサンプリング)することです。これにより、以下のメリットが得られます。

  • 計算量の削減: データ量が減るため、後続の層での計算が軽くなります。
  • 位置ずれへの頑健性 (Robustness) / 移動不変性の付与: 特徴の厳密な位置が多少ずれても、同じような出力が得られやすくなります(移動不変性)。例えば、画像の中の猫が少し右にずれていても、「猫がいる」という特徴は保たれやすくなります。重要な特徴を維持しながら位置に関する情報を削ぎ落とすイメージです。
  • 過学習の抑制: データ次元を削減することで、モデルが学習データに過剰に適合するのを防ぐ効果も期待できます。

プーリングにはいくつかの方法がありますが、代表的なのは以下の2つです。

プーリング手法説明
最大プーリング (Max Pooling)特徴マップを小さな領域に分割し、各領域内の最大値をその領域の代表値として取り出します。最も強く現れた特徴を保持する傾向があり、一般的に広く使われています。
平均プーリング (Average Pooling)同様に領域に分割し、各領域内の平均値を代表値として取り出します。領域全体の特徴をならして保持する傾向があります。

プーリング層も、畳み込み層と同様に領域のサイズ(Pooling Size)やストライド(Stride)といったハイパーパラメータを持ちます。一般的には、2×2のサイズ、ストライド2でプーリングを行い、特徴マップの縦横のサイズを半分にすることが多いです。

プーリング層は、重要な特徴を保持しつつ情報を圧縮することで、CNNの効率性と頑健性を高める重要な役割を果たしています。

3. 全結合層 (Fully Connected Layer):特徴をまとめて最終判断 🎯

畳み込み層とプーリング層を何度か繰り返すことで、画像から階層的に抽出された、より複雑で抽象的な特徴が得られます。最後のステップとして、これらの特徴情報をすべて統合し、最終的な判断(例えば、「この画像は猫である確率が90%」といった分類)を下すのが全結合層 (Fully Connected Layer, FC Layer) の役割です。Dense Layer とも呼ばれます。

全結合層は、これまで学んだ多層パーセプトロン(MLP)と同じ構造をしています。つまり、前の層の全てのニューロン(プーリング層から出力された特徴マップを一次元に並べたもの)が、全結合層の全てのニューロンに接続されています。畳み込み層やプーリング層が局所的な情報を扱っていたのに対し、全結合層はそれまでの層で抽出された特徴量を大域的に捉え直します。

畳み込み層やプーリング層が画像中の「どこに」「どんな特徴があるか」を捉えるのに対し、全結合層はそれらの特徴の組み合わせから、画像全体が何を表しているのか(どのクラスに属するのか、あるいは特定の数値は何か)を学習します。異なる特徴の組み合わせによるパターンを学習し、高度な識別や予測を可能にします。

通常、CNNの最終段に1つまたは複数配置されます。最後の全結合層(出力層)では、タスクに応じて活性化関数が使われます。

  • 分類タスクの場合: 各クラスに属する確率を出力するために、ソフトマックス関数 (Softmax) がよく用いられます。
  • 回帰タスクの場合: 数値を予測するために、線形関数 (Linear) などが用いられます。

全結合層は、抽出された特徴を最終的な出力に結びつける、CNNの「頭脳」のような部分と言えるでしょう。

CNNの全体像:層を組み合わせてパワフルに 💪

ここまで見てきた3つの層(畳み込み層、プーリング層、全結合層)が、CNNの基本的な構成要素です。実際のCNNモデルでは、これらの層(特に畳み込み層とプーリング層)が交互に、あるいは連続して何層も積み重ねられます。活性化関数(ReLUなど)も各層の間に挿入されます。

典型的なCNNの構造は、以下のような流れになります。

入力画像 → [畳み込み層 → 活性化関数(ReLU) → プーリング層] → …(繰り返し)… → (特徴マップを平坦化) → 全結合層 → 活性化関数(ReLU) → 全結合層(出力層) → 出力(クラス確率など)

層を深く重ねることで、CNNはより複雑で抽象的な特徴を学習できるようになります。最初の層では単純な線やエッジを検出し(低レベル特徴)、中間層ではそれらを組み合わせたパーツ(目や鼻、テクスチャなど)を(中レベル特徴)、そして最後の層に近い部分ではオブジェクト全体(顔や車など)を認識できるようになっていく(高レベル特徴)イメージです。このように、CNNは特徴の階層構造を自動で学習することができます。

まとめ

今回は、CNNの基本構造を支える3つの重要な層について学びました。

  • 畳み込み層 (Conv): フィルター(カーネル)を用いた畳み込み演算により、画像から局所的な特徴(エッジ、テクスチャなど)を抽出する層。パラメータ共有により効率的な学習が可能。
  • プーリング層 (Pool): 特徴マップのサイズを縮小(ダウンサンプリング)し、計算量を削減し位置ずれに対する頑健性を高める層。Max PoolingやAverage Poolingが代表的。
  • 全結合層 (FC): 抽出された特徴をすべて結合し、最終的な分類や回帰などの予測を行う層。従来のニューラルネットワークと同様の構造。

これらの層が組み合わさり、活性化関数などを介して情報を伝達することで、CNNは画像認識などのタスクで高い性能を発揮します。それぞれの層の役割を理解することは、CNNモデルを構築したり、既存のモデルを理解したりする上で非常に重要です。

次のステップでは、画像データを扱う上での前処理や、学習データを増やすテクニックであるデータ拡張など、より実践的な内容に進んでいきます。お楽しみに!😊

コメント

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