Denoising Diffusion Probabilistic Models(DDPM) - 비전공자(바로 나!)를 위한 정리

하는·2025년 2월 8일
0

컴퓨터 비전

목록 보기
7/10
post-thumbnail

Diffusion Model

ddpm 논문을 읽기 전 필요한 배경 지식으로 diffusion model이 있다.

Ddpm의 의의는

  • Diffusion Model을 딥러닝 기반 이미지 생성 모델로 발전시킴.
  • Neural Network를 활용한 Reverse Process 학습을 제안하여 실용화.
    에 있다
    ddpm 논문에서는 diffusion model을 diffusion Probabilistic Model이라고 지칭한다. '확률적' 관점을 더 강조한 느낌.

이미지에 점진적으로 노이즈를 추가하고, 노이즈를 다시 없애면서 원본 이미지를 복원
목표:

  • 고품질 이미지 생성
  • 이미지 복원 등

모델 개요

Forward Process

  1. q(x1:Tx0):=t=1Tq(xtxt1)q(x_{1:T} | x_0) := \prod_{t=1}^{T} q(x_t | x_{t-1})
  • 노이즈를 점진적으로 추가하는 과정
  • 전체 마르코프 과정의 결합 확률 분포
  • 각 시간 단계에서 노이즈를 추가하는 과정은 바로 직전 단계에만 의존한다.
  • 각 시간 단계에서 상태가 xtx_txt+1x_{t+1}로 변할 확률을 모두 고려한 결합 확률 분포

마르코프 과정:

현재 상태가 오로지 직전 상태에만 의존하는 확률 과정.
즉, 현재 xtx_t는 바로 이전 상태 xt1x_{t-1}만 참조하고 그 이전의 데이터와는 직접적인 관련이 없음.

그런데 왜 모든 시점의 확률을 곱할까?

수식은 마르코프 과정 전체에 대한 결합 확률 분포를 표현하기 때문임.각 단계의 확률을 개별적으로 정의x, 과정 전체에서 발생할 확률을 계산하려는 거다.
요소 설명
- q(x1:Tx0)q(x_{1:T} | x_0): 정방향 과정에서 원본 데이터 x0x_0가 주어졌을 때, x1x_1, x2x_2, ..., xTx_T까지 점진적으로 노이즈를 추가하는 전체 과정의 확률
- t=1Tq(xtxt1)\prod_{t=1}^{T} q(x_t | x_{t-1}): 각 단계에서 xt1x_{t-1}에서xtx_t로 변할 확률을 전부 곱한 것

  1. q(xtxt1)=N(xt;1βtxt1,βtI)q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t I)
  • t-1 단계에서 t 단계로 넘어갈 때 노이즈를 점진적으로 추가. 각 수식은 픽셀 하나의 값에 대해 적용된다. 즉, xtx_txt1x_{t-1}의 각 픽셀 값은 서로 같은 위치에서 매칭되고, 같은 위치의 xt1x_{t-1} 픽셀 값에 직접적인 영향(Markov Chain의 원리)을 받아 xtx_t의 값이 결정된다.

수식 설명

  • q(xtxt1)q(x_t | x_{t-1}): 이전 단계 xt1x_{t-1}가 주어졌을 때, xtx_t가 어떻게 분포하는지를 나타내는 조건부 확률 분포

  • N(xt;1βtxt1,βtI)N(x_t ; \sqrt{1 - \beta_t} x_{t-1}, \beta_t I):
    xtx_t는 평균이 1βtxt1\sqrt{1 - \beta_t} x_{t-1}, 분산이 βtI\beta_t I인 가우시안 분포에서 샘플링된 데이터
    = xtx_t의 모든 픽셀 값이 각 xt1x_{t-1}를 중심으로 하는 가우시안 분포에서 샘플링된 값

    • xtx_t: tt 시점의 노이즈가 추가된 데이터
    • xt1x_{t-1}: t1t-1 시점의 노이즈가 추가된 데이터
    • βt\beta_t: 각 시점에서 노이즈 크기를 조절하는 파라미터 (Variance Schedule)
    • N(μ,σ2)\mathcal{N}(\mu, \sigma^2): 평균이 μ\mu, 분산이 σ2\sigma^2가우시안 분포(정규분포)
    • II: 단위 행렬 (각 데이터 차원에서 독립적으로 노이즈가 추가됨을 의미)

Reverse Process

노이즈를 제거하면서 이미지를 복원
학습 목표: 역방향 확률 분포 모델링 (모델이 학습하는 부분)

수식

  1. pθ(x0:T):=p(xT)t=1Tpθ(xt1xt)p_\theta(x_{0:T}) := p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t)
  • 전체 마르코프 과정의 결합 확률 분포

  • xTx_T에서 시작해 x0x_0으로 도달할 때의 확률을 계산하는 과정

  • 이 노이즈에서 시작했을 때, 특정한 과정을 거쳐 원래 데이터로 복원될 확률은 얼마일까?

    요소 설명

    • p(xT)p(x_T): 초기 상태의 노이즈 확률 분포. 초기는 완전 노이즈이기 때문에 아마 가우시안 분포를 따른다고 가정.
    • t=1Tpθ(xt1xt)\prod_{t=1}^T p_\theta(x_{t-1} | x_t): 각 단계에서 xTx_T에서 xT1x_{T-1}로 변할 확률을 모두 곱한 것. 즉, 모든 시간 단계에서의 조건부 확률을 곱해서 전체 확률을 계산함.
  1. pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t))
  • pθ(xt1xt)p_\theta(x_{t-1} | x_t): 현재 단계 xtx_t가 주어졌을 때, 이전 단계 xt1x_{t-1}가 어떻게 분포하는지를 나타내는 조건부 확률 분포
  • N(xt1;μθ(xt,t),Σθ(xt,t))\mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)): 정규 분포로, xt1x_{t-1}는 평균이 μθ(xt,t)\mu_\theta(x_t, t), 분산이 Σθ(xt,t)\Sigma_\theta(x_t, t)가우시안 분포에서 샘플링된 값

수식 내 요소 설명

  • θ\theta: 학습 가능한 파라미터. θ\theta가 붙은 기호는 예측하는 값 또는 학습되는 값이라고 생각하면 됨.
  • μθ(xt,t)\mu_\theta(x_t, t):
    • xxtt를 입력으로 받아 평균값 μ\mu를 반환하는 함수.
      • xtx_t: 데이터(변화하는 입력) 즉, t 시점에서의 x값
      • tt: 시간 또는 상태를 조절하는 파라미터
    • 평균값으로, 모델이 예측하는 값. 고정된 수식이 아니라, 학습 가능한 값!! 특정 규칙으로 고정된 평균값이 아니라, 학습 과정에서 동적으로 결정되는 값!
    • xtx_t가 주어졌을 때 가장 가능성이 높은 xt1x_{t-1}의 값
  • Σθ(xt,t)\Sigma_\theta(x_t, t): xtx_t 시점에서 xt1x_{t-1}로 이동할 때, xt1x_{t-1}의 분산을 예측한 값
    • Σθ\Sigma_\theta: 가우시안 분포의 공분산 행렬

      분산 vs 공분산 행렬
      분산: 하나의 변수의 변동성
      공분산 행렬: 다차원 데이터의 각 변수 간의 상관관계와 변동성을 동시에 나타냄. 너가 adp 공부할 때 배웠던 그 공분산 맞아~

💡 표기법의 일반적 관습
1. p()p()

  • 학습해야 할 확률 분포 또는 실제 데이터 분포를 나타냄.
  • ex: p(x)p(x): 데이터 xx의 진짜 분포를 의미.
  1. q()q()
    • 근사 분포를 나타낼 때 사용.
    • ex: q(xy)q(x | y): yy 조건 하에서 xx를 근사하는 분포를 나타낸다.
    • Forward process에서 q(xtxt1)q(x_t | x_{t-1})고정된 근사 분포이기 때문에 qq를 사용.

각 단계가 연결된 사건이므로 전체 확률을 구하려면 모든 단계의 확률을 곱해줘야함.

예를 들어, 특정한 경로를 따른다고 가정하면:

  • 노이즈 xTx_T에서 xT1x_{T-1}로 변할 확률: P(xT1xT)P(x_{T-1} | x_T)
  • xT1x_{T-1}에서 xT2x_{T-2}로 변할 확률: P(xT2xT1)P(x_{T-2} | x_{T-1})
  • 마지막으로x1x_1에서 ( x_0 )로 변할 확률: P(x0x1)P(x_0 | x_1)

그러면, 전체 확률은??
P(x0,x1,...,xT)=P(xT)×P(xT1xT)×P(xT2xT1)××P(x0x1)P(x_0, x_1, ..., x_T) = P(x_T) \times P(x_{T-1} | x_T) \times P(x_{T-2} | x_{T-1}) \times \cdots \times P(x_0 | x_1)

DDPM의 손실 함수

수식 (3)

E[logpθ(x0)]Eq[logq(x1:Tx0)]=Eq[logp(xT)t1logpθ(xt1xt)q(xtxt1)]=:LE[−\log p_{\theta}(x_0)] \leq E_q [-\log q(x_{1:T} | x_0)] = E_q [-\log p(x_T) - \sum_{t\geq1} \log \frac{p_{\theta}(x_{t-1} | x_t)}{q(x_t | x_{t-1})}] =: L

  1. 목표: pθ(x0)p_{\theta}(x_0)을 최대화하는 것.
    pθ(x0)p_{\theta}(x_0): 노이즈에서 원본을 되찾을 확률.
    근데 보통 딥러닝에서 최대화하는 것보단 최소화로 변환해서 사용한다. 왜냐면 계산하기 더 쉽기 때문에. -> Negative Log-Likelihood (NLL, 음의 로그 가능도) 를 사용
    직접 최적화하기 어려우므로 -> 변분 추정을 이용하여 우상향 경계를 설정한다.

max(pθ(x0))>min(logpθ(x0))max(p_{\theta}(x_0)) -> min(logp_{\theta}(x_0))

log를 왜 이용할까?

변분추정(variational bound): 확률을 계산할 때, 그 수식이 너무 복잡하므로 그 값을 근사하게 계산함.

손실함수 유도 차근히 뜯어보기

변분추론을 적용한 전개
우리는 pθ(x0)p_\theta(x_0)를 직접 계산하기 어려우니까, 대신 전체 마르코프 체인 확률을 사용해서 근사할 수 있어.

pθ(x0)=pθ(x0:T)dx1:Tp_\theta(x_0) = \int p_\theta(x_{0:T}) dx_{1:T}

이걸 로그를 취하면:

logpθ(x0)=logpθ(x0:T)dx1:T\log p_\theta(x_0) = \log \int p_\theta(x_{0:T}) dx_{1:T}

이 식을 다루기 어렵기 때문에 Jensen's Inequality (옌센 부등식) 을 사용하면:

logpθ(x0)Eq[logpθ(x0:T)q(x1:Tx0)]\log p_\theta(x_0) \geq \mathbb{E}_q \left[ \log \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right]

옌센(젠센) 부등식(Jensen's Inequality)란?
"평균을 먼저 구하고 함수 적용" 한 값은, "먼저 함수 적용한 후 평균" 을 낸 값보다 항상 작거나 같다!를 이용한 등식
f(E[X])E[f(X)]f(\mathbb{E}[X]) \leq \mathbb{E}[f(X)]

이제 좌변에 음수를 곱해서 최소화 문제로 바꾸면:

logpθ(x0)Eq[logpθ(x0:T)q(x1:Tx0)]-\log p_\theta(x_0) \leq \mathbb{E}_q \left[ - \log \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right]

기대값을 추가하면:

E[logpθ(x0)]Eq[logpθ(x0:T)q(x1:Tx0)]\mathbb{E}[- \log p_\theta(x_0)] \leq \mathbb{E}_q \left[ - \log \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right]
짠. 논문의 (3)번 식이 된다.

다시 지피티한테 물어봄. 식 유도에 대해. 비전공자로서 이해가 된 답변을 가져옴.

우리가 원래 하고 싶은 건 pθ(x0)p_\theta(x_0)를 직접 최적화하는 것이야.
즉, 우리가 원하는 최적화 목표는:

maxpθ(x0)\max p_\theta(x_0)

하지만 딥러닝에서 직접 확률을 다루는 대신 Negative Log-Likelihood (NLL) 를 최소화하는 방식으로 바꿔서 최적화하는 게 일반적이야:

minlogpθ(x0)\min -\log p_\theta(x_0)

즉, 확률을 최대화하는 대신, 음의 로그 가능도를 최소화하는 문제로 바꾼 것!
이렇게 하면 수학적으로 계산하기 편하고, 경사 하강법(Gradient Descent)으로 최적화하기 쉬워. -> 여기까진 이해 o


그런데 왜 기대값이 등장하는가?
✅ 문제: pθ(x0)p_\theta(x_0) 를 직접 계산하기 어렵다!
pθ(x0)p_\theta(x_0)를 계산하려면 전체 마르코프 체인에서 x0x_0가 나올 확률을 다 합쳐야 해.
즉, xTx_T부터 시작해서 x0x_0까지 오는 모든 가능성을 고려해야 해.

이걸 수식으로 쓰면:
pθ(x0)=pθ(x0:T)dx1:Tp_\theta(x_0) = \int p_\theta(x_{0:T}) dx_{1:T}

즉, x1:Tx_{1:T}에 대해 적분(총합)을 취해야 하는데, 이 적분을 직접 계산하는 건 너무 복잡해!
그래서 적분을 기대값 형태로 변형해서 다루기 쉽게 바꾸는 거야.

기억나니? 그래프의 아래 면적을 적분으로 구하는 거? 적분이 기대값과 완전 같은 개념은 아니지만 기대값을 확률 분포에서 구하려면 적분이 필요함.


적분을 기대값(평균) 형태로 변형하는 과정
우리는 적분을 아래처럼 변형할 수 있어:

pθ(x0)=pθ(x0:T)dx1:Tp_\theta(x_0) = \int p_\theta(x_{0:T}) dx_{1:T}

이제 q(x1:Tx0)q(x_{1:T} | x_0) (forward process) 를 곱하고 나누면?

pθ(x0)=pθ(x0:T)q(x1:Tx0)q(x1:Tx0)dx1:Tp_\theta(x_0) = \int \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} q(x_{1:T} | x_0) dx_{1:T}

이제 기대값(Expectation) 형태로 바꾸면:

pθ(x0)=Eq(x1:Tx0)[pθ(x0:T)q(x1:Tx0)]p_\theta(x_0) = \mathbb{E}_{q(x_{1:T} | x_0)} \left[ \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right]

즉,
"적분을 직접 계산하는 대신, q(x1:Tx0)q(x_{1:T} | x_0) 에 대해 평균을 취한 값으로 표현할 수 있다!"
이게 바로 기대값이 등장한 이유야.


그런데 왜 옌센 부등식이 등장하는가?
우리는 이제 최적화 문제를 다음과 같이 바꿀 있다.

minlogpθ(x0)\min -\log p_\theta(x_0)

이제 여기서 옌센 부등식을 적용하려고 하는데, 왜 그럴까?
왜냐하면, 우리가 위에서 유도한 기대값(평균) 은 로그 바깥에 있기 때문이야:

logpθ(x0)=logEq(x1:Tx0)[pθ(x0:T)q(x1:Tx0)]\log p_\theta(x_0) = \log \mathbb{E}_{q(x_{1:T} | x_0)} \left[ \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right]

여기서 핵심적인 문제:

로그 안에 기대값이 들어 있으면 직접 최적화하기 어렵다!
기대값(평균)을 로그 바깥으로 빼야 한다!

옌센 부등식은 바로 이 로그를 바깥으로 빼주는 역할을 해.
즉, 옌센 부등식의 성질을 이용하면, 기대값을 로그 바깥으로 뺄 수 있다!

logE[X]E[logX]\log \mathbb{E}[X] \geq \mathbb{E}[\log X]

이걸 적용하면:

logpθ(x0)=logEq(x1:Tx0)[pθ(x0:T)q(x1:Tx0)]Eq(x1:Tx0)[logpθ(x0:T)q(x1:Tx0)]\log p_\theta(x_0) = \log \mathbb{E}_{q(x_{1:T} | x_0)} \left[ \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right] \geq \mathbb{E}_{q(x_{1:T} | x_0)} \left[ \log \frac{p_\theta(x_{0:T})}{q(x_{1:T} | x_0)} \right]

즉, 우리는 로그 안의 기대값을 직접 최적화할 수 없으니까, 대신 우변을 최적화하는 방식으로 변환한 거야!

수식 (4)

Forward 과정에서 특정한 시점 t의 이미지를 바로 샘플링하는 수식

수식 (5) - Variational Bound (변분 경계)를 이용하여 손실함수

*손실 함수(loss function)** 를 정의

논문의 수식 (5) 에 대해서 차근차근 자세히 설명해줄게!

이 수식은 DDPM에서 손실 함수(loss function) 를 정의하는 중요한 식이야.
즉, 모델이 어떻게 학습되는지를 결정하는 핵심적인 역할을 해.


수식 (5)의 기본 개념: Variational Bound (변분 경계)

DDPM 모델은 원래 확률 모델이다.
목표: $ ( p_\theta(x_0) )$ 즉, 모델이 생성한 데이터 분포실제 데이터 분포 ( q(x_0) ) 와 최대한 비슷해지는 것.

음의 로그 우도(Negative Log Likelihood, NLL) 를 최소화하여 최적화 시킬 수 있음.

logpθ(x0)-\log p_\theta(x_0)

하지만 직접적으로 계산하기 어렵기 때문에, 변분 경계(VB, Variational Bound) 라는 테크닉을 사용해서 대신 최적화할 수 있다.

<수식 (5)의 항 분석>
L=Eq[DKL(q(xTx0)p(xT))+t=1TDKL(q(xt1xt,x0)pθ(xt1xt))]L = \mathbb{E}_q \Big[ D_{KL}(q(x_T | x_0) || p(x_T)) + \sum_{t=1}^{T} D_{KL}(q(x_{t-1} | x_t, x_0) || p_\theta(x_{t-1} | x_t)) \Big]

(1) 첫 번째 KL 발산 항:
DKL(q(xTx0)p(xT))D_{KL}(q(x_T | x_0) || p(x_T))

: Forward 과정의 마지막 단계에서 xTx_T 가 노이즈 분포 p(xT)p(x_T) 와 얼마나 다른지를 측정하는 항

즉,

  • Forward 과정에서 마지막 ( x_T ) 는 우리가 설계한 ( q(x_T | x_0) ) 로부터 나오는데,
  • 우리가 모델에서 가정한 초기 노이즈 분포 p(xT)p(x_T)는 보통 정규분포 N(0,I)\mathcal{N}(0, I) 를 따르게 설정한다.
  • 그러므로 이 KL 발산 항을 최소화하면, Forward 과정이 xTx_T에서 우리가 원하는 가우시안 분포로 잘 수렴하도록 도와줌.

-> 학습 과정에서 상수값이 되기 때문에 무시.

(2) 두 번째 KL 발산 항: DKL(q(xt1xt,x0)pθ(xt1xt))D_{KL}(q(x_{t-1} | x_t, x_0) || p_\theta(x_{t-1} | x_t))

"모델 pθ(xt1xt)p_\theta(x_{t-1} | x_t)이 실제 역과정(Reverse process) 분포 q(xt1xt,x0)q(x_{t-1} | x_t, x_0)를 얼마나 잘 따라가는지" 를 측정.

  • q(xt1xt,x0)q(x_{t-1} | x_t, x_0): Forward 과정에서 우리가 정의한 실제 노이즈 제거 확률 분포 (Ground truth)
  • pθ(xt1xt)p_\theta(x_{t-1} | x_t): 우리가 학습하려는 역과정(Reverse process)의 모델 예측 값
  • KL 발산 DKLD_{KL}: 두 확률 분포의 차이를 나타냄

이 KL 발산 값을 최소화하면?
-> 모델 pθ(xt1xt)p_\theta(x_{t-1} | x_t) 가 실제 Forward 과정에서의 노이즈 제거 분포 q(xt1xt,x0)q(x_{t-1} | x_t, x_0)와 최대한 비슷해지도록 학습됨을 의미.


최적화 방식 (손실 함수 L을 어떻게 학습하나?)
최적화해야 하는 손실 함수 LL 은 결국:

L=t=1TDKL(q(xt1xt,x0)pθ(xt1xt))L = \sum_{t=1}^{T} D_{KL}(q(x_{t-1} | x_t, x_0) || p_\theta(x_{t-1} | x_t))
이다.

즉, Forward 과정에서 정의한 q(xt1xt,x0)q(x_{t-1} | x_t, x_0) 를 모델이 예측하는 pθ(xt1xt)p_\theta(x_{t-1} | x_t) 가 최대한 비슷하게 만들도록 학습하는 것.

논문에서는 이 KL 발산을 직접 최소화하기보다는,
Forward 과정에서 한 번에 샘플링할 수 있는 ( x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon )
이 수식을 활용해서 모델이 노이즈 ϵ\epsilon을 예측하는 방식으로 학습한다.

즉, 최종적으로 손실 함수는 모델이 예측한 노이즈와 실제 노이즈 간의 차이를 최소화하는 방식으로 변형한다.

KL 발산(KL Divergence, Kullback-Leibler Divergence)이란?

  • 두 확률 분포가 얼마나 다른지를 측정하는 방법
    • 즉, 우리가 만든 모델의 분포가 실제 데이터의 분포와 얼마나 비슷한지를 평가.
  • 수식:
    DKL(PQ)=xP(x)logP(x)Q(x)D_{KL}(P || Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)}
    • P(x)P(x): 실제 따르고 싶은 "참된" 확률 분포 (Ground truth)
    • Q(x)Q(x): 모델을 통해 학습하고 싶은 확률 분포 (모델의 예측)
    • KL 발산 DKL(PQ)D_{KL}(P || Q): 두 확률 분포가 얼마나 다른지 수치적으로 나타내는 값.

즉, KL 발산은 "Q(x) 가 P(x) 와 얼마나 비슷한지를 측정하는 척도"

직관적 이해
만약 P(x)P(x)Q(x)Q(x) 가 완전히 동일하면?

  • P(x)Q(x)=1\frac{P(x)}{Q(x)} = 1이 되고,
  • log1=0\log 1 = 0이므로 KL 발산 = 0
  • 즉, 두 분포가 같으면 KL 발산 값은 0이다.

만약 Q(x)Q(x)P(x)P(x)와 다르다면?

  • P(x)Q(x)\frac{P(x)}{Q(x)}값이 커지거나 작아지면서 KL 발산 값이 증가함.
  • 즉, KL 발산 값이 클수록 두 분포가 다르다는 의미야.

DDPM에서 KL 발산은 어디에 쓰일까?
DDPM 논문에서는 KL 발산을 이용해서 Forward 과정과 Reverse 과정의 차이를 줄이는 것이 목적.

수식 (5) 에 나왔던 KL 발산:
DKL(q(xt1xt,x0)pθ(xt1xt))D_{KL}(q(x_{t-1} | x_t, x_0) || p_\theta(x_{t-1} | x_t))
이 KL 발산을 최소화하면:
👉 모델이 xtx_t를 보고 xt1x_{t-1} 를 예측하는 방법이 실제 데이터 분포를 따르도록 학습된다는 의미.

DDPM에서는 KL 발산을 사용해서:
1. Forward 과정에서 설계한 노이즈 추가 과정
2. Reverse 과정에서 모델이 학습한 노이즈 제거 과정이 최대한 비슷하도록 만듦.

수식 (6), (7)

Forward 과정에서 정의된 분포 q(xt1xt,x0)q(x_{t-1} | x_t, x_0)를 구하는 과정에서 유도된 식.
Reverse 과정에서 원래 데이터로 복원하는 확률 분포를 정확하게 구하는 방법을 설명하는 핵심적인 식이다.

1️⃣ 수식 (6):
q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)q(x_{t-1} | x_t, x_0) = \mathcal{N}(x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I)
Forward 과정에서 xtx_t가 주어졌을 때, 한 단계 전인xt1x_{t-1}의 분포를 구하는 공식

  • 평균(Mean): μ~t(xt,x0)\tilde{\mu}_t(x_t, x_0)
    • xtx_tx0x_0의 가중합(weighted sum)으로 표현됨.
  • 분산(Variance): β~t\tilde{\beta}_t
    • Forward 과정에서 정의된 βt\beta_t값을 조정한 형태.

2️⃣ 수식 (7):

평균μ~t(xt,x0)\tilde{\mu}_t(x_t, x_0):
μ~t(xt,x0):=αˉt1βt1αˉtx0+αt(1αˉt1)1αˉtxt\tilde{\mu}_t(x_t, x_0) := \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t

  1. xtx_tx0x_0를 적절히 조합해서xt1x_{t-1}의 평균을 구할 수 있다.
    • x0x_0에 가중치 αˉt1βt1αˉt\frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t}를 곱한 항
    • xtx_t에 가중치 αt(1αˉt1)1αˉt\frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t}를 곱한 항
  2. Forward 과정에서 xtx_tx0x_0와 노이즈 ϵ\epsilon의 조합으로 되어 있기 때문에, 역방향으로 추정할 때도 이 두 항이 사용됨.
  3. 즉, 이 평균 값은 Forward 과정에서 xtx_t가 어떻게 만들어졌는지를 반대로 계산해서 ( x_{t-1} ) 를 구하는 과정이다.

분산 β~t\tilde{\beta}_t:
β~t:=1αˉt11αˉtβt\tilde{\beta}_t := \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t

Forward 과정에서 정의된 노이즈 βt\beta_t를 조정해서 역과정에 적절하게 맞추는 역할

  • 여기서 αˉt=s=1tαs\bar{\alpha}_t = \prod_{s=1}^{t} \alpha_s (누적된 노이즈 조절 계수)
  • Forward 과정에서 xtx_t 가 점점 흐려지면서, 노이즈가 추가된 정도를 반영한 값.

xtx_t 를 보고 xt1x_{t-1}를 샘플링할 때, 노이즈를 얼마나 추가할지 조절하는 값

3️⃣ 수식의 의의
**Reverse 과정에서 정확하게 xt1x_{t-1}를 샘플링할 수 있도록 도와줌.

  • Forward 과정에서 xtx_txt1x_{t-1}로부터 노이즈를 추가해서 만들었었다.
  • 그런데 역과정에서는 노이즈가 추가된 xtx_t를 보고 원래 xt1x_{t-1}를 복원해야 한다.
  • 이때, q(xt1xt,x0)q(x_{t-1} | x_t, x_0)를 알면 Forward 과정에서 xtx_t를 만들었던 방법을 거꾸로 되돌리는 확률 분포 를 정확하게 구할 수 있다.

3. Diffusion models and denoising autoencoders (디퓨전 모델과 잡음 auto encoders)

  • 확산 모델은 제한적인 것처럼 보이지만 구현 자유도가 크다.
  • Forward 과정의 βₜ, 역과정의 가우시안 분포 파라미터화, 모델 아키텍처를 결정해야 한다.
  • 확산 모델과 Denoising Score Matching의 연결을 밝힘으로써, 손실 함수를 단순화할 수 있다.
  • 모델 설계의 타당성은 단순함과 실험적 결과를 통해 증명된다.
  • 논의는 수식 (5)의 항목들에 따라 진행될 것이다.

3.1 Forward process and LTL_T

  • Forward 과정의 분산 βt\beta_t를 학습할 수도 있지만, 이 논문에서는 상수로 고정
    -> Forward 과정의 근사 사후분포 qq에 학습할 파라미터가 없게 된다.
    ->LTL_T (손실 함수의 일부 항)이 상수가 되므로, 학습 과정에서 무시됨

3.2 Reverse process and L1:T1L_{1:T-1}

  • Reverse 과정의 분산 Σθ(xt,t)\Sigma_\theta(x_t, t)를 학습하지 않고 고정된 상수 σt2\sigma_t^2로 설정.
  • 실험적으로 σt2=βt\sigma_t^2 = \beta_tσt2=β~t\sigma_t^2 = \tilde{\beta}_t 를 사용했을 때 비슷한 결과가 나왔다.
  • Reverse 과정의 평균 μθ(xt,t)\mu_\theta(x_t, t) 를 예측하는 가장 간단한 방법은 Forward 과정의 사후분포 평균 μ~t\tilde{\mu}_t 를 직접 예측하는 것이다.
  • 수식 (4)와 수식 (7)을 활용하여 xtx_tx0x_0 와 노이즈 ϵ\epsilon 의 함수로 재구성할 수 있다.

수식 (8) - 최종 손실 함수

논문에서 사용한 최종 손실 함수는 (8)이다.
하지만 수식 (3)으로 부터 (5)를 유도했고, (5)로부터 (8)을 유도했다.

  • 수식 (3): 논문의 기본 목표를 정의하는 손실 함수지만, 너무 일반적이어서 바로 사용할 수 없음.
  • 수식 (5): 는 Forward와 Reverse 과정 간 KL 발산을 최소화하는 방식으로 손실을 구체화한 것이지만, 여전히 KL 발산을 직접 계산해야 하는 문제가 있음.
  • 수식 (8): KL 발산을 풀어서 L2 Loss 형태로 변형.
profile
천천히 꾸준히 취미처럼 냐미😋

0개의 댓글