【TensorFlow】転移学習とファインチューニングの関係【CNN】

参考サイト:転移学習とファインチューニング | TensorFlow Core
https://www.tensorflow.org/tutorials/images/transfer_learning

転移学習って?

転移学習というのは
「学習済のモデルを、任意のタスクにカスタマイズしたりすること」
を指します。
CNNでよく使用されている転移学習ですが、簡単にいうと学習済ニューラルネットワークのパラメータを調整して新たなタスクに適応させます。「入力層に近い、畳み込み層はどんな画像分類でも使用できるような汎用的なフィルターになっている」という特性を利用して、そのタスクのみに適応した畳み込み層の後ろ(数は任意)と全結合層のパラメータのみ再学習させることで、学習に必要なデータと時間を大幅に削減させることができます。
この転移学習を日本語サイトで検索するとよく同時に述べられる単語が「ファインチューニング」です。

転移学習とファインチューニング(誤った解釈)

日本語のサイトではこの転移学習とファインチューニングが同時に説明されています。
「転移学習とファインチューニングの違い」といったタイトルや見出しで書かれていることが多いでしょう。

図1 CNN

誤った説明

転移学習・・・全結合層のパラメータを調整
ファインチューニング・・・畳み込み層と全結合層のパラメータの調整

のように日本語のブログには書かれていることが多いです。
弁図にして表すとこのようになります。


図2 誤った弁図

しかし、ここに疑問が生まれます。

転移学習が既存のモデルを再利用する手法であれば、
ファインチューニングも転移学習に含まれるのでは???

ファインチューニングで調整する畳み込み層の数が0に設定すれば、
それは転移学習と同じになるのでは???

少なくとも個人ブログやQiitaではこの疑問を解決するものはありませんでした。

転移学習とファインチューニング (正しいと思われる解釈)

前章の疑問を解決してくれたのが、TensorFlowのドキュメントでした。日本語のブログよりも、信頼性が高いということでこちらの文面を全面的に信用しています。

恐らく正しい転移学習の関係性

TensorFlowのドキュメントを読むとこのような説明がされています。

このノートブックでは、トレーニング済みモデルをカスタマイズする 2 つの方法を試します。

そしてこの文章の後に「特徴量抽出」と「ファインチューニング」が説明されているのです。
つまり、

転移学習特徴量抽出・・・全結合層のパラメータを調整
ファインチューニング・・・畳み込み層と全結合層のパラメータの調整

という関係になるわけです。そしてこの特徴量抽出とファインチューニングは転移学習の1つの手法という関係になるはずです。
整理するとこちらの弁図のような関係になります。

図3 弁図(仮)

しかし、この関係も

ファインチューニングで調整する畳み込み層の数が0に設定すれば、
それは転移学習と同じになるのでは???

という疑問には解決していません。
なので、ここからは個人的な解釈になってしまいますが、このような関係になると予測しました。

図4 弁図(真)

「調整する畳み込み層の数が0のファインチューニング」

「特徴量抽出」
という関係で、ファインチューニングも日本語的な解釈をするのであれば、既存のモデルを特徴量を使用しているということになります。
「畳み込み層のパラメータを調整する特徴量抽出」を特別に「ファインチューニング」と呼んでいるだけであって、ファインチューニングは特徴量抽出に含まれると考えます。

このような理解を持っていると日本語のブログに騙されずに、TensorFlowのドキュメントを読み進めることができます。

この書籍にも、「転移学習」という単語は出てきませんが、特徴量抽出とファインチューニングが並列の関係で記載されています。
 日本語のブログには論文を引用して「既存モデルの全結合層を置き換えるのが転移学習」という、いかにも信用されそうな記事を書いている方もいらっしゃいます。しかし、これは正解な記述でもあり、間違っている記述でもあります。それは先ほどの弁図の関係からもそうでしょう。
 ディープラーニングや機械学習の分野では、このような曖昧な記述、勘違いを招きかねない記述がたくさん存在します。
 なるべく、そのような微妙な記述を見つけブログの記事にしていきたいと思います。
 
 特徴量抽出とファインチューニングについては、こちらの書籍でもTensorFlowのドキュメントと同様の説明がされています。ぜひ参考にしてください。