転移学習とは?事前学習済みモデルを活用する効率的なAI開発手法を解説

ゼロから学習させる代わりに既存モデルの知識を流用する「転移学習」は、少ないデータと短い時間で高精度を実現します。ファインチューニングとの関係も含めて解説します。

転移学習:事前学習済みモデルを活かすAI開発の定番手法

AI初心者

AIを知りたい

先生、AIモデルの学習には莫大なデータとコストがかかると聞きましたが、中小企業でもAIを開発する方法はあるんですか?

AIエンジニア

AIエンジニア

それを可能にするのが「転移学習(Transfer Learning)」だよ。すでに大量のデータで学習済みのモデルを、自分のタスクに合わせて再利用する手法なんだ。ゼロから学習する場合に比べて、必要なデータも計算コストも大幅に削減できるよ。

AI初心者

AIを知りたい

他の人が学習させたモデルをそのまま使うんですか?

AIエンジニア

AIエンジニア

「そのまま使う」場合と「少し調整して使う」場合があるよ。例えば、ImageNetという1,400万枚の画像で学習されたモデルを使って、自社の製品画像100枚で不良品検出モデルを作るといった具合だ。大規模データで学んだ一般的な特徴を活かしつつ、少量の自社データで専門的な判断を学ばせるんだよ。

AI初心者

AIを知りたい

100枚でいいんですか?それなら自分でもできそうですね。

AIエンジニア

AIエンジニア

そう、それが転移学習の最大の魅力だ。GPT-4の学習には数千億トークンのデータが必要だけど、転移学習なら数百〜数千件のデータで実用的なモデルが作れる。2026年のAI開発では、ゼロから大規模モデルを学習する企業はごくわずかで、ほとんどが転移学習を活用しているんだよ。

転移学習とは。

転移学習(Transfer Learning)は、あるタスクで学習したAIモデルの知識を、別の関連タスクに転用する機械学習手法です。2012年のAlexNetの成功以降、画像認識分野で広く使われるようになり、2018年のBERT登場で自然言語処理分野でも標準的な手法となりました。大規模データで事前学習(Pre-training)されたモデルの重みを初期値として使い、少量の対象データでファインチューニング(微調整)することで、短時間・低コストで高精度なモデルを構築できます。2026年現在、画像認識ではImageNet事前学習モデル、自然言語処理ではBERT・GPT系モデル、マルチモーダルではCLIPが転移学習のベースモデルとして広く活用されています。LoRA(Low-Rank Adaptation)やQLoRAなどの効率的なファインチューニング手法の登場により、個人のGPU環境でも大規模言語モデルの転移学習が可能になりました。

転移学習の種類とアプローチ

転移学習にはいくつかのアプローチがあり、タスクの性質やデータ量に応じて使い分けます。

アプローチ 仕組み 必要データ量 計算コスト 適用場面
Feature Extraction 事前学習モデルの特徴量をそのまま利用 少量(数十〜数百件) 低い データが極めて少ない場合
Full Fine-tuning モデル全体の重みを再学習 中程度(数千件〜) 高い 高精度が必要な場合
LoRA 低ランク行列で一部パラメータのみ調整 少量〜中程度 低い LLMの効率的な調整
Prompt Tuning 入力プロンプトだけを最適化 少量 非常に低い LLMの軽量カスタマイズ
Domain Adaptation 異なるドメインへの知識適応 中程度 中程度 分野の異なるデータへの対応

AI初心者

AIを知りたい

LoRAって最近よく聞きますが、何がすごいんですか?

AIエンジニア

AIエンジニア

LoRAは「Low-Rank Adaptation」の略で、モデル全体の重みを変えるのではなく、小さな追加パラメータだけを学習する手法だよ。例えば70億パラメータのモデルに対して、追加するのはわずか数百万パラメータ。必要なメモリが元の10分の1以下で済むから、個人のGPUでもLLMのファインチューニングが可能になったんだ。Stable Diffusionのカスタマイズでも広く使われているよ。

分野別の転移学習活用例

転移学習はAIのあらゆる分野で活用されています。2026年の実践的な事例を見てみましょう。

分野 事前学習モデル 転移先の具体例 必要なデータ量
画像認識 ResNet / EfficientNet(ImageNet) 医療画像診断、製品検品 500〜5,000枚
自然言語処理 BERT / RoBERTa 感情分析、文書分類 1,000〜10,000件
大規模言語モデル Llama 3 / Mistral 社内チャットボット、専門QA 500〜5,000件
音声認識 Whisper 方言認識、専門用語対応 数時間の音声データ
画像生成 Stable Diffusion 特定画風・キャラクターの生成 20〜100枚(LoRA)

AI初心者

AIを知りたい

画像生成のLoRAは20枚からでもできるんですね!転移学習を使わない手はないですね。

AIエンジニア

AIエンジニア

まさにその通り。転移学習は「AIの民主化」を支える最も重要な技術の1つだよ。Hugging Faceには50万以上の事前学習済みモデルが公開されていて、誰でも無料でダウンロードして使えるんだ。まずはHugging Faceで自分のタスクに近いモデルを探して、少量のデータでファインチューニングしてみよう。驚くほど簡単に高精度なAIが作れるはずだよ。

AI初心者

AIを知りたい

Hugging Faceをチェックしてみます。転移学習なら自分でもAIが作れそうです!

Keras VGG16で転移学習を実装する

ImageNetで学習済みのVGG16から特徴抽出層を流用し、独自の分類タスク(犬vs猫)に転移学習する実装例です。畳み込み層の重みを固定して上位の全結合層だけを学習します。

import tensorflow as tf
from tensorflow.keras.applications import VGG16
from tensorflow.keras import layers, Model
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 1. ImageNet学習済みVGG16を読み込み(上位の全結合層は除外)
base_model = VGG16(
    weights="imagenet",
    include_top=False,          # 分類層を除外
    input_shape=(224, 224, 3),
)

# 2. 畳み込み層の重みを固定(学習しない)
base_model.trainable = False

# 3. 独自の分類ヘッドを追加
x = base_model.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dense(256, activation="relu")(x)
x = layers.Dropout(0.5)(x)
output = layers.Dense(1, activation="sigmoid")(x)  # 2クラス分類

model = Model(inputs=base_model.input, outputs=output)

model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
    loss="binary_crossentropy",
    metrics=["accuracy"],
)

# 学習パラメータの確認
total_params = model.count_params()
trainable_params = sum(
    tf.keras.backend.count_params(w) for w in model.trainable_weights
)
frozen_params = total_params - trainable_params
print(f"全パラメータ数:     {total_params:>12,}")
print(f"学習対象パラメータ: {trainable_params:>12,}")
print(f"固定パラメータ:     {frozen_params:>12,}")
# 全パラメータ数:       14,847,041
# 学習対象パラメータ:      132,353  <- ここだけ学習
# 固定パラメータ:       14,714,688  <- VGG16の重み(固定)

# 4. データの準備と学習
datagen = ImageDataGenerator(
    rescale=1.0 / 255,
    validation_split=0.2,
    horizontal_flip=True,
    rotation_range=15,
)

train_gen = datagen.flow_from_directory(
    "data/dogs_vs_cats",
    target_size=(224, 224),
    batch_size=32,
    class_mode="binary",
    subset="training",
)

val_gen = datagen.flow_from_directory(
    "data/dogs_vs_cats",
    target_size=(224, 224),
    batch_size=32,
    class_mode="binary",
    subset="validation",
)

history = model.fit(
    train_gen,
    epochs=10,
    validation_data=val_gen,
)

転移学習の核心はImageNetで学んだ汎用的な特徴(エッジ・テクスチャ・形状の認識)をそのまま流用し、独自タスクに必要な分類層だけを少量データで学習することです。この例では約1,480万パラメータのうち学習するのはわずか13万(0.9%)で、少ないデータでも高精度を達成できます。さらに精度を上げたい場合は、一度学習した後にbase_modelの一部層をunfreezeして微小な学習率でFine-tuningする二段階戦略が効果的です。