AI바라기의 인공지능
개념 정리 : diffusion에서 xt-1이 아닌 x0나 e를 바로 맞추는 이유 본문
forward를 여러 번 적용하면 $x_t$는 원본 $x_0$의 약해진 버전과 가우시안 노이즈의 합으로 쓸 수 있습니다.
그래서 $x_0$를 안다고 가정하면, 현재 상태 $x_t$에서 직전 상태 $x_{t-1}$로 가는 이상적인 한 step 역방향 분포도 쓸 수 있습니다.
즉, $x_0$를 안다면 리버스 한 step은 이미 수학적으로 정해져 있습니다.
문제는 실제 생성에서는 $x_0$를 모른다는 점입니다.
바로 여기서 “실제 리버스”와 “무엇을 예측할 것인가”가 등장합니다.
1. 실제 리버스에서 우리가 정말로 필요한 것은 무엇인가
생성할 때는 데이터에서 출발하지 않습니다.
오히려 거의 순수 노이즈인 $x_T$에서 시작해서
처럼 거꾸로 내려와야 합니다.
이때 $t$번째 step에서 우리가 손에 쥐고 있는 것은 현재 상태 $x_t$ 뿐입니다.
원래 데이터 $x_0$는 당연히 모릅니다. 생성 중이니까요.
그러므로 실제로 필요한 분포는
입니다.
즉 질문은 이것입니다.
지금 noisy state $x_t$만 알고 있을 때, 직전 상태 $x_{t-1}$는 어떤 분포를 따라야 하나?
이게 진짜 reverse problem입니다.
2. 그런데 왜 $q(x_{t-1}\mid x_t)$는 바로 못 쓰나
이게 핵심 난점입니다.
우리는 이미 $x_0$를 안다고 가정했을 때의 분포
는 알고 있습니다.
그런데 실제로 필요한 것은 $x_0$를 모르는 버전인
입니다.
이 둘의 차이가 중요합니다.
왜냐하면 $q(x_{t-1}\mid x_t)$는 사실상 $x_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)$
이라는 뜻입니다.
문제는 여기서
를 모른다는 점입니다.
이건 “이 noisy point가 원래 어떤 clean data에서 왔는가”에 대한 posterior인데, 결국 데이터 분포 자체를 알아야 합니다.
즉 forward는 우리가 직접 설계했기 때문에 쉽지만, reverse는 데이터 분포를 알아야 해서 어렵습니다.
3. 그래서 학습 가능한 reverse model을 도입한다
이 난점을 해결하기 위해, 진짜 reverse $q(x_{t-1}\mid x_t)$를 직접 쓰는 대신
신경망이 매개변수화한 모델
를 도입합니다.
여기서 $\theta$는 신경망 파라미터입니다.
의미는 단순합니다.
“정답 reverse conditional은 모르니까, 그걸 흉내 내는 모델을 배우자.”
보통 이 모델은 가우시안 형태로 둡니다.
혹은 실전에서는 분산을 고정하거나 단순화해서
처럼 쓰기도 합니다.
즉 모델이 해야 할 핵심 일은 결국
- 평균 $\mu_\theta(x_t,t)$를 잘 예측하는 것
- 필요하면 분산도 예측하는 것
입니다.
4. 왜 reverse model도 가우시안으로 두는가
이 부분도 그냥 “그렇게 하기로 했다”가 아닙니다.
직관적으로는 이유가 두 가지입니다.
첫째, 한 step reverse는 아주 작은 변화입니다.
forward에서 각 step의 $\beta_t$를 작게 잡았기 때문에, reverse도 한 번에 큰 점프가 아니라 조금씩 보정하는 과정이 됩니다.
이런 국소적인 이동은 가우시안 전이로 모델링하기 자연스럽습니다.
둘째, $x_0$를 안다고 가정하면 이상적인 한 step reverse
가 정확히 가우시안입니다.
즉 “clean source만 알면 한 step reverse는 가우시안”이라는 사실이 이미 있으니, 실제 reverse도 가우시안 family 안에서 모델링하는 것이 매우 자연스럽습니다.
그래서 DDPM류에서는 보통 reverse step을 가우시안 평균 이동 + 약간의 노이즈로 이해하시면 됩니다.
5. 그런데 모델은 정확히 무엇을 출력해야 하나
여기서 아주 자연스러운 질문이 생깁니다.
모델을 가우시안
로 둘 수는 있는데,
그럼 신경망이 직접 $\mu_\theta$를 내야 하나?
아니면 다른 것을 예측해서 $\mu_\theta$를 간접적으로 만들면 되나?
바로 여기서 prediction target의 문제가 나옵니다.
선택지는 크게 세 가지입니다.
- 평균을 직접 예측
- $x_0$를 예측
- $\epsilon$을 예측
실전에서 가장 많이 쓰이는 것은 뒤의 두 개입니다.
왜냐하면 이 둘은 forward 식과 아주 직접적으로 연결되기 때문입니다.
6. 왜 $x_0$나 $\epsilon$을 예측할 수 있나
핵심은 forward 닫힌형태입니다.
이 식 하나가 사실 다 연결합니다.
이 식은 “현재 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_t$와 시간 $t$가 고정되면, $x_0$와 $\epsilon$은 서로 1:1로 대응한다.
그래서 모델이 $x_0$를 예측하든 $\epsilon$을 예측하든, 본질적으로는 비슷한 정보를 학습하게 됩니다.
7. $x_0$-prediction은 무엇인가
먼저 $x_0$-prediction부터 보겠습니다.
모델이
처럼 현재 noisy sample $x_t$와 시간 $t$를 받아서
그 원래 clean source가 무엇이었는지 추정한다고 합시다.
이것의 의미는 매우 직관적입니다.
“이 noisy point는 원래 어떤 깨끗한 데이터였을까?”
를 맞히는 것입니다.
그러면 우리가 이미 알고 있던 이상적인 one-step posterior
에 있는 $x_0$ 자리에 진짜 $x_0$ 대신 예측값 $\hat{x}_0$를 넣으면 됩니다.
즉 reverse mean을
로 정의할 수 있습니다.
여기서 $\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$를 예측한다고 합시다.
즉 질문이 이렇게 바뀝니다.
“이 noisy point 안에 들어 있는 노이즈 성분은 무엇일까?”
이것도 매우 자연스럽습니다.
현재 $x_t$는 “signal + noise”의 합이니, noise를 알 수 있으면 signal도 분리할 수 있습니다.
실제로 방금 본 식을 쓰면
로 clean estimate를 복원할 수 있습니다.
즉 $\epsilon$-prediction은 사실상 간접적인 $x_0$-prediction입니다.
순서는 이렇게 됩니다.
- 신경망이 $\hat{\epsilon}$를 예측
- 그걸 이용해 $\hat{x}_0$를 복원
- $\hat{x}_0$를 posterior mean 공식에 넣어 $\mu_\theta$ 계산
- 그 mean 주위에서 한 step 샘플링
그래서 $\epsilon$-prediction도 결국 reverse mean을 만들 수 있습니다.
9. $\epsilon$-prediction에서 표준 reverse mean이 어떻게 나오나
이 부분은 수식 의미까지 같이 보겠습니다.
우리가 아는 이상적인 posterior mean은
였습니다.
이제 $x_0$를 노이즈로 표현합니다.
이걸 위 평균식에 대입하면 정리 끝에
가 됩니다.
그러므로 모델이 $\epsilon$를 예측한다면 reverse mean은
로 쓸 수 있습니다.
이 식의 의미를 해석하면 좋습니다.
먼저 $x_t$가 있습니다.
거기서 모델이 “이 안에 들어 있는 노이즈가 이것일 것이다”라고 예측한 $\epsilon_\theta$를 이용해
노이즈 방향을 조금 빼줍니다.
그런 다음 전체 스케일을 $\frac{1}{\sqrt{\alpha_t}}$로 조정합니다.
즉 이 mean은
현재 상태에서, 노이즈로 판단되는 성분을 제거해 조금 더 clean한 쪽으로 한 step 이동한 위치
입니다.
그래서 $\epsilon$-prediction은 본질적으로 denoising direction을 예측하는 것이라고 이해하시면 됩니다.
10. 왜 $\epsilon$-prediction이 특히 자연스럽나
이제 “왜 굳이 $\epsilon$을 예측하냐”가 보입니다.
첫째, training할 때 $\epsilon$는 우리가 직접 샘플링한 값입니다.
즉 forward를 만들 때
를 쓰므로, $x_0$도 알고 $\epsilon$도 알고 있습니다.
따라서 supervised target이 아주 명확합니다.
둘째, $\epsilon$는 항상 표준가우시안 스케일입니다.
즉 데이터셋의 의미나 픽셀 범위 같은 것과 무관하게, 타깃의 분포가 비교적 단순합니다.
이건 학습 안정성에 도움이 됩니다.
셋째, $\epsilon$-prediction은 “노이즈를 제거한다”는 직관과 잘 맞습니다.
현재 sample에서 무엇이 noise인지 안다면, 그걸 걷어내는 쪽으로 움직이면 되기 때문입니다.
넷째, 나중에 score 관점과도 바로 연결됩니다.
왜냐하면 조건 score가 결국 노이즈의 반대방향으로 쓰이기 때문입니다.
다만 그 연결은 다음 단계에서 loss와 함께 보시면 가장 자연스럽습니다.
11. 그럼 $x_0$-prediction과 $\epsilon$-prediction은 본질적으로 같은가
핵심적으로는 매우 가깝습니다.
앞에서 본 것처럼
이므로, $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은 어떻게 진행되나
이제 전체 그림을 다시 보면 아주 간단합니다.
먼저 거의 순수 노이즈에서 시작합니다.
그다음 각 step마다 모델이 현재 $x_t$를 보고
$\hat{\epsilon}$ 또는 $\hat{x}_0$를 예측합니다.
그 예측으로부터 reverse mean $\mu_\theta(x_t,t)$를 만들고,
로 샘플링합니다.
이걸 반복하면
가 됩니다.
즉 생성은 결국
매 step마다 “현재 noisy sample이 어디서 왔는지”를 추정하고, 그에 맞게 조금씩 denoise하는 과정
입니다.
14. 지금 단계에서 꼭 잡아야 하는 핵심 문장
여기까지를 압축하면 다음 네 문장이 핵심입니다.
첫째, 실제 생성에서 필요한 것은 $q(x_{t-1}\mid x_t)$이지만, 이건 데이터 분포를 알아야 해서 직접 쓰기 어렵습니다.
둘째, 그래서 신경망이 매개변수화한 reverse model
를 학습합니다.
셋째, forward 식
때문에 $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와 어떻게 연결되는가입니다.
