AI・機械学習
中級

壊滅的忘却(LLM)(カイメツテキボウキャク)

ニューラルネットワークが新しいタスクや知識を学習する際に、以前に習得した知識を急激かつ大幅に失う現象。継続学習・ファインチューニングにおける主要な課題。

0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
継続学習
ファインチューニング
LLM
EWC
壊滅的忘却

壊滅的忘却(LLM)とは

壊滅的忘却(Catastrophic Forgetting, CF)とは、ニューラルネットワークが新しいタスクや知識を学習する際、以前に獲得した知識を急激かつ大規模に失う現象を指す。1989年にMcCloskey & Cohenによって提唱され、連結主義モデルの根本的な脆弱性として認識されてきた。

LLMにおける発生メカニズム

重み上書きによる干渉

大規模言語モデルの知識は数十億〜数千億パラメータに分散して符号化されている。ファインチューニング時に勾配降下法でこれらの重みを更新すると、新しいデータ分布に最適化されるが、以前のタスクに必要だった重みパターンが破壊される。

事前学習済み重み W₀
↓ ファインチューニング(新タスクT₂)
最適化後の重み W₁ → T₂には最適だがT₁の性能が大幅劣化

可塑性・安定性ジレンマ

  • 可塑性(Plasticity): 新しい情報を素早く学習する能力
  • 安定性(Stability): 既存知識を保持する能力

これら二つはトレードオフの関係にあり、完全な両立は困難。学習率を高くすると可塑性は上がるが安定性が低下し、逆の場合は新しいタスクの学習が遅くなる。

LLMファインチューニングでの実例

一般的なファインチューニングシナリオ

# 問題のある標準的なファインチューニング
from transformers import AutoModelForCausalLM, Trainer, TrainingArguments

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

# 医療ドメインデータでファインチューニング
training_args = TrainingArguments(
    output_dir="./medical-llama",
    num_train_epochs=3,
    learning_rate=2e-5,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=medical_dataset,  # 医療テキストのみ
)
trainer.train()

# 結果: 医療QAは向上、一般常識・コーディング能力が低下

典型的な劣化パターン

ファインチューニング前ファインチューニング後
数学推論: 85%数学推論: 62%
一般常識: 78%一般常識: 55%
コーディング: 72%コーディング: 48%
医療QA: 45%医療QA: 89%

緩和手法の分類

1. 正則化ベース手法

EWC(Elastic Weight Consolidation)

  • Fisher情報行列を用いて重要なパラメータを特定
  • 重要度の高い重みの変更にペナルティを課す
  • 古いタスクの性能を保護しながら新タスクを学習

L2正則化

  • 新パラメータと旧パラメータの差をL2ノルムでペナルティ化
  • シンプルだが効果は限定的

2. リプレイベース手法

Experience Replay

  • 過去のタスクデータの一部をバッファに保存
  • 新タスク学習中に古いデータも混合して学習
  • データ保持コストが発生するが高効果

Generative Replay

  • 過去データの代わりに生成モデルで擬似データを生成
  • データストレージ不要だが生成品質に依存

3. パラメータ効率的手法

LoRA / QLoRA

from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
)
model = get_peft_model(base_model, config)
# ベースモデルの重みは凍結し、LoRAアダプタのみ更新
# 壊滅的忘却を大幅に軽減

Adapter Layers

  • Transformerブロックに小さなアダプタモジュールを挿入
  • ベース重みを変更せずにタスク固有の知識を追加

4. アーキテクチャベース手法

Progressive Neural Networks

  • タスクごとに新しいカラムを追加、既存重みは凍結
  • 横方向の接続(Lateral Connections)で知識転移

PackNet

  • ネットワークの使用されていない容量を新タスクに割り当て
  • タスクごとにサブネットワークを持つ

評価指標

# BWT(Backward Transfer): 新タスク学習後の旧タスク性能変化
BWT = (1/(T-1)) * Σ(R[T][k] - R[k][k])
# R[i][j]: タスクiまで学習後のタスクjの性能
# 負の値が大きいほど壊滅的忘却が深刻

# FWT(Forward Transfer): 過去の学習が未来タスクに与える恩恵
FWT = (1/(T-1)) * Σ(R[i-1][i] - R_base[i])

# Stability: 旧タスク性能の保持率
Stability = 1 + BWT  # 1.0に近いほど忘却なし

2025年の最新動向

LLM特有の課題

  • スケールの問題: 数十億パラメータモデルでEWCのFisher行列計算は計算量的に困難
  • 継続事前学習: 新しいコーパスでの継続学習時に以前の言語能力が低下する問題
  • アライメント劣化: RLHFでアライメントしたモデルをファインチューニングするとアライメントが壊れる「アライメント税」

実用的なソリューション(2025年基準)

# 推奨: PEFT + リプレイの組み合わせ
from peft import LoraConfig

# ステップ1: LoRAで重要重みを保護
lora_config = LoraConfig(r=64, target_modules=["q_proj", "v_proj", "k_proj", "o_proj"])

# ステップ2: ドメインデータ + 汎用データの混合学習
dataset = DatasetMixer(
    domain_data=medical_corpus,     # 70%
    general_data=general_corpus,    # 30% (リプレイ効果)
    domain_weight=0.7,
)

# ステップ3: 定期的な評価
evaluator = ContinualLearningEvaluator(
    tasks=[medical_qa, general_qa, coding_bench],
    early_stop_on_forgetting=True,
    forgetting_threshold=0.1,  # 10%以上の劣化で停止
)

産業応用での考慮点

  • モデルバージョン管理: ファインチューニング前後のチェックポイントを保持
  • A/Bテスト: ファインチューニング後の全タスクでの性能を事前評価
  • 段階的適応: 一度に全データでなく段階的にファインチューニング
  • 知識蒸留: 教師モデル(元モデル)から生徒モデルへの知識転移でベースライン保護

壊滅的忘却はLLMの実用化における最重要課題の一つ。2025年現在、LoRA系のPEFT手法が事実上の標準的緩和策として採用されているが、完全な解決には至っていない領域である。

この記事について
カテゴリーAI・機械学習
難易度中級
作成日2026/6/6