【Kerasリファレンス】Pooling(プーリング)レイヤー

2024年8月20日

イラスト出展:OpenAI dall-e-3

初めに

ディープラーニングのPooling(プーリング)レイヤーについて説明するね。

Kerasのディープラーニングで利用できるPooling(プーリング)レイヤーについて纏めました。

※ この記事はディープラーニングおよびKerasの知識がある方向けのリファレンスになります。

Poolingレイヤー(プーリング)とは

Poolingレイヤー(プーリング層)は主に畳み込みニューラルネットワーク(CNN)で用いるレイヤーです。主に特徴量の次元を削減し、計算量を減らし、過学習を防ぐために使用されます。Poolingレイヤーは、入力された特徴マップから特定の操作を行い、出力サイズを縮小することで重要な情報を保持しながら冗長な情報を排除します。

Poolingレイヤー

Pooling層の演算の流れ

プーリングの流れは、入力された特徴マップ(画像や時系列データなど)を受け取り、そのサイズを小さくする(ダウンサンプリングする)ことで、計算量の削減やモデルのロバスト性向上に寄与します。以下は、プーリングの基本的な流れのステップです。

プーリングの流れ

1. 入力特徴マップの分割

入力として与えられた特徴マップ(例えば、画像データや時系列データ)を小さな領域(ブロック)に分割します。各領域のサイズはプールサイズ(例えば、2x2や3x3)によって決まります。

2. プーリング操作の適用

各小領域に対して、指定されたプーリング操作(最大値を取るMax Poolingや平均値を取るAverage Poolingなど)を適用します。

  • Max Pooling: 各小領域内の最大値を選び出します。
  • Average Pooling: 各小領域内の平均値を計算します。

3. ストライドによる移動

プーリング操作を適用した後、指定されたストライド(移動量)に従って次の領域に移動します。ストライドがプールサイズと同じ場合、隣接する領域は重ならずに処理されます。ストライドがプールサイズより小さい場合、領域が一部重複します。

4. パディングの適用(必要に応じて)

境界部分のデータをどう処理するかを決めるパディングの設定に従います。

  • VALID パディング: パディングなしで、余り部分が処理されません。
  • SAME パディング: 入力サイズを保つためにゼロパディングが追加され、余り部分も処理されます。

5. 出力特徴マップの生成

プーリング操作を全ての領域に対して適用した後、ダウンサンプリングされた新しい特徴マップが生成されます。これにより、元の入力よりも小さく、重要な特徴が強調されたマップが得られます。

プーリングの計算式

プーリングの計算を式にすると以下になります。
プーリングの計算式

Poolingレイヤー(プーリング)の種類

MaxPooling1D

  • 説明
    1次元配列の一部領域内で最大値を選び出す操作です。例えば、音声データや時系列データの重要なピーク情報を抽出します。

  • 使用例
    時系列データのダウンサンプリングに使用します。

MaxPooling2D

  • 説明
    2次元配列(例えば、画像)の部分領域内で最大値を選び出す操作です。重要なエッジや特徴を抽出します。

  • 使用例
    画像データのダウンサンプリングに使用します。

MaxPooling3D

  • 説明
    3次元配列の部分領域内で最大値を選び出す操作です。動画データの重要な特徴を抽出します。

  • 使用例
    動画データや3次元データのダウンサンプリングに使用します。

AveragePooling1D

  • 説明
    1次元配列の部分領域内の平均値を計算する操作です。全体的な傾向や滑らかさを維持します。

  • 使用例
    時系列データのダウンサンプリングに使用します。

AveragePooling2D

  • 説明
    2次元配列の部分領域内の平均値を計算する操作です。画像の全体的な特徴を滑らかにします。

  • 使用例
    画像データのダウンサンプリングに使用します。

AveragePooling3D

  • 説明
    3次元配列の部分領域内の平均値を計算する操作です。全体的な特徴を滑らかに保ちます。

  • 使用例
    動画データや3次元データのダウンサンプリングに使用します。

GlobalMaxPooling1D

  • 説明
    1次元配列全体から最大値を選び出します。全体のピーク情報を抽出します。

  • 使用例
    時系列データの全体的な最大値を取得するのに使用します。

GlobalMaxPooling2D

  • 説明
    2次元配列全体から最大値を選び出します。画像全体の最も顕著な特徴を抽出します。

  • 使用例
    画像データの全体的な最大値を取得するのに使用します。

GlobalMaxPooling3D

  • 説明
    3次元配列全体から最大値を選び出します。動画全体の最も顕著な特徴を抽出します。

  • 使用例
    動画データや3次元データの全体的な最大値を取得するのに使用します。

GlobalAveragePooling1D

  • 説明
    1次元配列全体の平均値を計算します。全体の傾向を要約します。

  • 使用例
    時系列データの全体的な平均値を取得するのに使用します。

GlobalAveragePooling2D

  • 説明
    2次元配列全体の平均値を計算します。画像全体の特徴を要約します。

  • 使用例
    画像データの全体的な平均値を取得するのに使用します。

GlobalAveragePooling3D

  • 説明
    3次元配列全体の平均値を計算します。動画全体の特徴を要約します。

  • 使用例
    動画データや3次元データの全体的な平均値を取得するのに使用します。

CNNの実装サンプル(keras

以下は、Conv2Dレイヤーを使用した簡単なKerasの実装サンプルです。この例では、MNISTデータセットを使用して手書き数字の分類モデルを構築します。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# モデルの定義
model = Sequential()

# 畳み込み層とMaxPooling層の追加
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))  # 28x28の画像(1チャンネル)
model.add(MaxPooling2D((2, 2)))  # 2x2のMaxPooling

model.add(Conv2D(64, (3, 3), activation='relu'))  # フィルター数64の3x3の畳み込み層
model.add(MaxPooling2D((2, 2)))  # 2x2のMaxPooling

model.add(Conv2D(64, (3, 3), activation='relu'))  # フィルター数64の3x3の畳み込み層

# 全結合層の追加
model.add(Flatten())  # フラット化
model.add(Dense(64, activation='relu'))  # ユニット数64の全結合層
model.add(Dense(10, activation='softmax'))  # 出力層(クラス数10、softmax活性化関数)

# モデルのコンパイル
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# モデルの概要を表示
model.summary()

上記のソースコードは、手書き数字データセットなどの画像分類問題に適用できるシンプルなCNNのディープラーニングのモデルです。

Kerasリファレンス

Kerasの詳しい使い方は本家の以下ページを参照下さい。
https://keras.io/api/

Keras

最後に

本記事がAIの理解に少しでもお役に立てば幸いです。機械学習など分かり易く記事にしていきますので今後とも宜しくお願いします。

一緒に楽しくAIについて学びましょう。

※ 本サイトの記事はより伝わり易い様にAIによりチェック・一部修正をしてます。