LLM への追加学習の判断材料についてまとめてみる

こんにちは。エンジニアの山下です。

今回は Fine Tuning をはじめとする追加学習について書きたいと思います。

背景

LLM の回答精度を改善する手段の1つとして Fine Tuning はあまりにも有名で、単に「学習」と言われた場合に Fine Tuning のことをイメージする方も少なくないのではないでしょうか。

一方で Fine Tuning の実体は世にあまり知られておらず、曖昧な印象だけが先行した状態で使われがちな言葉でもあります。一般的に Fine Tuning という言葉は「モデルに対して行う何らかの追加学習」というほどの意味しか持たず、具体的にどんな効果を期待してどんな学習を行うかを脇に置いて議論が進められがちです。

実際にはモデルに対する追加学習にはいくつかの種類があり、適用する追加学習によって必要な準備はもちろん、期待できる効果も変わります。また、どのモデルにどの追加学習が行えるかはプラットフォームごとに決められており、期待する効果が得られる学習方法を必ずしも選択できるとは限りません。おまけに追加学習はそこそこ手間と費用のかかるプロセスなので、安易に決断してしまうと案件自体が地獄に陥るリスクもあります。

というわけで、今回はこういったリスクを適切に判断する材料となる追加学習についての知識をまとめてみたいと思います。

学習工程の分類

そもそも LLM に対して行う学習の工程は大きく以下の2種類に分けられます。*1

  • 事前学習:Pre-training
    • モデルに基礎知識を与えるための工程
  • 事後学習:Fine Tuning
    • モデルの回答内容や形式を調整するための工程

上記の分類は LLM ベンダー各社がモデルを構築する際に行う学習の工程になっています。ベンダー各社はまずモデルに膨大な量のコーパス(学習用のテキスト)を学習させて基礎知識を与え、その後、モデルをチャット等で利用するのに適した回答を生成するように追加学習を施して調整するという流れで作業します。

上記の分類にも表されている通り、事前学習済みのモデルに対して回答の内容や形式を調整するために施す追加学習が本来の意味の Fine Tuning です。従って、稀に耳にする「専門知識を拡充するために Fine Tuning を行う」といった主張は厳密には用法誤りとなります。

なお、実際にはモデルに専門知識を拡充するための追加学習も存在するのですが、それは Fine Tuning ではなく Pre-training に属する追加学習ということになります。このように追加学習で使用される具体的な手法は上記の大分類のいずれかに属します。

実際の各手法を先の分類にマッピングしたものが以下になります。

  • 事前学習:Pre-training
    • Continued Pre-training (CPT)
  • 事後学習:Fine Tuning
    • Instruction Tuning
    • Alignment

以下、それぞれの具体的な手法について説明します。

Continued Pre-training (CPT)

CPT は日本語では継続事前学習と呼ばれ、文字通り、ベンダー各社が提供するモデルに対して追加の事前学習を行う手法です。その目的はモデルに不足している専門知識を拡充することで、Fine Tuning ではなく Pre-training に属する手法になります。

CPT の多くは自己教師あり学習(正解ラベルのないデータから何らかのアルゴリズムで正解ラベルを自動で生成して学習する手法)になっており、学習用のデータセットは単なるテキストの集合体でよく、人手による正解ラベルの準備等は不要です。なお、後ほど紹介する Fine Tuning に属する追加学習では基本的に正解ラベルの準備が必要なので、この点に限って言えば CPT は少しだけ楽です。

CPT で使用する学習用データセットの実例として、Amazon SageMaker のものを見てみます。その入力形式は JSONL による自然言語の文字列の集合体です。

docs.aws.amazon.com

上記のリンクに掲載されている学習用データセットのサンプルが以下です。

{"text": "AWS stands for Amazon Web Services"}
{"text": "Amazon SageMaker is a fully managed machine learning service"}
{"text": "Amazon Bedrock is a fully managed service for foundation models"}

特に正解ラベル等は指定されておらず、単に自然言語で書かれた文字列が放り込まれているだけであることがわかります。

ここまでの情報だけを見ると CPT が簡単そうに見えるかもしれませんが、実際にはその逆で、以降に示す Fine Tuning 関連の追加学習に比べて CPT は実施のハードルが高いと言われています。CPT で結果を出すには高品質かつ大規模な学習用データセットを準備する必要があり、正解ラベルの準備こそ必要ありませんが、データの整備にかなりの手間がかかるというのがその要因です。

参考までに、以下の Databricks の記事では CPT を行うなら最低 1.5 M トークンのデータを用意すべしと注意書きがされています。

docs.databricks.com

For continued pre-training, Databricks recommends a minimum of 1.5 million tokens to get a higher quality model that learns your custom data.

このレベルの分量のデータを、モデルに拡充したい専門知識を理解し得る人員で精査するというのは結構な手間とコストになります。CPT による専門知識の拡充を決断する場合、この前提条件を呑めるかどうかが1つの鍵となってきそうです。

また、そもそも CPT を利用可能なプラットフォームやモデル自体もかなり少なく、プラットフォームで言えば現時点で利用可能なのは AWS くらいです。さらに AWS ですら CPT が可能なモデルは Llama か Amazon Nova のみとなっており、かなり用途を選びそうな感があります。

CPT の学習環境を自前で構築する前提であれば他のオープンモデルも利用可能ではありますが、当然ながらその構築作業自体にもコストがかかる上に学習コストも相当なものになるので、現実的な選択肢にはなりそうにないかなというのが正直なところです。

Instruction Tuning

Instruction Tuning は出力形式の調整を目的とした追加学習で、日本語では指示学習と呼ばれたりします。プラットフォーム各社のドキュメント等で単に Fine Tuning と書かれている場合、この手法のことを指すことが多いようです。

Instruction Tuning は入力となるプロンプトと期待出力のペアを利用した教師あり学習です。どういう形式での回答が望ましいかのサンプルを用意して教えてあげるようなイメージですね。なお、先にも述べましたが、正解ラベルは自前で用意する必要があります。

こちらも Amazon SageMaker で実際に使用する学習用データセットのサンプルを見てみましょう。なお、以下のドキュメントには単に Fine Tuning と書かれていますが、実際にやっていることは Instruction Tuning になります。

docs.aws.amazon.com

実際のデータセットに使用する JSON フォーマットが以下になります。こちらのフォーマットの JSON を束ねた JSONL が実際のデータセットになります。

{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [{
    "text": "You are a digital assistant with a friendly personality"
  }],
  "messages": [{
    "role": "user",
    "content": [{
      "text": "What is the capital of Mars?"
    }]
  }, {
    "role": "assistant",
    "content": [{
      "text": "Mars does not have a capital. Perhaps it will one day."
    }]
  }]
}

少しわかりづらいですが、systemuser のテキストが入力となるプロンプト、最後の assistant のテキストが期待出力に対応します。データの入力形式がチャットを前提としたものに変わっている点に Pre-training との工程の差が感じられるかと思います。

正解ラベルの準備こそ必要ですが、必要なデータ量は CPT に比べて圧倒的に少なく、実施のハードルは比較的低いです。参考までに OpenAI のドキュメントでは 50 件程度のサンプルから開始するとよいと述べられています。

platform.openai.com

  • The minimum number of examples you can provide for fine-tuning is 10
  • We see improvements from fine-tuning on 50–100 examples, but the right number for you varies greatly and depends on the use case
  • We recommend starting with 50 well-crafted demonstrations and evaluating the results

さらに Instruction Tuning は多くのプラットフォームでサポートされており、AWS・Azure・GCP などの主要なプラットフォームでは基本的に実施可能です。

モデルについても選択の幅は広く、ほとんどのモデルで Instruction Tuning が可能です。ただし、Anthropic の Claude シリーズだけは Instruction Tuning がサポートされていないので注意しましょう。*2

従って、Instruction Tuning に関しては実施のハードルはそれなりに低く、現実的な選択肢になりえます。ただし、その効果はあくまで出力形式の調整に留まるため、あえてやるほどのメリットがあるかが論点になりそうです。

最近の LLM は性能向上により割と出力形式に関する指示に従順に従ってくれる上、必要であれば Structured Output なども利用できるので、あえて追加学習を要するような状況があるかは微妙というのが個人的な印象です。

Alignment

LLM は膨大なデータを使って事前学習されているため大概のことは回答可能ですが、一方で「爆弾の作り方」といった危険な情報については回答しないことが望ましい場合もあります。こういった人間の倫理観や好みに合わせて回答の内容を調整するための追加学習が Alignment です。

Alignment の手法は OpenAI によって提案された RLHF があまりにも有名ですが、現在は RLHF の改良手法である DPO をベースにした手法が主流になりつつあるようです。詳細は割愛しますが、ざっくり述べると RLHF の実施にはあまりにも手間とコストがかかるため、これらを削減できるようにボトルネック部分を改良した手法が DPO になります。

DPO で使用する学習用のデータセットは入力・良い応答・悪い応答の3つ組の集合です。こちらのサイト に掲載されている以下の図が非常にわかりやすいです。

Amazon SageMaker では DPO が利用できるので、例によって実際の学習用データセットの入力形式を見てみましょう。

docs.aws.amazon.com

実際のデータセットに使用する JSON フォーマットが以下です。こちらのフォーマットの JSON を束ねた JSONL が実際のデータセットになります。

{
  "system": [{
    "text": "..."
  }],
  "messages": [{
    "role": "user",
    "content": [{ "text": "..." }]
  }, {
    "role": "assistant",
    "candidates": [{
      "content": [{ "text": "..." }],
      "preferenceLabel": "preferred"
    }, {
      "content": [{ "text": "..." }],
      "preferenceLabel": "non-preferred"
    }]
  }]
}

candidates で良い応答と悪い応答が示されていることがわかります。DPO に取り組む場合はこれらの正解ラベルの準備等が必要になります。

また、Amazon SageMaker では有効な DPO を行うためには最低 1,000 件のデータを準備することが推奨されています。膨大というほどではないですが、それなりの量のデータ整備が要求されるため、実施可否を判断する1つの材料になりそうです。

Alignment のプラットフォームおよびモデルのサポート状況はどうかというと、こちらも CPT と同様にあまり芳しくありません。実施が可能なプラットフォームは AWS くらいで、利用可能なモデルも Llama と Amazon Nova のみです。

人間の倫理観への適合という期待効果自体は魅力的ではありますが、コスト面や環境の充足度合いを考えると実施のハードルは現時点ではかなり高そうというのが率直な印象です。

まとめ

というわけで、今回はモデルへの追加学習の実施判断に関する知識をまとめました。

冒頭でも述べた通り、追加学習については曖昧な印象のみで語られがちな局面が割とあります。この傾向は特に専門家でないお客様とやり取りする際に起こりがちで、お客様を適切な方向に導くためにも追加学習に関する正確な理解が必要になります。この記事の内容がその一助になれば幸いです。

以上です。最後までお読みいただき、ありがとうございました。