STEP 18:GPTシリーズの理解

🚀 STEP 18: GPTシリーズの理解

Generative Pre-trained Transformer – テキスト生成に革命をもたらしたモデル群

📋 このステップで学ぶこと

  • GPT、GPT-2、GPT-3、GPT-4の進化の歴史
  • Decoder-onlyアーキテクチャとBERTとの違い
  • Autoregressive(自己回帰)生成の仕組み
  • 生成戦略(Temperature、Top-p Sampling)
  • Few-shot Learning(少数例学習)の革新
  • ChatGPTとRLHF(人間フィードバック強化学習)
  • GPT-2を使ったテキスト生成の実装
  • BERTとGPTの使い分け

練習問題: 4問

⚠️ 実行環境について

このステップのコードはGoogle Colabで実行してください。 GPT-2はCPUでも動作しますが、GPUがあるとより高速です。

📜 1. GPTとは何か

GPTは「Generative Pre-trained Transformer」の略で、 テキスト生成に特化した言語モデルです。 OpenAIが開発し、ChatGPTの基盤となった技術です。

1-1. GPTの基本的なアイデア

【GPTの核心アイデア】 GPTは「次の単語を予測する」ことだけを学習したモデルです。 例: 入力: “The cat sat on the” GPT: “mat” を予測(確率85%) この単純なタスクを超大規模に行うことで、 驚くほど賢いモデルが出来上がりました。 【なぜ「次の単語予測」で賢くなるのか?】 次の単語を正しく予測するには: ・文法を理解する必要がある ・単語の意味を理解する必要がある ・文脈を理解する必要がある ・世界知識が必要な場合もある 例: “The capital of France is” 次の単語は “Paris” → フランスの首都を知っている必要がある 例: “Water freezes at 0 degrees” 次の単語は “Celsius” → 科学知識が必要 このように、次の単語予測を完璧にするには、 言語だけでなく世界についての広い知識が必要なのです。 【GPTの名前の意味】 Generative: 生成できる(テキストを作れる) Pre-trained: 事前学習済み(大量のテキストで訓練) Transformer: Transformerアーキテクチャを使用

1-2. GPTシリーズの進化

【GPTシリーズの歴史】 ■ 2018年6月: GPT(初代) パラメータ: 1.17億(117M) 特徴: Transformerを言語モデルに初適用 成果: 多くのNLPタスクで当時最高性能 ■ 2019年2月: GPT-2 パラメータ: 15億(1.5B)← 約13倍に! 特徴: 「危険すぎる」と公開を一時制限 成果: 驚異的な文章生成能力 ニュース記事のような文章を生成 ■ 2020年6月: GPT-3 パラメータ: 1,750億(175B)← 約117倍に! 特徴: Few-shot Learning(数例で学習) 成果: 人間に近い文章生成 訓練なしで多くのタスクをこなす 訓練コスト: 約12億円(推定) ■ 2022年11月: ChatGPT ベース: GPT-3.5 + RLHF 特徴: 対話に特化、人間のフィードバックで調整 影響: AIブームの火付け役 2ヶ月で1億ユーザー突破 ■ 2023年3月: GPT-4 パラメータ: 非公開(推定1.76兆) 特徴: マルチモーダル(画像+テキスト) 成果: 司法試験で上位10%の成績 複雑な推論、長文理解が可能 ■ 2024年5月: GPT-4o 特徴: オムニモーダル(音声+画像+テキスト) 成果: リアルタイム音声対話 GPT-4と同等の知能で2倍高速 【規模の爆発的成長】 GPT → GPT-2 : 約13倍 GPT-2 → GPT-3 : 約117倍 GPT-3 → GPT-4 : 約10倍 わずか5年で1万倍以上の規模に成長!
モデル パラメータ数 公開年 主な特徴
GPT 117M 2018年 Transformerの言語モデルへの適用
GPT-2 1.5B 2019年 Zero-shot学習、高品質な文章生成
GPT-3 175B 2020年 Few-shot Learning、プロンプトでタスク実行
GPT-4 推定1.76T 2023年 マルチモーダル、高度な推論

🏗️ 2. Decoder-onlyアーキテクチャ

GPTはDecoder-onlyアーキテクチャを採用しています。 これはBERTのEncoder-onlyとは対照的なアプローチです。

2-1. BERTとGPTの根本的な違い

【BERTとGPTの比較】 ■ BERT(Encoder-only) 目的: テキストを「理解」する 訓練: マスクされた単語を予測(穴埋め問題) 方向: 双方向(前後の文脈を同時に見る) 例(マスク予測): 入力: “The [MASK] sat on the mat” BERT: “[MASK] = cat” と予測 BERTは「cat」を予測するとき、 左側 “The” と右側 “sat on the mat” の両方を見ます。 ■ GPT(Decoder-only) 目的: テキストを「生成」する 訓練: 次の単語を予測 方向: 単方向(左から右のみ) 例(次単語予測): 入力: “The cat sat on the” GPT: “mat” と予測 GPTは「mat」を予測するとき、 左側 “The cat sat on the” だけを見ます。 右側(未来)は見てはいけません。 【なぜGPTは右側を見ないのか?】 生成時のことを考えてみましょう: “The cat sat on the ___” まだ「___」の部分は存在しません。 存在しないものは見れません。 訓練時も同じ条件にすることで、 訓練と推論の条件を一致させています。

2-2. アーキテクチャの詳細

【GPTの内部構造】 入力テキスト: “The cat sat” ↓ 【1. トークン化 + 埋め込み】 “The” → ベクトル [0.1, 0.2, …] “cat” → ベクトル [0.3, -0.1, …] “sat” → ベクトル [0.5, 0.4, …] ↓ 【2. 位置エンコーディング】 各トークンに位置情報を追加 ↓ 【3. Masked Self-Attention】★重要 各トークンが「自分より前のトークン」だけを見る “The” → “The” だけを見る “cat” → “The”, “cat” を見る “sat” → “The”, “cat”, “sat” を見る ↓ 【4. Feed-Forward Network】 各位置で独立に変換 ↓ 【3-4を12回繰り返す】(GPT-2 Baseの場合) ↓ 【5. 出力層】 最後のトークン位置から次の単語を予測 語彙全体の確率分布を出力: “on”: 0.15 “mat”: 0.08 “the”: 0.07 … 【Masked Self-Attentionの仕組み】 通常のSelf-Attention: 全てのトークン同士が互いを見れる Masked Self-Attention: 未来のトークンを見れないようにマスク アテンションスコアの行列: The cat sat on The [ ✓ ✗ ✗ ✗ ] cat [ ✓ ✓ ✗ ✗ ] sat [ ✓ ✓ ✓ ✗ ] on [ ✓ ✓ ✓ ✓ ] ✓ = 見れる(アテンションを計算) ✗ = 見れない(-∞でマスク)
💡 BERTとGPTの得意分野
  • BERT(双方向): 文分類、質問応答、固有表現認識など「理解」タスク
  • GPT(単方向): 文章生成、対話、要約など「生成」タスク

「理解」にはBERT、「生成」にはGPTと覚えておきましょう。

🎯 3. Autoregressive(自己回帰)生成

GPTはAutoregressive(自己回帰)という方法でテキストを生成します。 これは「1単語ずつ順番に生成する」という意味です。

3-1. 生成プロセスの詳細

【Autoregressive生成の流れ】 開始プロンプト: “Once upon a time” 【ステップ1】 入力: “Once upon a time” GPTが処理 → 次の単語の確率分布を出力 “there”: 25% “in”: 18% “a”: 15% “,”: 12% … サンプリング → “there” を選択 【ステップ2】 入力: “Once upon a time there” ← “there”を追加 GPTが処理 → 次の単語の確率分布を出力 “was”: 45% “lived”: 20% “were”: 10% … サンプリング → “was” を選択 【ステップ3】 入力: “Once upon a time there was” GPTが処理 → 次の単語の確率分布を出力 “a”: 38% “an”: 15% “the”: 12% … サンプリング → “a” を選択 【ステップ4】 入力: “Once upon a time there was a” GPTが処理 → “princess” を選択 …(繰り返し) 【終了条件】 ・特殊トークン <EOS> が生成される ・指定した最大長に達する ・ユーザーが停止する 最終出力: “Once upon a time there was a princess who lived in a beautiful castle by the sea…” 【重要なポイント】 1. 1単語ずつ生成 → 全体を一度に出力するわけではない 2. 生成した単語は次の入力に追加 → 自分の出力を参照して次を生成(自己回帰) 3. 確率からサンプリング → 毎回同じ出力にはならない(温度などで調整可能)

3-2. 生成戦略の種類

「確率分布からどの単語を選ぶか」には複数の戦略があります。 これによって生成されるテキストの特徴が大きく変わります。

【生成戦略の比較】 ■ Greedy Search(貪欲探索) 方法: 常に最も確率が高い単語を選ぶ 例: “The future is” の次 確率: “bright”(30%), “uncertain”(25%), “here”(20%) 選択: “bright”(最大確率) 長所: 決定論的、高速 短所: 単調、同じ文の繰り返しが起きやすい 結果例: “The cat sat on the mat. The cat sat on the mat. The cat sat on the mat.”(同じ文の繰り返し) ■ Temperature Sampling(温度サンプリング) 方法: 温度パラメータで確率分布を調整 温度(T)の効果: T = 0.1(低い): 確率の差が大きくなる → 確信的 T = 1.0(標準): 元の確率分布 T = 2.0(高い): 確率が平坦になる → ランダム 数式: p'(w) = exp(logit(w) / T) / Σ exp(logit(w’) / T) 例(”The future is” の次): 元の確率: “bright”(30%), “uncertain”(25%), “dark”(15%) T=0.3の場合: “bright”(70%), “uncertain”(20%), “dark”(5%) → ほぼ確実に”bright”を選ぶ T=1.5の場合: “bright”(33%), “uncertain”(30%), “dark”(20%) → どれも選ばれる可能性がある ■ Top-k Sampling 方法: 確率上位k個の単語からサンプリング k=50の場合: 上位50単語だけを候補とし、それ以外は除外 長所: 低品質な単語を除外 短所: kの最適値がタスクによって異なる ■ Top-p (Nucleus) Sampling ★推奨 方法: 累積確率がpに達するまでの単語からサンプリング p=0.9の場合: 1. 確率の高い順に並べる 2. 累積確率が90%になるまでの単語を候補とする 3. その候補からサンプリング 例: “bright”(30%) + “uncertain”(25%) + “dark”(15%) + “promising”(12%) + “here”(8%) = 90% → この5単語から選択 長所: 文脈に応じて候補数が動的に変化

3-3. 実用的なパラメータ設定

【用途別の推奨設定】 ■ 事実的な文章を生成したい場合 Temperature: 0.3〜0.5(低め) Top-p: 0.9〜0.95 → 確信度の高い単語を選びやすい → 正確性重視 ■ バランスの取れた文章 Temperature: 0.7 Top-p: 0.9 → 多くの場合でうまく機能 → デフォルトとして推奨 ■ 創造的な文章を生成したい場合 Temperature: 0.9〜1.2(高め) Top-p: 0.95 → 多様な単語が選ばれる → 創造性重視 ■ 対話(ChatGPTなど) Temperature: 0.7 Top-p: 0.9 → バランス重視 【注意点】 Temperature を高くしすぎると(1.5以上)、 意味不明な文章になることがあります。 例(Temperature=2.0): “The future is quantum raspberry cosmic synthesizers dancing through nebulous…” → 文法は合っているが意味不明
💡 生成戦略のまとめ
  • Greedy: 最大確率を選択。決定論的だが単調
  • Temperature: 確率分布を調整。低いと確信的、高いとランダム
  • Top-p: 累積確率がpになる候補から選択。最も実用的

実際にはTemperature + Top-pの組み合わせがよく使われます。

🎓 4. Few-shot Learning

GPT-3の最大の革新はFew-shot Learning(少数例学習)です。 モデルを再訓練せずに、プロンプトに例を含めるだけで新しいタスクができます。

4-1. 従来の方法との比較

【従来の方法: Fine-tuning(ファインチューニング)】 感情分析をしたい場合: 1. 訓練データを用意(数千〜数万例) “Great movie!” → Positive “Terrible film.” → Negative “Amazing story!” → Positive …(1万例) 2. 事前学習済みモデルを用意 3. 訓練データでモデルを再訓練 → 数時間〜数日かかる → GPUが必要 → 訓練コードを書く必要がある 4. 訓練したモデルで予測 【GPT-3の方法: Few-shot Learning】 感情分析をしたい場合: 1. プロンプトに数例を含める(0〜数例) プロンプト: “”” Classify the sentiment: Review: “Great movie!” Sentiment: Positive Review: “Terrible film.” Sentiment: Negative Review: “Amazing story!” Sentiment: Positive Review: “This movie is boring.” Sentiment: “”” 2. GPT-3に送信 3. GPT-3の回答: “Negative” → 訓練なし! → 例を見せるだけ! → 数秒で完了!

4-2. Zero-shot、One-shot、Few-shotの違い

【3つの学習スタイル】 ■ Zero-shot(0例) 例を見せずに、指示だけでタスクを実行 プロンプト: “Translate English to French: ‘Hello, how are you?'” GPT-3の回答: “Bonjour, comment allez-vous?” → 例がなくても翻訳できる! ■ One-shot(1例) 1つの例を見せてからタスクを実行 プロンプト: “”” Translate English to French: English: “Good morning” French: “Bonjour” English: “Hello, how are you?” French: “”” GPT-3の回答: “Bonjour, comment allez-vous?” → 1例でフォーマットを学習 ■ Few-shot(数例) 複数の例を見せてからタスクを実行 プロンプト: “”” Translate English to French: English: “Good morning” French: “Bonjour” English: “Thank you” French: “Merci” English: “Good night” French: “Bonne nuit” English: “Hello, how are you?” French: “”” GPT-3の回答: “Bonjour, comment allez-vous?” → 複数例でより正確に 【性能の比較】 Zero-shot < One-shot < Few-shot < Fine-tuning しかし、GPT-3のFew-shotは多くのタスクで Fine-tuningに匹敵する性能を発揮!
💡 In-Context Learning(文脈内学習)

GPT-3のFew-shot LearningはIn-Context Learningとも呼ばれます。

特徴:

  • モデルのパラメータを更新しない
  • プロンプト(文脈)だけでタスクを学習
  • 訓練データ不要
  • 瞬時にタスク切り替え可能

これはGPT-3の規模(175B)があって初めて可能になった能力です。 小さいモデルでは同じことはできません。

💬 5. ChatGPTとRLHF

ChatGPTは2022年11月に公開され、AIブームの火付け役となりました。 GPT-3.5にRLHF(人間フィードバック強化学習)を適用したモデルです。

5-1. GPT-3の問題点

【GPT-3(RLHF前)の問題点】 ■ 問題1: 質問に直接答えない ユーザー: “富士山の高さは?” GPT-3の回答: “富士山は日本で最も高い山です。 その美しい姿は古くから日本人に愛され、 多くの芸術作品のモチーフとなってきました。 山頂には神社があり、毎年多くの登山者が…” → 回答が冗長、肝心の高さを答えていない ■ 問題2: 有害な内容を生成 差別的、暴力的、誤情報を含む回答を 生成することがあった ■ 問題3: 指示に従わない ユーザー: “3行で要約して” GPT-3: (10行以上の長文を生成) → 指示を無視 ■ 問題4: 対話が不自然 前の会話を忘れる、話題が飛ぶなど

5-2. RLHFの3ステップ

【RLHF(Reinforcement Learning from Human Feedback)】 人間のフィードバックを使ってモデルを改善する手法 【ステップ1: 教師あり微調整(SFT)】 目的: 人間の理想的な回答を学習 1. 人間がプロンプトに対する「理想的な回答」を作成 プロンプト: “富士山の高さは?” 理想的な回答: “富士山の高さは3,776mです。” 2. このデータでGPT-3.5を微調整 → SFT(Supervised Fine-Tuned)モデルが完成 【ステップ2: 報酬モデルの訓練】 目的: 「良い回答」と「悪い回答」を判別するモデルを作成 1. SFTモデルに同じプロンプトで複数の回答を生成させる プロンプト: “富士山の高さは?” 回答A: “富士山の高さは3,776mです。” 回答B: “富士山は高い山です。約3,800mくらいだと思います。” 回答C: “富士山は日本で最も高い山で、古くから…” 2. 人間が回答をランク付け A > B > C(Aが最も良い) 3. このランキングデータで報酬モデルを訓練 良い回答 → 高いスコア(例: 0.9) 悪い回答 → 低いスコア(例: 0.2) 【ステップ3: 強化学習(PPO)】 目的: 報酬モデルを使ってSFTモデルをさらに改善 1. プロンプトを入力 2. モデルが回答を生成 3. 報酬モデルがスコアを付与 4. スコアが高くなるようにモデルを更新 使用アルゴリズム: PPO(Proximal Policy Optimization) 制約: 元のGPT-3.5から大きく逸脱しない (KLダイバージェンス制約) 【結果】 ChatGPT(InstructGPT)の完成! ・質問に簡潔に答える ・有害な内容を大幅に削減 ・指示に忠実に従う ・自然な対話が可能
🎯 RLHFの効果
  • 真実性(TruthfulQA): GPT-3: 58% → ChatGPT: 78%(+20ポイント)
  • 有害な出力: GPT-3: 25% → ChatGPT: 12%(半減)
  • 指示への従順性: GPT-3: 65% → ChatGPT: 89%(+24ポイント)

RLHFにより、モデルの性能が劇的に改善されました。

💻 6. GPT-2での実装

GPT-2を使ってテキスト生成を実装します。 GPT-2はオープンソースで公開されており、ローカルで実行できます。

6-1. 環境構築

※モバイルでは横スクロールできます

# ======================================== # 必要なライブラリのインストール # ======================================== # transformersライブラリをインストール # transformers: GPT-2などの事前学習モデルを使うためのライブラリ !pip install transformers==4.35.0

6-2. モデルとトークナイザーの読み込み

# ======================================== # モデルとトークナイザーの読み込み # ======================================== import torch from transformers import GPT2LMHeadModel, GPT2Tokenizer # デバイスの設定 # cuda: NVIDIA GPU、cpu: CPU device = torch.device(‘cuda’ if torch.cuda.is_available() else ‘cpu’) print(f”Using device: {device}”) # 使用するモデル名 # gpt2: 124M パラメータ(最小) # gpt2-medium: 355M # gpt2-large: 774M # gpt2-xl: 1.5B(最大) model_name = ‘gpt2’ # トークナイザーを読み込み # from_pretrained: 事前学習済みのトークナイザーをダウンロード tokenizer = GPT2Tokenizer.from_pretrained(model_name) # モデルを読み込み # GPT2LMHeadModel: 言語モデル(テキスト生成)用のGPT-2 model = GPT2LMHeadModel.from_pretrained(model_name) # モデルをデバイスに転送 model = model.to(device) # 評価モードに設定 # eval(): Dropoutなどを無効化(推論時は必須) model.eval() # モデル情報を表示 print(f”Model: {model_name}”) total_params = sum(p.numel() for p in model.parameters()) print(f”Parameters: {total_params:,}”)

実行結果:

Using device: cuda Model: gpt2 Parameters: 124,439,808

6-3. 基本的なテキスト生成

# ======================================== # 基本的なテキスト生成 # ======================================== def generate_text(prompt, max_length=100, temperature=0.7, top_p=0.9): “”” テキストを生成する関数 Args: prompt: 開始プロンプト(生成の起点となるテキスト) max_length: 生成する最大トークン数 temperature: 温度パラメータ(高いほどランダム) top_p: Nucleus samplingのパラメータ Returns: 生成されたテキスト “”” # プロンプトをトークン化 # encode: テキスト → トークンIDのリスト # return_tensors=’pt’: PyTorchテンソルで返す input_ids = tokenizer.encode(prompt, return_tensors=’pt’) # デバイスに転送 input_ids = input_ids.to(device) # テキスト生成 # torch.no_grad(): 勾配計算を無効化(メモリ節約・高速化) with torch.no_grad(): output = model.generate( input_ids, max_length=max_length, # 最大長 temperature=temperature, # 温度 top_p=top_p, # Top-p sampling do_sample=True, # サンプリングを有効化 pad_token_id=tokenizer.eos_token_id # パディングトークン ) # トークンIDをテキストにデコード # skip_special_tokens=True: 特殊トークンを除外 generated_text = tokenizer.decode(output[0], skip_special_tokens=True) return generated_text # テスト prompt = “Once upon a time, there was a” print(f”Prompt: {prompt}”) print(“=” * 50) generated = generate_text(prompt, max_length=100) print(“Generated text:”) print(generated)

実行結果(例):

Prompt: Once upon a time, there was a ================================================== Generated text: Once upon a time, there was a young boy who lived in a small village by the sea. He loved to explore the forest and dream about adventures in faraway lands. One day, he discovered an old map hidden in his grandfather’s attic…

6-4. 温度パラメータの影響を確認

# ======================================== # 温度パラメータの影響を確認 # ======================================== prompt = “The future of artificial intelligence is” print(f”Prompt: {prompt}”) print(“=” * 60) # 異なる温度で生成 temperatures = [0.3, 0.7, 1.0, 1.5] for temp in temperatures: print(f”\n— Temperature = {temp} —“) generated = generate_text(prompt, max_length=60, temperature=temp) print(generated) print(“-” * 40)

実行結果(例):

Prompt: The future of artificial intelligence is ============================================================ — Temperature = 0.3 — The future of artificial intelligence is likely to be dominated by machine learning and deep learning algorithms. These technologies are already being used in many applications, from autonomous vehicles to medical diagnosis. —————————————- — Temperature = 0.7 — The future of artificial intelligence is exciting and full of possibilities. We can expect AI to play an increasingly important role in healthcare, education, and entertainment. —————————————- — Temperature = 1.0 — The future of artificial intelligence is uncertain, but fascinating. Some experts predict AGI within decades, while others remain skeptical about the timeline. —————————————- — Temperature = 1.5 — The future of artificial intelligence is quantum raspberry cosmic synthesizers dancing through nebulous datastreams while transcendent algorithms… (意味不明になっている) —————————————-
✅ 温度の効果
  • Temperature = 0.3: 保守的で予測可能な文章
  • Temperature = 0.7: バランスが良い(推奨)
  • Temperature = 1.0: 創造的だが時々不安定
  • Temperature = 1.5: ランダムすぎて意味不明に

6-5. 複数のバリエーションを生成

# ======================================== # 複数のバリエーションを生成 # ======================================== def generate_multiple(prompt, num_sequences=3, max_length=80): “”” 同じプロンプトから複数のバリエーションを生成 Args: prompt: 開始プロンプト num_sequences: 生成する系列の数 max_length: 最大トークン数 Returns: 生成されたテキストのリスト “”” input_ids = tokenizer.encode(prompt, return_tensors=’pt’).to(device) with torch.no_grad(): outputs = model.generate( input_ids, max_length=max_length, temperature=0.8, top_p=0.9, do_sample=True, num_return_sequences=num_sequences, # 複数生成 pad_token_id=tokenizer.eos_token_id ) generated_texts = [] for output in outputs: text = tokenizer.decode(output, skip_special_tokens=True) generated_texts.append(text) return generated_texts # テスト prompt = “In the year 2050, humans” print(f”Prompt: {prompt}”) print(“=” * 60) texts = generate_multiple(prompt, num_sequences=3) for i, text in enumerate(texts, 1): print(f”\n— Variation {i} —“) print(text)

実行結果(例):

Prompt: In the year 2050, humans ============================================================ — Variation 1 — In the year 2050, humans will have colonized Mars and established permanent settlements on the red planet. The journey to Mars will take only three months thanks to advanced propulsion systems. — Variation 2 — In the year 2050, humans will live alongside advanced AI systems that can think and feel. The line between human and machine will become increasingly blurred. — Variation 3 — In the year 2050, humans will have solved climate change through revolutionary clean energy technologies. Solar and fusion power will meet all of humanity’s energy needs.
⚠️ GPT-2の限界

GPT-2は2019年のモデルであり、GPT-3やGPT-4と比べると性能が低いです。 より高品質な生成にはOpenAI APIを使ってGPT-3.5やGPT-4を利用することを推奨します。 ただし、GPT-2はオープンソースでローカル実行可能という利点があります。

⚖️ 7. BERTとGPTの使い分け

BERTとGPTは異なる目的のために設計されています。 タスクに応じて適切なモデルを選ぶことが重要です。

7-1. タスク別の選択ガイド

【タスク別のモデル選択】 ■ BERT(理解タスク)を選ぶ場合 ✅ 文分類(感情分析、スパム検出) 理由: 文全体を双方向に見て分類 ✅ 質問応答(抽出型) 理由: 文書内から回答を抽出 ✅ 固有表現認識(NER) 理由: 各トークンにラベルを付与 ✅ 文の類似度計算 理由: 文の意味をベクトル化 ✅ テキスト分類 理由: カテゴリへの振り分け ■ GPT(生成タスク)を選ぶ場合 ✅ 文章生成 理由: 自然な文章を1語ずつ生成 ✅ 対話システム 理由: 対話履歴を踏まえて応答生成 ✅ 要約(生成型) 理由: 新しい文章として要約を生成 ✅ 機械翻訳 理由: ターゲット言語で文を生成 ✅ コード生成 理由: プログラムコードを生成 ■ どちらも使える場合 要約: ・抽出型(重要文を選ぶ)→ BERT ・生成型(新しく書く)→ GPT 質問応答: ・抽出型(文書から抜き出す)→ BERT ・生成型(自由に回答する)→ GPT
特徴 BERT GPT
アーキテクチャ Encoder-only Decoder-only
Attention 双方向 単方向(左→右)
訓練タスク マスク予測(穴埋め) 次単語予測
得意分野 理解タスク 生成タスク
ファインチューニング タスクごとに必要 Few-shotで可能(GPT-3以降)
💡 選択の目安

「出力が新しいテキストか?」で判断できます。

  • 新しいテキストを生成 → GPT
  • 既存のテキストを分類/抽出 → BERT

📝 練習問題

問題1:GPTのアーキテクチャ

GPTが使用するTransformerの部分は?

  1. Encoder-only
  2. Decoder-only
  3. Encoder-Decoder
  4. どちらも使わない
正解:b(Decoder-only)

GPTはDecoder-onlyアーキテクチャを使用します。

特徴:

  • Masked Self-Attention(単方向)
  • 未来のトークンは見れない
  • Autoregressive生成に特化

比較:

  • BERT: Encoder-only(理解タスク向け)
  • GPT: Decoder-only(生成タスク向け)
  • T5: Encoder-Decoder(両方)

問題2:Few-shot Learning

GPT-3のFew-shot Learningの特徴として正しくないものは?

  1. プロンプトに例を含める
  2. モデルのパラメータは更新しない
  3. 数千例の訓練データが必要
  4. In-Context Learningとも呼ばれる
正解:c(数千例の訓練データが必要)

Few-shot Learningでは数千例の訓練データは不要です。

正しい特徴:

  • プロンプトに0〜数例を含める
  • モデルのパラメータは更新しない
  • 訓練なしでタスク実行
  • In-Context Learningとも呼ばれる

Zero-shot: 0例、One-shot: 1例、Few-shot: 2〜10例程度

問題3:Temperature Sampling

Temperature(温度)パラメータを高くするとどうなりますか?

  1. より決定論的な生成
  2. より確信的な生成
  3. よりランダムで多様な生成
  4. 生成速度が速くなる
正解:c(よりランダムで多様な生成)

Temperatureを高くすると、 よりランダムで多様な生成になります。

Temperatureの効果:

  • T < 1.0(低い): 確信的、保守的な生成
  • T = 1.0: 元の確率分布のまま
  • T > 1.0(高い): ランダム、創造的な生成

注意: T が高すぎると(1.5以上)意味不明な文章になります。

問題4:RLHFの手順

ChatGPTのRLHFの手順として正しい順序は?

  1. 報酬モデル訓練 → 教師あり微調整 → 強化学習
  2. 教師あり微調整 → 報酬モデル訓練 → 強化学習
  3. 強化学習 → 教師あり微調整 → 報酬モデル訓練
  4. 報酬モデル訓練 → 強化学習 → 教師あり微調整
正解:b(教師あり微調整 → 報酬モデル訓練 → 強化学習)

RLHFの正しい順序:

  1. 教師あり微調整(SFT): 人間の理想的な回答でGPT-3.5を微調整
  2. 報酬モデルの訓練: 人間のランキングから「良い回答」を学習
  3. 強化学習(PPO): 報酬モデルを使ってさらに最適化

この3ステップにより、人間の好みに合った対話AIが実現されました。

📝 STEP 18 のまとめ

✅ このステップで学んだこと
  • GPTの進化: GPT(117M)→ GPT-2(1.5B)→ GPT-3(175B)→ GPT-4(推定1.76T)
  • Decoder-only: 単方向Self-Attentionで生成に特化
  • Autoregressive生成: 1単語ずつ順番に生成する仕組み
  • 生成戦略: Temperature、Top-p Samplingで多様性を制御
  • Few-shot Learning: プロンプトに例を含めるだけでタスク実行
  • ChatGPTとRLHF: 人間フィードバックで対話に特化
  • 実装: GPT-2でテキスト生成を実践
  • 使い分け: 理解タスク→BERT、生成タスク→GPT
🎯 次のステップの準備

STEP 19: その他の事前学習モデルでは、 BERT・GPT以外の重要なモデルを学びます!

  • RoBERTa(BERT改良版)
  • ALBERT(軽量BERT)
  • DistilBERT(蒸留BERT)
  • T5(Text-to-Text)
  • 日本語モデル(東北大BERT、rinna GPT等)
📝

学習メモ

自然言語処理(NLP) - Step 18

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE