基本的なレイヤー(Convolution, Pooling, ReLU, InnerProduct, Softmaxなど)

Caffeにおけるネットワーク構築の中心は「レイヤー(Layer)」の積み重ねによって成り立っています。各レイヤーは特定の計算処理を担っており、ネットワーク全体の構造や性能に大きく影響します。以下に、Caffeでよく使われる基本的なレイヤーについて詳しく説明します。


1. Convolution Layer(畳み込み層)

役割: 画像などの入力に対してフィルタ(カーネル)を適用し、特徴マップ(Feature Map)を抽出します。
主なパラメータ:

  • num_output: 出力チャネル数(フィルタの数)

  • kernel_size: フィルタサイズ(例: 3, 5)

  • stride: フィルタの移動幅

  • pad: パディングサイズ(入力の周囲に0を追加)

prototxt
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" convolution_param { num_output: 32 kernel_size: 3 stride: 1 pad: 1 } }

2. Pooling Layer(プーリング層)

役割: 特徴マップの空間的なサイズを縮小し、過学習の防止や計算量の削減を行います。最大値や平均値を取ることが多いです。
主な種類:

  • MAX: 最大プーリング

  • AVE: 平均プーリング

主なパラメータ:

  • kernel_size: プーリングのウィンドウサイズ

  • stride: プーリングの移動幅

prototxt
layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX kernel_size: 2 stride: 2 } }

3. ReLU Layer(整流線形ユニット)

役割: 活性化関数として、非線形性を導入します。入力が0未満なら0に、0以上ならそのまま出力します。
特徴: パラメータは不要。学習・推論の高速化や勾配消失の軽減に寄与します。

prototxt
layer { name: "relu1" type: "ReLU" bottom: "conv1" top: "conv1" }

4. InnerProduct Layer(全結合層)

役割: 入力ベクトルに対して重み付き線形変換を行い、出力を生成します。分類タスクの最終段などで使用されます。
主なパラメータ:

  • num_output: 出力ユニットの数(=クラス数など)

prototxt
layer { name: "fc1" type: "InnerProduct" bottom: "pool1" top: "fc1" inner_product_param { num_output: 100 } }

5. Softmax Layer(ソフトマックス層)

役割: 出力値を0〜1の範囲に正規化し、確率として解釈できるようにします。分類タスクで出力層として用います。

prototxt
layer { name: "prob" type: "Softmax" bottom: "fc1" top: "prob" }

補足: 一般的なレイヤー構成例

prototxt
data → conv1 → relu1 → pool1 → fc1 → softmax

このような構成は、典型的な画像分類モデル(例えばMNISTやCIFAR-10など)でよく見られます。


まとめ

レイヤー名 主な目的
Convolution 特徴抽出
Pooling 特徴の要約・次元削減
ReLU 非線形性の導入
InnerProduct 特徴の統合・出力の生成
Softmax 出力の確率化(分類)

これらの基本レイヤーを適切に組み合わせることで、Caffeでは柔軟かつ効率的にニューラルネットワークを設計・学習することができます。必要に応じてBatchNormやDropoutなどの補助的なレイヤーを加えることで、性能向上や過学習防止にも対応できます。

生成日:2025/05/23