0. 시작하기 전에 — 왜 '큰 그림'부터 보는가
Diffusion을 다룬 글은 대부분 이걸 "노이즈를 넣었다가 다시 지우는 학습 기법"으로 소개합니다. 그 설명만으로도 코드는 돌아갑니다. 하지만 거기서 멈추면 시야가 좁아집니다.
왜 하필 noise를 쓰는지, 왜 분포가 아니라 score를 배우는지, 그 손실함수는 어디서 튀어나왔는지를 모른 채 레시피만 외우게 됩니다. 그러면 막상 응용하거나 새로운 연구로 확장하려 할 때 손에 잡히는 게 없습니다. "denoise하는 과정"에만 익숙해진 채로 advanced한 작업에 들어가 길을 잃는 경우가 그래서 많습니다.
여기서 작성하는 Diffusion관련 내용은 순서를 뒤집어 서술합니다.. Diffusion을 '생성 모델'이라는 더 큰 문제의 한 가지 해법으로 놓고, 무슨 문제를 푸는가 → 그래서 왜 이런 장치가 필요했는가의 순서로 풀어갑니다.
이 관점에서 보면 noise schedule, score, reverse process, ELBO 같은 장치들이 임의의 트릭이 아니라, 그 문제에서 자연스럽게 따라 나온 결론으로 보이기 시작합니다.
이 장은 그 출발점입니다. 먼저 생성 모델이 정확히 무엇을 목표로 하는지부터 잡습니다. (수학 기호가 아직 낯설면
2026.06.23 - [인공지능 이론/Diffusion] - 00-0. 서론. 생성형 모델을 이해하기 위한 기초 수학적 개념들
을 먼저 읽고 와도 좋습니다.)
1. 목표: 데이터 '한 장'이 아니라 '분포'를 손에 넣기
직관부터 잡고 갑시다. 친구 1,000명의 키를 모으면 하나의 '키 분포'(170cm 근처가 가장 많은 종 모양)가 생깁니다. 그 분포에서 무작위로 한 값을 뽑으면, 실제로 재본 적 없는 새로운 사람의 키를 만들어낸 셈입니다. 생성(generation)이란 바로 이 "분포에서 뽑기"입니다.
이미지도 똑같습니다. 고양이 사진 100만 장이 있어도 가능한 고양이 이미지는 훨씬 많고, 우리는 그 사진들을 어떤 알 수 없는 분포에서 뽑힌 샘플로 봅니다.
$$
x \sim p_{\text{data}}(x)
$$
여기서 $x$는 이미지·음성·문장 등 생성 대상이고, $p_{\text{data}}(x)$는 "진짜 데이터가 나타나는 확률 구조"입니다. 우리는 그 공식을 모릅니다. 가진 것은 샘플(예시 사진)뿐입니다. 그래서 생성 모델의 목표는, 이 샘플들을 보고 $p_{\text{data}}$와 비슷한 분포 $p_\theta$를 직접 만들어, 거기서 새 샘플을 뽑는 것입니다.
$$
p_\theta(x) \approx p_{\text{data}}(x)
$$
중요한 건 이게 외우기가 아니라는 점입니다. 학습 사진을 그대로 복사해 내놓으면 '외운 것'이고, 학습 데이터엔 없던 '주황 줄무늬에 한쪽 귀만 접힌 고양이'를 새로 그려낼 수 있으면 개별 사진이 아니라 '고양이다움의 규칙(= 분포)'을 배운 것입니다.
좋은 생성 모델은 후자이고, 보통 아래 네 가지를 함께 봅니다.
| 관점 | 질문 | 예시 |
| 샘플 품질 | 그럴듯한가? | 이미지가 선명하고 자연스러운가 |
| 분포 커버리지 | 다양한가? | 특정 모양만 반복하지 않고 분포 전체를 고루 덮는가 |
| 조건부 생성 | 조건을 따르는가? | 텍스트 prompt, class label을 반영하는가 |
| 학습 안정성 | 훈련이 안정적인가? | mode collapse(같은 것만 반복), 불안정한 loss가 적은가 |
2. 그런데 왜 어려운가 — "그냥 뽑으면 되지 않나?"
여기서 자연스러운 의문이 듭니다. "$p_{\text{data}}$에서 그냥 뽑으면 되는데 왜 이렇게 복잡하게 하지?"
답은 간단합니다.
우리에겐 $p_{\text{data}}$가 없습니다.
손에 있는 건 유한한 샘플 몇 장뿐이고, 그 뒤에 있는 분포는 직접 주어지지 않습니다.
그 분포를 샘플만 보고 모델로 복원해야 하는데, 이게 왜 어려운지가 Diffusion이라는 장치 전체의 출발점입니다. 세 가지 이유를 봅시다.
(1) 고차원 — 차원의 저주. 가로·세로 256, 컬러 이미지 한 장은 숫자 $3 \times 256 \times 256 \approx 20$만 개짜리 벡터입니다. 이 공간은 상상하기 어려울 만큼 크고, 데이터는 그 안에서 극도로 희박합니다. "공간을 칸으로 잘게 나눠 각 칸에 데이터가 몇 개 있나 세는(히스토그램)" 단순한 방법은, 칸 수가 차원에 대해 지수로 폭발해 불가능합니다.
(2) 데이터는 manifold 위에 몰려 있다. 그 거대한 공간을 실제 데이터가 채우지는 않습니다. 픽셀을 완전히 무작위로 칠하면 거의 항상 의미 없는 noise가 나오죠 — 진짜 이미지는 전체 공간의 아주 얇고 휜 한 겹에만 모여 있습니다. 이 얇은 면을 **manifold(다양체)**라고 부릅니다.

manifold란? 높은 차원 공간 안에 들어 있지만, 국소적으로 보면 훨씬 낮은 차원처럼 생긴 '휘어진 면'입니다. 비유하면 3차원 방 안에 종이 한 장을 구겨 넣은 것과 같습니다 — 점들은 그 2차원 종이 표면 위에만 있고 방 전체(3차원)를 채우지 않습니다. 실제 이미지의 집합도 이렇게 고차원 공간 속 얇은 manifold에 놓여 있고, 그래서 $p_{\text{data}}$는 공간 거의 전부에서 0이고 이 manifold 위에서만 큽니다.
(3) 그 집합은 convex하지 않다 (비볼록).
convex란? 어떤 집합이 convex(볼록)하다는 건, 그 안의 두 점을 직선으로 이었을 때 그 선분 전체가 집합 안에 머무는 성질입니다.
그런데 실제 이미지의 집합은 그렇지 않습니다. 고양이 이미지 A와 또 다른 고양이 이미지 B를 픽셀 단위로 평균 내면(= 둘을 직선으로 이은 중간점), 결과는 또 다른 고양이가 아니라 두 사진이 겹친 흐릿한 유령입니다. 즉 두 실제 점의 중간이 manifold를 벗어납니다.

이 세 가지가 합쳐지면 결론은 분명합니다. $p_{\text{data}}$는 고차원 공간 속 얇고 휘고 비볼록한 분포라서, 직접 추정하거나 단순히 보간·평균하는 식으로는 잡히지 않습니다.
그래서 영리한 우회가 필요하고, Diffusion이 그 우회 중 하나입니다. (이 manifold·convex라는 말은 앞으로도 계속 쓰입니다 — 예컨대 'noise를 섞는다'는 건 데이터를 manifold 밖으로 잠깐 밀어냈다가 다시 manifold 위로 끌어오는 일로 읽을 수 있습니다.)
3. likelihood로 재고 싶지만, 직접 못 잰다
분포를 배운다는 걸 조금 더 정밀하게 쓰면, 모델 $p_\theta$가 데이터를 얼마나 잘 설명하는지를 likelihood로 재고 그 값을 키우는 것입니다. likelihood는 "모델이 실제 데이터 $x$에 얼마나 높은 확률(밀도)을 주는가" 즉 $p_\theta(x)$이고, 이게 크면 좋은 모델입니다.
문제는, 대부분의 쓸 만한 모델에서 $p_\theta(x)$를 직접 계산하는 게 불가능하다는 점입니다. 두 가지로 봅시다.
(가) 숨은 변수에 대한 적분. Diffusion 같은 모델은 $x$를 단번에 만들지 않고 숨은 중간 단계 $z = (x_1, \dots, x_T)$를 거쳐 만듭니다. 그래서 "$x$ 하나의 확률"은 그 $x$로 이어질 수 있는 모든 숨은 경로를 다 더해야 나옵니다.
$$
p_\theta(x) = \int p_\theta(x, z)\, dz
$$
이 적분은 고차원 잠재공간 전체에 대한 것이라 경우의 수가 천문학적이어서 정확히 계산할 수 없습니다. (한 이미지의 확률을 알려면, 모델이 그걸 만들 수 있는 모든 방법의 확률을 빠짐없이 합산해야 한다는 뜻입니다.)
(나) 정규화 상수. 분포를 $p(x) = \frac{1}{Z}\,e^{-E(x)}$ 꼴(에너지 $E$가 낮을수록 그럴듯)로 적으면, 전체 합이 1이 되도록 나눠 주는 상수 $Z = \int e^{-E(x)}\,dx$가 또 고차원 적분입니다. $E$는 신경망으로 줄 수 있어도 $Z$는 못 구합니다.
수치로 감만 잡자면, 1차원이면 이 적분은 구간을 잘게 나눠 더하면 끝나지만, 20만 차원에서 같은 식으로 격자를 나누면 격자점 수가 $(\text{격자 수})^{200000}$으로 폭발합니다 — 우주의 모든 연산을 동원해도 불가능합니다.
그래서 생성 모델들은 저마다 이 벽을 다른 방식으로 우회합니다. 이게 다음 절의 '여러 접근'이 생긴 이유입니다.
- VAE: 직접 못 올리는 likelihood 대신 계산 가능한 하한인 ELBO를 올린다.
- GAN: likelihood를 아예 포기하고, 진짜/가짜를 구분하는 판별자를 속이는 방식으로 암묵적으로 분포를 맞춘다.
- Score 기반 / Diffusion: $p$ 자체 대신 그 기울기 $\nabla_x \log p(x)$(score)를 배운다. 결정적 이점이 있는데, $\log$를 미분하면 골치 아픈 정규화 상수 $Z$가 (상수의 미분이라) 사라진다. 즉 $Z$를 몰라도 score는 배울 수 있다.
KL·ELBO의 자세한 직관(왜 log를 쓰는지, '구름에 가린 산과 깃발' 비유 등)은
2026.06.23 - [인공지능 이론/Diffusion] - 00-0. 서론. 생성형 모델을 이해하기 위한 기초 수학적 개념들
에 풀어 두었습니다. 여기서는 "likelihood를 직접 못 재서 저마다 우회한다"만 가져가면 됩니다.
이 우회 전체를 묶어 variational inference(직접 못 구하는 분포를 다루기 쉬운 분포로 근사해 푸는 방법)라 부르고, Diffusion의 대표 모델 DDPM도 바로 이 ELBO에서 출발합니다 — 겉보기엔 단순한 denoising loss 같지만요.
4. 생성 모델의 여러 접근
위에서 봤듯, '분포를 직접 다루기 어렵다'는 같은 벽을 저마다 다르게 넘은 결과가 아래 다섯 갈래입니다. 모두 "분포를 배워 새로 뽑는다"는 같은 목표를 향합니다.
| 접근 | 핵심 아이디어 | 장점 | 어려움 |
| GAN | 판별자(진짜/가짜 구분자)를 속이도록 생성자를 학습 | 샘플이 선명하고 생성이 빠름 | 학습 불안정, mode collapse |
| VAE | latent variable과 likelihood 하한(ELBO)을 학습 | 확률적 해석이 명확함 | 샘플이 흐릿할 수 있음 |
| Normalizing Flow | invertible map(되돌릴 수 있는 변환)으로 density를 직접 계산 | likelihood 계산 가능 | 구조 제약이 큼 |
| Diffusion | data와 noise를 잇는 경로 위에서, noise를 데이터 쪽으로 되돌리는 방향/분포를 학습 | 학습이 안정적이고 품질이 높음 | sampling이 느릴 수 있음 |
| Flow Matching | 분포 사이의 vector field(속도장)를 직접 학습 | 경로 관점이 단순하고 확장 가능 | 경로 설계와 solver 이해가 필요 |
표에 모르는 용어(판별자, latent, invertible map, vector field …)가 보여도 괜찮습니다. 각 모델을 다루는 장에서 풀립니다. 이 문서는 GAN을 출발점으로 삼아 Diffusion을 깊게 보고, Flow Matching으로 넘어갑니다.
5. 중심 잡기 — 앞으로 무엇을 붙들 것인가
이제 Diffusion이 그 벽을 어떻게 넘는지, 그리고 이 자료를 읽는 내내 무엇을 중심에 둬야 하는지를 한 번에 정리합니다. Diffusion의 노선은 한마디로 "어려운 $p_{\text{data}}$**를 직접 건드리지 않는다"**입니다. 구체적으로는 이렇습니다.
- 어려운 데이터 분포와 다루기 쉬운 분포($\mathcal{N}(0, I)$)를 잇는 고정된 경로를 깐다. 데이터에 noise를 조금씩 섞으면 분포가 $p_0 = p_{\text{data}} \to \cdots \to p_T \approx \mathcal{N}(0, I)$로 매끄럽게 흐른다. 각 중간 단계 $p_t$는 데이터를 그만큼 흐릿하게 만든 분포다.
- 그 경로 위에서, 분포의 값 대신 국소 방향(score) — 또는 그와 같은 것인 denoiser — 를 배운다. (분포 값은 못 구해도 방향은 배울 수 있다는 게 핵심인데, 그 이유가 §3에서 본 'score는 $Z$가 사라진다'이고 02장으로 이어진다.)
- 생성은 이 경로를 거꾸로 걷는 것이다. $\mathcal{N}(0, I)$에서 한 점을 뽑아, score가 가리키는 더 데이터다운 쪽으로 조금씩 되돌아오면 $p_{\text{data}}$의 샘플이 된다.
그래서 이 자료 전체에서 붙들 중심 네 가지는 이렇습니다.
- 한 장이 아니라 분포의 문제다.
- $p_{\text{data}}$를 직접 건드리지 않는다 — 점점 흐려지는 분포들의 경로로 우회한다.
- 배우는 대상은 분포 값이 아니라 방향장(score) / denoiser다.
- 생성 = 그 경로를 거꾸로 밟기.
흔히 말하는 "노이즈를 넣었다 뺀다"는 이 네 가지의 겉모습일 뿐입니다. 이후 모든 장(forward·reverse, DDPM과 ELBO, Score SDE, Flow Matching, guidance …)은 이 네 가지를 구체화한 것이고, 길을 잃을 때마다 여기로 돌아오면 됩니다.
6. 이 장의 한 문장 요약
생성 모델의 목표는 좋은 이미지를 외워 찍어내는 것이 아니라, 실제 데이터가 놓인 (고차원의 얇고 비볼록한) 확률 분포와 비슷한 분포를 배워 거기서 새 샘플을 뽑는 것입니다. Diffusion은 그 어려운 분포를 직접 다루는 대신, 쉬운 분포와 잇는 경로 위에서 방향(score)을 배워 거꾸로 걸어 내려오는 방법입니다.
참고 논문
'인공지능 이론 > Diffusion' 카테고리의 다른 글
| 디퓨전 모델 설명 03: Diffusion의 기본 구조 (0) | 2026.06.30 |
|---|---|
| 디퓨전 모델 설명 02: 확률 분포와 Score. 노이즈 제거를 넘어 diffusion을 분포(distribution)으로 이해하기 (0) | 2026.06.24 |
| 디퓨전 모델 설명 01: GAN에서 Diffusion으로. 생성 모델을 바라보는 관점 (중요) (0) | 2026.06.23 |
| 디퓨전 모델 설명 00-0: 생성형 모델을 이해하는데 필요한 기초 수학. 필요한것만 간단히! (1) | 2026.06.23 |
| Diffusion 구현 연습1 DDPM (0) | 2025.11.11 |