手元のデータも計算資源も足りない。それが普通です。すでに賢くなったモデルを土台に使う2つの方法を整理します。
こんにちは、zawato(@zawato7)です!
本記事はディープラーニング入門ロードマップの第17回です。
- 学習済みモデルを土台にするのが標準になった理由
- 転移学習とファインチューニングの違いと使い分け
- データ拡張で学習データを水増しする方法と注意点
ゼロから学習させられる場面はほとんどない
高精度なモデルを一から育てるには、膨大なデータと長時間の計算が必要です。数百万枚規模の画像と、それを何日も回せる計算資源が要ります。実際には用意できるデータが数百枚、使えるのは手持ちのマシンだけという状況の方が普通です。そこで、大規模なデータで学習済みのモデルを土台にする方法が取られます。画像分野ではImageNetの1000分類を学習したモデルがよく使われます。
これが成り立つのは、モデルが内部で獲得した特徴が汎用的だからです。入力層に近い層は輪郭や色の変化といった物体共通の特徴をとらえ、出力層に近づくほど分類対象に特化していきます。土台部分は別のタスクにも流用でき、付け替えが必要なのは出力に近い部分だけです。
転移学習は出力層側だけを学習する
転移学習は、学習済みモデルの本体をそのまま使い、付け替えた出力層側だけを学習させる方法です。1000分類のモデルのままでは、自分が分類したい5種類は判定できません。そこで出力層を新しい分類数に付け替え、その部分だけを手持ちのデータで学習します。それ以外の重みは固定したまま動かしません。更新する重みが少ないため学習は短時間で済み、必要なデータも少なくて足ります。
ファインチューニングは全体を微調整する
ファインチューニングは、学習済みの重みを初期値として、既存の層も含めて学習し直す方法です。通常、重みやフィルタの初期値は乱数で決めますが、ここでは学習済みの値から出発します。特徴をとらえる力を持った状態から始まるため、少ない追加学習で高い精度に届きます。全パラメータを更新する場合もあれば、出力層に近い数層だけの場合もあります。
| 観点 | 転移学習 | ファインチューニング |
|---|---|---|
| 更新する層 | 付け替えた出力層側のみ | 既存の重みも含めて更新 |
| 必要なデータ量 | 少なくてよい | 転移学習より多く必要 |
| 計算コスト | 小さい | 大きい |
| 向いている場面 | データが少ない/元のタスクと近い | データがある程度ある/元のタスクと離れている |
データ不足はデータ拡張で補う
手持ちのデータが足りないときは、既存の画像を加工して水増しするデータ拡張(データオーグメンテーション)が使われます。猫の写真は向きや大きさで無数のバリエーションがあり、すべてを撮るのは現実的ではありません。それを加工で作るのがデータ拡張で、反転・回転・切り抜き・リサイズ・明るさの変更・ノイズの付加などがあります。一部を四角く隠すカットアウト、2枚を合成するミックスアップも代表的です。
注意点は、タスクによって使ってよい加工が変わることです。数字の認識で上下反転を使えば、6と9の区別がつかなくなります。また、元のタスクと新しいタスクがかけ離れていると、学習済みの知識が邪魔をして精度が下がることがあります。これを負の転移と呼びます。元が何を学んだモデルかを見て選ぶ必要があります。
まとめ
- 学習済みモデルの土台部分は汎用的な特徴をとらえているため、別のタスクにも流用できる
- 転移学習は既存の重みを固定して出力層側だけを学習し、ファインチューニングは既存の重みも含めて微調整する
- データが少ないときはデータ拡張で水増しする。かけ離れたタスクのモデルを使うと負の転移が起きる
よくある質問
Q. 転移学習とファインチューニングはどちらを選べばよいですか?
A. データが少なく、元のタスクと解きたいタスクが近いなら転移学習で十分です。データがある程度あり、元のタスクから離れているならファインチューニングが向きます。
Q. 画像以外でも転移学習は使えますか?
A. 使えます。自然言語処理でも、言語能力を学習した大規模モデルに自社のデータを追加学習させる形が一般的で、考え方は画像と同じです。
Q. 負の転移とは何ですか?
A. 学習済みモデルの知識が新しいタスクに合わず、かえって精度が下がる現象です。元のタスクとかけ離れたモデルを選んだときに起きます。



コメント