Andrej Karpathy「Let's build GPT」解説シリーズ 第2動画
はじめに
第1部〜第3部では、GPTの基本的なアーキテクチャをゼロから実装し、データ準備からTransformerの仕組みまでを詳しく学びました。第4部では、実際のGPTアシスタント(ChatGPTのような対話AI)がどのように訓練されているのか、そして私たちがこれらのモデルを効果的に活用するためのプロンプトエンジニアリング手法について解説します。
この記事は、Andrej Karpathy氏の「State of GPT | BRK216HFS」動画の解説です。
GPTアシスタントの訓練は、単純な次トークン予測から始まり、人間の好みに合わせた応答を生成できるまでに進化します。このプロセスを、4つのステップに分けて詳しく見ていきます。
GPTアシスタントの訓練パイプライン
訓練の4ステップ
GPTアシスタントは、以下の4段階を経て作られます:
- Pretraining(事前学習)
- Supervised Finetuning(教師あり微調整)
- Reward Modeling(報酬モデリング)
- Reinforcement Learning(強化学習)
Step 1: Pretraining(事前学習)
データ収集:膨大な規模のテキストデータ
データソース:
- CommonCrawl
- GitHub
- Wikipedia
- その他の高品質テキスト
総データ量: 約5TB
重要な比較:GPT-3 vs LLaMA
- GPT-3(2020): 175Bパラメータ、300Bトークンで学習
- LLaMA(2023): 65Bパラメータ、1.4Tトークンで学習
この比較から分かることは、パラメータ数だけがモデルの性能指標ではないということです。LLaMAは少ないパラメータでもより多くのデータで学習することで、高い性能を実現しています。
トークナイゼーション
# 例:文章をトークンに分割
"The GPT family of models process text ...."
# ↓
["The", " G", "PT", " family", " of", " models", " process", " text", " ...."]
学習コストの現実
LLaMAの学習環境:
- GPU: 2048枚のA100 GPU
- 学習期間: 21日間
- 推定コスト: 約500万ドル
ちなみにA100 GPUは安いものでも1枚150万円ほどします。
Base Modelの特徴と限界
事前学習が完了したbase modelは、まだアシスタントではありません。質問に直接答えたりはせず、単純に「次に来そうな文章を続ける」だけです。
Few-shot promptingの例:
The following is a conversation between a Human and a helpful, honest and harmless AI Assistant.
[Human] こんにちは。
[Assistant] こんにちは!どうしましたか?
[Human] 元気ですか?
[Assistant] はい、元気です。ありがとうございます。
[Human] お名前は?
[Assistant] 私はAIアシスタントです。
[Human]
[Assistant]
このようにプロンプトで「会話の例」を示すことで、なんとかアシスタントのような振る舞いをさせることはできますが、毎回このような長いプロンプトを書くのは非効率的です。
Step 2: Supervised Finetuning(教師あり微調整)
QAデータによる追加学習
Pretrainedモデルを「アシスタント」に変えるため、質問と回答のペアデータで追加学習を行います。
QAデータの例:
Prompt: "Pythonでリストの要素を逆順にする方法を教えて"
Response: "Pythonでリストを逆順にする方法はいくつかあります。
1. reverse()メソッド: my_list.reverse()
2. スライシング: my_list[::-1]
3. reversed()関数: list(reversed(my_list))
最も簡潔なのはスライシングを使う方法です。"
この学習ステップにより、モデルは「質問されたら答える」という基本的なアシスタント行動を学習します。
Step 3: Reward Modeling(報酬モデリング)
人間による評価システムの構築
Supervised Finetuningだけでは、「人間が好む応答」を学習するのに限界があります。そこで、人間の評価を自動化する「報酬モデル」を作ります。
プロセスの詳細
-
複数の応答生成
- 同じプロンプトに対してSFTモデルが複数の異なる応答を生成
-
報酬読み出しトークンの追加
- 各応答の末尾に特別なトークンを追加
- このトークンの位置で「応答の良さ」を予測
-
AIによる品質予測
- 応答ごとに「この応答はどれくらい良いか」を数値で出力
-
人間による順位付け
- 複数の応答に対して人間が順位付け(例:A > B > C)
- これが正解ラベルとなる
-
損失関数の作成
- AIの予測と人間の順位が一致するように学習
- 人間が「A > B > C」と評価したら、AIの予測もその順序になるように調整
報酬モデルの役割
この段階で作られる報酬モデルは、「審判」のような役割を果たします。どんな応答に対しても「人間がどれくらい好むか」をスコアで評価できるようになります。
Step 4: Reinforcement Learning(強化学習)
報酬モデルを使った本格的な学習
最終ステップでは、Step 3で作った報酬モデルを「審判」として使い、AI本体を強化学習で改善します。
プロセスの流れ
- 応答生成: たくさんの質問に対してAIが応答を作成
- スコア化: 報酬モデルがその応答を評価してスコアを付与
- パラメータ更新: 高スコアの応答を出す確率が高くなるようにモデルを更新
Reward ModelingとReinforcement Learningの違い
項目 | Reward Modeling | Reinforcement Learning |
---|---|---|
目的 | 返答の良し悪しを評価するモデルを作る | その評価を使ってAI本体をさらに賢くする |
学習するもの | 報酬モデル(Reward Model) | AI本体(Language Model) |
使うデータ | 人間が順位付けした返答 | Reward Modelがスコアを付けた返答 |
多様性と人間らしさのトレードオフ
強化学習を進めると、重要なトレードオフが生まれます:
- ベースモデル: 高い多様性(エントロピー)、創造的で予想外の出力
- RLHFモデル: 人間が好む応答、安全で一貫性がある出力
使い分けのポイント:
- 多様なアイデアが欲しい時: ベースモデル(例:新しいポケモン名の生成)
- 信頼性や一貫性が欲しい時: RLHFモデル(例:事実確認、専門的な回答)
GPTアシスタントの効果的な活用法
Transformerの生成と人間の思考の違い
人間の思考プロセス
人間が文章を書く時は:
- 内的対話: 「これで良いかな?」と自問自答
- 反省: 書いた内容を見直して修正
- ツール利用: 辞書や参考資料を確認
- 複雑な推論: 段階的に論理を組み立て
LLMの「推論」の現実
一方、LLMは:
- 単純な予測: 次のトークンを予測するだけ
- 均等な計算量: 1トークンごとに同じ計算量
- 1回の前向き計算: 複雑な内的対話は行わない
プロンプト設計の工夫
思考過程の分解
LLMに複雑な推論をさせたい場合は、「思考の過程を分解して書かせる」ことが重要です。
効果的なプロンプトテクニック:
# Step by Step 方式
"以下の問題を段階的に解決してください:
1. まず問題を整理する
2. 必要な情報を特定する
3. 解決方法を考える
4. 結論を述べる
問題:..."
# Chain of Thought 方式
"数学の問題を解く時は、必ず途中の計算過程を示してください。
例:
問題:25 × 17 = ?
解答:25 × 17 = 25 × (10 + 7) = 25 × 10 + 25 × 7 = 250 + 175 = 425
それでは以下の問題を解いてください:..."
複数回サンプリングと自己振り返り
# 複数回生成して最良のものを選択
"この問題について、3つの異なるアプローチで解答し、
最後にどれが最も適切かを評価してください。"
# 自己振り返りを促す
"まず回答を生成し、その後でその回答の正確性と
改善点を評価してください。"
明示的な指示の重要性
LLMの本質的な動機
LLMは「成功したい」のではなく「訓練データを模倣したい」だけです。そのため、プロンプトで明示的に「良い結果」を求めることが重要です。
効果的な指示の例:
❌ 悪い例:
"この質問に答えて"
✅ 良い例:
"あなたは専門家です。正確で信頼できる回答を提供してください。
不確実な場合は、その旨を明記してください。"
注意点: やりすぎは逆効果
❌ やりすぎの例:
"あなたはIQ400の超天才です。完璧な答えを出してください。"
Retrieval Augmented Generation(RAG)
LLMの知識拡張
LLMの「コンテキストウィンドウ」に外部情報を詰め込むことで、モデルの知識や応答品質を大幅に向上させることができます。
RAGの利点
- 最新情報: 学習データにない新しい情報も活用可能
- 専門知識: 特定分野の深い知識を注入
- 事実確認: より信頼性の高い回答生成
- 計算効率: モデル全体を再学習する必要がない
Constraint Prompting(制約付きプロンプト)
出力形式の制御
実用的なアプリケーションでは、LLMの出力を特定のフォーマットに強制する必要があります。
実装例
# JSON形式での出力強制
prompt = """
以下の情報をJSON形式で出力してください。
必ず以下の構造に従ってください:
{
"name": "商品名",
"price": 価格(数値),
"category": "カテゴリ名",
"description": "商品説明"
}
商品情報:iPhone 15 Pro、15万円、スマートフォン
"""
# テンプレート埋め込み方式
template = """
製品レビュー:
製品名:[PRODUCT_NAME]
評価:[RATING]/5
コメント:[COMMENT]
推奨度:[RECOMMENDATION]
"""
# LLMには空欄部分のみを埋めさせる
まとめ
第4部では、GPTアシスタントの訓練パイプラインと効果的な活用法について学びました:
訓練パイプライン
- Pretraining: 大規模データでの基礎学習
- Supervised Finetuning: 質問応答形式での微調整
- Reward Modeling: 人間の好みを学習する審判モデルの構築
- Reinforcement Learning: 報酬モデルを使った性能向上
効果的な活用法
- プロンプトエンジニアリング: 思考過程の分解と明示的指示
- RAG: 外部知識の動的活用
- Constraint Prompting: 出力形式の制御
シリーズの今後
今回は、GPTがChatGPTのようなタスクをこなせるようになるためのプロセスについて学びました。次回からは、より実践的なトピックに進んでいきます:
お楽しみに!
(この記事は研究室インターンで取り組みました:https://kojima-r.github.io/kojima/)