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, Elyza | Alpaca, 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 Llama | Llama-2 | コード500Bトークン | 7/13/34/70B |
| Elyza-Llama-3 | Llama-3 | 日本語コーパス | 8/70B |
| MedLlama-3 | Llama-3 | 医療文書 | 8B |
| Mistral-7B-v0.3 | Mistral-7B-v0.2 | 最新データ更新 | 7B |
| DeepSeek-Coder-V2 | DeepSeek-V2 | コード+数学 | 16/236B |
課題と最新研究動向
主要課題
- 壊滅的忘却: 新ドメイン特化で汎用能力が低下
- 学習効率: 大規模モデルの継続学習は計算コスト高
- 知識競合: 旧知識と新知識が矛盾する場合の優先度制御
- データ品質: 継続学習用の高品質コーパスの収集・フィルタリング
2025年の研究トレンド
- DARE(Drop And REscale): LoRAの重みをマージする際の干渉削減
- Model Merging: 複数の特化モデルを重み空間でマージ
- Continual RLHF: アライメント能力を維持しながら知識を更新