レイヤーの凍結と再学習

Caffeにおける「レイヤーの凍結と再学習」は、**転移学習(Transfer Learning)ファインチューニング(Fine-tuning)**を行う際に非常に重要なテクニックです。これにより、**事前学習済みモデル(pretrained model)**の一部を固定しつつ、他の部分だけを再学習して新しいタスクに適応させることが可能になります。


1. レイヤーの凍結(Freeze)

意味

「レイヤーを凍結する」とは、そのレイヤーの重みパラメータを更新しないことを意味します。Caffeでは、指定したレイヤーに対して誤差逆伝播を行わず、学習をスキップするように設定できます。

方法(prototxtファイルでの指定)

protobuf
param { lr_mult: 0 decay_mult: 0 }
  • lr_mult: 学習率の乗数。これを0にすると、そのレイヤーの重みは更新されない。

  • decay_mult: 重み減衰(L2正則化)の係数。0にすることで、正則化対象外にする。

protobuf
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 0 decay_mult: 0 } # 重み param { lr_mult: 0 decay_mult: 0 } # バイアス ... }

このように設定することで、conv1レイヤーは学習中に一切更新されなくなります。


2. レイヤーの再学習(Fine-tuning)

意味

一方、「再学習」とは、事前学習済みの重みを初期値として使用しつつ再調整することです。特にタスクが似ている場合は、モデル全体を一から学習するよりも精度と学習効率が向上します。

方法

  • 学習率を小さく設定して微調整を行う(例: lr_mult: 0.001)。

  • 特定のレイヤーのみ学習を許可する(他は凍結)。

  • 通常の学習と同じくsolver.prototxtweightsとして事前学習済みモデルを指定。

bash
caffe train -solver solver.prototxt -weights pretrained.caffemodel

3. 凍結と再学習の組み合わせ

実践的には以下のように活用されます:

  • **初期レイヤー(Conv1〜Conv5)**は画像特徴抽出に汎用性が高いため凍結。

  • 後半の全結合層(FC層)や出力層はタスク固有のため再学習。

利点

  • 学習時間の短縮

  • 少ないデータでの高精度モデル構築

  • 過学習の抑制


まとめ

操作 内容
レイヤー凍結 lr_mult=0 で重みを固定
レイヤー再学習 事前学習済み重みを微調整(小さなlr)
組み合わせ 特定レイヤーのみ更新し、効率的な転移学習

このように、Caffeではprototxtでのパラメータ設定によって柔軟に凍結・再学習の制御が可能です。目的に応じた適切な設定を行うことで、効率的かつ効果的なモデル構築が実現できます。

生成日:2025/05/23