転移学習の注意点
この記事で学ぶこと
今回は転移学習とファインチューニングの違いを説明します。人によっては両方とも同じ意味で使ったりと言うこともありますが、概念として2つの違いを知っておくことは大切です。
そのような知識を持ったうえで、記事や論文などで使われている文脈を読み取るようにしていくと誤解が生まれにくくなると思います。
転移学習とは?
画像データを扱う学習モデルを構築する際によく使われるのが転移学習です。
今日は転移学習を使用する上での注意点について話します。
ResNetなどの有名なモデルは、優秀な学者が研究の成果として生み出したもので、たくさんのGPUを使って長時間にわたり訓練されいます。
おかげで、画像から様々な特徴量を抽出できるようになっており、その特徴量をもとに画像の識別の判断をする仕組みになっています。
そんなモデルをゼロから自分でデザインして訓練するとしたらどれだけの時間を試行錯誤に費やす必要があるでしょうか?
それよりも性能が高いモデルがもつ特徴量を引き出す力を利用したほうが時間の節約になります。
たとえば昆虫の識別に特化したモデルを作りたいとして、特徴量を引き出すためにResNetの畳み込み層をすべて使って最後のほうの識別する部分の層だけあたらしくして訓練する、というのが転移学習になります。
ここ数年では、自分でゼロからモデルを作るよりも転移学習を利用するのが一般的なアプローチになっています。
特徴量をとりだす畳み込み層の部分のパラメータなどは固定しておき、最後の方の層だけをトレーニングします。
ResNetはImageNetの画像データをつかって訓練されているので動物などの識別に優れています。
なので、昆虫の識別に特化するように転移学習をすることはおそらく可能だと思われます。
ファインチューニング
ただし、転移学習が必ずうまくいくとは限りません。
それはもともと扱っていた分野の画像とはかなり異なる世界(ドメイン)を対象にしたい場合です。
この場合、特徴量を取り出す畳み込み層の部分も多少の再訓練を施す必要があるかもしれません。
よくあるやり方は、畳み込み層の部分は学習率(Learning Rate)を小さくしてゆっくりと調整するというものです。
これをファインチューニング(Fine tuning)と呼びます。
つまり、二つの学習率をつかって微調整する層とより急速に学習させる層を同時に訓練していきます。
このやり方だともともとの特徴量を引き出す力を破壊してしまうことなく微調整でき、ことなるドメインにも適応させやすくもあります。
なので、転移学習がうまくいかない時はファインチューニングを試してうまくいくこともあります。
