1s.xyz / LLM周辺用語 教科書 12 / 25

第12章. 事前学習・継続事前学習・SFT

この章の目的

この章では、大規模言語モデル(LLM)がどのようにしてその能力を獲得し、特定のタスクやユーザーの意図に沿うように調整されるのか、その学習プロセスにおける主要な段階を理解することを目的とします。特に、モデルの基盤を築く「事前学習」、特定のデータで知識を深める「継続事前学習」、そして人間が望む振る舞いを教え込む「SFT(教師ありファインチューニング)」に焦点を当てます。

この章で覚えるべきこと

  • 事前学習 (Pretraining) の目的と一般的な手法
  • 継続事前学習 (Continued Pretraining) がどのような場合に用いられるか
  • SFT (Supervised Fine-Tuning) がモデルの振る舞いをどう変えるか
  • これらの学習段階がLLMの能力開発においてどのような位置づけにあるか
  • RLHFやDPOといった、より高度なアラインメント手法の概要

導入

大規模言語モデル(LLM)は、まるで魔法のように人間と自然な会話をしたり、複雑なタスクをこなしたりします。しかし、その裏には膨大なデータと計算資源を投じた多段階の学習プロセスが存在します。このプロセスは大きく分けて、広範な知識を獲得する段階、特定の知識を深める段階、そして人間の意図に沿うように振る舞いを調整する段階に分けられます。

本章では、これらの学習段階の中でも特に基盤となる「事前学習 (Pretraining)」、「継続事前学習 (Continued Pretraining)」、そして「教師ありファインチューニング (Supervised Fine-Tuning, SFT)」に焦点を当て、それぞれの役割と目的を明確に理解していきます。これらの概念を理解することは、LLMの能力の源泉を知り、モデルの選択や利用、さらには独自のモデル開発を考える上で不可欠です。

基本概念

LLMの学習プロセスは、一般的に以下の3つの主要なフェーズを経て行われます。

  1. 事前学習 (Pretraining): 広範なテキストデータから一般的な言語知識とパターンを学習するフェーズ。
  2. 継続事前学習 (Continued Pretraining): 特定のドメインや言語のデータを追加で学習し、知識を深めるフェーズ。
  3. 教師ありファインチューニング (Supervised Fine-Tuning, SFT): 人間が望む特定のタスクや対話形式にモデルの振る舞いを調整するフェーズ。

これらのフェーズは、それぞれ異なる目的と手法を持ち、モデルの能力を段階的に向上させます。

事前学習 (Pretraining)

ひとことで言うと: 膨大なテキストデータから、言語の基本的なルールや世界の知識を学ぶ最初の段階。 何のカテゴリか: LLMの基盤モデル構築フェーズ 何に使うのか: あらゆる言語タスクに対応できる汎用的な基盤モデルを生成するため。 代表例: GPT-3, LLaMA, PaLMなどの基盤モデル。 よく混同される用語: ファインチューニング(事前学習はゼロから学習するのに対し、ファインチューニングは既存モデルを調整する) 初心者向け注意点: 事前学習は非常に計算コストが高く、個人や中小企業がゼロから行うのは現実的ではありません。既存の事前学習済みモデルを利用するのが一般的です。

事前学習は、LLMがその知能の基盤を築く最初の、そして最も重要なステップです。この段階では、インターネット上の書籍、記事、ウェブページなど、数兆トークンに及ぶ膨大な量のテキストデータがモデルに与えられます。モデルはこれらのデータから、単語の意味、文法構造、世界の事実、常識、さらには推論能力の萌芽といった、汎用的な言語知識とパターンを学習します。

具体的な学習タスクとしては、自己回帰型(Autoregressive) の学習が主流です。これは、与えられた文脈(前の単語の並び)に基づいて次の単語を予測するというタスクを繰り返すことで行われます。

$$ P(w_t | w_1, ..., w_{t-1}) $$

この式は、「$w_1$から$w_{t-1}$までの単語が与えられたとき、$t$番目の単語$w_t$が出現する確率」を表します。モデルは、この確率を最大化するように学習を進めます。この単純なタスクを繰り返すことで、モデルは言語の複雑な構造と意味を内部的に表現できるようになります。

継続事前学習 (Continued Pretraining)

ひとことで言うと: 特定のドメインや最新のデータで、既存の事前学習済みモデルの知識をさらに深める段階。 何のカテゴリか: LLMの知識拡張フェーズ 何に使うのか: 特定分野の専門知識をモデルに付与したり、最新の情報を学習させたりするため。 代表例: 医療分野特化のMed-PaLM、法律分野特化のLegal-LLMなど。 よく混同される用語: LoRA(LoRAはファインチューニングの一種で、モデル全体を学習する継続事前学習とは異なる) 初心者向け注意点: 継続事前学習も事前学習ほどではないにせよ、それなりの計算資源と大量のドメイン特化データが必要です。

継続事前学習は、すでに事前学習を終えたモデルに対し、追加で特定の種類のデータを学習させるプロセスです。これは、基盤モデルが学習していない新しい情報(例:最新のニュース、特定の専門分野の論文)や、特定の言語・文化圏に特化した知識をモデルに付与したい場合に有効です。

例えば、医療分野のLLMを開発する場合、一般的なテキストデータで事前学習されたモデルに、医学論文や医療ガイドラインなどの専門的なテキストデータを追加で学習させます。これにより、モデルは医療用語や概念、疾患に関する深い知識を獲得し、より正確な医療関連の質問応答や情報生成が可能になります。

技術的には、事前学習と同じ自己回帰型のタスクを、追加データセットに対して実行します。モデルの重みは事前学習時のものを引き継ぎ、そこからさらに学習を進める形になります。

教師ありファインチューニング (Supervised Fine-Tuning, SFT)

ひとことで言うと: 人間が望む特定のタスクや対話形式に、モデルの振る舞いを調整する段階。 何のカテゴリか: LLMの振る舞い調整フェーズ 何に使うのか: 質問応答、要約、翻訳、チャットボットなど、特定のタスクでモデルの性能を向上させるため。 代表例: ChatGPTの基盤モデル(GPT-3.5)に対するSFT、Llama 2 Chatモデル。 よく混同される用語: RAG(RAGは外部知識を参照する仕組みで、モデルの学習とは異なる) 初心者向け注意点: SFTは、モデルの「知識」を増やすというよりは、「使い方」や「振る舞い」を教えることに重点があります。

SFTは、事前学習や継続事前学習で獲得した汎用的な知識を、特定のタスクやユーザーの意図に沿った形で「出力させる」ための重要なステップです。この段階では、人間が作成した高品質な「指示(プロンプト)」と「期待される応答」のペア(Instruction Tuningデータ)を用いて、モデルを学習させます。

例えば、「日本の首都はどこですか?」という質問に対して「東京です。」と答える、あるいは「この文章を要約してください:[文章]」という指示に対して適切な要約を生成するといった、具体的なタスクの例をモデルに大量に示します。モデルはこれらの例から、どのような入力に対してどのような形式で応答すべきかを学習します。

SFTは、モデルがより自然で、有用で、安全な応答を生成するために不可欠です。多くのチャットボットモデルは、このSFTの段階を経て、ユーザーとの対話に適した形に調整されています。

具体例

事前学習の例: LLaMA 2の基盤モデル

Metaが公開したLLaMA 2の基盤モデルは、数兆トークンに及ぶ公開データセット(CommonCrawl, C4, Wikipedia, Books, ArXiv, Stack Exchangeなど)を用いて事前学習されました。この段階で、モデルは英語の文法、世界の一般的な知識、プログラミングコードの構造などを学習し、様々なタスクに対応できる汎用的な能力を獲得しました。このモデルは、特定のタスクに特化しているわけではなく、あくまで「言語を理解し、生成する」ための土台です。

継続事前学習の例: 医療分野特化モデル

ある研究チームが、LLaMA 2の基盤モデルを元に、医療分野に特化したLLMを開発するとします。彼らは、PubMedの論文、医療ガイドライン、電子カルテの匿名化データなど、数百万件の医療関連テキストデータを収集します。このデータをLLaMA 2の基盤モデルに追加で学習させることで、モデルは医療用語のニュアンスを理解し、疾患の症状や治療法に関する深い知識を獲得します。これにより、医療従事者向けの質問応答システムや、患者向けの医療情報提供システムなどに応用できるようになります。

SFTの例: ChatGPTの対話能力

OpenAIのChatGPTは、GPT-3.5という事前学習済みモデルを基盤としています。このGPT-3.5に対して、人間が作成した大量の対話データ(プロンプトとそれに対する望ましい応答のペア)を用いてSFTが施されました。例えば、「こんにちは、元気ですか?」という入力に対して「はい、元気です!何かお手伝いできることはありますか?」と答える、あるいは「[文章]を要約してください」という指示に対して、簡潔で分かりやすい要約を生成するといった振る舞いを学習させます。このSFTにより、ChatGPTは単なるテキスト生成器ではなく、人間と自然に対話できるチャットボットとしての能力を獲得しました。

よく混同される用語との比較

用語 ひとことで言うと 目的 主なデータ 計算コスト 変更される内容
事前学習 (Pretraining) ゼロから言語の知識とパターンを学ぶ 汎用的な基盤モデルの構築 膨大な汎用テキストデータ 非常に高い 基礎的な言語理解、世界知識
継続事前学習 (Continued Pretraining) 既存モデルに特定の知識を追加する 特定ドメインの知識深化、最新情報の学習 特定ドメインのテキストデータ、最新データ 高い 専門知識、最新情報
SFT (Supervised Fine-Tuning) 既存モデルの振る舞いを特定のタスクに調整する 特定タスクでの性能向上、人間が望む応答の生成 プロンプトと応答のペア(Instruction Data) 中程度 応答形式、タスク遂行能力
LoRA ファインチューニングを効率的に行う技術 ファインチューニングの計算コスト削減 SFTと同じ(Instruction Data) 低い SFTと同じ(応答形式、タスク遂行能力)
RAG 外部情報源を参照して回答を生成する仕組み 最新情報や専門知識に基づいた正確な回答 外部データベース、ドキュメント 低い モデルの学習ではない

Mermaid図による学習プロセスの概要

graph TD
    A[広範なテキストデータ] --> B(事前学習 Pretraining)
    B --> C{基盤モデル}
    C --> D[特定ドメイン/最新データ]
    C --> E["Instruction Data (プロンプト/応答ペア)"]

    D --> F(継続事前学習 Continued Pretraining)
    F --> G{ドメイン特化モデル}

    E --> H(SFT Supervised Fine-Tuning)
    H --> I{"チャットボット/タスク特化モデル"}

    G --> H
    I --> J[ユーザー利用]

    subgraph "モデルの知識獲得"
        A
        B
        C
        D
        F
        G
    end

    subgraph "モデルの振る舞い調整"
        E
        H
        I
    end

この図は、事前学習が基盤モデルを形成し、そこから継続事前学習で知識を深めるか、SFTで振る舞いを調整するかの流れを示しています。

実務での位置づけ

LLMを実務で利用する際、これらの学習フェーズはモデルの選択とカスタマイズ戦略に直結します。

  1. 基盤モデルの選定: ほとんどの場合、私たちはすでに事前学習を終えた基盤モデル(例: LLaMA, Mistral, GPT-3.5など)からスタートします。ゼロからの事前学習は、GoogleやOpenAIなどの大規模な組織でなければ現実的ではありません。
  2. ドメイン特化の必要性: もしあなたのアプリケーションが特定の専門分野(医療、法律、金融など)に特化している場合、既存の基盤モデルでは知識が不足している可能性があります。この場合、継続事前学習を検討することで、モデルに専門知識を付与できます。ただし、これには大量のドメイン特化データとそれなりの計算資源が必要です。
  3. タスク特化・対話能力の向上: ほとんどのLLMアプリケーションでは、モデルが特定のタスクを正確に実行したり、ユーザーと自然に対話したりする能力が求められます。この目的のために、SFTが最も一般的で効果的な手法となります。高品質な指示データセットを作成し、モデルをファインチューニングすることで、モデルの振る舞いを大幅に改善できます。LoRAのような効率的なファインチューニング手法と組み合わせることで、比較的少ない計算資源でSFTを行うことが可能です。
  4. アラインメントの重要性: SFTはモデルを「有用」にするための重要なステップですが、さらに「安全」で「正直」で「無害」な応答を生成させるためには、アラインメントと呼ばれるプロセスが必要です。これには、SFTの後に続くRLHF (Reinforcement Learning from Human Feedback) や、よりシンプルなDPO (Direct Preference Optimization) といった手法が用いられます。これらは、人間の好みや倫理観をモデルに学習させることで、望ましくない応答(ハルシネーション、差別的発言など)を減らすことを目的とします。

アラインメント (Alignment)

ひとことで言うと: LLMの振る舞いを、人間の価値観や意図に合致させるプロセス。 何のカテゴリか: LLMの安全性・有用性向上フェーズ 何に使うのか: モデルがハルシネーションを起こしにくく、差別的・有害な内容を生成せず、ユーザーの意図を正確に理解して応答するようにするため。 代表例: ChatGPTの安全対策、Llama 2 Chatモデルの倫理的振る舞い。 よく混同される用語: SFT(SFTはタスク遂行能力向上、アラインメントは倫理的・安全な振る舞い向上) 初心者向け注意点: アラインメントは非常に複雑で、完璧な解決策はまだ見つかっていません。継続的な研究と改善が必要です。

アラインメントは、LLMが単に言語を生成するだけでなく、人間が期待する倫理的・道徳的な基準や、ユーザーの真の意図に沿った形で振る舞うように調整するプロセス全般を指します。SFTもアラインメントの一部と見なせますが、特にRLHFやDPOといった手法は、より高度なアラインメントを実現するために開発されました。

RLHF (Reinforcement Learning from Human Feedback)

ひとことで言うと: 人間の評価を報酬として、強化学習でモデルの振る舞いを改善する手法。 何のカテゴリか: LLMのアラインメント手法 何に使うのか: SFT後のモデルを、より人間の好みに合うように調整するため。 代表例: ChatGPTの初期バージョンで広く採用された手法。 初心者向け注意点: 複雑なパイプラインと大量の人間による評価データが必要で、実装が非常に難しいです。

RLHFは、SFTでファインチューニングされたモデルの出力を、人間が評価し、その評価を報酬シグナルとして強化学習を行うことで、モデルの振る舞いをさらに改善する手法です。具体的には、以下のステップで進められます。

  1. SFTモデルの準備: まず、SFTによって基本的なタスク遂行能力を持つモデルを用意します。
  2. 報酬モデルの学習: SFTモデルが生成した複数の応答に対し、人間が「どちらの応答がより良いか」を評価します。この人間の評価データを用いて、応答の品質を予測する「報酬モデル (Reward Model)」を学習させます。
  3. 強化学習: 報酬モデルからの報酬シグナルを使って、SFTモデルを強化学習します。モデルは、より高い報酬を得られるような応答を生成するように学習します。
graph TD
    A[SFTモデル] --> B{プロンプト}
    B --> C1[応答1]
    B --> C2[応答2]
    C1 --> D[人間による評価]
    C2 --> D[人間による評価]
    D --> E(報酬モデル学習)
    E --> F{報酬モデル}
    F --> G[SFTモデルの強化学習]
    G --> H{RLHFモデル}

    subgraph "RLHFプロセス"
        A
        B
        C1
        C2
        D
        E
        F
        G
        H
    end

このMermaid図は、RLHFの主要なステップとコンポーネントの関係を示しています。SFTモデルが生成した応答を人間が評価し、その評価を元に報酬モデルを学習させ、最終的にSFTモデルを強化学習で改善する流れです。

DPO (Direct Preference Optimization)

ひとことで言うと: 人間の好みデータを使って、より直接的にモデルを最適化するアラインメント手法。 何のカテゴリか: LLMのアラインメント手法 何に使うのか: RLHFよりもシンプルかつ安定的に、モデルを人間の好みにアラインさせるため。 代表例: Mistral-7B-Instruct-v0.2などで採用。 初心者向け注意点: RLHFに比べて実装は容易ですが、高品質な人間の好みデータは依然として重要です。

DPOは、RLHFの複雑さを軽減しつつ、同様のアラインメント効果を目指す比較的新しい手法です。RLHFのように報酬モデルを別途学習させる必要がなく、人間の選好データ(「この応答は良い、この応答は悪い」といったペア)を直接用いて、モデルのポリシーを最適化します。これにより、学習プロセスがより安定し、計算効率も向上します。

$$ \mathcal{L}{DPO}(\pi; \beta) = - \mathbb{E}{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma \left( \beta \log \frac{\pi(y_w|x)}{\pi_{ref}(y_w|x)} - \beta \log \frac{\pi(y_l|x)}{\pi_{ref}(y_l|x)} \right) \right] $$

この式はDPOの損失関数を表します。ここで、$x$はプロンプト、$y_w$は選好された(良い)応答、$y_l$は選好されなかった(悪い)応答です。$\pi$は現在のモデル、$\pi_{ref}$は参照モデル(通常はSFTモデル)、$\beta$はハイパーパラメータです。DPOは、良い応答の確率を上げ、悪い応答の確率を下げるようにモデルを学習させます。

graph TD
    A[プロンプト x] --> B{SFTモデル}
    B --> C1["応答 y_w (良い)"]
    B --> C2["応答 y_l (悪い)"]
    C1 --> D["人間による選好データ (y_w > y_l)"]
    C2 --> D["人間による選好データ (y_w > y_l)"]
    D --> E(DPO損失計算)
    E --> F[モデルパラメータ更新]
    F --> G{DPO最適化モデル}

    subgraph "DPOプロセス"
        A
        B
        C1
        C2
        D
        E
        F
        G
    end

このMermaid図は、DPOのプロセスを示しています。SFTモデルが生成した応答に対する人間の選好データを直接利用し、損失関数を通じてモデルパラメータを最適化する流れです。

まとめ

3行まとめ

  • 事前学習は、膨大なデータから言語の基礎と世界知識を学ぶ最初のステップで、汎用的な基盤モデルを構築します。
  • 継続事前学習は、既存の基盤モデルに特定のドメイン知識や最新情報を追加で学習させることで、知識を深めます。
  • SFTは、人間が作成した指示と応答のペアを用いて、モデルの振る舞いを特定のタスクや対話形式に調整し、より有用なモデルにします。

混同しやすい用語

  • 事前学習 vs ファインチューニング: 事前学習はゼロから学習、ファインチューニングは既存モデルを調整。
  • 継続事前学習 vs LoRA: 継続事前学習はモデル全体を学習し知識を深める、LoRAはファインチューニングを効率化する技術。
  • SFT vs RAG: SFTはモデルの振る舞いを学習で変える、RAGは外部知識を参照する仕組みで学習ではない。
  • SFT vs RLHF/DPO: SFTはタスク遂行能力向上、RLHF/DPOは人間の価値観にアラインさせるためのより高度な振る舞い調整。

次に読むべき章

  • 第13章: LoRAとPEFT (Parameter-Efficient Fine-Tuning)
  • 第14章: RAG (Retrieval Augmented Generation)
  • 第15章: プロンプトエンジニアリングの基本