読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】「事前学習してからファインチューニング」って、なんで2段階に分けるん?【AI】

23レスカテゴリ:AI・機械学習
1: 名無しさん

AIの説明で「事前学習したモデルをファインチューニングする」ってよく出てくる
最初から目的の仕事だけ学習させたらええやん。なんで2段階なん

2: 名無しさん

>>1
この流れを広めた代表例が BERT(Devlin ら、2018年に arXiv 公開)
事前学習:正解ラベルのない大量の文章で、言葉の一般的な使われ方を学習する
ファインチューニング:正解ラベルのついた少ないデータで、目的の仕事(文の分類など)に合わせて調整する

3: 名無しさん

>>2
ラベルなしの文章で、どうやって学習するん?正解がないやん

4: 名無しさん

>>3
文章の一部を隠して、隠したところを当てさせる。正解は元の文章にあるから、人がラベルをつけなくていい
論文の例やと my dog is hairy の hairy を隠して my dog is [MASK] にして、hairy を当てさせる
BERT では、単語(を分けたトークン)の15%を選んでこれをやる

5: 名無しさん

>>4
選んだ15%は全部 [MASK] にするん?

6: 名無しさん

>>5
全部ではない。選んだうちの80%を [MASK]、10%をランダムな別の単語、10%はそのまま
ファインチューニングのときの入力には [MASK] が出てこないから、[MASK] だけに慣れさせないための工夫
ランダムな単語に置きかわるのは全体の 、つまり1.5%だけで、論文では悪影響はなさそうと書いてる

7: 名無しさん

事前学習の文章はどれくらいの量なん

8: 名無しさん

>>7
BooksCorpus(8億語)と英語版 Wikipedia(25億語)で、合わせて33億語
1回に256文×512トークンをまとめて、100万回くり返す

33億語のデータを約40周する計算になる(論文も約40エポックと書いてる)

9: 名無しさん

>>8
計算はどれくらいかかったん

10: 名無しさん

>>9
基本モデル(1.1億パラメータ)は16個、大きいモデル(3.4億パラメータ)は64個の TPU チップを使って、それぞれ4日
一方でファインチューニングは、論文の結果はどれも、同じ事前学習モデルから始めれば Cloud TPU 1台で長くても1時間(GPU なら数時間)で再現できる、と書いてる

11: 名無しさん

ファインチューニングでは何を変えるん

12: 名無しさん

>>11
出力のところに層を1つ足して、モデル全体のパラメータを少しずつ動かす(事前学習した部分も固定しない)
論文で勧めてる設定は、学習率 、、 のどれか、2〜4エポック
事前学習の学習率 より小さくして、覚えたことを壊しすぎないように調整する

13: 名無しさん

>>12
全部のパラメータを動かすんなら、最初から目的のデータだけで学習しても同じとこに着くやろ

14: 名無しさん

>>13
目的のデータは少ない。論文の評価に使ったデータには、訓練用が3,600件(MRPC)や2,500件(RTE)しかないものもある
1億を超えるパラメータを、数千件のラベルだけで一から学習するのは無理がある。言葉の使われ方は事前学習で済ませて、ラベル付きデータは仕事の合わせ込みにだけ使う
ただ、この論文自体には「事前学習なしで同じモデルを学習した」場合との直接の比較はない

15: 名無しさん

>>14
じゃあ成績で見るとどうなん

16: 名無しさん

>>15
言語理解の課題をまとめた GLUE(WNLI を除く平均)で、OpenAI GPT より前の最高が74.0、OpenAI GPT が75.1、BERT の大きいモデルが82.1
2,500件しかない RTE でも、61.7から70.1に上がってる

17: 名無しさん

データが少ないなら、モデルは小さいほうが過学習しにくいやろ

18: 名無しさん

>>17
論文はそうならなかったと報告してる。訓練用3,600件の MRPC で、層の数とベクトルの次元を増やすと、正解率が79.8%(3層)から87.8%(24層)に上がった
論文は「十分に事前学習してあれば、ごく小さいタスクでもモデルを大きくするほど大きく改善する」ことを示したのは初めてだ、と書いてる

19: 名無しさん

>>18
ファインチューニングって、毎回うまくいくもんなん

20: 名無しさん

>>19
いかないこともある。大きいモデルは小さいデータでファインチューニングが不安定なことがあって、論文では何回かやり直して、検証用データで一番よかったものを選んでる

21: 名無しさん

>>20
全部のパラメータを動かすのが重いなら、一部だけ動かすやり方もあるんやろ

22: 名無しさん

>>21
ある。LoRA みたいに元の重みは固定して、小さい追加部分だけ学習する方式が後から出てきた
「事前学習で土台を作って、目的に合わせて少しだけ調整する」っていう2段階の考え方は同じ

23: 名無しさん

高くつく事前学習は1回だけやって、安いファインチューニングで仕事ごとに合わせる。分ける意味は費用とデータの量なんやな

管理人のひとこと