한양과학기술고등학교

에듀테크 프로젝트 대시보드

확산 모델 (Diffusion Model)

확산 모델 (Diffusion Model)

정방향으로 노이즈를 더하고, 역방향으로 그 노이즈를 예측해 지우는 법을 배우는 생성 모델  |  하트 모양 분포를 순수 노이즈에서 되살리는 2D 토이 확산 모델

GAN이 "위조범 vs 감별사"의 대결로 가짜를 만들었다면, 확산 모델은 전혀 다른 발상으로 접근합니다. 먼저 진짜 데이터에 가우시안 노이즈를 아주 조금씩, 여러 단계에 걸쳐 더해서 완전한 노이즈로 만들어 버립니다(정방향 과정). 그다음 신경망에게 "이 단계에서 어떤 노이즈가 섞여 있었는지"를 맞히도록 학습시킵니다. 학습이 끝나면, 순수한 노이즈에서 출발해 신경망이 예측한 노이즈를 한 스텝씩 빼나가는 것만으로 없던 데이터를 새로 만들어낼 수 있습니다(역방향 과정) — 이것이 Stable Diffusion·DALL·E 같은 이미지 생성 AI의 핵심 원리입니다.

1. 정방향 과정 — 데이터를 노이즈로 무너뜨리기

원본 데이터 x₀에 아주 작은 노이즈를 T번(보통 수백~수천 번) 반복해서 더하면 결국 원래 모양을 전혀 알아볼 수 없는 순수 가우시안 노이즈 x_T가 됩니다. 놀랍게도 이 과정은 재매개변수화(reparameterization) 덕분에 한 단계씩 반복할 필요 없이, 임의의 스텝 t의 노이즈 낀 데이터를 단 한 번의 계산으로 바로 구할 수 있습니다.

# ᾱ_t = 누적 α (스케줄에서 미리 계산해 둠), ε ~ N(0, I)
x_t = √ᾱ_t · x₀ + √(1 − ᾱ_t) · ε

ᾱ_t가 1에 가까우면(t가 작으면) x_t는 원본과 거의 같고, ᾱ_t가 0에 가까우면(t가 크면) 원본 정보는 사라지고 순수 노이즈만 남습니다.

슬라이더로 직접 확인하기

아래 청록색 점은 하트 모양 원본 데이터입니다. t 슬라이더를 오른쪽으로 옮기면 같은 점들에 정방향 공식으로 노이즈를 점점 더 섞은 모습을, 보라색으로 보여줍니다. 끝까지 옮기면 하트 모양이 완전히 사라지고 랜덤한 점 구름만 남는 것을 확인해 보세요.

0 / 40
원본 x₀ (하트 모양) 노이즈 낀 x_t

2. 노이즈 스케줄 — 얼마씩 섞을지 미리 정해두기

매 스텝 얼마나 노이즈를 더할지는 β_t(베타 스케줄)로 정해집니다. 이 데모는 초반·후반에는 완만하고 중반에 가장 급격하게 무너지는 코사인 스케줄(Nichol & Dhariwal, 2021)을 사용합니다 — 선형 스케줄보다 정보가 너무 빨리 사라지지 않아 더 안정적으로 학습됩니다.

청록 선 = 남아있는 원본 신호 비율 √ᾱ_t, 보라 선 = 섞여 들어간 노이즈 비율 √(1−ᾱ_t). 두 선이 교차하는 지점부터는 원본보다 노이즈가 더 많아집니다.

3. 역방향 과정 — 노이즈 예측기로 한 스텝씩 되돌리기

순수 노이즈 x_T ~ N(0,I)─▶ 신경망이 노이즈 ε̂ 예측─▶ ε̂ 만큼 빼고 살짝만 남은 스텝
x_{t-1}─▶ (t = T, T-1, … , 1 반복) ─▶ x₀ (생성 결과)

신경망은 "정답 노이즈"가 있는 지도학습 문제로 학습됩니다: 정방향 공식으로 x_t와 그때 실제로 섞은 ε를 만들어두고, 신경망이 x_t와 t를 보고 ε를 맞히도록 평균제곱오차로 학습시킵니다. 예측이 정확해지면, 아래 공식으로 한 스텝 되돌릴 수 있습니다.

# DDPM 역방향 샘플링 (t = T ... 1)
ε̂ = 노이즈예측망(x_t, t)
평균 = (1/√α_t) · ( x_t − (β_t / √(1−ᾱ_t)) · ε̂ )
x_{t-1} = 평균 + √β_t · z          # t > 1 이면 z ~ N(0,I), t = 1 이면 z = 0
왜 매번 노이즈 z를 다시 더할까? 평균만 따라가면 모든 시작점이 같은 하나의 결과로 뭉개져 버립니다. 각 스텝에서 작은 무작위성을 다시 섞어줘야 x_T가 조금씩 달랐을 때 서로 다른, 다양한 결과가 나올 수 있습니다. 그래서 확산 모델로 같은 프롬프트를 여러 번 생성해도 매번 조금씩 다른 이미지가 나옵니다.

4. 직접 학습시켜 보기 — 노이즈에서 하트 모양 되살리기

작은 신경망 하나가 "x_t와 t를 보고 그 안에 섞인 노이즈 ε를 맞히는" 문제를 학습합니다. 학습 시작으로 노이즈 예측망을 훈련시킨 뒤, 샘플 생성을 눌러 순수 노이즈 점들이 T스텝을 거치며 하트 모양으로 서서히 모여드는지 확인해 보세요. 학습이 부족하면 뭉개진 구름 모양에 그칩니다.

목표 하트 모양 (참고용, 옅게) 생성 중인 샘플
0.15
8
학습 step 0
노이즈 예측 손실(MSE) –
생성 진행도 (t → 0)
대기 중

손실이 낮아질수록 예측망이 각 스텝의 노이즈를 더 정확히 맞힙니다. 학습이 덜 됐을 때 생성을 누르면 하트 윤곽이 흐릿하거나 한쪽으로 치우친 결과가 나올 수 있습니다 — GAN의 모드 붕괴와 비슷하게, 확산 모델도 학습이 부족하면 다양성이나 정확도가 떨어집니다.

5. 왜 확산 모델이 널리 쓰이게 됐나

GANVAE확산 모델(Diffusion)
학습 방식생성자·판별자 적대적 경쟁인코더·디코더 재구성 + 잠재분포 정규화노이즈 예측 지도학습 (정답 있음)
학습 안정성불안정 (모드 붕괴·진동)안정적안정적 (단순 MSE 손실)
생성 속도빠름 (forward 1회)빠름 (forward 1회)느림 (수십~수천 스텝 반복)
결과 품질선명하지만 다양성 제한 가능다양하지만 흐릿한 경향선명함 + 다양성 모두 우수
대표 사례StyleGAN, 딥페이크이미지 압축·표현 학습Stable Diffusion, DALL·E, Midjourney

Stable Diffusion이 빨라진 이유 — 잠재 확산(Latent Diffusion)

위 데모처럼 픽셀 공간에서 그대로 확산을 수행하면 고해상도 이미지는 스텝마다 계산량이 막대합니다. Stable Diffusion은 먼저 VAE 인코더로 이미지를 훨씬 작은 잠재 공간(latent space)으로 압축한 뒤, 그 잠재 벡터 위에서만 확산 과정을 수행하고, 마지막에 VAE 디코더로 다시 이미지로 복원합니다. 또한 CLIP 텍스트 인코더로 프롬프트를 벡터화해 매 역방향 스텝마다 노이즈 예측망(U-Net)에 조건으로 넣어주기 때문에 "고양이가 그려진 우주비행사" 같은 텍스트 조건부 생성이 가능해집니다.

6. 파이썬 의사코드

# ── 학습: 노이즈 예측망이 ε를 맞히도록 ──
for step in range(num_steps):
    x0   = sample_real_data()
    t    = random_int(1, T)
    eps  = sample_gaussian()
    xt   = sqrt(alpha_bar[t]) * x0 + sqrt(1 - alpha_bar[t]) * eps

    eps_hat = noise_predictor(xt, t)
    loss    = mse(eps_hat, eps)
    update(noise_predictor, grad(loss))

# ── 생성: 순수 노이즈에서 T번 역방향으로 되돌리기 ──
x = sample_gaussian()                    # x_T
for t in range(T, 0, -1):
    eps_hat = noise_predictor(x, t)
    mean = (x - beta[t] / sqrt(1 - alpha_bar[t]) * eps_hat) / sqrt(alpha[t])
    z = sample_gaussian() if t > 1 else 0
    x = mean + sqrt(beta[t]) * z
# x 는 이제 x_0, 즉 새로 생성된 샘플
핵심 포인트: 노이즈 예측망은 매 스텝 같은 하나의 네트워크를 재사용합니다(스텝별로 다른 네트워크를 두지 않음). 대신 t 정보를 입력에 함께 넣어줘서, 하나의 신경망이 "노이즈가 많이 남은 초반 스텝"과 "거의 다 지워진 후반 스텝"을 구분해서 서로 다르게 반응하도록 학습됩니다.

핵심 정리

  • 확산 모델 = 정방향(데이터 → 노이즈)과 역방향(노이즈 → 데이터) 두 과정으로 구성
  • 정방향은 재매개변수화 덕분에 x_t = √ᾱ_t·x₀ + √(1−ᾱ_t)·ε 로 한 번에 계산 가능
  • 신경망은 "이 노이즈 낀 데이터에 어떤 ε가 섞였는가"를 맞히는 지도학습(MSE)으로 훈련
  • 생성은 순수 노이즈에서 출발해 예측한 ε를 한 스텝씩 빼며 T번 반복하는 과정
  • GAN보다 학습이 안정적이지만, 스텝을 여러 번 반복해야 해서 생성 속도가 느림
  • Stable Diffusion은 잠재 공간(latent space)에서 확산을 수행하고 텍스트 조건을 더해 실용 속도를 확보