🤖 Deep Learning

Denoising Diffusion Probabilistic Models (DDPM)

date
Jul 2, 2025
slug
ddpm
author
status
Public
tags
Deep Learning
Generative Models
Diffusion Models
summary
Noise를 한 번에 추가하고, 한 스텝씩 걷어내는 방법
type
Post
thumbnail
category
🤖 Deep Learning
updatedAt
Jul 3, 2025 02:00 AM

Denoising Diffusion Probabailistic Models (DDPM)

notion image
 

Introduction

notion image
  • GAN: 를 가지고 이미지를 만들어내면, 그 이미지랑 실제 이미지를 가지고 discriminator가 진짜인지 아닌지 판단
  • VAE: 기본적으로 AE니까 encoder를 이용해 를 만들었다가 decoder를 이용해 을 만들어 내는 구조
  • Diffusion: 열역학 제 2법칙(엔트로피가 점점 증가한다. 즉, 자연은 무질서해지는 방향으로 이동한다)과 비슷함. 픽셀마다 noise를 더해주거나 빼주거나 하는 작업을 1000번을 함.
 

Forward (Diffusion) Process

notion image
  • : 가 주어졌을 때, 부터 까지 순차적으로 만드는 것은 : 전 단계 이 주어졌을 때, 다음 단계 를 만드는데 라는 분포를 사용한다.
    • 는 정규 분포를 따르는데, 평균은 전 단계 에 어떤 가중치 가 붙어있는 값이고 분산은 를 가짐.
      • 만약 가 0이라면 이전 단계와 같아지며, 반대로 1이라면 완전 noise가 될 것. 즉, 가 커질 수록 noise가 커짐.
 
notion image
  • 대신 을 넣으면 가 되고, 이걸 까지 함.
    • Gaussian 분포에서 분산이 다를 때 merge 시키면 초록색 상자와 같이 분산끼리만 합쳐진 것처럼 정리가 됨.
  • 최종 부터 까지 다 noise를 추가했을 때의 분포가 에서 1스텝 추가했을 때와 식의 형태가 똑같음. (그냥 값들만 다 곱해주면 됨!)
    • 를 Diffusion kernel이라고 부름. (생성이 아니라 noise 추가하는 함수)
⇒ 한 번에 그냥 noise 추가하고 sampling 하면 똑같다.
 

Reverse (Denoising) Process

notion image
  • 사실 원하는 건 에서 로 거꾸로 가는 를 알고 싶음.
    • 왜냐면 한 번에 에서 으로 가는 건 열역학 제 2법칙에 위배되므로 너무 어려움. 그러나 에서 한 단계 noise 걷어내는 정도는 해볼만 함.
  • 는 평균 0, 분산 인 정규 분포를 따르는데, 그 중에서 하나를 샘플링해서 한 단계씩만 denoising 한 들을 다 곱하면 0부터 까지 다 복원이 될 것 이다. ==
: 최종적으로 한 단계 denoising한 은 어떤 평균과 분산을 따르는 분포를 갖는데, 그걸 를 가지고 추론을 해보자
 
notion image
  • 목표: 실제 세상에서 이미지()가 나올 확률 구하기
⇒ 결국 를 최소화 하면, 우리가 원하는 목표도 같이 optimize 될 것
 
notion image
  • 분자: 1에서 까지 noise 추가하는 forward 과정, 분모: 에서 0까지 denoising하는 reverse 과정
  • 파란 부분에 약간의 트릭이 필요함. 가 뜬금없이 조건으로 주어지는데 만약 가 주어지지 않으면 3가지 다 알 수가 없음(열역학 제 2법칙 위배). 그런데 원래 이미지()가 주어지고 1스텝만 걷어내 봐는 할만 할 것 같음. (실제로 이 주어지지 않으면 잘 안 된다고 함)
  • 정의랑 마지막 그대로 쓰면 최종 식이 됨.
 
notion image
  • 그래서 이걸 최소화 하면 우리가 원하는 이 세상에 이미지가 존재할 확률의 확률을 최적화 할 수 있음.
    • 노란색 term: 학습할 수 있는 parameter가 없음
    • 파란색 term: 별도의 Gaussian sample 만들어서 하면 해결이 된다고 함
    • 빨간색 term: 에서 로 denoising하는 를 실제 로 근사하는 것
 
notion image
  • 는 noise를 추가하는 과정이므로 앞에서 정의한 diffusion kernel 사용 후 정규 분포 미분한 것 (※ 정규 분포 미분 참고: PDF)
  • 모델링 하고자 하는 것이 이니까 으로 묶음
⇒ 결국 Gaussian 분포 3개를 → Gaussian 분포 1개로 만들고 싶어서 하는 것
 
notion image
  • 먼저 완전 제곱꼴로 만들건데, 정규 분포랑 같은 형태임
    • 그리고 를 완전 제곱꼴로 만드는 공식 적용하면 를 구할 수 있음
      • 지금 를 구하는 이유는 를 (를 받지 않는) 알고 싶기 때문이므로 를 없애고 싶어서 diffusion kernel을 사용
에다가 어떤 noise 만큼 더해주고 상수배 해주면 이 됨 (즉, 배워야 되는 평균과 분산의 문제가 나온 것임)
 
notion image
  • Optimize하려고 했던 loss function에서, 노란 부분이 위에서 구한 것임
    • 모델 이 정답에 근사하게 하고자 하는 게 목적
 
notion image
  • 다시 정리하자면, 가 주어졌을 때 로 한 단계 noise 걷어내는 걸 하고 싶은 건데 ( )
    • 정답으로 삼을 건 까지 추가로 주어졌을 때, 한 번 걷어낸 것이고 ( )
      그걸 을 통해 minimize 시키는 것
  • 정의대로 변환하고, 정답에서 나온 평균과 예측한 평균에 각각 대입
    • 는 noise 시점까지 더해준 거니까 그냥 forward process 그대로 전치해주고,
      • 이제 noise 를 예측하면 됨
        ⇒ input은 부터 noise가 추가되어왔던 1. 이미지와 몇 번째 단계인지를 알려주는 2. 이걸 가지고 단계에서 얼만큼 noise가 추가 됐는지 찾아내는 모델
    • 앞에 상수항이 나올 건데, 이게 수학적으로 알맞지(?) 않아서 실제로도 저것 때문에 불안정하다고 함 → 그냥 무시하고 뒤에만 minimize하니까 더 잘 되더라~
 
notion image
  • input과 output 크기가 같아야 하고 같은 noise 만큼 제거해야 하기 때문에 U-Net이 잘맞는 fit임
  • 하나의 모델을 가지고 모든 스텝에 대해서 해줘야 하기 때문에, 시간에 대한 representation 배워서 넣는 거 하나만 추가
 
notion image
 
notion image
 
notion image
  • 너무 오래 걸리더라
 

Score-Based Generative Modeling with Stochastic Differential Equations (SDEs)

notion image
 
notion image
  • Score matching: Data의 manifold에 있는 분포를 gradient를 가지고 모델링을 해서 어디서 출발하든 데이터가 모여 있는 방향으로 이동할 수 있는 지형도를 만들고, Langevin dynamics를 이용해서 sampling하는 방법
  • DDPM: 매번 정답이 되는 noise를 맞춰서 제거하는 방법
 
notion image
  • 둘이 전혀 다른 것 같은데 알고 보니 서로 비슷한 방법임!
  • NCSN 식에 DDPM의 식 을 대입 → DDPM Loss function과 비슷해지네?
 
notion image
  • 반대로 DDPM에서 출발해도 마찬가지
⇒ 철학은 거의 똑같다!
 
notion image
 
notion image
 
notion image