0Pricing
Learn AI with Python · レッスン

転移学習の概念と戦略

特徴抽出とファインチューニングの違い、凍結した層、転移学習が有効な場面について学習します。

「転移学習の概念と戦略」は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の重みが失われます。この現象を壊滅的忘却と呼びます。

一般的なワークフロー

  1. include_top=Falseを指定して事前学習済みのベースモデルを読み込みます。
  2. ベースモデルを凍結し、新しいヘッドを学習します(特徴抽出)。
  3. 上位層の凍結を解除し、非常に小さい学習率で再学習します(ファインチューニング)。
  4. 評価して、デプロイ用に変換します。

この段階的な方法により、比較的小規模なデータセットでも高い精度を実現できます。

クイックチェック

転移学習の戦略について理解度を確認しましょう。

まとめ

転移学習では、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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 転移学習の概念と戦略
  2. VGG16とResNet50をベースモデルとして使う
  3. ファインチューニング:凍結解除と再学習
  4. エッジデプロイメント向けのMobileNetとEfficientNet
← Learn AI with Pythonに戻る