転移学習 (transfer learning) [深層学習・CNNむけ]

1. 転移学習 (transfer learning) とは [概要]

転移学習 (transfer learning)とは,事前学習済みの予測モデルを,下流タスク用のデータセットで再度学習して調整することにより,ひかえめの最適化コストで転用できるように,予測モデルの知識を流用して利用する学習方式である.もう少し定義的に述べると,入力はともに同一ドメイン同士であるが異なる2タスク間 (ソース – ターゲット間)で,ソースタスクで事前学習した知識(予測モデルの変換表現)を,ターゲットタスクへと効率的に転用する技術である.

この記事では「深層学習(特にビジョンの画像認識CNNむけ)の転移学習」について説明する.また,転移学習の中でも,(入力ドメインには変化がなく),ソース・タスク間でラベルが変化する「帰納的(Inductive)転移学習」を中心に紹介する.

※ 「Transductive転移学習」に分類されるドメイン変換 (入力画像のドメインが変化する)については,別記事で取り上げる予定.

まず「転移学習を構成する2フェーズ」の全体的な処理と動機を確認したのち(2節),2フェーズの処理の概要を述べる(3節).事前学習およびファイン・チューニングの,詳細やバリエーションについては,対応する各子記事を参照のこと:

子記事:事前学習 (T.B.D.)

画像認識向けのディープラーニングブームの初期では,転移学習がよく行われるようになった.毎回個別のタスク向けに,スクラッチからの学習を行っているようでは,データセット用意のコストが高く,実験効率も悪かったからある(2.1節).特に,ファイン・チューニングを用いて,下流タスクへの転移学習を行うことが多い(3.2.2節)

たとえば,コンピュータビジョンの画像認識においては,転移学習を活用するようになったおかげで,ImageNet事前学習モデルから各ターゲットタスクに転移学習するようことが標準的になり,ターゲットタスク側では,それほど大規模なデータ+アノテーション数が必要でなくなるメリットが得られた.これは(特に時間効率面での)深層学習の発展を大きく助けたとも言える

1.1 記事の構成

  • 2節 転移学習の処理とその意味
    • 2.1 「2フェーズ構成」での転移学習
    • 2.2 転移学習がなかった頃の,古典的な機械学習
  • 3節 転移学習の各フェーズ
    • 3.1 [フェーズ1] 事前学習

2. 転移学習の処理とその意味

1節冒頭でも書いたように,転移学習とは,ソースタスクで事前学習した知識(予測モデル)を,ターゲットタスクへと効率的に転用する技術である.ここでは,「画像」を入力としたソースタスクから,ターゲットタスクへ2フェーズ構成の処理で転移学習を行う必要性や便利性についておさえたい.非転移学習であればどういった手順(もとい手間)になるかを示したのちに(2.1節),それを転移学習の処理手順と比較することで,転移学習の狙いや利便性を理解できるようにしたい(2.2節).

この2.1節 (transfer learning)と 2.2節 (traditional ML) の比較は [Pan and Yang 2010] の比較図(論文中のFigure 1)以降,よく使われている説明方式である.この記事の2節では,[Pan and Yang 2010] の2者の比較を,この2節で画像認識の例で説明する.

以下2つの「画像を入力して,クラスラベル$y$を予測する」タスクを,ここでは転移学習を行うタスクペアの例として考えたい:

  • ターゲットタスク】詳細物体認識 :
    • 予測モデルを学習したい,転移学習先の目標(ターゲット)タスク
    • 少量の学習データ+ラベル数しか持ち合わせていない(よって転移学習したい)
    • CUB-200の鳥画像を,200クラスに識別.
  • ソースタスク物体認識
    • 転移学習元の(ソース)タスク
    • ターゲットタスクと比べると,豊富に大量のデータ+ラベルが得られている.
    • ImageNetの物体画像を,1000クラスに識別.

(記事を公開した時点で)この記事において,主にとりあげるのは,[Pan and Yang 2010] の分類でいう(Inductive)転移学習が中心である.つまり「ソースターゲット間では,入力(画像)データの画像ドメインは同じであり,変化しない」との仮定がある点に,注意されたい.

「ラベル(タスク)」は変化せず,データセット間で,入力画像が「写真→イラスト」にドメイン変化する場合,「ドメイン適応」を用いて転移学習を行う.

2.1 「2フェーズ構成」での転移学習

転移学習
図1. 転移学習 (transfer learning)

(※画像ドメインが同じドメイン同士の)転移学習では,以下の2フェーズに分けて,ソースCNNの知識を,ターゲットCNNへと効率良く転移させる:

  • フェーズ1 (3.1 節,図1 左側):
  • フェーズ2 (3.2節, 図1 右側):
    • ターゲットタスクのデータセット(CUB-200)を用いて,
      • (オプション 1)事前学習済みCNNで抽出した特徴ベクトルを入力に、別途(小さな)予測モデルを学習する
      • (オプション2) 事前学習済みCNNを初期値に用いて,(ほぼ同じ構造の)ターゲットCNNを,ファイン・チューニングしたターゲットCNNを学習すれば完了.

このとき(深層)転移学習では,2つの予測タスク間の普遍的な共通知識が,存在するという仮定があるゆえに,フェーズ2の学習が「中程度の規模のデータセット + アノテーションで済む」「(初期値からのスタートではないので)学習時間も短めの時間で済む」という利点が出てくる.

(T.B.D)関連記事: 転移学習(事前学習やファイン・チューニング)を深層学習でよく行うのはなぜ?

2.2 転移学習がなかった頃の,古典的な機械学習

転移学習がないときのソース・ターゲット間の分離
図2. 転移学習がないときのソース・ターゲット間の分離

さて,転移学習を行う動機への理解を深めるために,転移学習がなかったときはどうだったかについて考えておき,2.1節と比較しておきたい.

転移学習の技術が登場する以前は,異なるタスク(やドメイン)間で,モデルが学習した知識を再利用すること技術がなかった(図2).

したがって,2.1の例でしめした 物体認識(ソース)と,詳細物体認識(ターゲット)の間では,お互いモデルを再利用して転移することもできなかった.2者は「タスクで取り扱うデータ分布(特徴ベクトル空間)や,予測モデルのCNNの変換具合(表現変換)」が分離独立しているので,物体認識のデータセット+ラベル(= ImageNet)で学習した物体認識モデル(図2)は,物体認識のテスト画像に対してだけ有効であり(図2 左側)、CUB-200の鳥画像分類タスクには転移して活用することはできなかった(図2 右側).

図1と図2を,視覚的に比較していただいてもわかると思うが,「大きなモデルを,毎回各データセットでスクラッチからの学習をする」のはコストがかかることがわかる.また,古典的なCNNは(AlexNetVGGNetの頃) ,収束性も高くないので,ランダム初期化からスクラッチからの学習をすると,大域最適解に到達しづらかった(バッチ正規化残差接続もなかった頃なので).それが,事前学習済みCNNを初期解としてファイン・チューニングできると,短い時間学習時間で済み,収束性も高くなる(=スケールさせやすくなる).つまり,転移学習を利用するのは(大規模な)CNN的に,非常に有利なのである.

※ しかし,CNN構造の軽量化技術や,各種の学習スピードアップ技術の登場により,DL流行初期のころほどは,「スクラッチからの学習」による時間の浪費具合はなくなっている.ResNetなども,短めの学習時間で,各タスクのデータで直接スクラッチから学習できるようになっていることには注意.

3.転移学習の各フェーズ

2.1 節で述べた2つのフェーズについて,もう少し詳細について各節で見ていきたい.

3.1 フェーズ1: 事前学習

子記事:事前学習 [T.B.D]

事前学習には主に,以下の2つの方法が存在する:

  • (1)教師有り事前学習 (ImageNetなどを使用):
    • 深層学習ブーム当初から行われているアプローチ
  • (2)教師無し事前学習
    • アノテーションには頼らず,自己教師有り学習で行う.
    • BETRとGPT-3の登場で,脚光を浴びるようになった
    • ビジョンでも,対照自己教師有り学習(SimCLRなど)の発展で,活用が進んできている
    • V-L事前学習では,当初Transformer+アテンションでよく取組まれてきたが,OpenAI CLIPが登場して以降,CLIPの活用もよく研究されている.

2節でも述べたとおり,事前学習の狙いは「できる限り大量なデータから,転移学習後も汎用性の高いモデル(の表現)を学習しておく」ことにある.

3.2 フェーズ2: 下流タスクへの使用

フェーズ2では,オプション① 「特徴抽出のみに使用」かオプション② ファイン・チューニングのどちらかを実行する.

3.2.1 オプション①:特徴抽出のみに使用

事前学習済みCNNは,特徴ベクトルのEncodingにのみ使用する.そして,その特徴ベクトルをもとに,下流タスクのデータセットで,(小規模モデルの)SVM・ロジスティック回帰などを学習する.

3.2.2のファイン・チューニングと異なるのは,1モデルに統合しないで点ある,事前学習CNNのあとに,別の予測モデルを用意する,2モデル構成が,この「特徴抽出として用いる」パターンである.

線形精査 (linear Probing) :自己教師有り事前学習モデルの性能評価実験

自己教師有り学習の研究が盛んになってきて以降,①のパターンにそって,小規模な線形モデルを学習し,その性能評価を通じて,下流タスクへの転移性能を調査事件するようになった.このことを,俗に線形精査(linear probing)と呼ぶようになった.つまり,自己教師有り学習の研究論文の,特に実験章でこの用語をよく目にする.

3.2.2 オプション②:ファイン・チューニング (精密調整)

ファイン・チューニング (fine-tuning, 精密調整)
図3. ファイン・チューニング (fine-tuning, 精密調整)

事前学習済みネットワークから調整して,目的の下流タスク向けのネットワークを学習することを,ファイン・チューニング(精密調整)と呼ぶ (図).

例えば,目標の下流タスクが物体検出CNN (Faster R-CNNYolo v2SSDなど)である場合,(a) ImageNet事前学習したVGGNetのパラメータを,物体検出CNNのバックボーンにコピーしてきたのち,(b) 物体検出むけのデータセット(VOC 2012, COCOなど)で,SGDにより目標タスクむけの調整(= ファイン・チューニング)を行う.

コンピュータビジョン向けの深層学習では,ファイン・チューニングを利用することで,以下のような恩恵が得られる(と言われてきた):

  • パラメータ初期化した大きなCNNを,ImageNetのようなスクラッチから学習するより,少ない学習時間で,効率的に下流タスク向けCNNも学習できる.
  • 事前学習モデルのデータで得られた表現の汎化性能を,各下流タスクで活かせる.
  • スクラッチから学習しないぶんだけ,「下流タスクのデータセット量」があまり多くなくて済む.つまりは,各下流タスクのアノテーションコストを少なめに抑えることができる.

また,ソース・ターゲットタスク間での「データ量の違い」や「データ類似度」にしたがい,どのくらいのパラメータを再学習した方がよいかが変わってくる .詳しくは,子記事,ファイン・チューニング(精密調整)の3.3節「CNNのファイン・チューニング度合いの決め方」を参考のこと.

4. まとめ

この記事では,「深層学習むけの転移学習」について,教師あり事前学習→ファイン・チューニングを主に用いていた時代についてまとめた(2019年ごろの研究での典型例).

一方で,事前学習が自己教師有り化されている2020年ごろ以降の転移学習については述べていない.その最近の動向については,4.1節で少しだけ触れておきたい.

また,転移学習の1種である、(深層)ドメイン適応やマルチタスク学習についても,現時点のこの記事ではまだ触れていない.しばらくは,「教師有り事前学習→ファイン・チューニング」をメインとした現在の内容のみで、この記事を構成するようにしたい.

4.1 その後の展開

NLP分野だと「(自己教師有り)事前学習を行ったBERTやGPT-3を,各NLPタスクへとファイン・チューニングする」という事が多くなってきた.また,この流れに並行して,コンピュータビジョンやVision-Languageでも(対照)事前学習の研究が活発に行われるようになっていた.

V-L事前学習の新たな決定版として,OpenAIのCLIPが登場し,画像認識タスクへの認識精度がV-L学習した方が高くなる傾向も出てきた.また,コンピュータビジョン向けには,CLIPによりImage-Text事前学習したVision Encoder(ResNetやViTなど)を,各ビジョンタスク向けにファイン・チューニングすることも多くなっている.

関連書籍

References

  • [Zhuang et al., 2020] Fuzhen Zhuang, Zhiyuan Qi, Keyu Duan, Dongbo Xi, Yongchun Zhu, Hengshu Zhu, Hui Xiong, and Qing He. A comprehensive survey on transfer learning. Proc. IEEE, 109(1):43–76, 2020.
  • [Pan and Yang 2010] Pan, Sinno Jialin, and Qiang Yang. “A survey on transfer learning.” IEEE Transactions on knowledge and data engineering 22.10 (2010): 1345-1359.

参照外部リンク