Diffusion 언어 모델은 [MASK]를 디노이징하며 텍스트를 작성합니다: 가장 확신이 높은 것부터 우선적으로 — 병렬적, 임의 순서
요약
자기회귀(Autoregressive) 방식의 한계를 극복하기 위해 [MASK] 토큰을 디노이징하는 확산 언어 모델(Diffusion Language Model)의 원리를 설명합니다. 전체 문장을 양방향으로 참조하며 확신도가 높은 토큰부터 점진적으로 채워나가는 생성 방식을 다룹니다.
핵심 포인트
- 자기회귀 모델의 일방향적 생성 한계와 미래 정보 접근 불가 문제 지적
- 확산 모델은 전체 시퀀스를 [MASK] 상태에서 시작해 디노이징하는 양방향 방식 채택
- 확신도가 높은 토큰을 우선 확정하고 나머지는 문맥을 통해 해결하는 스케줄링 적용
- LLaDA, Mercury 등 실제 확산 언어 모델 사례 언급
당신이 사용해 온 거의 모든 LLM — GPT, Claude, Llama — 은 사람이 타이핑하는 방식과 동일하게 텍스트를 작성합니다: 다음 토큰을 예측하고, 이를 추가하고, 지금까지의 모든 내용을 바탕으로 다음 토큰을 예측하는 방식입니다. 하나의 순전파 (forward pass) 당 하나의 토큰이며, 엄격하게 왼쪽에서 오른쪽으로 진행됩니다. 이것은 너무나 표준적이어서 대부분의 사람들은 이것이 단순히 _텍스트를 생성한다는 것의 의미_라고 가정합니다. 하지만 이것은 설계상의 선택일 뿐, 법칙은 아닙니다. 확산 언어 모델 (diffusion language model) (LLaDA, Mercury)은 완전히 다른 도박을 합니다. 이 모델은 전체 문장이 [MASK]로 채워진 상태에서 시작하여 이를 디노이징 (denoising) 합니다. 즉, 모든 빈칸을 한꺼번에 예측하고, 가장 확신이 높은 것들만 남기며, 이 과정을 반복합니다. 저는 이것이 무엇을 얻을 수 있는지, 그리고 무엇을 대가로 치러야 하는지를 보여주기 위해 브라우저에서 실시간으로 계산되는 실제 확신도 스케줄 (confidence schedule)을 적용한 데모를 제작했습니다.
왼쪽에서 오른쪽으로 가는 방식의 함정: 잘못된 토큰을 되돌릴 수 없다
엄격하게 왼쪽에서 오른쪽으로 진행되기 때문에, 자기회귀 (autoregressive) 모델은 오직 토큰 _1…t-1_만을 사용하여 토큰 _t_를 결정해야 합니다. 즉, 미래의 정보에 접근할 수 없습니다. 만약 나중에 나올 단어가 앞부분에서 더 나은 선택을 암시했더라도, 이미 늦었습니다. 이전 토큰은 이미 작성되었고 고정 (frozen) 되었기 때문입니다. 빔 서치 (Beam search)는 단지 어떤 탐욕적 경로 (greedy path)를 유지할지를 섞어줄 뿐이며, 문장이 진행된 후 이미 결정된 토큰이 바뀌도록 허용하지는 않습니다. 이러한 일방향적이고 지우개가 없는 특성이 바로 확산 모델이 제거하고자 하는 구체적인 한계점입니다.
모든 것이 [MASK]인 상태에서 시작하여 안개를 걷어내기
확산 (Diffusion)은 설정을 뒤집습니다. 문장을 아무것도 없는 상태에서 쌓아 올리는 대신, 전체 시퀀스가 이미 존재하는 상태에서 시작합니다. 다만 모든 위치가 노이즈, 즉 특수한 [MASK] 토큰으로 채워져 있을 뿐입니다. 생성은 더 이상 "다음 단어를 추가하는 것"이 아니라, 정적 노이즈(static)에서 시작하는 이미지 확산과 정확히 마찬가지로 "이 완전히 오염된 시퀀스를 가져와서 깨끗하게 만드는 것"입니다. 각 디노이즈 (denoise) 단계는 현재의 전체 시퀀스(마스크와 드러난 단어 모두 포함)를 살펴보고, 모든 마스크된 위치에 대해 한꺼번에 확신도를 가진 토큰을 예측합니다. 결정적으로 이것은 양방향적 (bidirectional) 입니다. 중간에 있는 빈칸은 이미 양옆에 있는 단어들로부터 힌트를 얻을 수 있습니다.
확신이 있는 것들만 남기고, 나머지는 문맥이 해결하도록 두기
모든 추측을 한꺼번에 수용한다면 쓰레기 같은 결과물을 얻게 될 것입니다. 어려운 슬롯(slots)들은 여전히 불확실하기 때문입니다. 따라서 스케줄(schedule)은 매 단계에서 가장 확신이 높은 K개의 예측만을 확정하고 나머지는 다시 마스킹(re-mask)합니다:
function denoiseStep(seq, K){
const masked = [];
for (let i=0;i<N;i++) if (!seq[i].revealed) masked.push(i);
...
기능어(function words)나 명확한 연속어와 같은 쉬운 앵커(anchors)들이 먼저 드러납니다. 그리고 당신이 드러내는 모든 토큰(token)은 여전히 마스킹된 토큰들을 위한 _문맥 (context)_이 됩니다. 데모에서 슬롯의 확신도(confidence)는 해당 토큰 자체의 예측 가능성에 이미 드러난 인접 토큰당 보너스를 더한 값입니다:
function confidence(seq, i){
return TOKENS[i].prior + 0.26 * revealedNeighbours(seq, i) + noise[i];
}
따라서 고립된 내용어(content word)는 동전 던지기처럼 불확실하지만, 주변 단어들이 결정되면 확신도가 급상승하여 다음 순서로 드러나게 됩니다. 문장은 오른쪽 문맥이 존재하기도 전에 어려운 단어들을 왼쪽에서 오른쪽으로 추측하는 대신, 확실한 지점으로부터 매 단계 몇 개의 토큰씩 바깥쪽으로 해결해 나갑니다.
초능력: 초기 추측을 수정하기
토큰이 생성되는 즉시 고정되지 않기 때문에, 디퓨전 모델 (diffusion model)은 이제 틀렸다고 판단되는 슬롯을 다시 마스킹(re-mask)하고 다시 쓸 수 있습니다. 문맥이 거의 없는 상태에서 초기에 드러난 단어는 단지 잠정적인 (tentative) 추측일 뿐입니다. 매 단계에서 마스킹을 해제하기 전에 모든 잠정적 슬롯을 재점검합니다. 이제 인접 토큰들이 도착했으므로 확신도가 임계값을 넘어섰다면, 해당 추측을 올바른 단어로 덮어씁니다. 데모에서는 이것이 문맥이 결정됨에 따라 호박색의 잠정적 토큰이 초록색으로 변하는 모습으로 나타납니다. 이는 자기회귀 모델 (autoregressive model)이 구조적으로 수행할 수 없는 수정 작업입니다.
더 적은 단계, 그리고 베팅의 위치
합산해 봅시다. N-토큰 문장은 자기회귀 모델 (autoregressive model)에게 항상 N번의 순전파 (forward pass) 비용을 발생시킵니다. 반면 디퓨전 모델 (diffusion model)은 한 단계(step)당 여러 개의 토큰을 할당하므로, 약 ⌈N/K⌉번의 단계만 필요합니다. 즉, 큰 K 값을 갖는 스케줄 (schedule)을 사용하면 단 몇 번의 패스만으로 문장 전체를 초안 작성할 수 있습니다. 이것이 Mercury와 같은 빠른 텍스트 디퓨전 (fast text-diffusion) 기술의 핵심적인 셀링 포인트입니다. 솔직한 단점은 다음과 같습니다: 각 패스는 모든 위치를 예측해야 하므로 (단계당 더 많은 연산량 필요), 위치가 왼쪽에서 오른쪽으로 생성되지 않기 때문에 디코더 (decoder)처럼 KV-캐시 (KV-cache)를 재사용할 수 없습니다. 따라서 "더 적은 단계"가 반드시 더 적은 FLOPs를 의미하는 것은 아니며, 낮은 지연 시간 (latency)을 의미합니다. 이는 Transformer의 기본값에 맞서는 또 다른 강력한 도전자인 Mamba와 비교해 볼 가치가 있습니다. Mamba는 왼쪽에서 오른쪽으로의 순서를 유지하면서 선형 시간 (linear-time) 복잡도로 만듭니다. 반면 디퓨전은 어텐션 (attention)을 유지하면서 순서를 완전히 버림으로써 병렬성 (parallelism)과 수정 가능성 (revisability)을 얻습니다. "자기회귀 트랜스포머 (autoregressive transformer)가 유일한 길이다"라는 명제에 맞서는 두 가지 서로 다른 베팅이며, 아직 단일 승자는 없습니다. 바로 이것이 텍스트 디퓨전이 주목해야 할 도전자인 이유입니다.
디노이저 (denoiser)를 실행하여 왼쪽에서 오른쪽으로 쓰는 모델과 경주해 보세요:
https://dev48v.infy.uk/ai/days/day45-diffusion-language-models.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기