転移学習の概念と戦略
特徴抽出とファインチューニングの違い、凍結した層、転移学習が有効な場面について学習します。
「転移学習の概念と戦略」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
転移学習とは
転移学習は、大規模なデータセットで学習したモデルを、関連する新しいタスクの出発点として再利用します。視覚的な特徴を最初から学習する代わりに、ネットワークがすでに学習した特徴を借りる方法です。
これにより、高い精度に到達するために必要なデータ量と計算量を大幅に削減できます。
ImageNetという基盤
ほとんどの事前学習済み画像認識モデルは、1000クラスにまたがる約140万枚の画像で構成されたImageNetを使って学習されています。
この学習中に、ネットワークは特徴の階層を学習します。初期層ではエッジや色、中間層ではテクスチャ、上位層では物体の部分を捉えます。これらの低レベルの特徴は、ほぼあらゆる画像タスクにうまく転移できます。
初期特徴が転移しやすい理由
最初の畳み込み層は、自然画像すべてに現れる一般的なパターン(エッジ、塊、勾配)を検出します。対象が猫、X線画像、衛星写真のいずれであっても同じです。
より深い層は、よりタスク固有の特徴になります。初期層で検出したエッジを、ImageNetの物体の部分へ組み立てるためです。そのため通常は初期層を維持し、後段の層を置き換えるか再学習します。
戦略1: 特徴抽出
特徴抽出では、事前学習済みのベースモデルのすべての層を凍結するため、その重みは変化しません。ベースモデルを固定された特徴抽出器として使い、その上に追加した小さな分類ヘッドだけを学習します。
データセットが小さく、ImageNetと似ている場合に使います。学習可能なパラメータが少ないため高速で、過学習も起こりにくくなります。
base.trainable = False
model = Sequential([
base, # frozen ImageNet features
GlobalAveragePooling2D(),
Dense(num_classes, activation="softmax") # only this trains
])戦略2: ファインチューニング
ファインチューニングでは、ベースモデルの上位層の凍結を解除し、ヘッドと一緒に再学習します。これにより、ネットワークの高レベルな特徴を特定のデータに適応させられます。
より多くのデータがある場合や、対象領域がImageNetと異なる場合(医療スキャンなど)に使います。事前学習済みの重みを壊さないよう、必ず非常に小さい学習率でファインチューニングしてください。
特徴抽出とファインチューニングの比較
- 特徴抽出: ベースモデルを凍結し、ヘッドだけを学習します。非常に高速で、小規模または類似したデータに適しています。
- ファインチューニング: ベースモデルの上位層の凍結を解除し、ヘッドとともに学習します。より低速ですが、大規模または異なるデータに適しています。
よくある方法は、まず特徴抽出を行い、ヘッドの学習が安定してから第2段階としてファインチューニングすることです。
必要なデータ量
保有するデータ量によって戦略が決まります:
- 数百枚: 特徴抽出のみを行います(すべてを凍結)。
- 数千枚: 特徴抽出を行ってから、上位の数層をファインチューニングします。
- 数万枚以上: ベースモデルのより広い範囲を、場合によってはネットワーク全体をファインチューニングします。
データが少ないほど多くの層を凍結します。学習可能なパラメータを減らすことで、過学習のリスクを抑えられるためです。
分類ヘッドを置き換える
ImageNetモデルは1000クラスを出力します。対象タスクのクラス数は異なることが多いため、元の最上部(include_top=False)を削除し、対象クラス数に合わせた独自のヘッドを追加します。
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.2)(x)
outputs = layers.Dense(5, activation="softmax")(x) # 5 custom classes
model = Model(base.input, outputs)前処理を一致させる
事前学習済みモデルの各ファミリーは、ImageNetで学習したときと同じ方法でスケーリングされた入力を想定しています。一致するpreprocess_inputを使うことが不可欠です。そうしないと精度が大幅に低下します。
from tensorflow.keras.applications.resnet50 import preprocess_input
# Scale pixels exactly as ResNet50 expects
x = preprocess_input(raw_image_batch)学習率を適切に管理する
特徴抽出中は、新しいヘッドだけを学習するため、通常の学習率(例: 1e-3)で問題ありません。
ファインチューニング中は、1e-5のような非常に小さい値まで下げる必要があります。大きな更新を行うと、慎重に学習されたImageNetの重みが失われます。この現象を壊滅的忘却と呼びます。
一般的なワークフロー
include_top=Falseを指定して事前学習済みのベースモデルを読み込みます。- ベースモデルを凍結し、新しいヘッドを学習します(特徴抽出)。
- 上位層の凍結を解除し、非常に小さい学習率で再学習します(ファインチューニング)。
- 評価して、デプロイ用に変換します。
この段階的な方法により、比較的小規模なデータセットでも高い精度を実現できます。
クイックチェック
転移学習の戦略について理解度を確認しましょう。
まとめ
転移学習では、ImageNetで事前学習された特徴(140万枚の画像、1000クラス)を再利用することを学びました。特徴抽出は、小規模または類似したデータセット向けにベースモデルを凍結します。一方、ファインチューニングは、大規模または異なるデータに合わせて、非常に小さい学習率で上位層の凍結を解除します。
ベースモデルに合わせて前処理を選び、対象クラスに合わせてヘッドを置き換え、段階的なワークフローを使います。次はVGG16とResNet50を使って、これをコードにします。
よくある質問
「転移学習の概念と戦略」レッスンは無料ですか?
はい。「転移学習の概念と戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「転移学習の概念と戦略」で何を学びますか?
特徴抽出とファインチューニングの違い、凍結した層、転移学習が有効な場面について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「転移学習の概念と戦略」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。