AI바라기의 인공지능

개념 정리 : diffusion : forward 본문

인공지능

개념 정리 : diffusion : forward

AI바라기 2026. 3. 28. 08:58

이번에는 1) noising process, 2) $q(x_t\mid x_0)$ 이 두 개만 순차적으로 설명하겠습니다.

핵심 목표는 이 두 식을 이해하는 것입니다.

$$q(x_t\mid x_{t-1}) = \mathcal{N}\big(\sqrt{1-\beta_t}x_{t-1}, \beta_t I\big)$$

그리고 이걸 여러 번 합치면

$$q(x_t\mid x_0)=\mathcal{N}\big(\sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I\big)$$

가 왜 되는지입니다.

여기서

$$\alpha_t := 1-\beta_t,\qquad \bar\alpha_t := \prod_{s=1}^t \alpha_s$$

입니다.


0. 먼저 큰 그림

디퓨전의 forward process는 아주 간단히 말하면:

복잡한 데이터 $x_0$를 조금씩 망가뜨려서, 마지막에는 거의 순수 가우시안 노이즈처럼 보이게 만드는 과정

입니다.

왜 이렇게 하느냐 하면, 복잡한 데이터 분포에서 바로 샘플을 만들기는 어렵지만,

가우시안 노이즈에서 시작해서 거꾸로 되돌리는 문제는 훨씬 다루기 좋기 때문입니다.

그런데 지금은 reverse는 잠깐 잊고,

forward가 정확히 어떤 확률과정인지만 보겠습니다.


1. noising process: 한 스텝에서 무슨 일이 일어나나

1-1. 표기부터: 왜 $q$를 쓰나

논문에서는 보통 forward process를 $q$로 씁니다.

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

이 뜻은:

“이전 상태 $x_{t-1}$이 주어졌을 때, 다음 상태 $x_t$가 어떤 분포를 따르나?”

입니다.

즉 이건 조건부분포입니다.

  • $x_{t-1}$: 현재 상태
  • $x_t$: 그다음 상태
  • $q(x_t\mid x_{t-1})$: 한 스텝 노이즈를 넣었을 때 생기는 분포

입니다.

여기서 중요한 건 forward는 우리가 직접 설계하는 과정이라는 점입니다.

$q$는 “배워야 하는 것”이 아니라, 처음부터 정해놓는 것입니다.


1-2. 가장 기본적인 한 스텝 식

DDPM 계열에서 보통 한 스텝은 이렇게 정의합니다.

$$q(x_t\mid x_{t-1}) = \mathcal{N}\big(\sqrt{1-\beta_t}x_{t-1}, \beta_t I\big)$$

이걸 샘플링 관점으로 쓰면 더 직관적입니다.

$$x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t}\epsilon_t, \qquad \epsilon_t\sim\mathcal{N}(0,I)$$

또는 $\alpha_t=1-\beta_t$라고 두면

$$x_t = \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}\epsilon_t$$

라고도 씁니다.

이 두 식은 완전히 같은 말입니다.


2. 이 식을 그냥 외우면 안 되고, 왜 이런 모양인지 봐야 한다

여기서 가장 중요한 질문이 생깁니다.

왜 하필

$$x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t}\epsilon_t$$

인가?

이걸 이해해야 forward가 살아납니다.


2-1. 가장 직관적인 해석: “이전 상태를 조금 남기고, 새 노이즈를 조금 섞는다”

식은 사실 아주 직관적입니다.

$$x_t = \underbrace{\sqrt{1-\beta_t}x_{t-1}}_{\text{기존 신호 일부 유지}} + \underbrace{\sqrt{\beta_t}\epsilon_t}_{\text{새 노이즈 추가}}$$

즉 한 스텝마다 하는 일은 딱 두 개입니다.

  1. 이전 상태 $x_{t-1}$를 조금 약하게 만든다
  2. 새로운 가우시안 노이즈를 조금 넣는다

그래서 시간이 지날수록 원래 데이터의 흔적은 점점 줄고,

노이즈 성분은 점점 커집니다.


2-2. 왜 $\beta_t$가 아니라 $\sqrt{\beta_t}$가 붙나

이건 아주 중요합니다.

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

이면 $\epsilon_t$의 공분산은 $I$입니다.

그런데 $\sqrt{\beta_t}\epsilon_t$로 스케일하면 공분산은

$$\mathrm{Cov}(\sqrt{\beta_t}\epsilon_t) = \beta_t I$$

가 됩니다.

표준편차에 $\sqrt{\beta_t}$를 곱하면, 분산에는 $\beta_t$가 들어갑니다.

그래서 분포를

$$\mathcal{N}(\cdot,\beta_t I)$$

로 만들고 싶으면 샘플 식에는 $\sqrt{\beta_t}$가 나와야 합니다.

이건 노이즈 쪽뿐 아니라 신호 쪽도 마찬가지입니다.

$\sqrt{1-\beta_t}$를 곱하는 이유는 “신호의 크기”보다 더 정확히는 분산 레벨에서 $1-\beta_t$만큼 유지한다는 의미입니다.

즉 여기서는 계수들이 amplitude가 아니라 variance budget을 나눠 갖는 구조입니다.


2-3. 왜 그냥 $x_t=x_{t-1}+\sigma_t\epsilon_t$로 안 하나

좋은 질문입니다. 그 식도 노이즈를 추가하는 과정이긴 합니다.

하지만 그렇게 하면 step이 쌓일수록 분산이 계속 커져서 스케일이 제어되지 않습니다.

반면 DDPM의 식은

$$x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t}\epsilon_t$$

처럼 이전 신호를 조금 줄인 뒤 노이즈를 넣기 때문에,

전체 스케일을 더 안정적으로 제어할 수 있습니다.

특히 데이터를 적절히 정규화해 두면, 시간이 충분히 지나면 $x_t$대체로 표준가우시안 $\mathcal{N}(0,I)$ 쪽으로 가도록 설계하기 좋습니다.

즉 이 식은 단순히 “노이즈 넣기”가 아니라,

복잡한 분포를 점진적으로 단순한 가우시안으로 보내기 위한 안정적인 설계

입니다.


2-4. $\beta_t$는 무엇인가

$\beta_t$는 각 step에서 넣는 노이즈의 세기입니다.

  • $\beta_t$가 작다
  • → 아주 조금만 망가진다
  • $\beta_t$가 크다
  • → 한 번에 많이 망가진다

보통은 $\beta_t\in(0,1)$이고, 대개 매우 작습니다.

왜냐하면 diffusion은 “한 번에 크게 망가뜨리는 것”보다

아주 조금씩, 잘게 나눠서 망가뜨리는 것이 핵심이기 때문입니다.

$\beta_t$들의 배열을 noise schedule이라고 부릅니다.


3. 한 스텝 식의 확률적 의미를 더 정확히 보자

$$x_t = \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}\epsilon_t \qquad (\alpha_t=1-\beta_t)$$

이 식에서 $x_{t-1}$가 고정되어 있다고 생각해봅시다.

그러면 randomness는 $\epsilon_t$만 있습니다.

즉 $x_t\mid x_{t-1}$는 가우시안입니다.

평균

$$\mathbb{E}[x_t\mid x_{t-1}] = \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}\mathbb{E}[\epsilon_t] = \sqrt{\alpha_t}x_{t-1}$$

왜냐하면 $\mathbb{E}[\epsilon_t]=0$이기 때문입니다.

공분산

$$\mathrm{Cov}(x_t\mid x_{t-1}) = \mathrm{Cov}(\sqrt{1-\alpha_t}\epsilon_t) = (1-\alpha_t)I = \beta_t I$$

입니다.

그래서

$$q(x_t\mid x_{t-1}) = \mathcal{N}(\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)I) = \mathcal{N}(\sqrt{1-\beta_t}x_{t-1},\beta_t I)$$

가 됩니다.

즉 이 분포식은 그냥 외운 정의가 아니라,

샘플링 식의 평균과 공분산을 계산하면 그대로 나옵니다.


4. 이 과정은 Markov process다

forward는 보통 Markov chain으로 설계합니다.

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

입니다.

뜻은 단순합니다.

다음 상태 $x_t$는 오직 바로 직전 상태 $x_{t-1}$에만 의존한다.

이건 계산과 이론 모두에서 매우 중요합니다.

forward를 이렇게 정해두면, 나중에 reverse를 다룰 때도 구조가 깔끔해집니다.

하지만 지금 단계에서는 그냥 이렇게 이해하면 충분합니다.

  • 매 step마다
  • 현재 상태를 조금 약하게 하고
  • 새 가우시안 노이즈를 조금 추가한다

이것만 반복합니다.


5. 시간이 지나면 실제로 어떤 일이 생기나

한 step만 보면 별 일 없어 보일 수 있습니다.

하지만 이걸 반복하면 중요한 변화가 생깁니다.

$$x_0 \to x_1 \to x_2 \to \cdots \to x_t$$

가 진행될수록

  • 원래 데이터 $x_0$의 정보는 계속 약해지고
  • 독립적인 노이즈들이 계속 쌓입니다

$t$가 커질수록 $x_t$는 점점 “데이터 같지 않고”,

점점 “가우시안 노이즈 같다”는 쪽으로 갑니다.

이걸 수식으로 정확히 잡아주는 게 바로 다음 단계,

$$q(x_t\mid x_0)$$

입니다.


6. 이제 다음 핵심: $q(x_t\mid x_0)$

이건 매우 중요합니다.

우리는 한 step 분포

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

는 이미 압니다.

그런데 실제로는 “처음 데이터 $x_0$에서 출발해서 $t$ step 뒤 상태 $x_t$가 어떤 분포인가?”를 알고 싶습니다.

$$q(x_t\mid x_0)$$

를 알고 싶은 것입니다.

이게 중요한 이유는 나중에 학습할 때,

굳이 $x_1,x_2,\dots,x_{t-1}$를 전부 시뮬레이션하지 않고도

원하는 $t$의 noisy sample을 한 번에 만들 수 있기 때문입니다.

이게 diffusion training의 핵심 트릭 중 하나입니다.


7. 먼저 직접 몇 단계 전개해보자

7-1. 한 단계

$$x_1=\sqrt{\alpha_1}x_0+\sqrt{1-\alpha_1}\epsilon_1$$

이건 이미 알고 있습니다.


7-2. 두 단계

$$x_2=\sqrt{\alpha_2}x_1+\sqrt{1-\alpha_2}\epsilon_2$$

여기에 $x_1$을 대입하면

$$x_2 = \sqrt{\alpha_2}\Big(\sqrt{\alpha_1}x_0+\sqrt{1-\alpha_1}\epsilon_1\Big) +\sqrt{1-\alpha_2}\epsilon_2$$

정리하면

$$x_2 = \sqrt{\alpha_1\alpha_2}x_0 + \sqrt{\alpha_2(1-\alpha_1)}\epsilon_1 + \sqrt{1-\alpha_2}\epsilon_2$$

이제 중요한 패턴이 보입니다.

  • $x_0$ 앞의 계수는 $\sqrt{\alpha_1\alpha_2}$
  • 노이즈 항들은 여러 개 있지만 모두 가우시안의 선형결합

입니다.


7-3. 세 단계도 비슷하다

$$x_3=\sqrt{\alpha_3}x_2+\sqrt{1-\alpha_3}\epsilon_3$$

를 넣으면 결국

$$x_3 = \sqrt{\alpha_1\alpha_2\alpha_3}x_0 + \text{(가우시안 노이즈들의 선형결합)}$$

꼴이 됩니다.

즉 일반적으로

$$x_t = \sqrt{\prod_{s=1}^t \alpha_s}x_0 + \text{(가우시안 노이즈의 선형결합)}$$

입니다.

그래서

$$\bar\alpha_t := \prod_{s=1}^t \alpha_s$$

를 정의하면, 신호 부분은

$$\sqrt{\bar\alpha_t}x_0$$

가 됩니다.

여기서 $\bar\alpha_t$는 아주 중요한 양입니다.

$\bar\alpha_t$ = $t$ step까지 누적된 signal retention factor

즉 원래 신호가 얼마나 살아남아 있는지를 나타냅니다.


8. 왜 노이즈 부분도 결국 하나의 가우시안으로 묶이나

이게 두 번째 핵심입니다.

$\epsilon_s$는 독립인 표준가우시안입니다.

가우시안의 아주 중요한 성질은:

독립 가우시안들의 선형결합은 다시 가우시안

이라는 것입니다.

그래서 $x_t$의 노이즈 부분도 결국

$$\sqrt{1-\bar\alpha_t}\epsilon \qquad \text{with } \epsilon\sim\mathcal{N}(0,I)$$

처럼 하나의 가우시안으로 묶을 수 있습니다.

즉 최종적으로

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

가 됩니다.

이건 근사가 아니라 정확한 식입니다.


9. 그런데 왜 노이즈 계수가 정확히 $\sqrt{1-\bar\alpha_t}$인가

이건 꼭 짚고 가야 합니다.

단순히 “가우시안이라서”까지만 이해하면 반쪽입니다.

핵심은 분산 계산입니다.


9-1. 더 엄밀한 방법: 귀납적으로 평균/분산 계산

$x_0$가 주어졌다고 가정합시다.

그러면 $x_t\mid x_0$의 평균과 분산을 계산하면 됩니다.

먼저 귀납 가정을 둡니다.

$$x_{t-1}\mid x_0 \sim \mathcal{N}\big(\sqrt{\bar\alpha_{t-1}}x_0, (1-\bar\alpha_{t-1})I\big)$$

라고 합시다.

이제 한 step 식

$$x_t = \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_t$$

를 사용합니다.


9-2. 평균 계산

$$\mathbb{E}[x_t\mid x_0] = \sqrt{\alpha_t}\mathbb{E}[x_{t-1}\mid x_0] + \sqrt{1-\alpha_t}\mathbb{E}[\epsilon_t]$$
$$= \sqrt{\alpha_t}\sqrt{\bar\alpha_{t-1}}x_0 = \sqrt{\bar\alpha_t}x_0$$

왜냐하면

$$\bar\alpha_t=\alpha_t\bar\alpha_{t-1}$$

이기 때문입니다.


9-3. 분산 계산

$$\mathrm{Cov}(x_t\mid x_0) = \alpha_t\mathrm{Cov}(x_{t-1}\mid x_0) + (1-\alpha_t)I$$

여기서 교차항이 없는 이유는 $x_{t-1}$의 randomness와 $\epsilon_t$가 독립이기 때문입니다.

귀납가정을 넣으면

$$\mathrm{Cov}(x_t\mid x_0) = \alpha_t(1-\bar\alpha_{t-1})I + (1-\alpha_t)I$$

정리하면

$$= \big[\alpha_t - \alpha_t\bar\alpha_{t-1} + 1-\alpha_t\big]I = \big[1-\alpha_t\bar\alpha_{t-1}\big]I = (1-\bar\alpha_t)I$$

입니다.

그러므로

$$x_t\mid x_0 \sim \mathcal{N}\big(\sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I\big)$$

가 됩니다.

$$q(x_t\mid x_0)=\mathcal{N}\big(\sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I\big)$$

가 정확히 증명됩니다.


10. 이 식을 해석해보자: 의미가 진짜 중요하다

이제 수식은 나왔습니다.

하지만 여기서 더 중요한 건 이 식이 실제로 무슨 뜻인가입니다.

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

이 식은 다음을 말합니다.


10-1. 원래 데이터는 $\sqrt{\bar\alpha_t}$만큼 남아 있다

$t$가 커질수록 $\bar\alpha_t$는 보통 작아집니다.

그래서

$$\sqrt{\bar\alpha_t}x_0$$

는 점점 약해집니다.

이건 “원래 신호가 점점 사라진다”는 뜻입니다.


10-2. 노이즈는 $1-\bar\alpha_t$만큼 누적된다

노이즈 표준편차는

$$\sqrt{1-\bar\alpha_t}$$

이므로 $t$가 커질수록 커집니다.

즉 시간이 지날수록 noisy sample은 점점 더 랜덤해집니다.


10-3. 신호-노이즈 비율이 점점 나빠진다

정확히 말하면 signal 쪽 계수와 noise 쪽 계수가

$$\sqrt{\bar\alpha_t}, \qquad \sqrt{1-\bar\alpha_t}$$

이므로, $t$가 커질수록 원본 $x_0$의 정보는 희미해지고,

노이즈가 더 지배적이 됩니다.

이걸 자주 signal-to-noise ratio 관점으로 봅니다.

대략적으로

$$\text{SNR}_t \propto \frac{\bar\alpha_t}{1-\bar\alpha_t}$$

라고 생각할 수 있습니다.

$\bar\alpha_t$가 작아질수록 “데이터 흔적”이 약해집니다.


11. 왜 $q(x_t\mid x_0)$가 그렇게 중요한가

이건 단순히 예쁜 닫힌형태라서 중요한 게 아닙니다.

가장 큰 이유는 학습할 때 엄청 편해지기 때문입니다.

원래 정의대로라면 $x_t$를 만들려면

$$x_0 \to x_1 \to x_2 \to \cdots \to x_t$$

를 전부 순차적으로 샘플링해야 합니다.

그런데 닫힌형태를 알면 그냥 한 번에

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

로 만들 수 있습니다.

즉 원하는 $t$를 랜덤으로 뽑고,

바로 그 레벨의 noisy sample을 생성할 수 있습니다.

이건 diffusion training에서 거의 필수적인 편의입니다.


12. 아주 짧은 수치 감각

예를 들어 모든 step에서 $\alpha_t=0.9$라고 단순화해 봅시다.

그러면

$$\bar\alpha_t = 0.9^t$$

입니다.

  • $t=1$: $\sqrt{\bar\alpha_1}=\sqrt{0.9}\approx 0.949$
  • $t=10$: $\sqrt{\bar\alpha_{10}}=\sqrt{0.9^{10}}\approx 0.590$

10 step만 지나도 원래 신호가 많이 약해집니다.

반면 노이즈 표준편차는

$$\sqrt{1-\bar\alpha_{10}} = \sqrt{1-0.9^{10}} \approx 0.807$$

입니다.

즉 시간이 지나면 “신호는 줄고, 노이즈는 커진다”는 게 숫자로도 보입니다.


13. 지금 단계에서 꼭 기억해야 할 핵심 문장

여기까지를 압축하면, forward에서 꼭 잡아야 할 건 이 다섯 개입니다.

첫째, forward는 복잡한 데이터 분포를 점차 가우시안 노이즈 쪽으로 보내는 고정된 Markov noising process입니다.

둘째, 한 step은

$$x_t = \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_t$$

이며, 이는 “이전 신호를 조금 남기고 새 노이즈를 조금 섞는 것”입니다.

셋째, $\sqrt{\cdot}$가 붙는 이유는 분산을 제어하기 위해서입니다.

넷째,

$$\bar\alpha_t=\prod_{s=1}^t \alpha_s$$

$t$ step 뒤까지 누적된 신호 보존율입니다.

다섯째, 그래서

$$q(x_t\mid x_0)=\mathcal{N}\big(\sqrt{\bar\alpha_t}x_0, (1-\bar\alpha_t)I\big)$$

가 되고, 이는 “$x_t$는 원본 $x_0$의 약해진 버전 + 누적된 가우시안 노이즈”라는 뜻입니다.


14. 한 줄 요약

가장 압축해서 말하면,

forward diffusion은 매 step마다 신호를 조금 줄이고 독립 가우시안 노이즈를 조금 추가하는 과정이고, 그 결과 $t$ step 뒤 상태는 $x_0$의 약해진 버전과 하나의 큰 가우시안 노이즈의 합으로 정확히 쓸 수 있다.

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

이 식이 forward 전체를 요약합니다.