AI・機械学習
中級

継続事前学習(LLM)(ケイゾクジゼンガクシュウ)

既存の事前学習済みLLMに対し、新しいドメインや時期のコーパスを追加で事前学習することでモデルの知識を更新・拡張する手法。フルファインチューニングと区別される。

0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
継続学習
事前学習
LLM
ドメイン適応
知識更新

継続事前学習(LLM)とは

継続事前学習(Continual Pre-training, CPT)とは、既に大規模コーパスで事前学習済みのLLMに対して、新たなコーパスを追加で事前学習する手法。モデルの知識基盤を拡張・更新することが主目的であり、次トークン予測(Causal Language Modeling)または MLM 目標を用いる。

ファインチューニングとの違い

項目継続事前学習指示ファインチューニング
目的知識の幅広い更新特定タスクへの動作最適化
学習目標次トークン予測(CLM)指示追従・RLHFなど
データ形式生テキスト(文書)指示+応答ペア
学習量数十B〜数千Bトークン数万〜数百万サンプル
パラメータ更新全パラメータまたはLoRA同左
代表例Code Llama, ElyzaAlpaca, Vicuna

主なユースケース

1. 言語特化

# 日本語継続事前学習の例
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers import Trainer, TrainingArguments, DataCollatorForLanguageModeling

model_id = "meta-llama/Llama-3-8B"
model = AutoModelForCausalLM.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)

# 日本語コーパスを追加
jp_dataset = load_dataset("cc100", "ja")  # Common Crawl 日本語

training_args = TrainingArguments(
    output_dir="./llama3-jp-cpt",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,
    num_train_epochs=1,
    learning_rate=2e-5,
    lr_scheduler_type="cosine",
    warmup_ratio=0.01,
    bf16=True,
)

data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer,
    mlm=False,  # Causal LM = 次トークン予測
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=jp_dataset,
    data_collator=data_collator,
)

2. ドメイン特化

医療ドメイン:

  • PubMed(2,500万論文)
  • MIMIC臨床記録
  • 医療教科書テキスト

法律ドメイン:

  • 判例データベース
  • 法律条文・解説
  • 契約書コーパス

コードドメイン:

  • GitHub公開リポジトリ(1T+トークン)
  • Stack Overflow Q&A
  • 技術文書

3. 知識更新(時間的更新)

GPT-3.5 (訓練データ: 〜2021年9月)
↓ 継続事前学習
最新情報対応版 (〜2025年データ追加)

ただし時間的更新は旧知識との整合性維持が難しく、研究活発な領域。

実践的な学習レシピ

データ混合比率(重要)

# 忘却を防ぐためのデータ混合
mix_config = {
    "new_domain": 0.7,    # 新しいドメインデータ
    "general": 0.2,       # 汎用データ(忘却防止のリプレイ効果)
    "instruction": 0.1,   # 指示追従データ(能力維持)
}

# 実装例
from datasets import interleave_datasets

mixed_dataset = interleave_datasets(
    [
        new_domain_dataset,
        general_dataset,
        instruction_dataset,
    ],
    probabilities=[0.7, 0.2, 0.1],
    seed=42,
)

学習率スケジュール

継続事前学習特有の推奨設定:

# 初期LRは元事前学習より1〜2桁低く設定
learning_rate = 1e-5  # 元事前学習の1/10〜1/100

# コサインスケジュール + ウォームアップ
lr_scheduler_type = "cosine"
warmup_ratio = 0.01  # 短めのウォームアップ

# 早期停止:validation perplexityが上昇し始めたら停止

LoRAを用いた効率的CPT

from peft import LoraConfig, TaskType, get_peft_model

lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=64,                    # CPTは高ランクが効果的
    lora_alpha=128,
    target_modules=[         # 全アテンション層を対象
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj"
    ],
    lora_dropout=0.05,
)

model = get_peft_model(base_model, lora_config)
model.print_trainable_parameters()
# trainable params: ~80M / all params: 8B → 約1%のみ更新

評価指標

# 1. Perplexity(新ドメインでの言語モデリング性能)
perplexity = compute_perplexity(model, new_domain_test_set)

# 2. 元能力の保持確認(忘却チェック)
benchmark_suite = [
    ("MMLU", "一般知識"),
    ("HellaSwag", "常識推論"),
    ("HumanEval", "コーディング"),
    ("新ドメインQA", "ドメイン適応"),
]

for benchmark, description in benchmark_suite:
    before_cpt = evaluate_before[benchmark]
    after_cpt = evaluate_after[benchmark]
    delta = after_cpt - before_cpt
    print(f"{description}: {before_cpt:.1%} → {after_cpt:.1%} (Δ{delta:+.1%})")

著名な継続事前学習モデル(2025年)

モデルベース追加データ規模
Code LlamaLlama-2コード500Bトークン7/13/34/70B
Elyza-Llama-3Llama-3日本語コーパス8/70B
MedLlama-3Llama-3医療文書8B
Mistral-7B-v0.3Mistral-7B-v0.2最新データ更新7B
DeepSeek-Coder-V2DeepSeek-V2コード+数学16/236B

課題と最新研究動向

主要課題

  1. 壊滅的忘却: 新ドメイン特化で汎用能力が低下
  2. 学習効率: 大規模モデルの継続学習は計算コスト高
  3. 知識競合: 旧知識と新知識が矛盾する場合の優先度制御
  4. データ品質: 継続学習用の高品質コーパスの収集・フィルタリング

2025年の研究トレンド

  • DARE(Drop And REscale): LoRAの重みをマージする際の干渉削減
  • Model Merging: 複数の特化モデルを重み空間でマージ
  • Continual RLHF: アライメント能力を維持しながら知識を更新
この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/6