모델 붕괴 (Model collapse): AI가 세대를 거듭하며 AI 생성물로 학습할 때 발생하는 현상 — 그리고 한 줄의 해결책
요약
AI 생성 콘텐츠가 다시 AI 학습 데이터로 사용되는 재귀적 루프가 모델의 성능을 저하시키는 '모델 붕괴(Model Collapse)' 현상을 분석합니다. 데이터의 희귀 사례 소실, 분포의 평균화, 분산의 점진적 감소라는 세 가지 메커니즘을 통해 모델이 어떻게 파괴되는지 설명합니다.
핵심 포인트
- AI 생성 데이터로만 학습할 경우 모델의 지식이 붕괴됨
- 희귀 사례(Tail)가 샘플링 과정에서 먼저 소실됨
- 단순한 모델은 데이터의 복잡한 구조를 평균값으로 뭉개버림
- 세대를 거듭할수록 데이터의 분산이 복리로 감소함
수년 동안 모델들은 인간이 만든 텍스트와 이미지로 학습되었습니다. 하지만 이제 웹은 AI가 생성한 콘텐츠로 채워지고 있으며, 차세대 모델들은 그 웹을 스크래핑합니다. 즉, 모델의 학습 데이터가 이전 모델에 의해 작성되는 경우가 점점 늘어나고 있습니다. 이는 날카로운 질문을 던집니다. 만약 이전 모델의 출력물로 모델을 세대를 거듭하여 계속 학습시킨다면, 그들이 알고 있는 지식에는 어떤 일이 벌어질까요? 그 답은 **모델 붕괴 (model collapse)**이며, 저는 이 모든 과정을 실시간으로 실행하는 데모를 제작했습니다. 풍부한 "실제 세계 (real world)" 분포, 단순한 적합 및 재샘플링 (fit-and-resample) 모델, 그리고 이를 특징 없는 덩어리로 깎아내리는 재귀적 루프 (recursive loop)를 포함합니다. 그 메커니즘은 다음과 같습니다.
정밀하게 정의된 재귀적 루프 (The recursive loop)
본질만 남기고 깎아내 봅시다. 세대 0 (Generation 0)은 실제 데이터의 유한한 샘플입니다. 세대 t+1을 만들기 위해, 세대 t에 모델을 적합 (fit) 시킨 다음, 해당 모델로부터 새로운 데이터를 샘플링합니다. — 그리고 그 합성 데이터 (synthetic data)가 다음 라운드의 학습 세트가 됩니다. 실제 데이터는 다시는 보지 않습니다:
let sample = Array.from({length:n}, sampleReal); // gen 0: real data
for (let g = 1; g <= generations; g++){
const model = fit(sample); // 현재 가지고 있는 것으로 학습
...
저의 "실제 세계"는 두 개의 큰 모집단, 하나의 희귀한 하위 그룹, 그리고 두터운 꼬리 (heavy tail)가 섞인 혼합 모델로, 붕괴가 파괴할 수 있는 진정한 구조를 가지고 있습니다. "모델"은 의도적으로 단순합니다. 평균 (mean)과 분산 (variance)을 추정하고, 그 단일 가우시안 (Gaussian) 분포에서 데이터를 추출합니다.
복합적으로 작용하는 세 가지 오류
붕괴는 하나의 버그가 아닙니다. 매 라운드마다 서로를 강화하는 세 가지 버그의 결합입니다.
유한한 샘플은 희귀한 사례를 놓칩니다. 어떤 유한한 샘플이든 복권과 같아서, 희귀한 사건은 거의 이기지 못합니다. 3%의 하위 그룹을 30번 샘플링하면 약 40%의 확률로 빈 결과가 나옵니다. 해당 샘플에 모델을 적합시키면 그 사례들에 대해 약 0의 확률을 부여하게 되므로, 다음 라운드에 다시 나타날 수 없습니다. 꼬리 (tails) 부분이 가장 먼저 사라집니다.
단순한 모델은 구조를 평균을 향해 뭉개버립니다. 두 개의 봉우리가 있는 데이터에 단일 가우시안을 적합시키면, 두 봉우리의 평균을 중심으로 한 단 하나의 봉우리만을 생성할 수 있습니다. 이는 어느 모드 (mode)와도 일치하지 않는 특징 없는 중간 지점이 됩니다.
분포의 확산(spread)은 세대를 거듭할 때마다 조금씩 줄어듭니다. 이것이 바로 조용한 살인자입니다. 분산 $V$를 가진 분포에서 $n$개의 점을 추출하면, ML로 추정된 기대 분산은 (n-1)/n · V가 됩니다. 즉, 아주 미세하게 더 작아집니다. 이를 새로운 진실(truth)로 다시 입력하면 이 현상은 복리로 누적됩니다:
// var_after ≈ (n-1)/n * var_before (매 라운드마다 누적됨)
// var_t ≈ ((n-1)/n)^t * var_0 -> 0 (붕괴)
// n이 작을수록 -> 1보다 작은 계수가 더 작아짐 -> 더 빠르게 붕괴함
$t$ 라운드 후의 확산 범위는 원래의 ((n-1)/n)ᵗ가 되어 0을 향해 달려갑니다. 그리고 이를 교정할 신호가 없습니다. 일반적인 학습에서는 실제 데이터 (real data)가 모델을 정직하게 유지시키지만, 루프 안에서는 각 세대의 오류가 다음 세대의 정답 (ground truth)이 되어버립니다. 데모의 두 게이지가 이 이야기를 보여줍니다. 희귀 사례 (rare-case)의 생존율은 확산 범위가 완전히 좁아지기도 훨씬 전에 0으로 떨어집니다.
해결책: 실제 데이터를 혼합할 것
방어책은 간단하며 증명 가능합니다: 자신의 출력물로만 학습하지 마십시오. 매 세대의 일부 비율 $p$를 신선한 실제 샘플 (real samples)로 교체하십시오. 그러면 이러한 실제 데이터 포인트들이 매 라운드마다 꼬리 부분 (tails)과 확산 범위를 다시 주입하여, 누적되는 수축 현상을 상쇄합니다:
function nextGen(sample, n, p){ // p = 혼합되는 실제 데이터의 비율
const model = fit(sample);
const kReal = Math.round(p * n), kSyn = n - kReal;
...
데모에서는 동일한 시작점에서 두 개의 재귀 (recursion)가 실행됩니다. 순수 합성 (pure synthetic) 루프는 0을 향해 미끄러져 내려가는 반면, 약 20%의 실제 데이터만 혼합된 루프는 안정적인 바닥 지점에서 정체(plateau)됩니다. 동일한 재귀이지만, 하나는 세상을 잊고, 하나는 세상을 기억합니다.
이것은 단순한 장난감이 아닙니다. 합성 콘텐츠 (synthetic content)가 인터넷에 범람함에 따라, 웹을 무분별하게 스크래핑 (scraping)하는 것은 이전 세대의 출력물로 학습할 위험을 초래하며, 이는 모델 세대를 거듭할수록 품질과 다양성을 저하시킵니다. 이것이 바로 검증된 인간 데이터 (verified human data)가 귀중해지고 있는 이유입니다 (일부에서는 2023년 이전의 데이터를 오염되기 전이라 깨끗한 '저배경 (low-background)' 강철에 비유하기도 합니다). 또한 이는 편향 (bias)을 증폭시킵니다. 오늘 과소 대표되는 집단은 내일 더 빠르게 지워지게 됩니다. 실질적인 규칙은 다음과 같습니다: 실제 데이터를 혼합 상태로 유지하고, 합성 데이터를 필터링 및 검증하며, 대체하기보다는 축적하십시오.
풍요로운 세계가 붕괴되는 과정을 지켜본 뒤, "실제 데이터를 혼합"했을 때의 변화를 확인해 보세요:
https://dev48v.infy.uk/ai/days/day44-model-collapse.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기