주제: 8-3 DDPM (Denoising Diffusion Probabilistic Model)
분류: generative
타입: concept
난이도: 중급
선수지식: 있음 — 확률분포, Gaussian Noise, Neural Network
GAN처럼 한 번에 이미지를 뽑는 접근과 달리, diffusion 계열은 생성 과정을 수백 단계의 작은 복원 문제로 쪼갠다. 그래서 학습은 비교적 안정적이고 생성 품질도 높지만, 대신 샘플링이 느릴 수 있다.
이 문서를 읽을 때는 forward process와 reverse process를 꼭 짝으로 생각하면 좋다. 학습은 "어떻게 더럽혀졌는지"를 알고, 생성은 "그 더럽혀진 상태를 어떻게 되돌릴지"를 배우는 과정이다.
문제 설정
이미지를 생성하는 또 다른 접근은 점진적으로 노이즈를 제거하는 것입니다.
핵심 아이디어:
- 데이터에 노이즈를 점진적으로 추가
- 그 노이즈를 다시 제거하는 모델을 학습
이 방식이 Diffusion Model이며 대표 모델이 DDPM입니다.
GAN처럼 한 번에 이미지를 뽑는 접근과 달리, diffusion 계열은 생성 과정을 수백 단계의 작은 복원 문제로 쪼갠다. 그래서 학습은 상대적으로 안정적이고, 생성 품질도 매우 좋지만, 대신 샘플링이 느려질 수 있다.
이 문서를 읽을 때는 forward process와 reverse process를 꼭 짝으로 생각하면 좋다. 학습은 "어떻게 더럽혀졌는지"를 알고, 생성은 "그 더럽혀진 상태를 어떻게 되돌릴지"를 배우는 과정이다.
시각 자료로 먼저 보기
1. DDPM 핵심 아이디어
DDPM은 두 단계로 구성됩니다.
| 단계 | 설명 |
|---|---|
| Forward Process | 이미지에 노이즈 추가 |
| Reverse Process | 노이즈 제거 |
Real Image
↓
Noise Addition
↓
Pure Noise
↓
Denoising Model
↓
Generated Image
2. Forward Diffusion Process
forward 과정에서는 이미지에 점진적으로 Gaussian noise를 추가합니다.
기호 의미
- x_t : t 단계 이미지
- β_t : noise variance
- N : Gaussian distribution
왜 필요한가
데이터를 점진적으로 noise distribution으로 변환합니다.
주의점
β 값이 너무 크면 정보가 너무 빨리 사라집니다.
3. Closed-form 표현
forward process는 다음과 같이 표현할 수 있습니다.
기호 의미
- x_0 : 원본 이미지
- ε : Gaussian noise
- ᾱ_t : cumulative noise factor
왜 중요한가
任의의 timestep의 noisy image를 바로 계산할 수 있습니다.
4. Reverse Diffusion Process
reverse 과정은 노이즈를 제거하여 이미지를 복원합니다.
기호 의미
- θ : neural network parameter
모델은 다음 값을 예측합니다.
왜 필요한가
현재 noisy image에서 noise를 추정합니다.
5. DDPM 학습 목표
DDPM은 noise prediction을 학습합니다.
기호 의미
- ε : 실제 noise
- ε_θ : 모델이 예측한 noise
왜 필요한가
정확한 noise 제거 모델을 학습합니다.
주의점
loss는 MSE 기반입니다.
6. Generation 과정
생성은 pure noise에서 시작합니다.
x_T ~ N(0, I)
↓
x_T-1
↓
x_T-2
↓
...
↓
x_0
즉 노이즈를 점진적으로 제거합니다.
7. Diffusion 직관
- forward → 이미지 파괴
- reverse → 이미지 복원
모델은 복원 과정을 학습합니다.
8. GAN vs Diffusion
| 특징 | GAN | Diffusion |
|---|---|---|
| 학습 구조 | min-max game | denoising |
| training stability | 불안정 | 안정적 |
| sampling speed | 빠름 | 느림 |
9. Diffusion 구조
Image
↓
Forward Noise
↓
Gaussian Noise
↓
Reverse Model (U-Net)
↓
Generated Image
대부분 diffusion 모델은 U-Net 구조를 사용합니다.
코드-수식 연결
| 개념 | 코드 | 설명 |
|---|---|---|
| noise 생성 | torch.randn_like(x) |
Gaussian noise |
| forward noise | x_t = sqrt_alpha * x0 + sqrt_beta * noise |
noisy image 생성 |
| noise prediction | model(x_t,t) |
noise estimation |
자주 하는 오해 5개
- Diffusion 모델은 GAN의 변형이라고 생각한다
- forward diffusion도 학습한다고 생각한다
- noise prediction은 중요하지 않다고 생각한다
- sampling 과정은 한 번에 이루어진다고 생각한다
- Diffusion 모델은 항상 빠르다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- DDPM에서 forward diffusion은 어떤 역할을 하는가?
- reverse diffusion은 어떤 방식으로 학습되는가?
- 왜 noise prediction을 학습하는가?
- Diffusion 모델에서 timestep은 어떤 의미인가?
- GAN과 diffusion 모델의 차이는 무엇인가?