AI바라기의 인공지능

개념 정리 : diffusion에서 xt-1이 아닌 x0나 e를 바로 맞추는 이유 본문

논문리뷰

개념 정리 : diffusion에서 xt-1이 아닌 x0나 e를 바로 맞추는 이유

AI바라기 2026. 3. 28. 12:18

forward를 여러 번 적용하면 $x_t$는 원본 $x_0$의 약해진 버전과 가우시안 노이즈의 합으로 쓸 수 있습니다.

그래서 $x_0$를 안다고 가정하면, 현재 상태 $x_t$에서 직전 상태 $x_{t-1}$로 가는 이상적인 한 step 역방향 분포도 쓸 수 있습니다.

즉, $x_0$를 안다면 리버스 한 step은 이미 수학적으로 정해져 있습니다.

문제는 실제 생성에서는 $x_0$를 모른다는 점입니다.

바로 여기서 “실제 리버스”와 “무엇을 예측할 것인가”가 등장합니다.

1. 실제 리버스에서 우리가 정말로 필요한 것은 무엇인가

생성할 때는 데이터에서 출발하지 않습니다.

오히려 거의 순수 노이즈인 $x_T$에서 시작해서

$$x_T \to x_{T-1} \to x_{T-2} \to \cdots \to x_0$$

처럼 거꾸로 내려와야 합니다.

이때 $t$번째 step에서 우리가 손에 쥐고 있는 것은 현재 상태 $x_t$ 뿐입니다.

원래 데이터 $x_0$는 당연히 모릅니다. 생성 중이니까요.

그러므로 실제로 필요한 분포는

$$q(x_{t-1}\mid x_t)$$

입니다.

즉 질문은 이것입니다.

지금 noisy state $x_t$만 알고 있을 때, 직전 상태 $x_{t-1}$는 어떤 분포를 따라야 하나?

이게 진짜 reverse problem입니다.

2. 그런데 왜 $q(x_{t-1}\mid x_t)$는 바로 못 쓰나

이게 핵심 난점입니다.

우리는 이미 $x_0$를 안다고 가정했을 때의 분포

$$q(x_{t-1}\mid x_t, x_0)$$

는 알고 있습니다.

그런데 실제로 필요한 것은 $x_0$를 모르는 버전인

$$q(x_{t-1}\mid x_t)$$

입니다.

이 둘의 차이가 중요합니다.

왜냐하면 $q(x_{t-1}\mid x_t)$는 사실상 $x_0$를 적분해 없앤 결과이기 때문입니다.

형식적으로는

$$q(x_{t-1}\mid x_t) = \int q(x_{t-1}\mid x_t, x_0) q(x_0\mid x_t) dx_0$$

라고 생각할 수 있습니다.

이 식의 의미는 분명합니다.

  • 현재 $x_t$를 만들 수 있었던 가능한 clean source $x_0$들이 많고
  • 각각에 대해 이상적인 한 step reverse $q(x_{t-1}\mid x_t,x_0)$가 있으며
  • 그걸 전부 가중평균한 것이 진짜 reverse $q(x_{t-1}\mid x_t)$

이라는 뜻입니다.

문제는 여기서

$$q(x_0\mid x_t)$$

를 모른다는 점입니다.

이건 “이 noisy point가 원래 어떤 clean data에서 왔는가”에 대한 posterior인데, 결국 데이터 분포 자체를 알아야 합니다.

즉 forward는 우리가 직접 설계했기 때문에 쉽지만, reverse는 데이터 분포를 알아야 해서 어렵습니다.

3. 그래서 학습 가능한 reverse model을 도입한다

이 난점을 해결하기 위해, 진짜 reverse $q(x_{t-1}\mid x_t)$를 직접 쓰는 대신

신경망이 매개변수화한 모델

$$p_\theta(x_{t-1}\mid x_t)$$

를 도입합니다.

여기서 $\theta$는 신경망 파라미터입니다.

의미는 단순합니다.

“정답 reverse conditional은 모르니까, 그걸 흉내 내는 모델을 배우자.”

보통 이 모델은 가우시안 형태로 둡니다.

$$p_\theta(x_{t-1}\mid x_t) = \mathcal{N}\big(\mu_\theta(x_t,t), \Sigma_\theta(x_t,t)\big)$$

혹은 실전에서는 분산을 고정하거나 단순화해서

$$p_\theta(x_{t-1}\mid x_t) = \mathcal{N}\big(\mu_\theta(x_t,t), \sigma_t^2 I\big)$$

처럼 쓰기도 합니다.

즉 모델이 해야 할 핵심 일은 결국

  • 평균 $\mu_\theta(x_t,t)$를 잘 예측하는 것
  • 필요하면 분산도 예측하는 것

입니다.

4. 왜 reverse model도 가우시안으로 두는가

이 부분도 그냥 “그렇게 하기로 했다”가 아닙니다.

직관적으로는 이유가 두 가지입니다.

첫째, 한 step reverse는 아주 작은 변화입니다.

forward에서 각 step의 $\beta_t$를 작게 잡았기 때문에, reverse도 한 번에 큰 점프가 아니라 조금씩 보정하는 과정이 됩니다.

이런 국소적인 이동은 가우시안 전이로 모델링하기 자연스럽습니다.

둘째, $x_0$를 안다고 가정하면 이상적인 한 step reverse

$$q(x_{t-1}\mid x_t,x_0)$$

가 정확히 가우시안입니다.

즉 “clean source만 알면 한 step reverse는 가우시안”이라는 사실이 이미 있으니, 실제 reverse도 가우시안 family 안에서 모델링하는 것이 매우 자연스럽습니다.

그래서 DDPM류에서는 보통 reverse step을 가우시안 평균 이동 + 약간의 노이즈로 이해하시면 됩니다.

5. 그런데 모델은 정확히 무엇을 출력해야 하나

여기서 아주 자연스러운 질문이 생깁니다.

모델을 가우시안

$$p_\theta(x_{t-1}\mid x_t) = \mathcal{N}(\mu_\theta, \Sigma_\theta)$$

로 둘 수는 있는데,

그럼 신경망이 직접 $\mu_\theta$를 내야 하나?

아니면 다른 것을 예측해서 $\mu_\theta$를 간접적으로 만들면 되나?

바로 여기서 prediction target의 문제가 나옵니다.

선택지는 크게 세 가지입니다.

  • 평균을 직접 예측
  • $x_0$를 예측
  • $\epsilon$을 예측

실전에서 가장 많이 쓰이는 것은 뒤의 두 개입니다.

왜냐하면 이 둘은 forward 식과 아주 직접적으로 연결되기 때문입니다.

6. 왜 $x_0$$\epsilon$을 예측할 수 있나

핵심은 forward 닫힌형태입니다.

$$x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon \qquad \epsilon\sim\mathcal{N}(0,I)$$

이 식 하나가 사실 다 연결합니다.

이 식은 “현재 noisy sample $x_t$”가

  • clean signal $\sqrt{\bar\alpha_t}x_0$
  • noise part $\sqrt{1-\bar\alpha_t}\epsilon$

의 합이라는 뜻입니다.

그리고 여기서 $x_t$$t$가 주어지면,

  • $x_0$를 알면 $\epsilon$을 구할 수 있고
  • $\epsilon$을 알면 $x_0$를 구할 수 있습니다

즉 둘은 서로 거의 같은 정보를 담고 있습니다.

실제로 식을 정리하면

$$x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}}$$

이고, 반대로

$$\epsilon = \frac{x_t-\sqrt{\bar\alpha_t}x_0}{\sqrt{1-\bar\alpha_t}}$$

입니다.

이 두 식은 매우 중요합니다.

현재 $x_t$와 시간 $t$가 고정되면, $x_0$$\epsilon$은 서로 1:1로 대응한다.

그래서 모델이 $x_0$를 예측하든 $\epsilon$을 예측하든, 본질적으로는 비슷한 정보를 학습하게 됩니다.

7. $x_0$-prediction은 무엇인가

먼저 $x_0$-prediction부터 보겠습니다.

모델이

$$\hat{x}_0 = x_{\theta}(x_t,t)$$

처럼 현재 noisy sample $x_t$와 시간 $t$를 받아서

그 원래 clean source가 무엇이었는지 추정한다고 합시다.

이것의 의미는 매우 직관적입니다.

“이 noisy point는 원래 어떤 깨끗한 데이터였을까?”

를 맞히는 것입니다.

그러면 우리가 이미 알고 있던 이상적인 one-step posterior

$$q(x_{t-1}\mid x_t,x_0)$$

에 있는 $x_0$ 자리에 진짜 $x_0$ 대신 예측값 $\hat{x}_0$를 넣으면 됩니다.

즉 reverse mean을

$$\mu_\theta(x_t,t) = \tilde{\mu}_t(x_t,\hat{x}_0)$$

로 정의할 수 있습니다.

여기서 $\tilde{\mu}_t(x_t,x_0)$는 이전에 구한 “$x_0$를 안다고 할 때의 이상적인 posterior mean”입니다.

이 해석은 아주 좋습니다.

  • 신경망은 먼저 “원본 clean sample”을 추정하고
  • 그다음 수학적으로 정확한 가우시안 posterior 공식을 이용해
  • 한 step reverse mean을 계산합니다

즉 모델이 reverse를 통째로 배우는 것이 아니라,

missing clean information만 예측하면, 나머지는 확률식이 대신 처리해준다

는 구조입니다.

이게 아주 우아한 점입니다.

8. $\epsilon$-prediction은 무엇인가

이제 가장 유명한 $\epsilon$-prediction을 보겠습니다.

이번에는 모델이 clean sample $x_0$ 대신,

forward에서 섞였던 실제 노이즈 $\epsilon$를 예측한다고 합시다.

$$\hat{\epsilon} = \epsilon_\theta(x_t,t)$$

즉 질문이 이렇게 바뀝니다.

“이 noisy point 안에 들어 있는 노이즈 성분은 무엇일까?”

이것도 매우 자연스럽습니다.

현재 $x_t$는 “signal + noise”의 합이니, noise를 알 수 있으면 signal도 분리할 수 있습니다.

실제로 방금 본 식을 쓰면

$$\hat{x}_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\hat{\epsilon}}{\sqrt{\bar\alpha_t}}$$

로 clean estimate를 복원할 수 있습니다.

$\epsilon$-prediction은 사실상 간접적인 $x_0$-prediction입니다.

순서는 이렇게 됩니다.

  1. 신경망이 $\hat{\epsilon}$를 예측
  2. 그걸 이용해 $\hat{x}_0$를 복원
  3. $\hat{x}_0$를 posterior mean 공식에 넣어 $\mu_\theta$ 계산
  4. 그 mean 주위에서 한 step 샘플링

그래서 $\epsilon$-prediction도 결국 reverse mean을 만들 수 있습니다.

9. $\epsilon$-prediction에서 표준 reverse mean이 어떻게 나오나

이 부분은 수식 의미까지 같이 보겠습니다.

우리가 아는 이상적인 posterior mean은

$$\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$$

였습니다.

이제 $x_0$를 노이즈로 표현합니다.

$$x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}}$$

이걸 위 평균식에 대입하면 정리 끝에

$$\tilde{\mu}_t(x_t,\epsilon) = \frac{1}{\sqrt{\alpha_t}} \left( x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon \right)$$

가 됩니다.

그러므로 모델이 $\epsilon$를 예측한다면 reverse mean은

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

로 쓸 수 있습니다.

이 식의 의미를 해석하면 좋습니다.

먼저 $x_t$가 있습니다.

거기서 모델이 “이 안에 들어 있는 노이즈가 이것일 것이다”라고 예측한 $\epsilon_\theta$를 이용해

노이즈 방향을 조금 빼줍니다.

그런 다음 전체 스케일을 $\frac{1}{\sqrt{\alpha_t}}$로 조정합니다.

즉 이 mean은

현재 상태에서, 노이즈로 판단되는 성분을 제거해 조금 더 clean한 쪽으로 한 step 이동한 위치

입니다.

그래서 $\epsilon$-prediction은 본질적으로 denoising direction을 예측하는 것이라고 이해하시면 됩니다.

10. 왜 $\epsilon$-prediction이 특히 자연스럽나

이제 “왜 굳이 $\epsilon$을 예측하냐”가 보입니다.

첫째, training할 때 $\epsilon$는 우리가 직접 샘플링한 값입니다.

즉 forward를 만들 때

$$x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon$$

를 쓰므로, $x_0$도 알고 $\epsilon$도 알고 있습니다.

따라서 supervised target이 아주 명확합니다.

둘째, $\epsilon$는 항상 표준가우시안 스케일입니다.

즉 데이터셋의 의미나 픽셀 범위 같은 것과 무관하게, 타깃의 분포가 비교적 단순합니다.

이건 학습 안정성에 도움이 됩니다.

셋째, $\epsilon$-prediction은 “노이즈를 제거한다”는 직관과 잘 맞습니다.

현재 sample에서 무엇이 noise인지 안다면, 그걸 걷어내는 쪽으로 움직이면 되기 때문입니다.

넷째, 나중에 score 관점과도 바로 연결됩니다.

왜냐하면 조건 score가 결국 노이즈의 반대방향으로 쓰이기 때문입니다.

다만 그 연결은 다음 단계에서 loss와 함께 보시면 가장 자연스럽습니다.

11. 그럼 $x_0$-prediction과 $\epsilon$-prediction은 본질적으로 같은가

핵심적으로는 매우 가깝습니다.

앞에서 본 것처럼

$$x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}}$$

이므로, $x_t$$t$가 같을 때 $\epsilon$을 알면 $x_0$를 알 수 있고, 반대도 마찬가지입니다.

즉 차이는 “무슨 정보를 예측하느냐”보다는

어떤 좌표계로 문제를 표현하느냐에 가깝습니다.

  • $x_0$-prediction: clean source를 바로 맞히는 표현
  • $\epsilon$-prediction: noise component를 먼저 맞히는 표현

둘 다 결국 reverse mean을 만드는 데 충분합니다.

12. 왜 $x_{t-1}$를 직접 예측하지 않고 $x_0$$\epsilon$을 예측하나

이 부분도 중요합니다.

겉으로 보면 “어차피 한 step reverse가 목표면 $x_{t-1}$를 직접 맞히면 되지 않나?”라는 생각이 듭니다.

하지만 $x_{t-1}$ 자체는 여전히 확률적입니다. 즉 같은 $x_t$에 대해 가능한 $x_{t-1}$가 분포로 존재합니다.

반면 $x_0$$\epsilon$는 우리가 forward를 구성하는 순간 이미 자연스럽게 정의된 target입니다.

  • $x_0$: 원래 clean data
  • $\epsilon$: 우리가 실제로 넣은 noise

즉 supervised learning 타깃으로 더 깔끔합니다.

그리고 더 중요한 점은,

$x_0$$\epsilon$를 예측하면 이미 알고 있는 posterior 공식을 이용해 확률적으로 일관된 reverse mean을 만들 수 있다는 것입니다.

그래서 실전에서는 보통 “직접 $x_{t-1}$를 맞히기”보다 “$x_0$ 또는 $\epsilon$를 맞혀서 reverse mean을 구성하기”가 더 자연스럽습니다.

13. 실제 reverse sampling은 어떻게 진행되나

이제 전체 그림을 다시 보면 아주 간단합니다.

먼저 거의 순수 노이즈에서 시작합니다.

$$x_T \sim \mathcal{N}(0,I)$$

그다음 각 step마다 모델이 현재 $x_t$를 보고

$\hat{\epsilon}$ 또는 $\hat{x}_0$를 예측합니다.

그 예측으로부터 reverse mean $\mu_\theta(x_t,t)$를 만들고,

$$x_{t-1} \sim p_\theta(x_{t-1}\mid x_t)$$

로 샘플링합니다.

이걸 반복하면

$$x_T \to x_{T-1} \to \cdots \to x_0$$

가 됩니다.

즉 생성은 결국

매 step마다 “현재 noisy sample이 어디서 왔는지”를 추정하고, 그에 맞게 조금씩 denoise하는 과정

입니다.

14. 지금 단계에서 꼭 잡아야 하는 핵심 문장

여기까지를 압축하면 다음 네 문장이 핵심입니다.

첫째, 실제 생성에서 필요한 것은 $q(x_{t-1}\mid x_t)$이지만, 이건 데이터 분포를 알아야 해서 직접 쓰기 어렵습니다.

둘째, 그래서 신경망이 매개변수화한 reverse model

$$p_\theta(x_{t-1}\mid x_t)$$

를 학습합니다.

셋째, forward 식

$$x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon$$

때문에 $x_0$$\epsilon$은 서로 변환 가능하므로, 모델은 둘 중 하나를 예측해도 충분합니다.

넷째, 예측된 $x_0$ 또는 $\epsilon$를 이용하면, 이미 알고 있는 이상적인 posterior mean 공식을 통해 reverse step을 구성할 수 있습니다.

15. 한 줄 요약

가장 압축해서 말하면,

실제 reverse는 “현재 noisy state만 보고 직전 상태를 복원하는 문제”이고, 이를 직접 풀기 어렵기 때문에 모델이 clean source $x_0$ 또는 noise $\epsilon$를 예측하게 하여, 그 예측값으로 이상적인 one-step reverse mean을 구성하는 방식으로 해결합니다.

즉 리버스 모델은 처음부터 끝까지 mysterious한 새 공식을 배우는 게 아니라,

  • forward에서 생긴 구조를 이용하고
  • 신경망은 빠져 있는 정보만 채우고
  • 확률식이 나머지를 정리하는 구조

라고 이해하시면 됩니다.

다음 단계는 아주 자연스럽게,

그럼 왜 학습 loss가 $\epsilon$에 대한 MSE 꼴로 많이 쓰이는가와

이게 score와 어떻게 연결되는가입니다.