- 「ファインチューン用のデータには事前学習用データもミックスすべき」というポストがredditに上がっていました。投稿者はkobold.cppなどの開発にも関わっているkindacognizant (kalomaze)さんです。
投稿の要旨
- 言語モデルのファインチューンは基本的に「加算的」ではなく「破壊的」な側面を持つ最適化プロセスである。
- 他方で、ファインチューンで広く使われている指示応答型データセットは一定の偏りや癖を持っている。
- 特定のプロンプト形式で統一されていたり、
- GPT-4で機械的に合成されたデータを使っていたり、
- (データがマルチターン形式でない限り)ごく狭い範囲のコンテキスト内で予測を行うように変質したりする。
- そのため指示応答型データだけで追加学習させると、しばしばwikitextなどで測定される当惑度(perplexity)が悪化し、モデルの一般性能が低下する。
- そこで、RedPajamaサブセットのような事前学習用データセットをファインチューンデータに混ぜることで、このような問題を回避できる可能性が高まる。
- その比率について検証した研究は見当たらないが、さしあたってファインチューンデータの25%程度含めるのがよい出発点になるのではないか。
雑感
- ファインチューンによる過剰最適化によって、モデルの性能が低下したり以前持っていた知識を忘れたりする事象はよく問題になります。
- 例えば知識学習の文脈では、こちらの研究のように前段階の学習内容を繰り返しながら後続の学習を行う(Replay Buffer)ことで、壊滅的忘却を防ぐケースがあります。
- 単に無関係のテキストを混ぜるだけだとファインチューン精度の低下が心配です。できればファインチューンデータのフォーマットを多様化したり、学習する知識領域を周辺隣接分野に広げたりすることで過剰最適化の防止と学習精度の維持を両立できないかな、と考えています。
- 個人的には、単純な知識学習後のPerplexityやHellaSwagスコアの変化を観察していますが、今のところ性能面の悪影響は見られません(むしろPerplexityが改善したりする)。r=64程度の高めのランクでがっつりファインチューンしていますが、データセットが小さいと影響が出にくいのかもしれません。