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%로 떨어집니다. 두 번째 학습 단계에 재생한 작업 A 이미지 66개를 섞으면 정확도가 74.7%로 유지됩니다.
실제 환경에서의 파국적 망각#
- 객체 감지: 보행자와 교통 표지판으로 감지기를 학습한 다음 새로운 공사 표지판 이미지만으로 파인튜닝하면 보행자를 감지하지 못하게 됩니다. 새 이미지에 레이블이 없는 보행자는 배경으로 적극 학습되므로 망각이 더 빨라집니다.
- 대형 언어 모델: 파라미터 10억~70억 개의 LLM을 대상으로 연속적인 지시 튜닝을 수행했을 때 도메인 지식, 추론, 독해력이 모두 저하되었으며, 해당 범위에서는 모델 크기가 커질수록 망각이 더 심해졌습니다. 정렬된 모델을 파인튜닝하면 무해한 데이터만 사용해도 안전 동작이 약화될 수 있습니다.
파국적 망각과 관련 용어 비교#
- 연속 학습: 이전 작업을 잊지 않고 일련의 작업을 학습하는 방법을 연구하는 분야입니다. 파국적 망각은 연속 학습이 해결하려는 문제입니다.
- 모델 붕괴: 같은 작업에 사용하더라도 이전 모델이 생성한 데이터로 모델을 학습할 때 품질과 다양성이 점진적으로 저하되는 현상입니다.
- 과적합: 현재 학습 데이터의 노이즈에 지나치게 맞춰 같은 작업의 새 데이터에서 성능이 떨어지는 현상입니다. 망각은 이전 작업의 지식이 사라지는 현상입니다.
- 머신 언러닝: 학습된 모델에서 특정 데이터나 지식을 의도적으로 제거하는 것으로, 망각을 의도적으로 수행하는 것에 해당합니다.
- 안정성-가소성 딜레마: 모든 완화 방법이 각기 다른 방식으로 균형을 맞추는 기존 지식을 안정적으로 유지하는 것과 새 작업을 학습할 만큼 유연성을 유지하는 것 사이의 절충입니다.
파국적 망각을 줄이는 방법#
완화 방법은 재생, 정규화, 파라미터 격리의 세 가지 계열로 나뉘며, 프로젝트의 제약 조건에 따라 보통 적용할 방법이 결정됩니다.
- 재생: 이전 작업의 저장된 사례를 새 학습 데이터에 섞는 방법은 가장 신뢰할 수 있는 해결책이며, 숫자 예시에서도 그 효과를 확인할 수 있습니다. YOLO26 감지기의 경우 Ultralytics 데이터 YAML 파일은 학습 이미지 폴더 목록을 지원하므로, 재생을 위해서는 원본 이미지 일부를 새 이미지와 함께 하나의 통합 클래스 목록 아래에 지정하면 됩니다.
- 정규화: 탄성 가중치 통합(EWC)은 Fisher 정보로 추정한 이전 작업의 중요도에 비례해 각 가중치의 변경에 페널티를 부과합니다. 망각 없는 학습은 대신 지식 증류를 사용해 새 데이터에서도 모델이 기존 출력을 계속 일치시키도록 학습합니다.
- 파라미터 격리: 공유 계층을 동결하거나 작업별 헤드를 추가하거나 LoRA와 같은 어댑터를 학습하면 원래 가중치를 그대로 유지할 수 있습니다. 프로그래밍 및 수학 작업에서 LoRA는 전체 파인튜닝보다 학습량은 적었지만 망각도 적었습니다. 또한 전체 파인튜닝은 일반적인 LoRA 구성보다 10~100배 높은 랭크의 가중치 변경을 학습했습니다.










