転移学習とファインチューニング、同じ意味で使われてることもあるけど、違いはあるん?
【疑問】転移学習とファインチューニングはどう違う?事前学習済みモデルと破滅的忘却【G検定】
前提のおさらい。BERTは、大量の文章で先に事前学習しておいて、あとで目的のタスクの少ないデータで調整する。画像でも、ImageNetで学習したモデルを使い回すのが一般的
>>1
分け方としてよく使われるのは、どこまで重みを動かすか
転移学習:事前学習済みモデルの重みは固定(凍結)して、最後に付け足した層だけ学習する
ファインチューニング:付け足した層に加えて、事前学習済みモデルの重みも一緒に少しずつ学習しなおす
>>3
画像で数字にすると、ResNet-50の最後の2048次元の特徴に、10クラス分類の層を付け足す場合
転移学習なら、学習するのはその層の 個だけ。もとのモデルの約2350万個の重みは動かさない
>>4
全部動かしたほうが精度は上がるんやろ?なんで固定するん?
>>5
データが少ないときに全部動かすと、少ないデータに合わせすぎて過学習しやすい
目的のデータが事前学習のデータと似ていてデータが少ないなら固定、似てなかったりデータが多かったりするならファインチューニング、が目安
>>6
ファインチューニングで気をつけなあかんのが破滅的忘却
新しいタスクで学習しなおすと、前に覚えたことを急に大きく忘れてしまう現象。マクロスキーとコーエンの1989年の論文で指摘された
>>7
人間も新しいこと覚えたら古いこと忘れるやん。それと同じちゃうの?
>>8
程度が違う。ニューラルネットは同じ重みを全部のタスクで共有してるから、新しいタスクに合わせて重みを動かすと、前のタスクに大事やった重みまで書きかわる。少し学習しただけで前のタスクの成績が大きく落ちることがある
>>9
対策はいくつかある
学習率を小さくして、重みを動かしすぎない
前のタスクのデータも少し混ぜて一緒に学習する
前のタスクで大事やった重みを動かしにくくする(カークパトリックらの2017年の論文のEWCなど)
重みは固定のまま、小さい部品だけ足して学習する
>>10
最後のやり方は、大規模言語モデルの追加学習でよく使われるLoRAとも同じ発想やな。もとの重みに手をつけないから、もとの能力が残りやすい
管理人のひとこと
- 転移学習は事前学習済みモデルの重みを固定して付け足した層だけ学ぶ。ファインチューニングはもとのモデルの重みも一緒に学習しなおす。
- ResNet-50に10クラスの層を足す転移学習なら、学習するのは20490個だけ。データが少なく似ているなら固定、違うか多いならファインチューニングが目安。
- 破滅的忘却(1989年の論文で指摘)は、新しいタスクで学習すると前のタスクを急に大きく忘れる現象。重みを全タスクで共有しているために起きる。
- 対策は、学習率を小さくする、前のデータを混ぜる、大事な重みを動かしにくくする(EWC)、固定したまま小さい部品を足す、など。