What — Stable Diffusion의 3대 구성 요소
Stable Diffusion은 텍스트→이미지 생성을 위해 세 개의 독립된 신경망을 조립한 시스템이다 (Rombach et al., 2022):
- CLIP Text Encoder: 텍스트 프롬프트를 의미 벡터(토큰 임베딩 시퀀스)로 변환
- U-Net Denoiser: 잠재 공간(latent space)에서 노이즈를 반복 제거
- VAE (Variational Autoencoder): 픽셀 공간 ↔ 잠재 공간 간 변환을 담당
Why — 왜 세 모듈을 분리하는가?
- 계산 효율: 512×512 이미지를 직접 디노이징하면 픽셀 수 = 262,144 × 3채널. VAE로 64×64×4 잠재 벡터로 압축하면 연산량이 약 48배 감소 (Rombach et al., 2022)
- 모듈 독립성: CLIP은 텍스트-이미지 정렬을 사전학습(Radford et al., 2021)으로 이미 해결 → U-Net은 "의미 이해" 부담 없이 노이즈 제거에 집중
- 재사용성: VAE Decoder만 교체하면 해상도 업스케일, CLIP만 교체하면 다국어 지원 등 모듈별 업그레이드 가능
How — 각 모듈의 역할과 데이터 흐름
[여기에 다이어그램: Stable Diffusion 아키텍처 파이프라인]
- 좌측: 사용자 프롬프트 "a cat on the moon" → CLIP Text Encoder 박스 → 출력: 텍스트 임베딩 $c \in \mathbb{R}^{77 \times 768}$
- 중앙: 랜덤 노이즈 z_T \in \mathbb{R}^{64 \times 64 \times 4} → U-Net 박스 (Cross-Attention으로 c를 주입받는 화살표 표시) → 반복 디노이징 루프 (T → T-1 → ... → 0) → 깨끗한 잠재 벡터 $z_{0}$
- 우측: z_0 → VAE Decoder 박스 → 최종 이미지 512×512×3
- 하단 별도: VAE Encoder가 학습 시 실제 이미지를 z_0로 인코딩하는 역방향 화살표
모듈 1: CLIP Text Encoder
- 구조: Transformer 기반 텍스트 인코더 (ViT-L/14 기준 12층)
- 입력: 토큰화된 프롬프트 (최대 77토큰)
- 출력: 각 토큰의 문맥 임베딩 시퀀스 $c = \text{CLIP}_{\text{text}}(\text{prompt})$
- 핵심: 대조 학습(contrastive learning)으로 사전학습되어 "고양이"와 고양이 이미지가 같은 임베딩 공간에 위치 (Radford et al., 2021)
- 비유: 외국어 통역사 — 사람의 말을 U-Net이 이해할 수 있는 "의미 언어"로 번역
모듈 2: U-Net Denoiser (조건부)
- 구조: 인코더-디코더 + Skip Connection + Cross-Attention 레이어
- 입력: 노이즈 잠재 벡터 z_t, 타임스텝 t, 텍스트 임베딩 $c$
- 출력: 예측 노이즈 $\epsilon_\theta(z_t, t, c)$
- Cross-Attention 작동 방식:
- Query = U-Net의 중간 feature map
- Key, Value = CLIP 텍스트 임베딩 $c$
- "moon" 토큰의 임베딩이 배경 영역 feature에 높은 attention을 받음
- 비유: 복원 전문가가 "달 위의 고양이" 설명서(CLIP 출력)를 보며 손상된 그림(노이즈)을 복원
[여기에 다이어그램: Cross-Attention 상세]
- U-Net feature map에서 Query 추출 → CLIP 임베딩에서 Key/Value 추출 → Attention Score 계산 → 텍스트 조건이 공간적으로 반영되는 과정
- $\text{Attention}(Q, K, V) = \text{softmax}(QK^{T} / \sqrt{d_k}) \cdot V$
모듈 3: VAE (Encoder + Decoder)
- Encoder \mathcal{E}: 이미지 x \in \mathbb{R}^{512 \times 512 \times 3} → 잠재 벡터 z \in \mathbb{R}^{64 \times 64 \times 4} (학습 시 사용)
- Decoder \mathcal{D}: 잠재 벡터 z_0 → 이미지 \hat{x} \in \mathbb{R}^{512 \times 512 \times 3} (추론 시 사용)
- 압축 비율: 공간 8배 축소 (512→64), 채널 3→4
- 핵심 이점: U-Net이 작은 잠재 공간에서만 작동하므로 GPU 메모리 8~16GB로 고해상도 생성 가능
- 비유: 건축 설계도(잠재 벡터) vs 실제 건물(픽셀 이미지) — 설계도 위에서 수정이 훨씬 빠름
전체 파이프라인 정리 (추론 시)
- Step 1: 프롬프트 → CLIP → 텍스트 임베딩 $c$
- Step 2: 랜덤 가우시안 노이즈 z_T 샘플링
- Step 3: U-Net이 z_T에서 z_0까지 반복 디노이징 (각 스텝마다 c를 Cross-Attention으로 참조)
- Step 4: VAE Decoder가 z_0 → 최종 이미지 변환
Latent Diffusion이 가져온 혁신
- 기존 DDPM: 픽셀 공간에서 직접 디노이징 → 256×256이 한계 (Ho et al., 2020)
- Latent Diffusion: 잠재 공간에서 디노이징 → 512×512, 1024×1024까지 확장 가능
- 실제 사례: Stable Diffusion v1.5는 소비자 GPU(RTX 3060)에서 ~5초 만에 512×512 이미지 생성