ファインチューニング
モデル側にあらかじめ特定の知識を身に着けさせる「追加学習」のテクニック
ChatGPTの中で使われているLLMのGPT(Generative Pre-trained Transformer)はその名の通り、Pre-trained つまり事前学習済。
OpenAI社がインターネット上の大量のドキュメントデータをクローリングし、そこから作成したデータセットをあらかじめ事前学習させて提供しているLLM。
このモデルは2022年1月までのインターネット上のデータを学習しており(2023年12月現在)、それより後に新たに生まれたデータはGPTにとって未知のデータということになる。
そこで、既に大量データで学習済のモデルであるGPTを、上述したようなGPTがまだ学習していないデータを追加で学習させ、GPTに新たな知識を追加する処理をファインチューニングと呼んでいます。
なぜこれが必要か?
LLMとはインターネット上に存在するドキュメントデータをクローリングにより大量に収集し、それを学習データとして機械学習にかけたモデル。
つまり、LLMは学習したデータに入っていなかった情報に対する推論はできない。
昨日発売されたばかりの新製品の市場での反応
社内ドキュメントに関する情報など
そこで、公開されている学習済のモデルに、独自のデータを追加で学習させ、新たな知識を蓄えたモデルを作り出す技術。
トークン数の問題
それを解決できるのが、ファインチューニング
プロンプトにデータを含めるのではなく、あらかじめモデル側に追加でデータを覚えさせておくテクニック
ファインチューニングで、何がどう変わるのか?
GPT-3.5の場合、既にある程度最適化されている1750億のパラメータ一部が新たなデータの学習処理によって更新される。 https://scrapbox.io/files/657f9ac54f4e170023dd4874.png
メリットは?
一般にAIモデルにおいて、特定タスクの精度を良くするためには、以下の3つの手法がある
データの学習をもとにいいモデルを作る(事前学習)
できたモデルを調整する(ファインチューニング)
よりよいプロンプトを入力する(プロンプトエンジニアリング)
今までは、3番のプロンプトエンジニアリングしかできなかった。
ここでは、Few-Shot learningいう手法で少量のデータを学習させていた。 大量に学ばせることもできるが、文字数制限(トークン数)やAPIの利用料も増える事態になる。
ここで、ファインチューニングが活躍する
ファインチューニングには次のようなメリットがある。
大量のデータをモデルに追加学習できるので、高精度な結果が出やすい
プロンプトの量が減るため、トークンの節約になる
特定タスクに特化しているので、レスポンスが速くなる
デメリットは?
3つある
データセットの準備が大変
学習データはJSONファイルで用意するが、その形式にしてしっかり学習を行うために、大量に用意する必要がある
実運用を考えると、学習データに関するドメインナレッジはもとより、データを作る工数は非常に高負荷になるだろうと想像します。つまり、大量のドキュメントから抜け漏れなく、promptとcompletionのセットを高品質に作成することが難しいことが予想できます。
過学習の問題
学習に時間を与えすぎても、精度が下がる
お金がかかる
Gpt3.5のみで1000トークンあたり0.008ドル
https://scrapbox.io/files/657f950bbd4d0400228c8edf.png
アップデート
2023年8月23日に、OpenAIがAPIのアップデートを発表し、GPT-3.5 Turbo モデルがファインチューニングに対応 2023年11月のDevDayでは、GPT-4のファインチューニングを発表 (2023年12月現在はexperimental)
参考資料