Catastrophic Forgetting
破滅的忘却とは、ニューラルネットワークが新しいデータで学習すると、それ以前に習得したスキルが突然失われる現象です。発生する理由、事例、緩和策を解説します。
破滅的忘却は破滅的干渉とも呼ばれ、以前のタスクの例を含まない新しいデータでニューラルネットワークを学習したときに、以前に習得したスキルが急激に失われる現象です。学習では、以前の知識を保持していた共有のモデル重みが更新されますが、新しい損失にはその知識を維持する報酬がないため、元のタスクの精度は数百回の更新で崩れることがあります。McCloskeyとCohenは1989年、算術の事実を順番に学習するネットワークでこの現象を説明しました。これは今も継続学習における中心的な課題であり、ファインチューニングで日常的に発生するリスクです。
破滅的忘却が起こる理由#
ニューラルネットワークの知識は分散して表現されます。各重みは多くの出力に影響し、各出力は多くの重みに依存します。新しいタスクで学習すると、重みは損失が最も速く減少する方向に移動します。以前のタスクを評価する項がないため、モデルは以前のタスクが機能していた領域から離れていきます。分類では、出力層でこの影響が強まります。学習データに新しいクラスしか含まれない場合、各ステップで存在しないクラスのスコアが押し下げられ、最終的にはモデルがそのクラスをまったく予測しなくなります。手書き数字0~4で学習した小規模ネットワークを数字5~9で学習させると、この現象と、少量の古いデータをリプレイすることで忘却を抑えられる様子を確認できます。
import torch
from sklearn.datasets import load_digits
torch.manual_seed(0)
X, y = load_digits(return_X_y=True)
X, y = torch.tensor(X / 16, dtype=torch.float32), torch.tensor(y)
train = torch.arange(len(y)) < 1400 # hold out the last 397 images for testing
task_a, task_b, test_a = train & (y < 5), train & (y >= 5), ~train & (y < 5)
replay = task_a & (torch.rand(len(y)) < 0.1) # keep 10% of task A for replay
for name, second_task in [("task B only", task_b), ("task B + 10% replay", task_b | replay)]:
model = torch.nn.Sequential(torch.nn.Linear(64, 64), torch.nn.ReLU(), torch.nn.Linear(64, 10))
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# Train on digits 0-4 (task A), then on digits 5-9 (task B)
for mask in (task_a, second_task):
for _ in range(200):
loss = torch.nn.functional.cross_entropy(model(X[mask]), y[mask])
optimizer.zero_grad()
loss.backward()
optimizer.step()
accuracy = (model(X[test_a]).argmax(1) == y[test_a]).float().mean()
print(f"{name}: held-out digits 0-4 accuracy {accuracy:.1%}")タスクAの学習後、ネットワークは保留していた0~4の数字198個のうち92.4%を正しく分類します。数字5~9だけで学習すると、新しいクラスだけを予測するようになるため、精度は0.0%に低下します。第2段階にタスクAの画像を66枚混ぜてリプレイすると、精度は74.7%に保たれます。
実践における破滅的忘却#
- 物体検出: 歩行者と交通標識で学習した検出器を、新しい工事標識の画像だけでファインチューニングすると、歩行者を検出できなくなります。新しい画像でラベル付けされていない歩行者は、背景として明示的に学習されるため、忘却が加速します。
- 大規模言語モデル: パラメーター数10億から70億のLLMに対して継続的な指示チューニングを行うと、ドメイン知識、推論、読解力がすべて低下し、この範囲ではモデルサイズが大きいほど忘却が深刻になりました。アラインメント済みモデルを、無害なデータだけでファインチューニングしても、安全性に関する挙動が弱まることがあります。
破滅的忘却と関連用語の比較#
- 継続学習: 以前のタスクを忘れずに一連のタスクを学習する方法を研究する分野です。破滅的忘却は、この分野が取り組む課題です。
- モデル崩壊: 同じタスクであっても、以前のモデルが生成したデータで学習することで、モデルの品質と多様性が徐々に失われる現象です。
- 過学習: 現在の学習データのノイズに過度に適合し、同じタスクの新しいデータに対する性能が低下することです。忘却は、以前のタスクに対する性能が失われることです。
- 機械アンラーニング: 学習済みモデルから特定のデータや知識を意図的に取り除くことで、忘却を意図的に行うものです。
- 安定性と可塑性のジレンマ: 古い知識を安定して保つことと、新しいタスクを学習できる柔軟性を維持することのトレードオフです。忘却を軽減する各手法は、このバランスを異なる方法で調整します。
破滅的忘却を軽減する方法#
軽減策はリプレイ、正則化、パラメーター分離の3つに大別され、プロジェクトの制約によって通常は適切な方法が決まります。
- リプレイ: 以前のタスクの保存済みサンプルを新しい学習データに混ぜる方法は、数字の例が示すように、最も確実な対策です。YOLO26の検出器では、UltralyticsのデータYAMLファイルに学習画像フォルダーのリストを指定できます。そのため、リプレイでは元の画像の一部を新しい画像とともに、統合したクラスリストの下に指定します。
- 正則化: Elastic Weight Consolidation (EWC)は、フィッシャー情報量から推定した以前のタスクに対する各重みの重要度に応じて、重みの変化にペナルティを課します。Learning without Forgettingは代わりに知識蒸留を使い、新しいデータ上で以前の出力を維持するようモデルを学習させます。
- パラメーター分離: 共有レイヤーの凍結、タスク専用ヘッドの追加、LoRAなどのアダプターの学習によって、元の重みを変更せずに保てます。プログラミングと数学のタスクでは、LoRAはフルファインチューニングより学習量が少ない一方、忘却も少なくなりました。また、フルファインチューニングで学習した重みの変化は、一般的なLoRA設定よりランクが10~100倍高くなりました。










