ファイン・チューニング (fine-tuning, 精密調整) [ディープラーニング]

1. ファイン・チューニング (fine-tuning, 精密調整) とは [概要]

ファイン・チューニング (fine-tuning, 精密調整)とは,大規模データセットから事前学習したディープニューラルネットワークを初期パラメータとして使用し,事前学習時とは異なる目的タスク向けの別データセットを用いて,効率的に少ない探索コストで転移学習を実施することを言う.

この記事では,コンピュータビジョン分野での(深層)転移学習のうち,「ImageNet事前学習済みCNNに,目的タスクで精密調整を行う」ことについての狙いと,実行手順,転移タスク例の整理を行う.

ファイン・チューニングを利用することで,「毎回目的タスクのデータセットでランダム重み初期から,じっくりスクラッチからの学習を行う」ことを避けられるようになる.精密調整は,事前学習済みCNNを初期解とみなした粗から密への最適化(Coarse-to-Fine Optimization)である.よって,「控えめのSGD学習率」を用い,なおかつ「中程度の規模のデータセット」だけ保持していれば,効率的に目的タスク向けCNNを学習できるメリットがある.

1.1 記事の構成

2節以降は,以下の構成である:

  • 2. 「事前学習→精密調整」の狙い
  • 3. 精密調整 (fine-tuning) の手順詳細
    • 3.1 事前学習:大規模データから汎用的表現を学習.
    • 3.2 精密調整:小さい別データセットに対して,精密に調整.
  • 4. 「精密調整」と管理人は翻訳した理由
  • 5. まとめ

1.2 「事前学習(pre-trainining)→ 精密調整(fine-tuning)」の概要

精密調整 (fine-tuning)
図1 精密調整 fine tuning

ファイン・チューニング(図1)の狙いは,汎用性の高い事前学習済みネットワークから,潜在表現がそう遠くない別タスクへ,有効利用することにある(2節で詳細).その目的のもと,「事前学習(図1-a)→精密調整(図1-b)」の手順で実施できる点にある(3節で詳細).

精密調整では,「大まかな初期解」に相当するImageNet事前学習済みCNNにを,少規模の目標タスク向けデータセットで,更に最適化を行い目標タスクのCNNを手に入れる.高精度なCNNの学習,を各目標タスク向けに(事前学習よりは)少なめの規模のデータセットで,比較的短時間での最適化のみで済ませることができる.

言い換えると,毎回各タスクで「大規模のデータとラベル」を用意したうえでスクラッチからの学習を行う必要がなくなる.これは,各タスクで大規模データセットを用意する必要を無くしているので,データセット作成を省略できることに繋がる.

親記事:転移学習 (Transfer Learning) T.B.D

2. 「事前学習→精密調整」の狙い

事前学習しておいたディープニューラルネットワーク(この記事では物体認識CNN)を,別タスクで精密調整することには,主に以下の2つの表裏一体な狙いがある:

  1. 「汎用性の高い初期表現」の,事前学習による抽出.
  2. 「初期表現を精密調整」で済ませることで,目的タスクでのCNN学習時間を短縮.

さきに大規模なImageNetデータセットから事前学習を行っておき,識別力の高く(discriminative),汎用的な表現を(CNNバックボーンに)うまく獲得出来ていると,あとはそのCNNを精密調整すれば,数時間から数十時間程度のみで,各タスク向けのCNNの学習が済む.

つまり,(当初は)数週間もかかっていた時間コストの高い「ImageNetによるCNNのスクラッチからの学習」を,何度も1から行う時間の無駄を「事前学習→精密調整」により,カットして効率的な深層学習(=ファイン・チューニングのみで済ます)を実施することができる.

また,そのCoarse-to-Fineな学習時間の短い(転移)学習が,様々な下流タスク(3.1節で整理)で実施できるので,ImageNet事前学習済みの物体認識CNN(のバックボーン部分)を,共通の基点(初期解)として転用できるところに,「事前学習→精密調整」の旨みがあるとも言える.

3. ファイン・チューニング (fine-tuning) の 手順詳細

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

ファイン・チューニング(図1)では,2つの手順「1. 事前学習 [図1-a]→ 2. 精密調整 [図1-b]」を通して,汎用的な画像表現を取得済みのImageNet事前学習済みCNN(物体認識)を,その他のタスクデータセットで高精度CNN(物体検出意味的分割)へと,精密に調整する.

理解度をあげるために,物体検出CNN (Faster R-CNNなど)を精密調整する例を考えておきたい(図1).この場合,以下の2段階で「事前学習→精密調整」を実施する:

  1. 事前学習 [図1-a] (3.1節):
    • 物体認識タスクのImageNetを用いて,CNN識別器を教師あり学習 (2.1節)
  2. 精密調整 [図1-b] (3.2節):
    • CNNバックボーン:事前学習済みの重みからスタート → SGDでfine-tune
    • CNNヘッド:重み初期化しておいたランダム初期値から,スクラッチからの学習.

以降,各節で,この2段の処理を,それぞれもう少しだけ詳しくみていきたい.

3.1 事前学習:大規模データから汎用的表現を学習.

関連記事:事前学習(pre-training) T.B.D

事前学習(図1-a)では,別タスクの大規模データセット $\mathcal{D}_{\text{pre}}$ (今の例の場合はImageNetデータセット)を用いて,CNNの教師あり学習を準備として行っておく.これは,次の精密調整(2.2節)を行うための準備である.

例えば,以下の表にあげたような,類似タスク間(データセット間)で, 画像認識向けCNNの精密調整を用いた転移学習が行われる:

事前学習タスク ( $\mathcal{D}_{\text{pre}}$ )精密調整先($\mathcal{D}_{\text{target}}$)
物体認識 (ImageNet)細粒度物体認識 (CUB200, CARS196など)
物体認識 (ImageNet)物体検出 (Pascal VOC 2012, COCOなど)
物体認識 (ImageNet)意味分割 (Pascal VOC 2012, ADE20K , Cityscapse など)

このあとの精密調整では,$\mathcal{D}_{\text{pre}}$ とは別の,ターゲットタスクのデータセット $\mathcal{D}_{\text{target}}$ へと,学習後のCNNの画像表現が,お互い結構近いが期待できるタスク同士で,精密調整(次の3.2節)によって表現の転移が達成であることを仮定する.あまりに遠すぎる表現への転移が必要なターゲットタスクへは,「狭い探索領域のみを対象に,短時間でチューニングを終わらそう」という精密調整の目論見は成立しない.

3.2 精密調整:中規模の別データセットだけで,精密に調整.

事前学習済みのCNNの重みパラメータを,どこからかコピーしてきたのち,精密調整先のタスク(の出力)にあうようなヘッドを,CNNバックボーンの後に結合し,目標タスクむけのCNNにまず改造する (図1-b 左).

この改造済みCNNを,ターゲットタスクのデータセットである$\mathcal{D}_{\text{target}}$ を用いて,SGDで学習する.初期値については,バックボーン部分は,事前学習済みの重み値からスタートし,ヘッド部分はランダム重み初期化で初期パラメータ値を与える.この状態から,新たな「CNNバックボーン+ヘッド」の全体を,少し抑えめの学習率を用いてSGD学習することが,CNNの精密調整の基本形である.

※ ファイン・チューニングは「CNN全体を最適化」とテキスト類ではよく説明される.しかし,もっと正確に言うと,ヘッドの出力層部分だけはスクラッチからの学習に相当しているゆえ,精密調整では「バックボーン部分のみ,fine-tuningしている」とも言える.Kevin Patrick Murphy氏の pml-book Introduction においても,解説部分と Figure 19.2 で「バックボーン部分のみがfine-tuneに相当する」ことが,図示されている.

4. 「精密調整 (fine-tuning)」と翻訳した理由

「深層学習向けのファイン・チューニング」は,中国圏では「微调 (「微調整」の意味)」と翻訳されている.たしかに,音楽の調律などでも,音程の調弦・調律の最終的な高精度調整のことを「fine-tune」と呼ぶし,その意味のfine-tuningは,英文辞書でも「微調整」と出てくる.その他,技術分野でも,最終的な(ファインな)チューニングのことは「微調整」と日本語訳されていることが多い.

しかし,深層学習では,最適化における疎から密への(Coarse-to-Fine)最適化の文脈から「fine-tuning」と呼ぶようになった.したがって「微調整」という日本語訳では,「coarse-to-fineのfineステージに対応している」というニュアンスが伝わりきらない.つまり,ディープラーニングの転移学習では,事前学習がcoarse-tuning(疎探索)に相当し,そのあとで,coarse-tuning済みの初期解から,高精度で精密なfine-tuning(密探索)を,(控えめの学習率ではあるが)学習時間も多めに費やして,やや広いパラメータ空間で解の探索を行う.

また,事前学習後の初期解はそれほど目標タスクの解に近いわけではなく汎用的な初期解である.各下流タスクでは,そこそこ広いパラメータ空間内で,fine-tuningする必要があるので,「微」調整と直訳すると,その「fineステージ 最適化」実体とは感覚的にズレてしまい,「あと少しの両力で,目的タスクでのfine-tuningはすぐ収束まで到達する」ように誤解してしまう人も出てくると思う.

よってfineステージ-tuningが実施する実際の内容と,ニュアンスを一致させたいいみで,管理人は,精密調整(fine-tuning)と翻訳することとした.つまり,fine-tuningは「高度で,な探索」であるゆえに,「精密調整」と翻訳する.

5. まとめ

この記事では,画像認識CNNのファインチューニングについて,概要を整理した.とりわけ,ImageNet事前学習から,画像認識タスク同士で他タスクへ精密調整する手順と,タスク例の整理を行った.精密調整の1ステージにあたる,事前学習については,事前学習の記事にもう少し詳しく書きたい.

また,ResNet定着後はネットワーク全体をスクラッチからの学習することも可能になり,「事前学習→精密調整」のパターンを用いないことも,画像認識界隈だと増えていることには注意されたい (以下記事の,3.2節に詳細):

なお,超巨大モデルである近年のTransformer系大規模モデルでは,パラメータ数が膨大になってきた.ゆえに,これまでの通りの「事前学習→精密調整」で転移学習する方針では,計算コストも多大になり効率が悪い.そこで「より効率的な転移学習」戦略として,アダプター(adapter)を間に接続する方法なども考えられ,とりわけ,Transformer型ネットワークや,V-Lモデル(CLIPなど)向けに,そうした効率的な転移学習手段も研究されている.

関連書籍

References

参照外部リンク