인공지능 이론/Diffusion

디퓨전 모델 설명 01: GAN에서 Diffusion으로. 생성 모델을 바라보는 관점 (중요)

인공지능과 반도체 2026. 6. 23. 21:21

-1. 들어가기 전에

Diffusion을 알기 위해서 GAN을 반드시 잘 알아야 할까요?

 

굳이 그럴 필요는 없습니다. 이쪽 분야는 워낙 빠르게 변하다보니, 이전 기술을 전부 follow up 하고 최신걸로 들어가는건 쉽지 않습니다. 차라리, 이전거는 대략적으로 개념만 알고, 최신 기술을 먼저 습득한다음 다시 이전걸 공부하면 더 효율적일 수 있습니다.

 

본 글도 같은 방식으로 진행합니다.

0. 이 장의 질문

왜 Diffusion을 설명할 때 GAN과 비교하는 것이 도움이 될까요?

 

GAN과 Diffusion은 둘 다 생성 모델이고, 목표도 같습니다 — $p_{\text{data}}(x)$와 비슷한 분포에서 새 샘플을 뽑는 것입니다.

차이는 그 분포를 맞추는 방식입니다. 그 방식의 차이를 보면, 왜 Diffusion이 지금의 형태가 되었는지가 선명해집니다.


1. GAN은 분포를 게임으로 맞춘다

GAN에는 두 모델이 있습니다.

  • Generator $G$: noise $z$를 받아 fake sample $G(z)$를 만듭니다.
  • Discriminator $D$: 입력이 real data인지 fake data인지 구분합니다.

여기서 $z$는 보통 Gaussian 같은 단순한 분포에서 뽑은 무작위 벡터입니다.

 

즉 GAN은 "단순한 noise를 한 번에 데이터처럼 보이는 sample로 바꾸는 함수"를 학습합니다.

 

원래 GAN의 목적 함수는 아래 minimax game으로 표현됩니다.

$$
\min_G \max_D\ \mathbb{E}{x \sim p{\text{data}}}\big[\log D(x)\big] + \mathbb{E}_{z \sim p_z}\big[\log\big(1 - D(G(z))\big)\big]
$$

수식이 길지만 읽는 법은 어렵지 않습니다.

  • $\max_D$: 판별자 $D$는 이 값을 크게 만들고 싶습니다.
  • $\mathbb{E}{x \sim p{\text{data}}}[\log D(x)]$: 진짜 데이터 $x$를 보고 "진짜다"라고 높은 점수를 주면 커지는 항입니다.
  • $\mathbb{E}_{z \sim p_z}[\log(1-D(G(z)))]$: 생성자가 만든 가짜 $G(z)$를 보고 "가짜다"라고 잘 맞히면 커지는 항입니다.
  • $\min_G$: 반대로 생성자 $G$는 판별자가 가짜를 못 알아보게 만들어 이 게임에서 이기려 합니다.

직관은 단순합니다.

 

판별자 $D$는 진짜와 가짜를 더 잘 구분하려 하고, 생성자 $G$는 판별자를 속이려 합니다.

이상적인 균형에서는 판별자가 더 이상 진짜와 가짜를 구분하지 못하고, 생성자 분포 $p_G$가 실제 데이터 분포 $p_{\text{data}}$에 가까워집니다.

 

그런데 왜 "속이는 것"이 "분포를 맞추는 것"이 될까요?

판별자는 사실상 두 분포의 차이 탐지기입니다. $p_G$가 $p_{\text{data}}$와 조금이라도 다르면, 한쪽에 확률이 더 몰린 영역이 반드시 생기고, 똑똑한 판별자는 바로 그 틈을 노려 진짜/가짜를 가려냅니다.

 

그러니 생성자가 가장 잘하는 판별자조차 못 속이게 만드는 길은 단 하나뿐입니다 — 통계적 차이를 아예 없애는 것, 즉 $p_G = p_{\text{data}}$.

 

(수학적으로도, $G$를 고정했을 때 최적 판별자 $D^\ast(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_G(x)}$를 대입하면 생성자의 목표는 두 분포의 Jensen–Shannon divergence를 줄이는 것이 되고, 이 값은 $p_G = p_{\text{data}}$일 때 정확히 0입니다.)

 

그래서 균형점에서 판별자는 어디서나 $\tfrac{1}{2}$를 답하고, 생성자 분포는 실제 데이터 분포와 같아집니다.


2. GAN의 강점

GAN은 오랫동안 이미지 생성의 중심이었습니다. 특히 StyleGAN 계열은 매우 선명한 이미지를 만들었습니다. 장점은 분명합니다.

  • sampling이 빠릅니다. noise를 넣으면 한 번의 forward로 결과가 나옵니다.
  • adversarial loss가 시각적으로 선명한 샘플을 만들기 좋습니다.
  • generator가 직접 sample을 만들기 때문에 추론 구조가 간단합니다.

하지만 이 장점들은 동시에 어려움의 뿌리이기도 합니다.


3. GAN의 어려움 — 그리고 '왜' 그런가

세 가지를 짚고 갑시다. 셋은 사실 한 뿌리에서 나옵니다

.

(1) GAN은 noise에서 데이터로 '한 번에' 건너뛴다. 생성자는 $z \sim \mathcal{N}(0, I)$ 같은 noise 한 점을 받아, 신경망 한 번 통과로 곧장 완성된 이미지를 내놓습니다: $z \to G(z) = x$. 즉 GAN도 noise에서 출발하지만, noise→data를 단 한 걸음에 끝냅니다.

이게 빠른 sampling의 비결인 동시에 학습을 어렵게 만드는 근본 원인입니다 — 에서 본 그 '얇고 휘고 비볼록한' 데이터 분포로 가는 복잡한 map 전체를, 생성자가 한 함수로 한 번에 학습해야 하니까요.

 

(2) 그래서 명시적 likelihood를 직접 최적화하지 않는다 (못 한다). 생성자는 'noise를 이미지로 바꾸는 함수'일 뿐, 어떤 이미지가 얼마나 그럴듯한지 $p_G(x)$를 알려주는 공식을 갖고 있지 않습니다.

이런 모델을 implicit(암묵적) 모델이라 부릅니다 — 샘플은 뽑을 수 있어도 그 확률(density)은 계산할 수 없습니다. (억지로 계산하려 하면 다루기 힘든 적분과 정규화 상수가 다시 등장합니다.)

likelihood를 직접 못 올리니, GAN은 그것을 '판별자를 속이는가'라는 신호로 대체합니다. 즉 density를 평가하는 대신 sample을 평가하는 것이죠.

 

(3) 두 모델이 동시에 움직이는 게임이라 학습이 민감하다. 보통의 학습은 정해진 손실 하나를 내려가면 됩니다. 그런데 GAN에는 고정된 목표가 없습니다 — 생성자의 목표는 '지금의 판별자'에 달려 있고 판별자의 목표는 '지금의 생성자'에 달려 있어서, 둘이 서로를 쫓는 움직이는 표적입니다.

균형이 미묘해서, 판별자가 너무 강해지면 생성자에게 줄 gradient가 사라지고("너무 확실히 가짜"라고 해버려 '어디를 고치라'는 신호가 없어짐), 너무 약하면 생성자가 대충 속이고 넘어갑니다. 그 결과가 학습 불안정과 mode collapse(판별자를 속이는 몇몇 출력에만 확률을 몰아주어 다양성을 잃는 현상)입니다.

문제 의미 뿌리

문제 의미 뿌리
학습 불안정성 두 모델의 균형이 깨지면 학습이 흔들림 (3) 움직이는 표적 게임
mode collapse 분포의 일부 mode만 반복 생성 (3) 속이기만 하면 되는 신호
확률 해석의 어려움 $p_G(x)$의 density를 직접 다루기 어렵다 (2) implicit 모델

이 어려움들은 결국 복잡한 분포로 가는 거대한 도약을 한 번에, 그것도 적대적 게임으로 학습한다는 한 가지 사실에서 나옵니다. 그래서 자연스러운 질문이 따라옵니다.

그 큰 도약을, 더 안정적으로 풀 수 있게 잘게 쪼갤 수는 없을까?

Diffusion이 답하는 방식이 바로 이것입니다.


4. Diffusion은 다른 질문을 던진다

Diffusion은 GAN처럼 noise를 한 번에 완성된 샘플로 바꾸지 않습니다. 같은 'noise → data'를, 한 걸음이 아니라 여러 작은 걸음으로 나눠 갑니다.

구체적으로는 복잡한 데이터 분포와 단순한 noise 분포 사이에 많은 중간 분포를 둡니다.

$$
p_{\text{data}} \;\to\; p_1 \;\to\; p_2 \;\to\; \cdots \;\to\; p_T \approx \mathcal{N}(0, I)
$$

이 수식에서 $p_1, p_2, \ldots, p_T$는 이미지 한 장이 아니라 각 noise level에서 sample들이 이루는 분포입니다.

 

처음에는 실제 데이터 분포에 가깝고, 시간이 갈수록 더 흐릿하고 단순한 Gaussian noise 분포에 가까워집니다.

여기서 중요한 점은 forward noising 과정은 우리가 미리 정해 둔다는 것입니다.

 

모델이 처음부터 모든 경로를 마음대로 발견하는 것이 아니라, "데이터에 noise를 조금씩 섞으면 결국 Gaussian에 가까워진다"는 쉬운 방향을 먼저 깔아 둡니다. 모델이 배우고 써야 하는 것은 그 반대 방향입니다.

$$
\mathcal{N}(0, I) \;\to\; \cdots \;\to\; p_2 \;\to\; p_1 \;\to\; p_{\text{data}}
$$

즉 diffusion의 핵심은 "흐릿한 sample $x_t$가 주어졌을 때, 조금 덜 흐릿한 $x_{t-1}$ 쪽으로 어떻게 이동할까?"를 반복해 푸는 것입니다.

 

이렇게 보면 denoising은 단순한 이미지 복원이 아니라, 단순한 prior 분포에서 데이터 분포로 돌아오는 작은 조건부 생성 문제들의 연쇄입니다.

 

각 step은 작아서 학습 신호를 만들기 쉽고, 고정된 손실 하나만 내려가면 되므로(적대적 게임이 아님) GAN보다 안정적입니다 — 이것이 diffusion의 학습 안정성과 넓은 분포 커버리지로 이어집니다.


5. GAN과 Diffusion의 차이

관점 GAN Diffusion
생성 방식 noise를 한 번에 sample로 변환 noise에서 여러 단계로 sample 생성
학습 신호 discriminator의 판단 (적대적 게임) denoising, score, variational objective (고정된 손실)
분포 접근 implicit distribution matching probability path와 reverse process 학습
장점 빠른 sampling 안정적 학습과 넓은 분포 커버리지
어려움 학습 불안정, mode collapse sampling 비용(여러 step)

Diffusion은 GAN을 대체한다기보다, 같은 생성 문제를 다른 방식으로 푼 것입니다.

 

실제로 최근에는 두 관점이 다시 만나, GAN의 adversarial loss를 diffusion distillation에 활용하는 흐름(ADD, LADD 등)도 등장했습니다. (자세한 내용은 기회가 된다면 추후 다뤄보겠습니다.)


6. 이 장의 한 문장 요약

GAN은 분포를 판별자와 생성자의 게임으로 맞추되 noise를 한 번에 데이터로 바꾸고, Diffusion은 데이터에 noise를 더하는 쉬운 forward 과정을 정해 둔 뒤 Gaussian noise에서 데이터 분포로 돌아오는 역방향 조건부 이동을 여러 단계로 학습합니다.


참고 논문