今回は、深層学習でよく用いられる手法の1つである、「転移学習」が何なのかを解説していきます。
個人でモデルを作るときは、必ずと言っていいほど転移学習、もしくはファインチューニングを行うことになると思います。
是非、この機会に転移学習が何を行っているのか、その利点は何なのかを押さえていきましょう。
- 転移学習とは何なのか
- 転移学習のメリット
- 転移学習のデメリット
転移学習とは
転移学習とは「学習済みモデルの出力層付近のみを、再学習する学習方法」です。
ここでは、VGG16モデルを例として、図を中心に説明を進めていきます。
まず、VGG16モデルはこのような構成になっています。
よく見る図に直すと、こういった感じです。
このモデルでの出力層付近とは、青丸で囲ったところを指します。
つまり、この青丸で囲んでいる箇所のパラメータだけを再調整するということです。
逆に言うと、その手前の層までのパラメータは固定するということになります。
これが転移学習の概要です。
では、次の章からは、転移学習の利点や欠点、それが有効である理由などを説明していきます。
転移学習の利点
転移学習の利点は、主に次の2つが挙げられます。
転移学習の利点
- 少ない学習データで、モデルを学習することができる
- 学習時間を大幅に削減できる
一般的に、機械学習、特に深層学習では多くの学習データを必要とします。
「バーニーおじさんのルール」という言葉があるほどです。
機械学習におけるバーニーおじさんのルール(Uncle Bernie’s rule)とは、ニューラルネットワークの重みパラメーターの数に対して、最低限その10倍以上の訓練データ量が必要となる、とする経験則のことである。
https://www.atmarkit.co.jp/ait/articles/2008/12/news015.html
しかし、転移学習を行うことで、通常の何十分の一のデータ数で、モデルを学習させることができるようになります。
これこそが、転移学習の最大の利点となります。
さらに言うと、学習するべきパラメータの数が少ないということは、学習に要する時間も大幅に削減することができる、ということです。
例えば、オリジナルの画像認識モデルを学習させたいと考えているとしましょう。
このとき、仮に自分で持っているデータのみを使って、モデルを1から学習させようとした場合、何万、何十万という数の画像データが必要となる場合があります。
しかし、ImageNetを学習しているモデルを使って転移学習を行うと、数百から数千、場合によっては数十枚程度でモデルを学習させることができる、というわけです。
個人でデータを集める作業はかなり大変なので、数百枚程度で学習できるということは、かなり大きな利点になりますね。
では、次の章では、「なぜ転移学習が有効に作用するのか」を確認していきいます。
転移学習が有効に作用する理由
さきほど確認したように、転移学習では、このように一部の層のみ再学習します。
ということは、出力層の手前までの層は、学習済みモデルのパラメータをそのまま使用するということですね。
転移学習の利点として挙げた、「学習時間の削減」は、上の図の青丸で囲った部分の学習を省略していることが要因です。
では、この省略している部分では、一体どのような特徴を学習していたのでしょうか。
結論から言うと、この部分では、あらゆる分野においての汎用的な特徴を学習していることが判明しています。
例えば、単純な縦の線や横の線、斜めの線などです。
これらは、タスクによらず抽出される特徴となります。
出典:https://cs.nyu.edu/~fergus/papers/zeilerECCV2014.pdf
Layer 1 と Layer 5 の画像を拡大してみましょう。
少しわかりづらいかもしれませんが、Layer 1 では単純な特徴を抽出していることが確認できます。
これだけだと、何かタスクごとに固有な特徴を抽出しているようには見えませんね。
しかし、Layer 5 では、小動物の顔を抽出しているように見えるかと思います。
Layer 5 は出力層に近い層での出力結果であるため、タスクに固有な特徴が抽出されています。
つまり、Layer 5 のようになる前の層、別の言い方をすると、固有な特徴が抽出される前までの層は再利用できるということです。
ザックリ言うと、「どのタスクでも共通な部分はみんなで使いまわして、それぞれの固有な部分だけを各自で学習させようぜ」というわけですね。
以上が、転移学習が有効に作用する理由となります。
転移学習の欠点
ここまで、転移学習の利点を見てきましたが、当然のように欠点もあります。
転移学習の欠点
- 負の転移が発生する可能性がある
負の転移というのは、転移元と転移先の関連性が低いことにより、逆に精度が落ちてしまうことを言います。
あまりにも異なる分野で学習したモデルを転移学習に使うと、共通の特徴がほとんどがないために、学習がうまくいかないことがある、ということですね。
こういった場合は、転移学習を使うのではなく、1から学習した方が高い精度が出ます。
ちなみに、負の転移が発生しているかどうかは、転移学習の有無で精度が上がるかどうかを比べることで確認できます。
負の転移は、致命的な欠点ではないため、「とりあえず転移学習を試してみて、精度が上がらないようであれば、負の転移を疑う」という流れでいいかと思います。
まとめ
今まで見てきたことをまとめます。
転移学習は、「学習済みモデルの、出力層付近のパラメータのみを再学習させる学習方法」でした。
利点と欠点は以下のようになります。
転移学習の利点
- 少ない学習データで、モデルを学習させることが可能
- 学習時間を削減できる
転移学習の欠点
- 負の転移が発生することがある
基本的には、モデルを学習させる際に1から自分で学習させることはありません。
ほとんどの場合で転移学習は有効に作用するので、積極的に転移学習を行いましょう。
余談ですが、転移学習と似た学習方法に、ファインチューニングというものがあります。
後日こちらの記事も書く予定なので、是非同時に確認してみてください。
では、今回はここまでとします。
お疲れさまでした。