← AI 놀이터 홈으로

🌫️ 확산 모델 (Diffusion Model)

노이즈에서 그림이 태어나다 — 그림을 노이즈로 망가뜨리는 법을 정해두고, 그 '되돌리기'로 새 그림을 만들어요. Stable Diffusion·DALL·E의 원리!

📖 따라하기 가이드 — 1 / 6 단계

Step 1. AI 그림 생성기의 원리

Stable Diffusion, DALL·E 같은 그림 생성 AI의 심장이 확산 모델이에요. 화면의 파란 점 200개가 하트 모양으로 놓여 있죠? 이 점들이 하나의 "그림"이라고 상상해 주세요 (실제 그림에서는 점 하나하나가 픽셀이에요). 확산 모델의 아이디어는 딱 두 가지 — 그림에 노이즈를 조금씩 섞어 완전히 망가뜨리는 법을 정해두고, 그 되돌리기를 배우는 거예요.

점 200개가 하나의 "그림"이에요 (실제 모델에서는 픽셀 수십만 개). 파랑일수록 또렷한 원본, 회색일수록 노이즈에 가까운 상태예요.

👀 읽는 법: t 슬라이더를 문지르면 모양이 "녹았다 얼었다" 해요. 🎬 생성을 누르면 새 노이즈 구름에서 모양이 태어나는 과정이 재생돼요. 실제 확산 모델은 이 되돌리기를 신경망이 학습해서 해내요 — 이 화면은 목표를 알려준 개념 시연이에요.

🎛️ 노이즈 실험실

이 데모는 목표 배치를 매번 새로 뽑아 결과가 조금씩 달라요. 진짜 확산 모델은 시작 노이즈가 매번 달라서 같은 그림이 두 번 나오지 않아요.

📊 지금 상태

현재 노이즈 단계
0%
생성 스텝 수
40스텝
마지막 생성 시간
—
생성 횟수
0회

앞 방향은 정해진 규칙(노이즈 섞기)이라 배울 게 없어요. 어려운 건 거꾸로 — 실제 모델은 "이 안에 섞인 노이즈가 얼마나 되는지"를 맞히는 신경망을 훈련해서 한 겹씩 벗겨냅니다.

🧪 이렇게 실험해 보세요

  1. t를 30% 정도만 올려 보세요 — 흐릿해도 아직 하트인 걸 알 수 있어요. 몇 %부터 못 알아보게 되나요?
  2. 🎬 생성을 연달아 눌러 하트가 매번 어떻게 다른지 비교
  3. 스텝 4 vs 60으로 생성해 테두리 거칠기를 비교
  4. ⭐ 별로 바꿔 같은 노이즈 실험을 반복해 보세요

🧮 수식과 파이썬

x_t = √(ᾱ_t)·x₀ + √(1−ᾱ_t)·ε
원본을 조금씩 흐리며 노이즈를 섞어요. 생성은 이걸 거꾸로 — 신경망이 '섞인 노이즈'를 예측해 한 겹씩 벗겨냅니다.
🐍 파이썬 코드로 보면? (펼치기)
# 실전: diffusers 라이브러리 — 4줄이면 그림이 나와요
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
image = pipe("a watercolor heart", num_inference_steps=40).images[0]
image.save("heart.png")

# 개념 의사코드: DDPM의 두 방향
# (1) 앞 방향 — 노이즈 섞기 (훈련 데이터 만들기)
#     x_t = sqrt(abar_t) * x0 + sqrt(1 - abar_t) * eps
#     신경망(U-Net)은 x_t를 보고 "섞인 eps"를 맞히도록 학습해요.

# (2) 거꾸로 — 생성 (오늘 🎬 버튼이 한 일)
x = torch.randn(3, 512, 512)           # 완전한 노이즈에서 출발
for t in reversed(range(num_steps)):   # t = 999 → 0
    eps_hat = unet(x, t, prompt_emb)   # "이 안에 섞인 노이즈는 이만큼!"
    x = remove_noise(x, eps_hat, t)    # 예측한 노이즈를 한 겹 벗겨냄
# 루프가 끝나면 x가 그림이 되어 있어요 (스텝이 적으면 거칠어요)