generated at
ファインチューニング
モデル側にあらかじめ特定の知識を身に着けさせる「追加学習」のテクニック
ChatGPTの中で使われているLLMのGPT(Generative Pre-trained Transformer)はその名の通り、Pre-trained
つまり事前学習済。
OpenAI社がインターネット上の大量のドキュメントデータをクローリングし、そこから作成したデータセットをあらかじめ事前学習させて提供しているLLM。
このモデルは2022年1月までのインターネット上のデータを学習しており(2023年12月現在)、それより後に新たに生まれたデータはGPTにとって未知のデータということになる。
そこで、既に大量データで学習済のモデルであるGPTを、上述したようなGPTがまだ学習していないデータを追加で学習させ、GPTに新たな知識を追加する処理をファインチューニングと呼んでいます。


なぜこれが必要か?
LLMとはインターネット上に存在するドキュメントデータをクローリングにより大量に収集し、それを学習データとして機械学習にかけたモデル。
つまり、LLMは学習したデータに入っていなかった情報に対する推論はできない。
昨日発売されたばかりの新製品の市場での反応
社内ドキュメントに関する情報など
そこで、公開されている学習済のモデルに、独自のデータを追加で学習させ、新たな知識を蓄えたモデルを作り出す技術。
同じ技術にICL(コンテキスト内学習: In Context Learning)があるが、これには追加でプロンプトで読み込みさせられる情報量に限りが出てしまう。
トークン数の問題
それを解決できるのが、ファインチューニング
プロンプトにデータを含めるのではなく、あらかじめモデル側に追加でデータを覚えさせておくテクニック


ファインチューニングで、何がどう変わるのか?
GPT-3.5の場合、既にある程度最適化されている1750億のパラメータ一部が新たなデータの学習処理によって更新される。


メリットは?
一般にAIモデルにおいて、特定タスクの精度を良くするためには、以下の3つの手法がある
データの学習をもとにいいモデルを作る(事前学習)
できたモデルを調整する(ファインチューニング)
よりよいプロンプトを入力する(プロンプトエンジニアリング)

今までは、3番のプロンプトエンジニアリングしかできなかった。
ここでは、Few-Shot learningいう手法で少量のデータを学習させていた。
大量に学ばせることもできるが、文字数制限(トークン数)やAPIの利用料も増える事態になる。

ここで、ファインチューニングが活躍する
ファインチューニングには次のようなメリットがある。
大量のデータをモデルに追加学習できるので、高精度な結果が出やすい
プロンプトの量が減るため、トークンの節約になる
特定タスクに特化しているので、レスポンスが速くなる


デメリットは?
3つある
データセットの準備が大変
学習データはJSONファイルで用意するが、その形式にしてしっかり学習を行うために、大量に用意する必要がある
>実運用を考えると、学習データに関するドメインナレッジはもとより、データを作る工数は非常に高負荷になるだろうと想像します。つまり、大量のドキュメントから抜け漏れなく、promptとcompletionのセットを高品質に作成することが難しいことが予想できます。
過学習の問題
学習に時間を与えすぎても、精度が下がる
お金がかかる
Gpt3.5のみで1000トークンあたり0.008ドル



アップデート
2023年8月23日に、OpenAIがAPIのアップデートを発表し、GPT-3.5 Turbo モデルがファインチューニングに対応
2023年11月のDevDayでは、GPT-4のファインチューニングを発表 (2023年12月現在はexperimental)


参考資料