しんさんのブログ

科学や技術のこと読書のことなど

transfer learning, fine tunning, distillation, NNモデル圧縮について調べてみました

Transfer learning

ある領域で学習したモデルを別の領域の学習に利用する手法のことです。
例えばimage netのような膨大な量の学習データを使用して1000カテゴリ分類の学習を行ったとして、その結果を用いて学習データの少ない10カテゴリ分類の問題を解くという手法です。
具体的には、1000カテゴリ問題を解くネットワークと解きたい問題のネットワークを途中までは同じにして、重みに転移元(ここでは1000カテゴリ分類問題)の学習結果を使用します。
そして、少ないデータを使用して出力層近くの重みのみを学習することで、非常に精度よく10カテゴリ問題のモデルを構築できるという手法。
転移元と転移先の問題が似ていることが転移がうまくいく条件になります。
画像の分類なら、共通する特徴や、それを使用してクラス分類するという問題設定が共通しているので、転移学習が有効に働きます。

Fine tunning

fine tunningとはすでにあるのモデルの一部を再利用して、新しいモデルを構築する手法のことだそうです。 素粒子理論で出てくる超対称性の話とは違います。
転移学習と同じ手法に見えますが、以下のような違いがあります。
転移学習は上の例で書いたように、既存の学習済モデル(出力層以外の部分)を、重みデータは変更せずに特徴量抽出機として利用して、出力層部分のみ学習することで、新しいモデルを構築する手法です。
これに対して、ファインチューニングは既存の学習済モデル(出力層以外の部分)の重みデータを一部再学習して特徴量抽出機として利用するという手法です。
つまり転移学習では転移済み学習モデルは固定しているが、ファインチューニングでは元の学習済み重みをさらに書き換えて、新しいモデルに"詳細にtunningする"手法だといえます。
fine tunningを使用する目的はtransfer learningと同じで、少ない学習データで高い正解率を得るためですが、fine tunningの方がtransfer learningよりも柔軟性があるといえます。

Transfer learningは特徴量抽出機の部分を固定したfine tunningといえるかもしれません。

Distillation

Distillation(蒸留)というのは、上の二つと違いネットワークの構造にかかわる技術です。
Distillationは学習済みの複雑なネットワークと"ほぼ"同等なシンプルなネットワークを新たに学習する手法です。
なぜそんなことが必要かというと、ディープラーニングは実用上より少ないメモリでより高速に動作する必要があり、そのためには出力は同等のよりシンプルなネットワークを作ることに意味があるからです。
元のネットワークが非常に大規模なアンサンブルモデルの場合、それをシンプルなたった一つのネットワークで表現できるということには実用上大きな意味があります。
具体的には、例えば1000カテゴリ分類する複雑なネットワークの出力に対して、その出力の確率分布をソフトターゲットと呼び、そのソフトターゲットを出力するようなシンプルなネットワークを構築することでdistillationができます。
蒸留について非常にわかりやすく解説してあるサイトです。
Deep Learningにおける知識の蒸留
たとえて言うなら、教師が正解だけでなく問題の解き方までかみ砕いて教えることで、生徒は少ない学習量で効率よく問題に正解できるようになるということですね。

NNモデル圧縮の二つの手法

パラメータの多いモデルから、パラメータが少なく計算量の少ないモデルに抽出する手段。

よく使われるのがDistillation

Distillationは元の大きなモデルの出力を教師データにしてより小さいモデルを学習する手法のこと。

Pruningもよく使用される

Pruningはノードそのものや重みを削除してしまうことで全体のパラメータ数を削減する手法。