검색
← 모듈 로드맵

확산 모델 실전: 샘플링 · DDIM · 가이던스 · 잠재 확산

강의 · 준전문가 · KAITABASE 정리

원제 · Diffusion Models in Practice (Lilian Weng · DDIM · CFG · LDM 참고)

DDIM 단계 줄이기 · 분류기/분류기 없는 가이던스 · 잠재 확산과 SD 설정값을 식과 숫자로

먼저 알아야 할 것

DDPM 순방향 · 역방향 과정잡음 예측 손실오토인코더와 VAE교차 어텐션

다루는 내용

DDPM 뒤에 실제로 쓰이는 확산 기법을 정리합니다. 잡음 예측으로 원본을 추정하는 식, DDIM의 결정적 샘플링과 단계 건너뛰기(CIFAR-10 FID 표), 분류기 가이던스와 분류기 없는 가이던스의 식과 품질-다양성 맞바꿈(ImageNet 64 표)을 손계산과 함께 설명합니다. 잠재 확산의 압축 · 교차 어텐션과 Stable Diffusion 파이프라인 기본값의 뜻을 다룹니다.

해설

확산 모델 실전: 샘플링 · DDIM · 가이던스 · 잠재 확산

DDPM은 1,000단계를 다 밟아야 이미지 한 장이 나옵니다. 실제로 쓰는 확산 모델은 여기에 세 가지를 더합니다 — 단계를 줄이는 샘플러(DDIM), 원하는 조건을 더 강하게 따르게 하는 가이던스, 작은 압축 공간에서 확산을 돌리는 잠재 확산 입니다. Stable Diffusion을 쓸 때 만지는 num_inference_steps, guidance_scale, eta 가 각각 무엇인지 식과 숫자로 정리합니다.

항목내용
참고 출처Lilian Weng, What are Diffusion Models?(2021), Song 외 DDIM(ICLR 2021), Dhariwal · Nichol(2021), Ho · Salimans 분류기 없는 가이던스(2022), Rombach 외 잠재 확산(CVPR 2022), Hugging Face Diffusers 문서
트랙 · 수준생성 모델 · 중급
이 수업이 다루는 범위순방향 닫힌 식 복습, 잡음 예측에서 x0x_0 추정하기, DDPM 샘플링 한 걸음, DDIM 결정적 샘플링과 단계 건너뛰기, 분류기 가이던스, 분류기 없는 가이던스, 잠재 확산 · 교차 어텐션, 실무 설정값 읽기

들어가기 전에

한눈에 보기

  • 아무 시점의 잡음 이미지 xtx_t 를 한 번에 만드는 식과, 거기서 원본 x0x_0 를 거꾸로 추정하는 식을 짝으로 압니다.
  • DDIM이 같은 학습 모델로 단계를 1,000 → 50 이하로 줄이는 원리와 CIFAR-10 결과를 봅니다.
  • 분류기 가이던스와 분류기 없는 가이던스(CFG)의 식을 비교하고, w=3w=3 일 때 잡음 추정이 어떻게 바뀌는지 손계산합니다.
  • 512×512 이미지를 64×64×4 잠재로 줄이면 계산 대상이 48배 줄어든다는 것을 계산합니다.
  • guidance_scale=7.5, num_inference_steps=50, eta=0.0 같은 기본값이 무엇을 뜻하는지 읽을 수 있습니다.

1. 복습: 잡음 섞기와 거꾸로 추정하기

직관(해설용 비유). 사진에 안개를 점점 짙게 뿌리는 것이 순방향, 안개를 한 겹씩 걷는 것이 역방향입니다. 안개 농도(시점 tt)만 알면 원본 사진과 안개를 섞는 비율을 바로 계산할 수 있습니다.

xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I)x_t=\sqrt{\bar\alpha_t}\,x_0+\sqrt{1-\bar\alpha_t}\,\epsilon,\qquad \epsilon\sim\mathcal N(0,I)

신경망 ϵθ(xt,t)\epsilon_\theta(x_t,t) 가 섞인 잡음을 맞히면, 위 식을 x0x_0 에 대해 풀어 원본을 추정할 수 있습니다.

x^0=xt−1−αˉt ϵθ(xt,t)αˉt\hat x_0=\frac{x_t-\sqrt{1-\bar\alpha_t}\,\epsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}}
기호뜻
αˉt\bar\alpha_t시점 tt 까지 남은 원본 신호 비율 ∏s≤t(1−βs)\prod_{s\le t}(1-\beta_s). 1에서 0으로 줄어듦
βt\beta_t단계 tt 에서 더하는 잡음 양(잡음 일정)
ϵθ\epsilon_\theta섞인 잡음을 예측하는 신경망(U-Net 또는 트랜스포머)
x^0\hat x_0지금 추정한 깨끗한 원본

숫자로 해 보기. DDPM 설정(T=1000T=1000, β\beta 를 10−410^{-4} 에서 0.020.02 까지 선형)을 코드로 계산하면 αˉ500≈0.0786\bar\alpha_{500}\approx0.0786, αˉ500≈0.28\sqrt{\bar\alpha_{500}}\approx0.28 입니다. 절반 시점에서 원본 신호는 진폭 기준 28%만 남습니다. 마지막 αˉ1000≈4.0×10−5\bar\alpha_{1000}\approx4.0\times10^{-5} 로 사실상 순수 잡음입니다.

2. DDPM 샘플링: 확률적으로 한 걸음씩

DDPM은 매 단계 평균을 계산하고 새 잡음을 조금 더합니다(DDPM 해설 의 식).

xt−1=1αt(xt−βt1−αˉtϵθ(xt,t))+σtz,z∼N(0,I)x_{t-1}=\frac{1}{\sqrt{\alpha_t}}\Big(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t)\Big)+\sigma_t z,\qquad z\sim\mathcal N(0,I)

매 단계 새 잡음 zz 가 들어가므로 같은 시작점이라도 결과가 매번 다릅니다. 그리고 각 단계가 아주 작은 변화만 다루도록 학습되었기 때문에, 단계를 크게 건너뛰면 품질이 무너집니다. 이것이 1,000단계가 필요한 이유입니다.

3. DDIM: 같은 모델, 더 적은 단계

Song · Meng · Ermon(ICLR 2021)은 학습 목표는 그대로 두고 "생성 과정"만 바꿨습니다. 핵심은 한 걸음을 (추정한 원본) + (잡음 쪽 방향) + (선택적 무작위 잡음) 세 조각으로 쓰는 것입니다. 논문 식 (12)를 이 수업의 기호(αˉ\bar\alpha)로 옮기면 다음과 같습니다(논문은 αt\alpha_t 를 우리 αˉt\bar\alpha_t 뜻으로 씁니다).

xt−1=αˉt−1 x^0+1−αˉt−1−σt2  ϵθ(xt,t)+σt ϵtx_{t-1}=\sqrt{\bar\alpha_{t-1}}\,\hat x_0+\sqrt{1-\bar\alpha_{t-1}-\sigma_t^2}\;\epsilon_\theta(x_t,t)+\sigma_t\,\epsilon_t
기호뜻
x^0\hat x_01절 식으로 추정한 원본
둘째 항"xtx_t 를 가리키는 방향" — 다음 시점에 남아 있어야 할 잡음 몫
σt\sigma_t무작위성의 크기. σt=η⋅(DDPM의 값)\sigma_t=\eta\cdot(\text{DDPM의 값})
η\eta0이면 결정적(DDIM), 1이면 DDPM과 같은 확률적 과정

단계 건너뛰기. 이 식은 t−1t-1 대신 아무 이전 시점 s<ts<t 로도 쓸 수 있습니다. 그래서 1,000개 시점 중 일부(예: 50개)만 골라 큰 걸음으로 내려갑니다. 다시 학습할 필요가 없습니다.

숫자로 해 보기(해설용 1차원 예). αˉt=0.5\bar\alpha_t=0.5, αˉs=0.8\bar\alpha_{s}=0.8 인 두 시점 사이를 η=0\eta=0 으로 건너뜁니다. 현재 xt=1.0x_t=1.0, 신경망 예측 ϵθ=0.6\epsilon_\theta=0.6 입니다.

  1. 원본 추정: x^0=(1.0−0.5×0.6)/0.5=(1.0−0.424)/0.707≈0.814\hat x_0=(1.0-\sqrt{0.5}\times0.6)/\sqrt{0.5}=(1.0-0.424)/0.707\approx0.814
  2. 다음 값: xs=0.8×0.814+0.2×0.6≈0.728+0.268=0.997x_s=\sqrt{0.8}\times0.814+\sqrt{0.2}\times0.6\approx0.728+0.268=0.997

무작위 항이 없으므로 같은 xTx_T 에서 시작하면 늘 같은 이미지가 나옵니다. 논문은 이 성질 덕분에 잠재 공간에서 의미 있는 보간이 가능하다고 보였습니다.

논문이 보고한 수치(CIFAR-10, FID — 낮을수록 좋음).

단계 수 SS1020501001000
DDIM (η=0\eta=0)13.366.844.674.164.04
DDPM (η=1\eta=1)41.0718.368.015.784.73

50단계 DDIM이 1,000단계 확률적 샘플링(η=1\eta=1)보다 좋습니다. 초록은 같은 품질을 벽시계 시간 기준 10~50배 빠르게 낸다고 요약합니다. (DDPM 원 논문의 다른 분산 설정 σ^\hat\sigma 는 1,000단계에서 3.17로 가장 좋지만, 단계를 줄이면 급격히 나빠집니다.)

4. 분류기 가이던스: 분류기의 기울기로 밀어 주기

문제. 조건부 확산 모델(ϵθ(xt,c)\epsilon_\theta(x_t,c), cc 는 클래스나 텍스트)은 조건을 "대체로" 따르지만, 더 조건다운 이미지를 원할 때가 있습니다. GAN의 잘라내기 요령처럼 다양성을 조금 버리고 품질을 올리는 손잡이가 필요합니다.

Dhariwal · Nichol(2021)은 잡음 이미지 xtx_t 를 보고 클래스를 맞히는 분류기 pϕ(c∣xt)p_\phi(c\mid x_t) 를 따로 학습하고, 그 기울기로 잡음 추정을 고쳤습니다. 분류기 없는 가이던스 논문(Ho · Salimans)의 표기로 쓰면 다음과 같습니다.

ϵ~θ(zλ,c)=ϵθ(zλ,c)−w σλ ∇zλlog⁡pθ(c∣zλ)\tilde\epsilon_\theta(z_\lambda,c)=\epsilon_\theta(z_\lambda,c)-w\,\sigma_\lambda\,\nabla_{z_\lambda}\log p_\theta(c\mid z_\lambda)
기호뜻
zλz_\lambda잡음 수준 λ\lambda 의 잡음 이미지(xtx_t 와 같은 역할)
σλ\sigma_\lambda그 시점의 잡음 표준편차
∇log⁡p(c∣z)\nabla\log p(c\mid z)"이 방향으로 바꾸면 분류기가 cc 라고 더 확신한다" 는 방향
ww가이던스 세기

이렇게 하면 대략 p(z∣c) p(c∣z)wp(z\mid c)\,p(c\mid z)^{w} 에서 뽑는 효과가 납니다. 분류기가 확신하는 쪽으로 질량이 몰려 품질 점수(IS)는 오르고 다양성은 줄어듭니다. 이 논문은 ImageNet 256×256에서 가이던스와 업샘플링을 함께 써 FID 3.94를 보고하며, 확산 모델이 당시 최고 GAN을 넘었다고 주장했습니다.

단점. 잡음 이미지용 분류기를 따로 학습해야 하고, 텍스트처럼 클래스가 정해지지 않은 조건에는 쓰기 어렵습니다.

5. 분류기 없는 가이던스(CFG)

Ho · Salimans(2022)는 분류기를 없앴습니다.

단계.

  1. 학습: 하나의 신경망을 조건부 · 무조건부 겸용으로 학습합니다. 학습 중 확률 puncondp_{\text{uncond}} 로 조건 cc 를 "빈 조건" ∅\varnothing 으로 바꿔 넣습니다. 그러면 ϵθ(z,c)\epsilon_\theta(z,c) 와 ϵθ(z)=ϵθ(z,∅)\epsilon_\theta(z)=\epsilon_\theta(z,\varnothing) 를 같은 신경망이 냅니다.
  2. 생성: 매 단계 신경망을 두 번(조건 있음 · 없음) 돌려 섞습니다.
ϵ~θ(zλ,c)=(1+w) ϵθ(zλ,c)−w ϵθ(zλ)\tilde\epsilon_\theta(z_\lambda,c)=(1+w)\,\epsilon_\theta(z_\lambda,c)-w\,\epsilon_\theta(z_\lambda)

직관. ϵ(z,c)−ϵ(z)\epsilon(z,c)-\epsilon(z) 는 "조건이 있을 때와 없을 때의 차이", 즉 조건이 미는 방향입니다. 그 방향을 ww 배만큼 더 밀어 줍니다. 논문은 이것이 베이즈 정리로 만든 "암묵적 분류기"의 기울기에서 영감을 받았다고 설명합니다.

숫자로 해 보기(해설용 1차원 예). 조건부 예측 0.80.8, 무조건부 예측 0.20.2, w=3w=3 이면 ϵ~=(1+3)(0.8)−3(0.2)=3.2−0.6=2.6\tilde\epsilon=(1+3)(0.8)-3(0.2)=3.2-0.6=2.6 입니다. 조건 쪽 차이 0.60.6 을 4배로 키워 무조건부 값에 더한 것(0.2+4×0.6=2.60.2+4\times0.6=2.6)과 같습니다.

구현에서 보는 값. Diffusers 같은 라이브러리는 같은 식을 ϵu+s(ϵc−ϵu)\epsilon_u+s(\epsilon_c-\epsilon_u) 로 쓰고 ss 를 guidance_scale 이라 부릅니다. 위 식과 비교하면 s=1+ws=1+w 입니다. Stable Diffusion 파이프라인 문서의 기본값은 guidance_scale=7.5 이고, 1보다 클 때 가이던스가 켜진다고 설명합니다. 매 단계 신경망을 두 번 돌리므로 계산은 약 두 배입니다.

논문이 보고한 수치(ImageNet 64×64, puncond=0.1p_{\text{uncond}}=0.1).

ww0 (가이던스 없음)0.10.31.04.0
FID ↓1.81.553.0312.626.22
IS ↑53.7166.1192.8170.1260.2

ww 를 키우면 IS(개별 품질 · 확신)는 단조롭게 오르고 FID(분포 전체의 닮음)는 작은 ww 에서 가장 좋다가 나빠집니다. 품질과 다양성의 맞바꿈 이 한 손잡이로 조절된다는 뜻입니다. 논문은 puncondp_{\text{uncond}} 로 0.1 · 0.2 · 0.5를 비교했고 0.1과 0.2가 0.5보다 조금 나았습니다.

6. 잠재 확산: 작은 공간에서 확산하기

문제. 픽셀 공간에서 확산 모델을 학습 · 추론하면 비쌉니다. 그런데 픽셀의 상당 부분은 사람 눈에 거의 안 보이는 세부입니다.

Rombach 외(CVPR 2022)의 잠재 확산 모델(LDM) 은 두 단계로 나눕니다.

  1. 압축기 학습: 오토인코더 E,D\mathcal E,\mathcal D 를 먼저 학습해 이미지를 가로세로 ff 배 작은 잠재 z=E(x)z=\mathcal E(x) 로 줄입니다.
  2. 잠재에서 확산: zz 에 잡음을 섞고 ϵθ(zt,t)\epsilon_\theta(z_t,t) 를 학습합니다(목표 식은 DDPM과 같은 꼴). 생성 뒤 D\mathcal D 로 이미지로 펼칩니다.
  3. 조건 넣기: 텍스트 등은 인코더 τθ\tau_\theta 로 벡터 열로 바꾸고, U-Net 중간 특징이 쿼리, 텍스트 표현이 키 · 값인 교차 어텐션 으로 넣습니다.

논문은 f∈{1,2,4,8,16,32}f\in\{1,2,4,8,16,32\} 를 비교해 f=4∼16f=4\sim16 이 효율과 품질의 균형이 좋고 특히 4와 8이 좋다고 보고했습니다.

숫자로 해 보기. Stable Diffusion v1-4 모델 카드는 압축 배율 f=8f=8, 잠재 모양 H/f×W/f×4H/f\times W/f\times4 라고 밝힙니다. 512×512 RGB 이미지는 512×512×3=786,432512\times512\times3=786{,}432 개 값, 잠재는 64×64×4=16,38464\times64\times4=16{,}384 개 값으로 48배 작습니다. 텍스트 인코더는 고정된 CLIP ViT-L/14입니다(CLIP).

mermaid
flowchart LR
  P[텍스트 프롬프트] --> TE[텍스트 인코더<br/>CLIP ViT-L/14]
  N[잡음 잠재 64×64×4] --> U[U-Net 잡음 예측]
  TE -->|교차 어텐션| U
  U --> CFG[가이던스 섞기<br/>ε_u + s·ε_c − ε_u]
  CFG --> SCH[샘플러 한 걸음<br/>DDIM 등]
  SCH -->|50번 반복| U
  SCH --> DEC[VAE 디코더]
  DEC --> IMG[512×512 이미지]

7. 실무 설정값 읽기

Diffusers의 Stable Diffusion 파이프라인 기본값을 예로 듭니다.

설정기본값뜻 · 조절 효과
num_inference_steps50샘플러 단계 수. 늘리면 대체로 품질 ↑, 속도 ↓
guidance_scale7.5CFG 세기 s=1+ws=1+w. 키우면 프롬프트를 더 따르지만 다양성 ↓, 너무 크면 색이 과포화되기 쉬움
eta0.0DDIM의 η\eta. 0이면 결정적. DDIM 스케줄러에서만 쓰임
negative_prompt없음가이던스를 쓸 때 "빼고 싶은 것"을 적는 프롬프트
generator(시드)무작위시작 잡음을 고정해 결과를 재현

CFG 논문도 w=3w=3 그림에서 강하게 가이드한 표본의 색이 포화되는 경향을 언급합니다. 실무에서 값을 고를 때는 프롬프트 충실도와 자연스러움을 눈으로 함께 확인합니다.

연습 문제

  1. αˉt=0.36\bar\alpha_t=0.36, xt=0.5x_t=0.5, ϵθ=0.4\epsilon_\theta=0.4 일 때 x^0\hat x_0 은?
    • 풀이: 0.36=0.6\sqrt{0.36}=0.6, 0.64=0.8\sqrt{0.64}=0.8. x^0=(0.5−0.8×0.4)/0.6=0.18/0.6=0.3\hat x_0=(0.5-0.8\times0.4)/0.6=0.18/0.6=0.3 입니다.
  2. CFG에서 조건부 예측 −0.5-0.5, 무조건부 0.10.1, w=2w=2 일 때 ϵ~\tilde\epsilon 은? 같은 설정의 guidance_scale 은?
    • 풀이: 3(−0.5)−2(0.1)=−1.73(-0.5)-2(0.1)=-1.7, s=1+w=3s=1+w=3 입니다.
  3. 768×768 이미지를 f=8f=8, 4채널 잠재로 줄이면 잠재 크기와 축소 배율은?
    • 풀이: 96×96×4=36,86496\times96\times4=36{,}864, 원본 768×768×3=1,769,472768\times768\times3=1{,}769{,}472 이므로 48배입니다(채널 비 3:4와 f2=64f^2=64 로 늘 64×3/4=4864\times3/4=48).
  4. DDIM 50단계 + CFG를 쓰면 이미지 한 장에 신경망을 몇 번 호출하나요?
    • 풀이: 단계마다 조건 · 무조건 두 번이므로 100번입니다(두 입력을 한 배치로 묶어 한 번에 돌리는 구현이 많습니다).

스스로 점검

  1. DDIM이 다시 학습하지 않고 단계를 줄일 수 있는 이유는?
    • 답: DDIM은 학습 목표(잡음 예측)는 DDPM과 같고 생성 과정만 다르게 정의합니다. 각 걸음을 "추정 원본 + 잡음 방향"으로 써서 임의의 이전 시점으로 바로 건너뛸 수 있기 때문입니다.
  2. 분류기 없는 가이던스의 학습에서 조건을 일부러 지우는 이유는?
    • 답: 같은 신경망이 무조건부 예측도 하게 만들어, 생성 때 조건부와 무조건부의 차이(조건이 미는 방향)를 계산하기 위해서입니다.
  3. 잠재 확산이 픽셀 확산보다 싼 이유와 대가는?
    • 답: 확산 신경망이 다루는 값의 개수가 크게 줄어들기 때문입니다(SD 기준 48배). 대가로 오토인코더의 복원 품질이 최종 품질의 상한이 됩니다.

용어 정리

용어쉬운 뜻
샘플러잡음에서 이미지로 내려가는 걸음 규칙(DDPM, DDIM 등)
DDIM같은 학습 모델로 결정적 · 적은 단계 생성을 하는 샘플러
η\etaDDIM 걸음의 무작위성 크기(0 결정적, 1 DDPM)
가이던스조건을 더 강하게 따르도록 잡음 추정을 고치는 기법
분류기 가이던스잡음 이미지용 분류기의 기울기로 고치는 방식
분류기 없는 가이던스(CFG)조건부 · 무조건부 예측의 차이를 키워 고치는 방식
puncondp_{\text{uncond}}학습 중 조건을 빈 조건으로 바꾸는 확률
잠재 확산오토인코더로 줄인 공간에서 돌리는 확산 모델
교차 어텐션이미지 특징이 쿼리, 텍스트 표현이 키 · 값인 어텐션
압축 배율 ff잠재의 가로세로가 원본보다 몇 배 작은지

더 깊이 보려면

다음에 볼 것

라이선스

본문은 KAITABASE 자체 해설입니다. 각 논문 · 문서는 요약 · 인용만 했고 표의 수치는 원문 표에서 일부 열만 골라 옮겼습니다. 1차원 숫자 예는 이 수업을 위해 만든 해설용 예입니다.

출처

AI 원리부터 이해하기 · 생성 모델 모듈

생성 모델 모듈 학습

이 글은 생성 모델 모듈의 학습 자료입니다. 전체 10개 자료 중 6번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

본문 자체 작성 · 참고 자료 Lilian Weng 블로그 · 각 논문 · Diffusers 문서