운동화 이미지 1만 장으로 ‘새 운동화’를 만든다고 하자. VAE는 이미지를 연속적인 좌표 공간에 압축했다가 복원하고, GAN은 위조 이미지를 만드는 생성자와 이를 잡는 판별자를 경쟁시킨다. Diffusion은 깨끗한 이미지를 노이즈로 바꾸는 과정을 배운 뒤 그 순서를 거꾸로 실행한다. 셋은 모두 생성모델이지만 학습 신호·생성 속도·실패 방식이 다르다.
먼저 결론: 잠재공간을 탐색하거나 복원·이상 탐지가 중요하면 VAE, 적은 생성 단계로 선명한 결과를 노리되 학습 불안정을 감당할 수 있으면 GAN, 계산 비용을 더 쓰더라도 안정적인 학습과 다양한 조건 제어가 중요하면 Diffusion부터 검토한다.

같은 이미지 생성 문제를 세 모델은 전혀 다른 방식으로 푼다.
1. ‘그럴듯한 한 장’보다 분포를 배웠는지 본다
판별모델은 입력 x가 어떤 정답 y에 속하는지 주로 학습한다. 생성모델은 관측 데이터가 만들어지는 분포를 근사하고 그 분포에서 새 샘플을 뽑으려 한다. 결과 한 장이 선명해도 같은 모습만 반복한다면 데이터의 다양성을 제대로 학습했다고 보기 어렵다.
| 비교 기준 | 확인할 질문 | 놓치기 쉬운 실패 |
|---|---|---|
| 품질 | 샘플이 실제 데이터처럼 보이는가? | 보기 좋은 몇 장만 골라 제시 |
| 다양성 | 훈련 데이터의 여러 유형을 고르게 만드는가? | 비슷한 결과만 만드는 모드 붕괴 |
| 제어성 | 클래스·문장·마스크 같은 조건을 반영하는가? | 조건을 무시하고 흔한 결과 생성 |
| 비용 | 학습 메모리와 한 장 생성 시간이 얼마인가? | 품질만 비교하고 지연시간 제외 |
| 재현성 | 같은 체크포인트·시드에서 결과를 다시 만들 수 있는가? | 시드·전처리·모델 버전 미기록 |

VAE는 잠재분포, GAN은 경쟁 신호, Diffusion은 단계별 노이즈 예측으로 학습한다.
2. VAE: 한 점이 아니라 잠재분포를 학습한다
일반 오토인코더는 입력을 잠재벡터로 압축하고 디코더가 원본을 복원하도록 학습한다. VAE는 인코더가 고정된 벡터 대신 평균 μ와 분산 σ²를 출력하게 한다. 여기서 z = μ + σ × ε로 샘플링하는 재매개변수화 기법을 쓰면 확률적 샘플링을 포함하면서도 역전파가 가능하다.
손실은 크게 두 부분이다. 복원 손실은 출력이 입력과 닮도록 만들고, KL 발산 항은 잠재분포가 기준 분포에서 지나치게 흩어지지 않게 한다. 복원 손실만 강하면 입력 복사는 잘하지만 잠재공간이 불규칙해질 수 있고, KL 항이 너무 강하면 서로 다른 입력이 비슷한 잠재표현으로 뭉치는 posterior collapse가 생길 수 있다.
VAE 결과가 흐린 이유를 단정하지 않는다. 픽셀별 평균 제곱 오차처럼 여러 가능한 출력을 평균내기 쉬운 목적함수, 디코더 용량, 데이터 복잡도, 손실 가중치가 함께 영향을 준다. “VAE는 무조건 흐리다”가 아니라 어떤 손실과 출력분포를 사용했는지 확인한다.
3. GAN: 생성자와 판별자가 서로의 약점을 찾는다
GAN은 두 모델을 동시에 학습한다. 생성자 G는 노이즈 z에서 가짜 이미지를 만들고, 판별자 D는 실제 이미지와 생성 이미지를 구분한다. 판별자가 가짜를 잘 잡을수록 생성자는 더 그럴듯한 샘플을 만들도록 신호를 받는다.
한 번의 생성자 통과로 이미지를 만들 수 있어 추론은 빠른 편이다. 반면 두 모델의 균형이 깨지면 판별자가 너무 강해 생성자가 유용한 학습 신호를 받지 못하거나, 생성자가 판별자를 속이는 일부 결과만 반복하는 모드 붕괴가 생길 수 있다. 훈련 손실 숫자만 보고 품질을 판단하기 어려워 고정된 잠재벡터의 샘플 격자와 데이터 유형별 커버리지를 함께 기록해야 한다.
4. Diffusion: 노이즈를 더하는 법을 배우고 거꾸로 간다
Diffusion 모델은 학습 데이터에 작은 노이즈를 여러 단계 더해 거의 순수한 노이즈로 만드는 정방향 과정을 정의한다. 모델은 임의 단계 t의 noisy image와 시간 정보를 받아 그 단계에 섞인 노이즈를 예측한다. 생성할 때는 무작위 노이즈에서 시작해 예측한 노이즈를 단계적으로 제거한다.
학습 목표가 단계별 노이즈 예측으로 비교적 안정적이고, 텍스트·이미지·마스크 같은 조건을 결합하기 좋다. 대신 생성 시 모델을 여러 번 호출하므로 단계 수와 해상도에 따라 지연시간이 커진다. Hugging Face Diffusers 문서도 추론 단계 수가 품질과 생성 시간의 맞교환이라고 설명한다.
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained(
"anton-l/ddpm-butterflies-128",
torch_dtype=torch.float16
).to("cuda")
generator = torch.Generator("cuda").manual_seed(42)
image = pipe(
generator=generator,
num_inference_steps=50
).images[0]
image.save("sample-seed-42.png")
이 코드는 모델을 새로 훈련하는 예제가 아니라 공개 체크포인트의 생성 과정을 재현하는 최소 예제다. 모델 ID, 라이브러리 버전, 시드, 추론 단계 수, 장치를 함께 남겨야 나중에 결과 차이를 설명할 수 있다.
5. 목적별로 첫 모델을 고른다
| 목적 | 먼저 검토할 모델 | 이유 | 반드시 확인할 것 |
|---|---|---|---|
| 복원·이상 탐지·잠재공간 탐색 | VAE | 인코더와 연속 잠재표현을 함께 얻음 | 복원 오류가 실제 이상과 일치하는지 |
| 빠른 1회 생성과 선명한 샘플 | GAN | 생성자 한 번으로 샘플 생성 | 모드 붕괴, 학습 균형, 데이터 커버리지 |
| 고품질 조건부 생성·편집 | Diffusion | 조건 결합과 반복 개선에 유리 | 추론 단계, VRAM, 생성 지연 |
| 작은 데이터로 실습 | 작은 VAE 또는 DCGAN | 전체 학습 구조를 관찰하기 쉬움 | 훈련 데이터 암기와 과적합 |
실무 모델은 이 세 이름만으로 결정되지 않는다. Latent Diffusion처럼 VAE 잠재공간에서 Diffusion을 수행하거나, 적대적 손실을 다른 목적함수와 결합하는 하이브리드도 많다. 따라서 “어느 계열이 항상 최고인가”보다 입력 조건, 허용 지연시간, 데이터 권리, 실패 비용을 먼저 적는 편이 정확하다.
6. 같은 조건으로 비교하는 최소 실험
- 데이터를 먼저 나눈다. 훈련·검증·테스트를 고정하고 중복 이미지를 제거한다.
- 해상도와 전처리를 맞춘다. 한 모델만 더 큰 이미지를 쓰면 공정한 비교가 아니다.
- 고정 시드 샘플과 무작위 샘플을 모두 저장한다. 좋은 시드만 고르는 오류를 막는다.
- 품질과 다양성을 함께 본다. FID 같은 분포 지표, precision·recall, 클래스별 샘플을 함께 기록한다.
- 비용을 잰다. 학습 시간, 최대 메모리, 이미지 100장 생성 시간을 같은 장치에서 측정한다.
- 훈련 데이터와 유사한 결과를 찾는다. 데이터 암기와 개인정보 재현 가능성을 점검한다.
VAE의 복원 결과와 GAN·Diffusion의 무조건 생성 결과를 같은 지표 하나로만 비교하면 목적이 섞인다. 먼저 “새 샘플 생성”과 “입력 복원”을 분리하고, 같은 생성 과제를 수행할 때만 공통 지표를 적용한다. 사람이 보는 평가도 평가자 수, 질문, 무작위 제시 순서를 남겨야 결과를 재현할 수 있다.
7. 실수하기 쉬운 부분
- GAN의 판별자를 최종 분류기로 오해: 판별자는 생성자와 함께 바뀌는 학습 상대다.
- Diffusion은 이미지를 기억해 꺼낸다고 설명: 노이즈에서 반복 예측으로 샘플을 만든다. 학습 데이터 복제 여부는 별도 검사한다.
- VAE 잠재벡터를 고정 좌표로 이해: 평균과 분산으로 정의한 분포에서 샘플링한다.
- 손실값만으로 세 모델 비교: 목적함수가 달라 숫자의 크기를 직접 비교할 수 없다.
- 대표 샘플 몇 장만 공개: 고정 시드 격자, 실패 샘플, 클래스별 다양성을 함께 남긴다.
- 생성 데이터의 권리와 개인정보 제외: 데이터 수집 근거, 라이선스, 얼굴·문서 재현 위험을 모델 성능과 별도로 검토한다.
핵심 요약
- VAE는 잠재분포와 복원 구조가 강점이며 복원 손실과 KL 항의 균형이 중요하다.
- GAN은 빠르고 선명한 샘플을 만들 수 있지만 생성자·판별자 균형과 모드 붕괴를 관찰해야 한다.
- Diffusion은 노이즈 예측 학습이 안정적인 편이지만 반복 생성 비용을 함께 측정해야 한다.
- 좋은 한 장보다 품질·다양성·제어성·속도·데이터 재현 위험을 같은 조건에서 비교한다.
'실전 개발 노트 > 개발 가이드' 카테고리의 다른 글
| PyTorch U-Net 이미지 세그멘테이션: 구조·Dice Loss·반려동물 실습 (0) | 2026.08.01 |
|---|---|
| 딥러닝 학습 원리: 순전파·역전파·옵티마이저·L1/L2 규제 (0) | 2026.07.31 |
| TypeScript 7 마이그레이션 가이드: Go 네이티브 컴파일러 전환 전 확인할 것 (0) | 2026.07.31 |
| 개발자 이력서·포트폴리오 작성법: 프로젝트 경험을 증거로 바꾸는 방법 (1) | 2026.07.31 |
| 객체 검출 완전정리: OpenCV 에지·템플릿 매칭부터 YOLO·Faster R-CNN까지 (0) | 2026.07.30 |