Re Reference AI

技術

転移学習とは

Transfer Learning

あるタスク・ドメインで学習したモデルの知識を、別の関連タスク・ドメインへ再利用する機械学習の手法

機械学習事前学習

ひとことで言うと

あることで学んだ知識を、別の似たことに応用する学習方法。

概要

転移学習とは、あるタスク・ドメインで学習したモデルの知識(パラメータや特徴表現)を、別の関連するタスク・ドメインに再利用する機械学習の手法。 ゼロから学習する場合と比べて、必要なラベル付きデータ量と計算コストを抑えながら、目的タスクでの性能を高められる点が特徴。 画像認識分野ではImageNet等の大規模データセットで事前学習したCNNの畳み込み層を特徴抽出器として流用する手法が古くから使われ、自然言語処理分野ではBERTGPTのように大規模コーパス事前学習したモデルを、ファインチューニングを通じて個別タスクに適応させる形で広く応用されている。 転移元と転移先のタスクが近いほど効果が高く、大きく異なる場合は転移した知識がかえって悪影響を及ぼす負の転移(negative transfer)が起きることもある。

背景

大量のラベル付きデータと計算資源をタスクごとに用意してゼロから学習するのは非効率であり、多くのタスクに共通する低レベルの特徴やパターンを再利用できないかという発想から転移学習が生まれた。 深層学習では、浅い層ほど汎用的な特徴(エッジ・基本的な文法構造等)を、深い層ほどタスク固有の特徴を学習する傾向が知られており、これが転移学習の理論的な裏付けの1つになっている。

歴史

1990年代: 転移学習の概念自体が機械学習分野で提案される。 2012年以降: ImageNetで事前学習したCNNの特徴を他の画像タスクへ転用する手法が画像認識分野で一般化。 2018年: ULMFiTとBERTがNLP分野に事前学習ファインチューニングという転移学習の枠組みを普及させる。 2020年代: LLMの事前学習ファインチューニングLoRA等のPEFT手法として、転移学習はほぼ全てのディープラーニング応用の前提になっている。

アーキテクチャ

事前学習済みモデルの層構造をそのまま、または一部変更して流用する。 下位層(汎用的な特徴を学習した層)を凍結し、上位層やタスク固有の出力層のみを学習し直す「特徴抽出」的アプローチと、事前学習済みの重み全体を初期値として使い、目的タスクのデータで全パラメータを再調整する「ファインチューニング」的アプローチに大別される。

ワークフロー

関連する大規模データセットでモデルを事前学習(またはすでに公開済みの事前学習モデルを取得) → 目的タスクのデータセットを用意 → 層の凍結範囲を決定 → 目的タスクのデータで学習(特徴抽出 or ファインチューニング) → 評価・デプロイ。

コード例

事前学習済みモデルの層を凍結して転移学習

import torch.nn as nn
from torchvision import models

model = models.resnet18(weights="IMAGENET1K_V1")
for param in model.parameters():
    param.requires_grad = False  # 事前学習済みの特徴抽出部分を凍結

model.fc = nn.Linear(model.fc.in_features, num_classes)  # 出力層のみ再学習

利点

  • ゼロから学習する場合と比べ、必要なラベル付きデータ量と学習時間を抑えられる
  • 大規模データで学習した汎用的な特徴表現を、データが少ないタスクにも活用できる
  • 既に公開されている事前学習済みモデルを再利用することで、開発コストを下げられる

欠点

  • 事前学習時のデータ分布と目的タスクのデータ分布が大きく異なる場合、性能が向上しない、または低下することがある(負の転移)
  • どの層を凍結しどの層を再学習するかなど、ハイパーパラメータの調整が必要
  • 事前学習済みモデルのライセンスや学習データの由来には注意を要する場合がある

比較

  • ファインチューニングファインチューニングは転移学習を実現する代表的な具体的手法の1つ
  • LoRALoRAは転移学習(ファインチューニング)をパラメータ効率的に行う手法
  • LLMLLMの事前学習→タスク適応という枠組みは転移学習の典型例
  • 機械学習転移学習は、機械学習モデルが1つのタスクで得た知識を別のタスクへ再利用する手法

関連用語

ファインチューニングLoRALLMBERT機械学習事前学習

よくある質問

転移学習とファインチューニングの違いは?

転移学習は「既存モデルの知識を別タスクへ再利用する」という広い概念。 ファインチューニングは、その転移学習を実現する具体的な手法の1つで、事前学習済みモデルの重みを目的タスクのデータで追加学習することを指す。

負の転移とは?

事前学習元のタスク・ドメインと目的タスクの間に十分な関連性がない場合、転移した知識がかえって目的タスクの学習を妨げてしまう現象。 事前学習データの選定が重要になる。

参考文献

関連Zenn記事