Kerasにおける転移学習やファインチューニングでは、「層の凍結(freeze)」や「再学習(unfreeze)」の操作が重要です。これらは、モデルの一部の層の重みを固定したり、再び学習可能にしたりすることで、学習効率や汎化性能を高めるために利用されます。
1. 層の凍結(layer.trainable = False)
layer.trainable = False)
概要
転移学習では通常、**事前学習済みモデル(例:VGG16, ResNet)をベースにして、新しいタスクに対する学習を行います。その際、事前学習モデルの一部またはすべての層の重みを固定(凍結)**することで、既存の知識(低レベル特徴など)を保持します。
凍結の方法(コード例)
この設定により、model.fit()を行ってもこれらの層の重みは更新されず、固定された状態になります。
2. 新しいタスクのための出力層の追加
事前学習済みの部分に新しい出力層を追加して、新しいデータセットに適応させます。
3. 層の再学習(ファインチューニング)
概要
転移学習の第2段階として、凍結していた一部の層を再び学習可能(unfreeze)にすることで、より対象データに特化したモデルに調整する手法がファインチューニングです。
再学習の方法(コード例)
※学習率は小さめに設定するのが一般的です(例:optimizer=Adam(learning_rate=1e-5))。これは、事前学習済みの重みを大きく変えすぎないためです。
4. 凍結・再学習の流れ(まとめ)
| ステップ | 内容 | 目的 |
|---|---|---|
| ① モデルの読み込み | 事前学習済みモデル(例:VGG16)を読み込む | 既存の知識(特徴抽出能力)を活用 |
| ② 層の凍結 | layer.trainable = False |
不必要な重み更新を防ぐ |
| ③ 出力層の追加 | 新しい分類タスクに合わせて出力層を追加 | 新タスクに適応 |
| ④ 転移学習 | 凍結済みモデル+新出力層を訓練 | 出力層のみ学習 |
| ⑤ ファインチューニング | 上位層を再学習(trainable=True) |
モデルを新データにさらに適応 |
5. 注意点
-
BatchNormalization層は凍結・再学習の際の挙動が特殊です。訓練・推論のモードによって挙動が変わるため、凍結時は特に慎重に扱う必要があります。
-
層を再学習可能にした場合は、
model.compile()を再度実行する必要があります。これは、コンパイル時に各層のtrainable状態が固定されるためです。
このように、Kerasではlayer.trainable = Falseを使うことで、事前学習モデルの層の学習可否を柔軟に制御し、効果的な転移学習・ファインチューニングが実現できます。
生成日:2025/05/22