LLMはいかに学習し、応答するか — 大規模言語モデルの学習と推論プロセス

LLMの学習は、膨大なテキストを読み込み、次のトークンをより良く予測するように数十億のパラメータを調整するプロセスであり、推論は、固定されたパラメータを使用して入力の後に続くトークンを一つずつ生成するプロセスです。

前回の記事では、人工知能、機械学習、ディープラーニング、そして生成AIの関係を歴史と分類の観点から見てきました。その分類において、大規模言語モデル、すなわちLLMは、ディープラーニングを基盤としてテキストを生成する生成AIの一種でした。

今回は、分類のさらに内側へ一歩踏み込んでみましょう。

ChatGPTやClaudeのようなサービスに質問を入力すると、数秒で自然な答えが返ってきます。画面だけを見ると、モデルが質問を読み、保存された知識を検索し、人間のように考えて文章を作成しているように見えます。

しかし、内部で起こっていることは、この説明とは少し異なります。LLMは学習段階で言語の統計的パターンをパラメータに圧縮し、推論段階ではそのパラメータと現在の文脈を利用して次のトークンの確率を計算します。一つのトークンが選択されると、そのトークンを再び入力に付加し、同じ計算を繰り返しながら文章を生成します。

この記事で扱う内容は以下の通りです。

  • 生テキストが学習データになる過程
  • トークンとパラメータとは何か、モデルは何を学習するのか
  • 事前学習における順伝播、損失計算、逆伝播の仕組み
  • 教師ありファインチューニングと選好アライメントが必要な理由
  • 推論におけるプリフィル、KVキャッシュ、デコーディングの動作過程
  • 温度、Top-k、Top-pが応答を変える原理
  • 学習、ファインチューニング、RAG、推論の違い

最初に区別すべき二つの段階:学習と推論

LLMを理解する上で最も重要な出発点は、学習と推論を分離することです。

学習はモデルのパラメータを変更するプロセスです。モデルが予測した次のトークンと実際の次のトークンの差を計算し、その誤差が減少する方向に重みを少しずつ修正します。この作業を数多くの文章とバッチにわたって繰り返すことで、モデルは単語の使用方法、文の構造、概念間の関係、そして様々な問題解決パターンを習得します。

推論は学習が完了したモデルを使用するプロセスです。ユーザーのプロンプトが入力されても、一般的な推論中にはモデルのパラメータは変更されません。すでに固定されたパラメータと現在の対話文脈を利用して次のトークンを計算するだけです。

二つのプロセスの違いをまず表にまとめると以下の通りです。

区分 学習 推論
目的 次のトークン予測誤差を減らし能力を形成 入力に合った出力トークンを生成
パラメータ 継続的に更新 一般的に固定
主要入力 大規模学習データと正解トークン ユーザープロンプトと対話文脈
計算方向 順伝播と逆伝播 順伝播中心
並列処理 多くのトークンとバッチを並列処理 プリフィルは並列、生成はトークン別順次処理
コスト特性 一度の学習に莫大な演算と時間が必要 リクエストごとに繰り返されるため、運用規模がコストを決定
結果 チェックポイントまたは完成モデル テキスト、コードなどの生成結果

学習は教科書を作成し、長期間訓練する過程に近く、推論は試験会場で既に学んだ内容を使って解答を作成する過程に近いです。ただし、この比喩にも注意点があります。人間は試験を受けながらも経験を蓄積できますが、一般的なLLMのAPI呼び出しでは、リクエストが終了したからといってモデルの基本パラメータが自動的に学習されるわけではありません。


ステップ1:テキストを集めただけではすぐに学習できるわけではない

LLM学習の最初の段階はデータ準備です。

ウェブ文書、書籍、論文、コード、質疑応答資料、対話データなど、様々なテキストを収集できますが、収集した原文をそのまま学習に投入すると、品質と安全性の問題が生じます。

同じ文書が複数のサイトに複製されている可能性があり、自動生成されたスパム、意味のない文字列、個人情報、著作権問題のある資料、悪性コード、有害コンテンツが混入する可能性があります。特定の言語、地域、視点からのデータが過度に多い場合、モデルの行動にもその偏りが反映されます。

したがって、実際のデータパイプラインでは以下の作業が重要です。

  • 重複または類似文書の除去
  • 文書品質の判別とスパムフィルタリング
  • 個人情報と機密情報の検出
  • 言語とドメインの比率調整
  • 過度に短いまたは破損した文書の除去
  • データソース、使用権限、来歴の記録
  • 学習用、検証用、評価用データの分離

モデル構造が同じでも、学習データの構成と精製方法が異なれば、結果は大きく変わる可能性があります。LLM開発において、データ作業は単なる前処理ではなく、モデルの知識範囲、文体、偏り、安全性を決定する核心的な設計プロセスです。


ステップ2:文章をトークンに分割する

ニューラルネットワークは文章自体を直接計算できません。テキストを数値に変換するために、まずトークン化が必要です。

トークンはモデルがテキストを処理する基本単位です。一つのトークンが常に一つの単語や一文字を意味するわけではありません。頻繁に登場する単語は一つのトークンになることがあり、稀な単語は複数の部分に分割されることがあります。韓国語の助詞や語尾、英語の単語の接頭辞や接尾辞、空白や句読点もトークナイザーの規則に従って異なる単位に分解されます。

例えば、次の文章はモデルとトークナイザーによって複数のトークンに分割されます。

생성형 AI는 문장을 만듭니다.

概念的には、次のような形になることがあります。

[생성, 형, AI, 는, 문장, 을, 만듭니다, .]

実際の分割結果はモデルごとに異なります。重要なのは、各トークンが語彙辞書の整数IDに変換される点です。

[1842, 731, 9274, 118, 5321, 84, 22017, 13]

モデルはこのIDを埋め込みベクトルに変換します。埋め込みは、トークンを数百または数千次元の数値配列で表現したものです。学習が進むと、似た文脈で使用されるトークンは関連する方向の表現を持つようになり、モデルはこのベクトル空間で単語と概念の関係を計算します。

トークン化はコストにも影響を与えます。同じ意味の文章でも、言語や表現方法によってトークン数が異なる場合があり、ほとんどのLLMサービスは入力と出力トークンを基準にコストと使用量を計算します。


ステップ3:次のトークン予測で言語を学習する

多くの自己回帰型LLMの事前学習目標は、驚くほど単純です。

前に出てきたトークンを見て、次のトークンを予測する。

次の文章が学習データにあると仮定してみましょう。

인공지능은 데이터를 통해 패턴을 학습한다.

モデルは一度に次のような複数の予測問題を学習できます。

인공지능은 → 데이터를
인공지능은 데이터를 → 통해
인공지능은 데이터를 통해 → 패턴을
인공지능은 데이터를 통해 패턴을 → 학습한다

正解ラベルを人間が文章ごとに新しく付与しなくても、原文から一文字後ろのトークンを正解として使用できます。これを自己教師あり学習と呼びます。インターネット規模の膨大なテキストを学習データとして活用できた重要な理由です。

だからといって、モデルが単に前の単語と次の単語の頻度だけを覚えているわけではありません。様々な文脈で次のトークンを正確に予測するためには、文法、文体、事実関係、文書構造、コード規則、概念間の関連性を内部表現に反映させる必要があります。

例えば、「大韓民国の首都は」の次にくるトークンを予測するには地理情報を反映させる必要があり、関数の開始部分の次にくるコードを予測するにはプログラミング文法と先行する変数の役割を追跡する必要があります。次のトークン予測という単純な目標から、複数の能力が同時に現れる理由です。


ステップ4:トランスフォーマーが文脈を計算する

トークンIDが埋め込みに変換されると、トランスフォーマー層を通過します。

2017年に提案されたトランスフォーマーの核はアテンションです。アテンションは、現在のトークンを処理する際に、文脈内の他のトークンをどれだけ参照するかを計算します。

次の文章を見てみましょう。

민수는 노트북을 가방에 넣었다. 그것은 새 제품이었다.

「それ」が何を指すのかを判断するには、前に出てきた「ノートパソコン」と「カバン」の関係を調べる必要があります。セルフアテンションは、各トークンからQuery、Key、Valueベクトルを作成し、QueryとKeyの類似度を利用して、どのトークンのValueをどれだけ混ぜるかを計算します。

概念的には以下のようになります。

Attention(Q, K, V) = softmax(QKᵀ / √d) V

複数のアテンションヘッドは、それぞれ異なる関係に注目できます。あるヘッドは文法的な関係を、別のヘッドは遠く離れた単語間の参照や主題の関係を捉えることができます。

各トランスフォーマー層には、アテンションだけでなく、フィードフォワードネットワーク、残差接続、正規化が含まれます。この層を複数回通過することで、トークン表現は単純な単語ベクトルから現在の文脈を反映した表現へと変化します。

最後の出力層は、語彙辞書のすべてのトークンに対してスコアであるロジットを生成します。ソフトマックスを適用すると、次のトークンの確率分布を得ることができます。

서울 0.72
부산 0.08
대한민국 0.05
도시 0.03
기타 토큰 0.12

学習段階では、この分布が実際の正解トークンに高い確率を与えるようにモデルを修正します。


ステップ5:誤りの程度を計算し、パラメータを変更する

モデルが予測した確率と実際の次のトークンとの差を損失と呼びます。次のトークン学習には通常、交差エントロピー損失が使用されます。

正解が「ソウル」なのにモデルが「ソウル」に0.72の確率を与えた場合、比較的損失は小さいです。0.01しか与えなかった場合、損失は大きいです。

損失を計算した後、逆伝播が開始されます。微分の連鎖律を利用して、出力の誤差が各層とパラメータにどれだけ影響を与えたか勾配を計算します。

次に、オプティマイザが勾配を利用してパラメータを少しずつ更新します。

새 파라미터 = 기존 파라미터 - 학습률 × 기울기

実際の学習では、Adam系オプティマイザ、学習率スケジュール、重み減衰、勾配クリッピングなどの手法が併用されます。数式一行は単純ですが、数十億のパラメータと大規模なバッチでこの計算を繰り返すには、多くのGPUまたはAIアクセラレータと分散学習技術が必要です。

学習プロセスは大まかに次のループで繰り返されます。

데이터 배치 준비
→ 순전파
→ 다음 토큰 확률 계산
→ 손실 계산
→ 역전파
→ 파라미터 업데이트
→ 다음 배치

途中でモデルのパラメータとオプティマイザの状態をチェックポイントとして保存します。これは、学習障害が発生した際に復旧したり、特定の時点のモデルを評価したり、その後のファインチューニングの開始点として使用するためです。


事前学習だけでは良い対話型AIにはなりにくい

事前学習を終えたモデルは、言語と知識のパターンを多く知っていますが、ユーザーの指示に安定して従う対話型ツールになったとは言えません。

ウェブ文書の次のトークンをうまく予測する目標と、「質問に正確かつ安全に答える」という目標は同じではないからです。事前学習モデルは、質問の後に別の質問を続けたり、不必要に長い文書を作成したり、有害な要求にもそのまま反応したりする可能性があります。

そのため、事前学習の後にはポストトレーニングが続きます。

教師ありファインチューニング

教師ありファインチューニング、すなわちSFTでは、指示と模範解答のペアを使用します。

사용자: 다음 문장을 세 줄로 요약해줘.
도우미: <좋은 요약 답변>

このデータを学習することで、モデルは単にインターネットの文章を続けるのではなく、ユーザーとアシスタントの役割を区別し、指示形式に合った回答を生成する方法を習得します。

人間の選好を反映するアライメント

正解が一つに決まりにくい質問も多くあります。二つの回答がどちらも事実であっても、一方がより明確で親切である場合があります。

RLHF方式では、人間が複数の回答の選好順位を示し、この選好を予測する報酬モデルを学習した後、言語モデルがより高い報酬を得るように強化学習を適用することができます。

DPOのような方式は、選好された回答と選好されなかった回答のペアを利用して、ポリシーモデルを直接最適化します。実装方法は異なりますが、目標は似ています。モデルが人間が選好する有用性、正直さ、安全性、文体をよりよく遵守するようにすることです。

事前学習がモデルの基盤能力と幅広い知識表現を構築するならば、ポストトレーニングはその能力を対話型製品でどのように表現するかを調整します。


推論ステップ1:プロンプトをトークンに変換し、一括で読み込む

学習を終えたモデルにユーザーが次の質問を送ったと仮定してみましょう。

LLM의 학습과 추론 차이를 두 문장으로 설명해줘.

サーバーはプロンプトをトークン化し、トークンIDをモデルに伝達します。システムプロンプト、以前の対話、検索結果、ツール実行結果がある場合、これらの内容も定められた形式で文脈に含まれます。

モデルが入力プロンプト全体を最初に処理する段階をプリフィルと呼びます。プリフィルでは、入力トークンがトランスフォーマー層を通過し、各位置のKeyとValueベクトルが計算されます。

この結果はKVキャッシュに保存されます。これは、次のトークンを生成するたびに、以前のプロンプト全体のKeyとValueを再計算しないためです。

プリフィルは入力トークンを比較的並列に処理できます。したがって、非常に長い文書を入力すると、最初のトークンが出力されるまでの時間が長くなり、メモリ使用量も増加しますが、すべての入力トークンを必ず一文字ずつ順次生成するわけではありません。


推論ステップ2:次のトークンを一つずつ生成する

プリフィルが完了すると、デコーディングが開始されます。

モデルは現在の文脈に基づいて次のトークンのロジットと確率分布を計算します。デコーダーはその分布から一つのトークンを選択します。

例えば、最初の出力トークン候補は次のようになることがあります。

학습은 0.58
LLM의 0.18
두 0.07
모델 0.05
기타 0.12

「学習は」が選択されると、このトークンを文脈の後ろに付加し、再び次のトークンを計算します。

입력 프롬프트
→ “학습은” 생성
→ “학습은 모델의” 생성
→ “학습은 모델의 파라미터를” 생성
→ 계속 반복

このプロセスを自己回帰生成と呼びます。新しいトークンは、以前に生成されたすべてのトークンに依存するため、出力生成は本質的に順次処理です。

KVキャッシュは、以前のトークンのアテンションKeyとValueを再利用して重複計算を削減します。しかし、出力が長くなるにつれてキャッシュが大きくなり、各段階で参照すべき文脈も増加します。長い文脈と長い回答が遅延時間とメモリ使用量を増加させる理由です。

モデルは、終了トークンを生成するか、設定された最大トークン数に達するか、サービスが指定した中断文字列に遭遇すると生成を終了します。


同じ質問でも回答が異なる理由

モデルは次のトークンを一つだけ出すのではなく、語彙全体に対する確率分布を計算します。どのトークンを選択するかは、デコーディング戦略によって異なります。

貪欲な選択

各ステップで確率が最も高いトークンを選択します。結果は比較的安定していますが、反復的であったり、あまりにもありきたりな文章になることがあります。

温度

温度は確率分布の鋭さを調整します。

  • 低い温度:高い確率のトークンに集中し、結果が安定する
  • 高い温度:低い確率の候補も選択される可能性が高まり、結果が多様になる

温度が高いからといってモデルが賢くなるわけではありません。多様性と予測可能性のバランスを変える設定です。

Top-k

確率が高い上位k個のトークンのみを候補として残し、残りは除外します。

Top-p

確率を高い順に足していき、累積確率pに達するまでの候補のみを使用します。文脈によって候補数が流動的に変わります。

正確なコードや定型的な応答が必要な場合は、低い温度と限定的なデコーディングが有利であり、アイデアの発想や文体変更には、より多様なサンプリングが役立つことがあります。


モデルは推論中に新たに学習するのか

一般的な推論リクエストでは、モデルのパラメータは変更されません。

ユーザーが対話中に「私の名前はミンスだよ」と教えると、モデルは現在の文脈内でその情報を参照できます。しかし、対話が文脈から消えると、基本モデルがミンスというユーザーを永続的に学習したわけではありません。

サービスが対話履歴を別途データベースに保存したり、メモリ機能で再びプロンプトに挿入したり、後で学習データとして検討したりすることは可能です。しかし、これは一度の推論プロセスでパラメータが即座に更新されるのとは異なります。

推論中にモデルが複数の段階の説明を生成するのも同じ原理です。モデルは出力トークンをより多く使用して中間問題を分解することはできますが、その過程で基本パラメータが新たに学習されるわけではありません。


ファインチューニングとRAGはどこに属するのか

LLMアプリケーションでは、学習、ファインチューニング、RAGがしばしば混同されます。

ファインチューニング

ファインチューニングは、既存モデルを特定のデータで追加学習し、パラメータを変更する作業です。全体パラメータを更新することもできますし、LoRAのように小さな追加パラメータのみを学習することもできます。

特定の文体、出力形式、繰り返される業務パターンをモデルの行動に反映させる際に有用です。ただし、最新の事実を頻繁に更新するためのデータベース代わりに使用することは、管理と正確性の側面から非効率的である可能性があります。

RAG

検索拡張生成、すなわちRAGは、質問に関連する文書を検索してプロンプトに挿入し、推論を行う方式です。モデルの基本パラメータは変更しません。

사용자 질문
→ 관련 문서 검색
→ 질문과 문서를 프롬프트로 구성
→ LLM 추론
→ 답변 생성

頻繁に変わる社内文書、製品説明書、ポリシーなど、出所が重要で最新性が必要な知識を提供する際に有用です。

プロンプトエンジニアリング

プロンプトエンジニアリングも推論段階の入力を設計する作業です。役割、指示、例、出力形式を明確にし、モデルが既に持つ能力を望む方向に使用するように支援します。モデルのパラメータを直接変更することはありません。

方法 パラメータ変更 外部文書使用 最適な目的
事前学習 はい 学習データとして使用 基盤となる言語能力と幅広い表現の形成
ファインチューニング はい 追加学習データとして使用 文体、形式、特定の行動パターンの調整
RAG いいえ 推論時に検索して使用 最新の事実、社内知識、根拠の提供
プロンプトエンジニアリング いいえ 入力に直接含めることが可能 指示と出力形式の制御

—

なぜ学習は高価で、推論は運用上の問題となるのか

学習は順伝播だけでなく、逆伝播とオプティマイザの状態計算が必要です。パラメータ、勾配、オプティマイザの状態をメモリに保持する必要があり、大規模なデータバッチを複数のデバイスで処理しなければなりません。

したがって、一度の大規模な事前学習には、莫大な演算量、電力、高速ネットワーク、ストレージデバイスが必要です。

推論は逆伝播を行わないため、一つのリクエストだけを見れば学習よりも軽量です。しかし、サービスでは数多くのユーザーからのリクエストが継続的に発生します。入力長、出力長、同時ユーザー数、応答速度の目標が全体の運用コストを決定します。

推論システムでは以下の指標が重要です。

  • 最初のトークンが出力されるまでの時間
  • その後、1秒あたりに生成されるトークン数
  • 同時に処理できるリクエスト数
  • リクエストあたりのGPUメモリとKVキャッシュ使用量
  • 入力および出力トークンあたりのコスト
  • 応答品質を維持しながら適用できる量子化レベル

小さなモデルを使用したり、パラメータを低い精度で量子化したり、リクエストを動的バッチでまとめたり、KVキャッシュを効率的に管理したりすることで、推論コストを削減できます。逆に、無条件に最大のモデルと最長の文脈を使用すると、品質の向上よりも遅延とコスト増加の方が大きくなる可能性があります。


次のトークン予測だけで、なぜ間違った答えも自然に生成されるのか

LLMは事実の真偽を直接判断するデータベースではなく、文脈に合った次のトークンの確率を計算するモデルです。

学習データにない、あるいは稀な質問、互いに矛盾する情報、最新の出来事、曖昧なプロンプトに遭遇しても、モデルは生成を停止するよりも、それらしいトークンを続けてしまうことがあります。文章が自然であるという事実と、内容が真実であるという事実は同じではありません。

幻覚を減らすには、モデルサイズを大きくするだけでなく、システム設計が重要です。

  • 最新または社内資料をRAGで提供
  • 回答に情報源と根拠を要求
  • 計算と照会は検証可能なツールに任せる
  • 重要な結果はルールと別途検証モデルで確認
  • 知らない場合は知らないと答えるポリシーを適用
  • 評価データで正確性と失敗タイプを繰り返し測定

LLMの学習原理を理解すれば、「モデルはたくさん学んだから常に真実を語るだろう」という期待がなぜ危険なのかが分かります。


全プロセスを一度に繋げてみる

LLMのライフサイクルを単純化すると以下のようになります。

원시 데이터 수집
→ 정제·중복 제거·품질 관리
→ 토큰화
→ 사전 학습
→ 평가와 체크포인트 선택
→ 지도 미세 조정
→ 선호도 정렬과 안전성 조정
→ 배포
→ 프롬프트 입력
→ 프리필과 KV 캐시 생성
→ 토큰별 디코딩
→ 결과 검증과 사용자 응답

学習では、正解トークンとの誤差が逆伝播されてパラメータを変更します。推論では、パラメータを固定したまま、プロンプトとこれまでに生成されたトークンを利用して次のトークンを選択します。

この違いを理解すれば、次の質問にも答えやすくなります。

  • なぜ一度の対話でモデルが永続的に学習されないのか
  • なぜ長いプロンプトは最初の応答時間を長くするのか
  • なぜ長い出力はトークン単位でゆっくり生成されるのか
  • なぜ温度を変えると、同じ質問の回答が変わるのか
  • なぜ最新の知識にはファインチューニングよりもRAGがより適している場合があるのか
  • なぜ自然な文章が必ずしも正確な事実を意味しないのか

LLMは、知識を文章ごとに保存しておいて取り出す検索エンジンでもなく、リクエストごとに自らパラメータを修正するシステムでもありません。

学習段階では、大規模データのパターンをパラメータに圧縮し、推論段階では、そのパラメータと現在の文脈を利用して次のトークンを繰り返し生成します。

この単純な原理を正確に理解することが、LLMの能力と限界を誇張せず、必要な場所に学習、ファインチューニング、RAG、プロンプト設計を適切に配置する出発点となります。


参考文献


Comments

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です