転移学習(事前学習済みモデルの活用)

MXNetにおける**転移学習(Transfer Learning)**は、事前学習済みモデル(pre-trained model)を活用して、新しいタスクに少ないデータや少ない学習回数で高い精度を実現する手法です。これは特に画像分類や物体検出、自然言語処理などで効果を発揮します。


1. 転移学習の概要

転移学習は以下の2つの主要なアプローチで構成されます:

  • 特徴抽出(Feature Extraction):事前学習済みモデルの重みを固定(freeze)し、最後の出力層のみを新しいタスク用に置き換えて学習します。

  • ファインチューニング(Fine-tuning):一部またはすべての層の重みを再学習させることで、よりタスクに特化した性能を得る手法です。


2. MXNetでの転移学習の流れ(画像分類を例に)

ステップ1:必要なモジュールのインポート

python
from mxnet import gluon, nd, autograd from mxnet.gluon.model_zoo import vision from mxnet.gluon.data.vision import transforms

ステップ2:事前学習済みモデルの読み込み

python
pretrained_net = vision.resnet18_v2(pretrained=True)

ステップ3:出力層の差し替え

python
finetune_net = vision.resnet18_v2(classes=10) # 新しいクラス数に合わせる finetune_net.features = pretrained_net.features # 事前学習済みの特徴抽出部をコピー finetune_net.output.initialize(init=mx.init.Xavier()) # 新しい出力層の初期化

ステップ4:学習設定(特徴抽出の場合)

python
for param in finetune_net.features.collect_params().values(): param.grad_req = 'null' # 重みを固定

または、ファインチューニングしたい層のgrad_reqのみ 'write' に変更します。

ステップ5:データ前処理とDataLoader

python
transform_fn = transforms.Compose([ transforms.Resize(224), transforms.ToTensor(), transforms.Normalize(0.5, 0.5) ]) train_dataset = gluon.data.vision.datasets.CIFAR10(train=True).transform_first(transform_fn) train_loader = gluon.data.DataLoader(train_dataset, batch_size=32, shuffle=True)

ステップ6:学習ループ

python
trainer = gluon.Trainer(finetune_net.collect_params(), 'sgd', {'learning_rate': 0.001}) loss_fn = gluon.loss.SoftmaxCrossEntropyLoss() for epoch in range(5): for data, label in train_loader: with autograd.record(): output = finetune_net(data) loss = loss_fn(output, label) loss.backward() trainer.step(batch_size=32)

3. 転移学習の利点

  • 学習データが少ない場合でも高精度が期待できる。

  • 学習時間が大幅に短縮される。

  • 汎用的な特徴抽出能力を新しいドメインに活用できる。


4. 対応している事前学習済みモデル

MXNetのmodel_zoo.visionでは、以下のようなモデルが提供されています:

  • ResNet (18, 34, 50, 101)

  • DenseNet

  • MobileNet

  • VGG

  • Inception v3


まとめ

MXNetにおける転移学習は、事前学習済みのモデルを活用して新たなタスクへの適応を効率化する手法です。Gluon APIを使うことで、簡潔かつ柔軟にモデル構成やファインチューニングが可能であり、実運用でも広く使われています。特にリソースが限られるプロジェクトや新規データが少ない場面で非常に有効です。

生成日:2025/05/23