디퓨젼 모델

실제 주어진 데이터로는 x0들밖에 없어. 여기서 하이퍼파라미터 T을 정해. 최대 step을 말하는거야. 그리고 학습할 t=1~T을 랜덤으로 골라. 그다음 x0 -> xt로 노이즈를 추가해서 만들거야. 여기서 데이터의 변환할때 마크로브체인 가정을 해. 즉 xt는 xt-1에만 영향을 받는거지 (이전에는 영향 안받는다는 것) 그렇게 되면 순서는 x0 -> x1 -> ... -> xt로 만들어야하는데, 여기서 한 가지 가정이 있어. 노이즈는 가우시안 노이즈라는 것이지. 그러면 한 step씩 할 필요 없이 x0 -> xt로 한번에 만들 수 있어. 개념적으로 xt을 작은값을 곱해서 평균으로하고 분산을 크게 해서 샘플링한다는 것이야. 이것을 조절하는게 alpha고 이는 t가 커질수록 작아지는 구조야. 따라서 t가 커지면 x0의 작은 값을 곱한게 평균이 되기 때문에 x0의 영향은 작아지고 노이즈는 I에 가까운게 들어가는거야. 학습할때는 p(xt-1|xt)와 q(xt-1|xt, t)가 가까워지도록 KL divergence를 계산하는거야. 여기서 p는 위에서 말한대로 xt을 구할때 xt-1로부터 계산되는데, 이 수식을 정리하면 xt-1로부터 xt을 구할 수 있을 거라서 ground truth의 개념이고 q는 모델로 예측하는 구조란거야. 근데 실제로 이 2개를 계산하는 것은 어렵고, ELBO 수식에 따라 최저값을 최대화하도록 근사화할거야. 또한 분산이 같다고 가정해서, 식을 풀면 결국 x0에서 xt로 변하는 누적 정답 noise와 예측 Noise이 가까워지도록 학습이 되는거야. 따라서 모델의 입력을 (xt,t)로 두고 출력을 noise로 해서 예측 noise가 실제 noise가 같도록 하는거지. 여기서 실제 Noise는 N(0,I)에서 샘플링된 것이기 때문에 모델은 항상 주어진 입력에서 N(0,I)을 예측하는거야. 즉 모델은 주어진 이미지가 얼마나 망가졌는지를 xt로 캐치하고 noise가 얼마나 세게 추가됐는지 t로 예상해서 예측 Noise을 찾아내도록 학습되는거지. 테스트할때는, (xT,T)가 주어져. 즉 학습할때 가정했던 최대 step T에 해당하는 Noise 이미지가 주어진 상황이야 (이는 가정이라기보다 이렇게 인퍼런스 한다는 것이지) (초기 t=T) 따라서 xt->Noise을 예측하고, 이를 통해 x0을 예측하고, 다시 xt-1을 샘플링할 분포의 평균과 분산을 계산해서 xt-1을 샘플링해. 이렇게 한스텝씩 이미지를 디노이즈해서 x0을 구할거야. 여기서 예측된 x0을 바로 쓰면 분포에서 샘플링한게 아니기 때문에 x0가 품질이 안좋을거야. (이 부분에 대해서는 추가 설명해줘)

https://chatgpt.com/share/696dc020-8310-8009-967d-e7ff043814fd


0. 기호와 목표

  • 데이터: (x_0 \sim p_{\text{data}}(x)) (우리가 가진 것은 (x_0) 샘플뿐)

  • Forward(확산) 분포: (q(\cdot)) — 고정, 노이즈를 단계적으로 추가하는 과정

  • Reverse(역확산) 분포: (p_\theta(\cdot)) — 학습 대상, 노이즈를 단계적으로 제거하는 과정

  • 목표: (\log p_\theta(x_0))를 최대화(= 데이터 분포를 잘 생성)


1. Forward(q): (x_0 \to x_T) 확산(노이즈 추가)

1.1 마르코프 체인 가정의 활용

Forward는 마르코프 체인으로 정의됩니다.

$[
q(x_{1:T}\mid x_0) = \prod_{t=1}^T q(x_t\mid x_{t-1})
]$
즉,
$[
q(x_t\mid x_{t-1},\dots,x_0)=q(x_t\mid x_{t-1})
]$
이 “한 스텝 의존성” 덕분에 전체 과정이 단계적 전이의 곱으로 분해됩니다.

1.2 한 스텝 전이(선형-가우시안)

$[
q(x_t\mid x_{t-1})=\mathcal N!\left(x_t;\sqrt{\alpha_t},x_{t-1},\ \beta_t I\right),
\quad \alpha_t=1-\beta_t
]$
동치인 샘플링 형태:
$[
x_t = \sqrt{\alpha_t},x_{t-1}+\sqrt{\beta_t},\varepsilon_t,\quad \varepsilon_t\sim\mathcal N(0,I)
]$

1.3 “한 번에” (x_0 \to x_t) 생성(폐형식)

선형-가우시안 마르코프이므로 누적 분포가 닫힌형태로 정리됩니다.

정의:
$[
\bar\alpha_t=\prod_{s=1}^t \alpha_s
]$

그러면
$[
q(x_t\mid x_0)=\mathcal N!\left(x_t;\sqrt{\bar\alpha_t},x_0,\ (1-\bar\alpha_t)I\right)
]$

따라서 체인을 실제로 (x_1,x_2,\dots) 만들지 않고도,
$[
x_t = \sqrt{\bar\alpha_t},x_0+\sqrt{1-\bar\alpha_t},\varepsilon,\quad \varepsilon\sim\mathcal N(0,I)
]$
로 **한 번에 (x_t)**를 만들 수 있습니다.

직관: (t)가 커질수록 ($\bar\alpha_t\downarrow$), 즉 ($\sqrt{\bar\alpha_t}x_0$) 영향이 줄고, 노이즈 계수 ($\sqrt{1-\bar\alpha_t}$)가 커져 ($x_t\approx \mathcal N(0,I)$)가 됩니다(충분히 큰 (T)에서).


2. Reverse(pθ): (x_T \to x_0) 역확산(노이즈 제거)

2.1 역과정의 마르코프 구조(생성모델 정의)

우리가 학습하는 생성모델은 다음의 마르코프 체인입니다.

$[
p_\theta(x_{0:T}) = p(x_T)\prod_{t=1}^T p_\theta(x_{t-1}\mid x_t)
]$
보통 시작분포는
$[
p(x_T)=\mathcal N(0,I)
]$
로 둡니다.

2.2 한 스텝 역전이의 가우시안 가정

[
p_\theta(x_{t-1}\mid x_t)=\mathcal N!\left(x_{t-1};\ \mu_\theta(x_t,t),\ \sigma_t^2 I\right)
]

  • (\mu_\theta(x_t,t)): 모델이 정하는 평균(신경망으로 파라미터화)

  • (\sigma_t^2): 분산(보통 고정값 사용)


3. “진짜 posterior” (q(x_{t-1}\mid x_t,x_0))와 (\mu_\theta)의 출처

Forward가 선형-가우시안이므로 다음 posterior는 정확히 가우시안입니다.

$[
q(x_{t-1}\mid x_t,x_0)=\mathcal N!\left(x_{t-1};\ \tilde\mu(x_t,x_0,t),\ \tilde\beta_t I\right)
]$

여기서 분산(정확):
$[
\tilde\beta_t=\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t
]$

평균(정확):
$[
\tilde\mu(x_t,x_0,t)=
\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t
+
\frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}x_0
]$

핵심: ($\tilde\mu$)는 (x_t)와 (x_0)의 선형결합입니다.
하지만 생성 시에는 (x_0)를 모르므로 이를 직접 쓸 수 없습니다.


4. (\varepsilon)-prediction: 누적 노이즈로 (\hat x_0)를 복원

4.1 (x_0 \leftrightarrow \varepsilon) 관계(역산)

Forward의 폐형식:
$[
x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon
]$
이를 (x_0)에 대해 풀면:
$[
x_0=\frac{1}{\sqrt{\bar\alpha_t}}\left(x_t-\sqrt{1-\bar\alpha_t}\varepsilon\right)
]$

4.2 모델은 (\varepsilon)를 예측한다

신경망이 예측하는 것:
$[
\varepsilon_\theta(x_t,t)\approx \varepsilon
]$
그러면
$[
\hat x_0(x_t,t)=\frac{1}{\sqrt{\bar\alpha_t}}\left(x_t-\sqrt{1-\bar\alpha_t}\varepsilon_\theta(x_t,t)\right)
]$
현재 단계에서의 (x_0) 추정치를 얻습니다.

4.3 (\mu_\theta)는 posterior 평균을 (\hat x_0)로 대체한 것

원래 평균 (\tilde\mu(x_t,x_0,t))에서
$[
x_0 \Rightarrow \hat x_0(x_t,t)
]$
로 치환해 얻는 평균이 (\mu_\theta)입니다. 정리하면 일반적으로 쓰는 형태:

$[
\mu_\theta(x_t,t)
\frac{1}{\sqrt{\alpha_t}}
\left(
x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta(x_t,t)
\right)
]$

5. 학습 목표: ELBO와 stepwise KL → noise MSE로 단순화

5.1 원 목표와 ELBO

목표:
$[
\max_\theta \log p_\theta(x_0)
]$

변분 하한(ELBO):
$[
\log p_\theta(x_0)\ge \mathbb E_{q}\big[\log p_\theta(x_0,x_{1:T})-\log q(x_{1:T}\mid x_0)\big]
]$

전개하면(핵심 항만):
$[
\log p_\theta(x_0)
\ge
\mathbb E_q\Big[
-\mathrm{KL}(q(x_T\mid x_0)|p(x_T))
-\sum_{t=2}^T \mathrm{KL}(q(x_{t-1}\mid x_t,x_0)|p_\theta(x_{t-1}\mid x_t))
+\log p_\theta(x_0\mid x_1)
\Big]
]$

이 중 학습의 중심은:
$[
\boxed{\mathrm{KL}(q(x_{t-1}\mid x_t,x_0)\ |\ p_\theta(x_{t-1}\mid x_t))}
]$

  • (q(\cdot)): forward로부터 계산되는 정답 posterior

  • (p_\theta(\cdot)): 모델이 근사해야 하는 reverse step

5.2 가우시안 KL의 형태

두 분포가 가우시안이고, 분산을 고정(예: (\sigma_t^2=\tilde\beta_t))하면:

$[
\mathrm{KL}
\frac{1}{2\sigma_t^2}\left|\tilde\mu(x_t,x_0,t)-\mu_\theta(x_t,t)\right|^2 + \text{const}
]$

즉 KL 최소화는 평균을 맞추는 문제로 축약됩니다.

5.3 평균을 (\varepsilon_\theta)로 파라미터화하면 noise MSE가 된다

(\mu_\theta)를 (\varepsilon_\theta)로 표현하는 파라미터화를 사용하고,
(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon)를 대입해 정리하면, (상수/가중치를 제외하고)

$[
\boxed{
\mathbb E_{t,x_0,\varepsilon}\left[|\varepsilon-\varepsilon_\theta(x_t,t)|^2\right]
}
]$
가 stepwise KL의 단순화된 학습 목적이 됩니다.

학습 알고리즘(실무 구현)

  1. (x_0\sim p_{\text{data}})

  2. (t\sim \mathrm{Unif}{1,\dots,T})

  3. (\varepsilon\sim\mathcal N(0,I))

  4. (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon)

  5. loss (=|\varepsilon-\varepsilon_\theta(x_t,t)|^2)로 업데이트


6. 테스트(샘플링): (x_T\sim \mathcal N(0,I))에서 시작해 (x_0) 생성

6.1 시작

$[
x_T\sim\mathcal N(0,I)
]$

6.2 반복: (t=T,T-1,\dots,1)

  1. 노이즈 예측:
    $[
    \varepsilon_\theta(x_t,t)
    ]$

  2. (선택적으로) (x_0) 추정:
    $[
    \hat x_0(x_t,t)=\frac{1}{\sqrt{\bar\alpha_t}}\left(x_t-\sqrt{1-\bar\alpha_t}\varepsilon_\theta(x_t,t)\right)
    ]$

  3. 평균 계산:
    $[
    \mu_\theta(x_t,t)
    =
    \frac{1}{\sqrt{\alpha_t}}
    \left(
    x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta(x_t,t)
    \right)
    ]$

  4. 샘플링:
    $[
    x_{t-1} = \mu_\theta(x_t,t)+\sigma_t z,\quad z\sim\mathcal N(0,I)
    ]$
    (보통 (t=1)에서는 (z=0)로 두어 마지막은 결정적으로 만듭니다.)


7. 왜 (\hat x_0)를 바로 “최종 결과”로 쓰지 않나?

핵심은 다음입니다.

  1. (\hat x_0(x_t,t))는 중간 단계의 점추정치입니다. 특히 (t)가 큰 구간에서는 (x_t)가 거의 노이즈라 (\hat x_0) 오차가 큽니다.

  2. diffusion의 생성모델은 애초에
    $[
    p_\theta(x_{0:T}) = p(x_T)\prod_{t=1}^T p_\theta(x_{t-1}\mid x_t)
    ]$
    처럼 stepwise 분포 이동을 정의합니다. 즉 “올바른 샘플”은 각 단계에서 (p_\theta(x_{t-1}\mid x_t))를 따라가며 얻는 (x_0)입니다.

  3. (p_\theta(x_{t-1}\mid x_t))에는 (\sigma_t^2)가 있어 **불확실성(랜덤성)**을 반영합니다. (\hat x_0)만 매번 확정값으로 쓰면 이 불확실성이 무시되어 분포를 제대로 따라가지 못할 수 있습니다. (단, DDIM처럼 (\sigma_t=0)을 선택해 결정론적으로 가는 변형도 존재합니다.)


8. 전체 흐름 한 줄 요약

  • Forward: (q)로 (x_0\to x_T) (마르코프 + 선형-가우시안)

  • 학습: stepwise KL (\mathrm{KL}(q(x_{t-1}\mid x_t,x_0)|p_\theta(x_{t-1}\mid x_t)))을 ELBO로 최적화

  • 파라미터화: (\mu_\theta)를 (\varepsilon_\theta)로 표현 → KL이 noise MSE로 단순화

  • 샘플링: (x_T\sim\mathcal N(0,I))에서 시작해 (\varepsilon_\theta)로 (\mu_\theta)를 만들고 (x_{t-1})를 샘플링하며 (x_0) 생성


원하시면, 위 정리에서 “증명” 성격이 가장 강한 두 부분을 더 엄밀하게(계수까지 모두 전개해서) 써드릴 수 있습니다.

  1. (q(x_t\mid x_0)=\mathcal N(\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)I)) 유도(완전 전개)

  2. 가우시안 KL을 평균 차이로 만들고, 그 평균 차이가 (|\varepsilon-\varepsilon_\theta|^2)로 바뀌는 대수 전개 (가중치 포함)

어느 쪽을 더 자세히 원하시는지 말씀하시면 그 부분을 중심으로 확장하겠습니다.

아래는 지금까지 논의한 DDPM(denoising diffusion probabilistic model) 흐름을 Forward(q) → Reverse(pθ) → 학습(ELBO/KL) → 샘플링(테스트) 순으로, 수식을 포함해 “한 번에” 정리한 것입니다. (표기는 표준적으로 (\alpha_t=1-\beta_t), (\bar\alpha_t=\prod_{s=1}^t\alpha_s) 사용)


0. 기호와 목표

  • 데이터: (x_0 \sim p_{\text{data}}(x)) (우리가 가진 것은 (x_0) 샘플뿐)

  • Forward(확산) 분포: (q(\cdot)) — 고정, 노이즈를 단계적으로 추가하는 과정

  • Reverse(역확산) 분포: (p_\theta(\cdot)) — 학습 대상, 노이즈를 단계적으로 제거하는 과정

  • 목표: (\log p_\theta(x_0))를 최대화(= 데이터 분포를 잘 생성)


1. Forward(q): (x_0 \to x_T) 확산(노이즈 추가)

1.1 마르코프 체인 가정의 활용

Forward는 마르코프 체인으로 정의됩니다.

$[
q(x_{1:T}\mid x_0) = \prod_{t=1}^T q(x_t\mid x_{t-1})
]$
즉,
$[
q(x_t\mid x_{t-1},\dots,x_0)=q(x_t\mid x_{t-1})
]$
이 “한 스텝 의존성” 덕분에 전체 과정이 단계적 전이의 곱으로 분해됩니다.

1.2 한 스텝 전이(선형-가우시안)

$[
q(x_t\mid x_{t-1})=\mathcal N!\left(x_t;\sqrt{\alpha_t},x_{t-1},\ \beta_t I\right),
\quad \alpha_t=1-\beta_t
]$
동치인 샘플링 형태:
$[
x_t = \sqrt{\alpha_t},x_{t-1}+\sqrt{\beta_t},\varepsilon_t,\quad \varepsilon_t\sim\mathcal N(0,I)
]$

1.3 “한 번에” (x_0 \to x_t) 생성(폐형식)

선형-가우시안 마르코프이므로 누적 분포가 닫힌형태로 정리됩니다.

정의:
$[
\bar\alpha_t=\prod_{s=1}^t \alpha_s
]$

그러면
$[
q(x_t\mid x_0)=\mathcal N!\left(x_t;\sqrt{\bar\alpha_t},x_0,\ (1-\bar\alpha_t)I\right)
]$

따라서 체인을 실제로 (x_1,x_2,\dots) 만들지 않고도,
$[
x_t = \sqrt{\bar\alpha_t},x_0+\sqrt{1-\bar\alpha_t},\varepsilon,\quad \varepsilon\sim\mathcal N(0,I)
]$
로 **한 번에 (x_t)**를 만들 수 있습니다.

직관: (t)가 커질수록 (\bar\alpha_t\downarrow), 즉 (\sqrt{\bar\alpha_t}x_0) 영향이 줄고, 노이즈 계수 (\sqrt{1-\bar\alpha_t})가 커져 (x_t\approx \mathcal N(0,I))가 됩니다(충분히 큰 (T)에서).


2. Reverse(pθ): (x_T \to x_0) 역확산(노이즈 제거)

2.1 역과정의 마르코프 구조(생성모델 정의)

우리가 학습하는 생성모델은 다음의 마르코프 체인입니다.

$[
p_\theta(x_{0:T}) = p(x_T)\prod_{t=1}^T p_\theta(x_{t-1}\mid x_t)
]$
보통 시작분포는
$[
p(x_T)=\mathcal N(0,I)
]$
로 둡니다.

2.2 한 스텝 역전이의 가우시안 가정

$[
p_\theta(x_{t-1}\mid x_t)=\mathcal N!\left(x_{t-1};\ \mu_\theta(x_t,t),\ \sigma_t^2 I\right)
]$

  • (\mu_\theta(x_t,t)): 모델이 정하는 평균(신경망으로 파라미터화)

  • (\sigma_t^2): 분산(보통 고정값 사용)


3. “진짜 posterior” (q(x_{t-1}\mid x_t,x_0))와 (\mu_\theta)의 출처

Forward가 선형-가우시안이므로 다음 posterior는 정확히 가우시안입니다.

$[
q(x_{t-1}\mid x_t,x_0)=\mathcal N!\left(x_{t-1};\ \tilde\mu(x_t,x_0,t),\ \tilde\beta_t I\right)
]$

여기서 분산(정확):
$[
\tilde\beta_t=\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t
]$

평균(정확):
$[
\tilde\mu(x_t,x_0,t)=
\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t
+
\frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}x_0
]$

핵심: (\tilde\mu)는 (x_t)와 (x_0)의 선형결합입니다.
하지만 생성 시에는 (x_0)를 모르므로 이를 직접 쓸 수 없습니다.


4. (\varepsilon)-prediction: 누적 노이즈로 (\hat x_0)를 복원

4.1 (x_0 \leftrightarrow \varepsilon) 관계(역산)

Forward의 폐형식:
$[
x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon
]$
이를 (x_0)에 대해 풀면:
$[
x_0=\frac{1}{\sqrt{\bar\alpha_t}}\left(x_t-\sqrt{1-\bar\alpha_t}\varepsilon\right)
]$

4.2 모델은 (\varepsilon)를 예측한다

신경망이 예측하는 것:
$[
\varepsilon_\theta(x_t,t)\approx \varepsilon
]$
그러면
$[
\hat x_0(x_t,t)=\frac{1}{\sqrt{\bar\alpha_t}}\left(x_t-\sqrt{1-\bar\alpha_t}\varepsilon_\theta(x_t,t)\right)
]$
현재 단계에서의 (x_0) 추정치를 얻습니다.

4.3 (\mu_\theta)는 posterior 평균을 (\hat x_0)로 대체한 것

원래 평균 (\tilde\mu(x_t,x_0,t))에서
$[
x_0 \Rightarrow \hat x_0(x_t,t)
]$
로 치환해 얻는 평균이 (\mu_\theta)입니다. 정리하면 일반적으로 쓰는 형태:

$[
\mu_\theta(x_t,t)
\frac{1}{\sqrt{\alpha_t}}
\left(
x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta(x_t,t)
\right)
]$

5. 학습 목표: ELBO와 stepwise KL → noise MSE로 단순화

5.1 원 목표와 ELBO

목표:
[
\max_\theta \log p_\theta(x_0)
]

변분 하한(ELBO):
[
\log p_\theta(x_0)\ge \mathbb E_{q}\big[\log p_\theta(x_0,x_{1:T})-\log q(x_{1:T}\mid x_0)\big]
]

전개하면(핵심 항만):
[
\log p_\theta(x_0)
\ge
\mathbb E_q\Big[
-\mathrm{KL}(q(x_T\mid x_0)|p(x_T))
-\sum_{t=2}^T \mathrm{KL}(q(x_{t-1}\mid x_t,x_0)|p_\theta(x_{t-1}\mid x_t))
+\log p_\theta(x_0\mid x_1)
\Big]
]

이 중 학습의 중심은:
[
\boxed{\mathrm{KL}(q(x_{t-1}\mid x_t,x_0)\ |\ p_\theta(x_{t-1}\mid x_t))}
]

  • (q(\cdot)): forward로부터 계산되는 정답 posterior

  • (p_\theta(\cdot)): 모델이 근사해야 하는 reverse step

5.2 가우시안 KL의 형태

두 분포가 가우시안이고, 분산을 고정(예: (\sigma_t^2=\tilde\beta_t))하면:

[
\mathrm{KL}

\frac{1}{2\sigma_t^2}\left|\tilde\mu(x_t,x_0,t)-\mu_\theta(x_t,t)\right|^2 + \text{const}
]

즉 KL 최소화는 평균을 맞추는 문제로 축약됩니다.

5.3 평균을 (\varepsilon_\theta)로 파라미터화하면 noise MSE가 된다

(\mu_\theta)를 (\varepsilon_\theta)로 표현하는 파라미터화를 사용하고,
(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon)를 대입해 정리하면, (상수/가중치를 제외하고)

[
\boxed{
\mathbb E_{t,x_0,\varepsilon}\left[|\varepsilon-\varepsilon_\theta(x_t,t)|^2\right]
}
]
가 stepwise KL의 단순화된 학습 목적이 됩니다.

학습 알고리즘(실무 구현)

  1. (x_0\sim p_{\text{data}})

  2. (t\sim \mathrm{Unif}{1,\dots,T})

  3. (\varepsilon\sim\mathcal N(0,I))

  4. (x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon)

  5. loss (=|\varepsilon-\varepsilon_\theta(x_t,t)|^2)로 업데이트


6. 테스트(샘플링): (x_T\sim \mathcal N(0,I))에서 시작해 (x_0) 생성

6.1 시작

[
x_T\sim\mathcal N(0,I)
]

6.2 반복: (t=T,T-1,\dots,1)

  1. 노이즈 예측:
    [
    \varepsilon_\theta(x_t,t)
    ]

  2. (선택적으로) (x_0) 추정:
    [
    \hat x_0(x_t,t)=\frac{1}{\sqrt{\bar\alpha_t}}\left(x_t-\sqrt{1-\bar\alpha_t}\varepsilon_\theta(x_t,t)\right)
    ]

  3. 평균 계산:
    [
    \mu_\theta(x_t,t)
    =
    \frac{1}{\sqrt{\alpha_t}}
    \left(
    x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\varepsilon_\theta(x_t,t)
    \right)
    ]

  4. 샘플링:
    [
    x_{t-1} = \mu_\theta(x_t,t)+\sigma_t z,\quad z\sim\mathcal N(0,I)
    ]
    (보통 (t=1)에서는 (z=0)로 두어 마지막은 결정적으로 만듭니다.)


7. 왜 (\hat x_0)를 바로 “최종 결과”로 쓰지 않나?

핵심은 다음입니다.

  1. (\hat x_0(x_t,t))는 중간 단계의 점추정치입니다. 특히 (t)가 큰 구간에서는 (x_t)가 거의 노이즈라 (\hat x_0) 오차가 큽니다.

  2. diffusion의 생성모델은 애초에
    [
    p_\theta(x_{0:T}) = p(x_T)\prod_{t=1}^T p_\theta(x_{t-1}\mid x_t)
    ]
    처럼 stepwise 분포 이동을 정의합니다. 즉 “올바른 샘플”은 각 단계에서 (p_\theta(x_{t-1}\mid x_t))를 따라가며 얻는 (x_0)입니다.

  3. (p_\theta(x_{t-1}\mid x_t))에는 (\sigma_t^2)가 있어 **불확실성(랜덤성)**을 반영합니다. (\hat x_0)만 매번 확정값으로 쓰면 이 불확실성이 무시되어 분포를 제대로 따라가지 못할 수 있습니다. (단, DDIM처럼 (\sigma_t=0)을 선택해 결정론적으로 가는 변형도 존재합니다.)


8. 전체 흐름 한 줄 요약

  • Forward: (q)로 (x_0\to x_T) (마르코프 + 선형-가우시안)

  • 학습: stepwise KL (\mathrm{KL}(q(x_{t-1}\mid x_t,x_0)|p_\theta(x_{t-1}\mid x_t)))을 ELBO로 최적화

  • 파라미터화: (\mu_\theta)를 (\varepsilon_\theta)로 표현 → KL이 noise MSE로 단순화

  • 샘플링: (x_T\sim\mathcal N(0,I))에서 시작해 (\varepsilon_\theta)로 (\mu_\theta)를 만들고 (x_{t-1})를 샘플링하며 (x_0) 생성


원하시면, 위 정리에서 “증명” 성격이 가장 강한 두 부분을 더 엄밀하게(계수까지 모두 전개해서) 써드릴 수 있습니다.

  1. (q(x_t\mid x_0)=\mathcal N(\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)I)) 유도(완전 전개)

  2. 가우시안 KL을 평균 차이로 만들고, 그 평균 차이가 (|\varepsilon-\varepsilon_\theta|^2)로 바뀌는 대수 전개 (가중치 포함)

어느 쪽을 더 자세히 원하시는지 말씀하시면 그 부분을 중심으로 확장하겠습니다.


댓글