GAN과 이미지 생성 강의 노트
학습 목표
- GAN의 기본 구조와 작동 원리 이해
- 생성자와 판별자의 적대적 학습 메커니즘 이해
- 조건부 확률을 이용한 이미지 생성 원리 파악
- VAE, Diffusion 등 다양한 생성 모델 비교
- GAN의 학습 어려움과 해결 방안 이해
1. 이미지 생성 개요
1.1 이미지 생성의 정의
이미지 생성이란?
딥러닝 모델을 이용하여 기존 데이터 분포를 학습하고, 이 분포에서 샘플링하여 새로운 이미지를 창출하는 기술입니다.
핵심 개념
- 이미지는 확률 분포로 표현 가능
- CNN을 통해 이미지의 특징(피처맵)을 추출
- 특징들의 조합으로 새로운 이미지 생성
1.2 이미지 생성의 필요성
데이터 증강
- 학습 데이터 부족 문제 해결
- 의료 영상, 자율주행 등에서 다양한 조건의 데이터 생성
창작 및 디자인
- 예술 작품 자동 생성
- 가상 캐릭터 생성
- 패션, 게임 디자인
데이터 분석과 시뮬레이션
- 특정 조건에 따른 시뮬레이션 데이터 생성
- 미래 예측 및 분석
1.3 이미지 생성 유형
완전 생성(Fully Generative)
- 무작위 노이즈에서 이미지 생성
- 예: GAN, VAE
조건부 생성(Conditional Generative)
- 특정 조건(클래스 레이블 등)에 따라 이미지 생성
- 예: Conditional GAN
변형(Transformative Generative)
- 입력 이미지를 변형하여 새로운 이미지 생성
- 예: Style Transfer
2. 생성 모델의 역사와 발전
2.1 초기 생성 모델
통계 기반 생성 모델
- 히든 마르코프 모델(HMM): 시계열 데이터의 확률적 패턴 학습
- 가우시안 혼합 모델(GMM): 데이터 분포를 가우시안 함수의 결합으로 모델링
- 한계: 고차원 데이터 처리 어려움, 복잡한 패턴 학습 한계
2.2 딥러닝 기반 생성 모델의 등장
Variational Autoencoder (VAE, 2013)
- 제안자: Kingma & Welling
- Autoencoder 기반, 잠재 공간을 확률적으로 모델링
- 한계: 생성 이미지의 블러(blur) 현상
Generative Adversarial Networks (GAN, 2014)
- 제안자: Ian Goodfellow et al.
- 생성자와 판별자의 경쟁적 학습
- 매우 사실적이고 고해상도 이미지 생성 가능
- 한계: 학습 불안정성, 모드 붕괴 문제
Diffusion Models (2015~2020)
- 초기 제안: Sohl-Dickstein et al. (2015)
- 주요 모델: Ho et al., DDPM (2020)
- 데이터를 점진적으로 노이즈화하고 역으로 복원
- 높은 안정성과 세밀한 이미지 생성
- 응용: Text-to-Image 모델 (DALL-E, Stable Diffusion)
2.3 주요 변형 GAN
DCGAN (2015)
- Convolutional Layer를 GAN에 통합
- Batch Normalization과 Leaky ReLU 사용
- 학습 안정성 향상
WGAN (2017)
- Wasserstein Distance 사용
- 학습 안정성 강화, Mode Collapse 완화
LSGAN (2017)
- Least Squares Loss 사용
- 기울기 소실 문제 완화
Progressive Growing GAN (2017)
- 점진적으로 네트워크 확장
- 고해상도 이미지 생성
Conditional GAN (cGAN, 2014)
- 조건 기반 이미지 생성
- 특정 클래스, 스타일, 속성 제어 가능
StyleGAN (2018)
- Adaptive Instance Normalization (AdaIN) 활용
- 고품질 이미지 생성 및 스타일 조정
3. GAN의 구조와 작동 원리
3.1 GAN의 정의
Generative Adversarial Network (GAN)
생성자(Generator)와 판별자(Discriminator)의 두 신경망이 경쟁적으로 학습하며 데이터를 생성하는 모델입니다.
핵심 아이디어
두 모델 간의 대립(Adversarial) 구조를 통해 생성자가 점차적으로 진짜 같은 데이터를 생성하도록 학습합니다.
3.2 GAN의 구조
Generator (생성자)
- 잠재 공간(Latent Space)에서 샘플링한 벡터 z를 입력으로 받음
- Fully Connected Layer, Transposed Convolution 등을 사용
- 목표: 판별자를 속일 수 있는 "진짜 같은" 데이터 생성
Discriminator (판별자)
- 입력 데이터가 실제 데이터인지 생성된 데이터인지 판별
- 일반적으로 CNN 구조 사용
- 목표: 생성자의 출력을 가짜로 판별하고, 실제 데이터는 진짜로 판별
3.3 GAN의 학습 과정
1. Generator 학습
- 판별자를 속일 수 있는 데이터를 생성하려고 학습
- 판별자가 생성 데이터를 진짜로 잘못 판별하도록 Loss 최소화
2. Discriminator 학습
- 생성된 데이터와 실제 데이터를 정확히 구분하는 법 학습
- 진짜 데이터를 진짜로, 가짜 데이터를 가짜로 판별하도록 Loss 최소화
3. Adversarial Learning
- 생성자와 판별자가 서로 경쟁하며 학습
- 생성자는 더 진짜 같은 데이터 생성, 판별자는 더 강력한 특성 학습
3.4 GAN의 손실 함수
판별자 손실 함수
ℒD = -𝔼x∼pdata(x)[log D(x)] - 𝔼z∼pz(z)[log(1 - D(G(z)))]
여기서:
- D(x): 판별자가 실제 데이터를 진짜로 판별할 확률
- 1 - D(G(z)): 판별자가 생성된 데이터를 가짜로 판별할 확률
- 진짜 데이터를 잘 구분할수록, 가짜 데이터를 잘 구분할수록 손실이 작아짐
생성자 손실 함수
ℒG = -𝔼z∼pz(z)[log D(G(z))]
여기서:
- D(G(z)): 판별자가 생성 데이터를 진짜로 판별할 확률
- 생성자는 판별자를 속이기 위해 D(G(z))를 최대화 → 손실 최소화
직관적 이해
- 판별자는 진짜와 가짜를 올바르게 구분하려고 노력
- 생성자는 판별자를 속이기 위해 더욱 진짜 같은 데이터 생성
3.5 GAN의 학습 알고리즘
단계적 학습
1. 판별자를 고정한 상태에서 생성자를 학습
2. 생성자를 고정한 상태에서 판별자를 학습
3. 이러한 과정을 번갈아가며 반복
최적화 과정
생성자는 손실을 최소화하도록, 판별자는 손실을 최대화하도록 학습합니다. Adversarial Loss는 Minmax 게임의 형태로 표현됩니다:
min max V(D,G) = 𝔼x∼pdata(x)[log D(x)] + 𝔼z∼pz(z)[log(1 - D(G(z)))]
G D
3.6 GAN의 직관적 비유: 위조지폐범과 경찰
위조지폐범 (생성자)
- 한 번에 완벽한 위조 지폐를 만들지 못함
- 계속 노력하여 점점 더 정교한 위조 지폐 제작
- 경찰(판별자)을 속이려고 시도
경찰 (판별자)
- 위조 지폐를 찾아내려고 노력
- 위조지폐범의 기술이 향상될수록 더 정교하게 판별
결과
- 서로 경쟁하면서 위조지폐범은 점점 더 진짜 같은 지폐를 만들게 됨
- 판별자는 점점 더 정교한 판별 능력을 갖게 됨
4. 조건부 확률과 GAN
4.1 조건부 확률의 개념
조건부 분포 P(x|y)
조건부 확률은 특정 조건이 주어졌을 때의 확률을 의미합니다.
예시
- 비가 오는데 구름이 있는 상태에서 비가 올 확률
- 고양이 이미지에서 특정 특징이 나타날 확률
몬티 홀 문제
조건부 확률의 대표적인 예시입니다.
- 3개의 문 중 1개에 자동차, 2개에 염소
- 처음 선택 후 진행자가 염소가 있는 문 1개를 오픈
- 이미 1개가 탈락했으므로 확률이 1/3에서 1/2로 변화
- 이것이 조건부 확률의 핵심
수식 표현
P(x|y) = P(발생할 확률) / P(조건)
4.2 GAN에서의 조건부 확률
생성 모델의 조건부 분포
P(x|z)
여기서:
- x: 생성된 이미지
- z: 랜덤 노이즈 (잠재 변수)
의미
랜덤 노이즈 z를 주었을 때 이미지 x가 생성될 확률입니다.
4.3 노이즈에서 이미지로의 변환 과정
신경망을 통한 변환
z (3,) → weight(3,2) → (2,) → weight(2,5) → (5,) → ... → (8,8) 이미지
예시 계산
입력: z = [1, 0, 1]
가중치: w = [1, 1, 0]
바이어스: b = 2
wx + b = 1×1 + 1×0 + 0×1 + 2 = 4
이러한 선형 변환과 활성화 함수를 반복하여 최종적으로 원하는 크기의 이미지를 생성합니다.
핵심
- z를 넣어서 신경망(CNN, Fully Connected 등)을 통과시키면 최종 이미지 생성
- 이미지는 행렬값으로 표현되므로 신경망의 출력을 이미지로 해석 가능
4.4 판별자의 조건부 확률
판별자의 목표
P(y|x)
여기서:
- x: 입력 이미지
- y: 진짜(1) 또는 가짜(0)
의미
이미지 x가 주어졌을 때, 그것이 진짜 이미지일 확률을 계산합니다.
5. GAN 학습의 어려움 및 해결 방안
5.1 주요 어려움
1. Mode Collapse (모드 붕괴)
현상
- 생성자가 소수의 데이터 모드(특정 패턴)에만 집중
- 다양한 데이터를 생성하지 못하는 문제
- 예: 얼굴 생성에서 특정 표정만 생성
원인
- 생성자가 판별자를 속이는 데 지나치게 집중
- 다양한 데이터 분포를 학습하지 못함
2. 불안정한 학습 (Training Instability)
현상
- 생성자와 판별자가 서로 균형 있게 학습하지 못함
- 판별자가 너무 강하면 생성자가 학습하지 못함
- 생성자가 너무 강하면 판별자가 무의미해짐
원인
- Loss 함수가 잘 수렴하지 않음
- 생성자와 판별자의 학습 속도 차이
3. Gradient Vanishing (기울기 소실)
현상
- 판별자의 출력이 극단적인 값(0 또는 1)에 치우침
- 생성자의 기울기 정보가 사라지는 문제
원인
- Sigmoid 활성화 함수와 Binary Cross-Entropy Loss의 결합
- 극단적 출력에서 기울기가 사라지는 경향
4. Hyperparameter Tuning의 어려움
현상
- 적절한 학습률, Batch Size, 모델 구조를 찾기 어려움
원인
5.2 해결 방안
Mode Collapse 해결
Solution 1: Minibatch Discrimination
- 동일한 Batch 내에서 생성된 샘플의 차이를 판별자가 고려
- 생성자가 더욱 다양한 샘플을 생성하도록 유도
Solution 2: Unrolled GAN
- 판별자가 여러 번 업데이트된 결과를 고려하여 생성자를 학습
- 생성자가 더 안정적으로 학습 가능
불안정한 학습 해결
Solution 1: Wasserstein GAN (WGAN)
- Binary Cross-Entropy 대신 Wasserstein Distance 사용
- Wasserstein Distance는 두 분포 간의 차이를 측정하며 안정적 학습 지원
Solution 2: Gradient Penalty (WGAN-GP)
- 판별자 기울기의 크기를 제어(1에 가깝게 유지)
- 학습 안정성 강화
Gradient Vanishing 해결
Solution 1: Label Smoothing
- 진짜 데이터의 라벨을 1이 아닌 0.9로 조정
- 기울기 정보 손실 완화
Solution 2: Wasserstein Distance
- Sigmoid 함수 대신 Linear Activation 사용
- 기울기 소실 문제 완화
Hyperparameter Tuning 개선
Solution 1: Adaptive Learning Rate
- 생성자와 판별자의 학습률을 동적으로 조정
- 예: RMSProp 또는 Adam Optimizer
Solution 2: Pretraining
- 판별자 또는 생성자를 사전 학습
- 초기 학습 안정성 확보
5.3 추가 개선 기법
1. Progressive Growing
- GAN을 점진적으로 학습하여 고해상도 데이터 생성
- 초기에는 낮은 해상도로 시작해 점차 해상도를 높임
2. Feature Matching
- 판별자가 단순히 진짜/가짜를 판별하는 대신
- 진짜 데이터와 생성 데이터의 특징을 비교하여 학습
3. Spectral Normalization
- 판별자의 가중치를 정규화
- 학습 안정성을 높이고 과적합 문제 완화
6. 주요 생성 모델 비교
6.1 생성 모델의 분류
명시적 밀도 모델 (Explicit Density Models)
- 데이터 분포를 명시적으로 정의
- 예: VAE, Normalizing Flows
암시적 밀도 모델 (Implicit Density Models)
- 데이터 분포를 명시적으로 정의하지 않고 샘플링으로 학습
- 예: GAN
특수 생성 모델
- Diffusion 모델, Autoregressive 모델
6.2 주요 모델 비교표
| 모델 | 주요 특징 | 장점 | 한계 |
|---|
| DCGAN | Convolutional Layer 기반, Batch Norm 사용 | 학습 안정성 향상, 고품질 이미지 생성 | 고해상도 데이터 생성에 한계 |
| WGAN | Wasserstein Distance 사용 | 학습 안정성 강화, Mode Collapse 완화 | Weight Clipping으로 인한 표현력 제한 |
| LSGAN | Least Squares Loss 사용 | 기울기 소실 문제 완화, 안정적인 학습 | 특정 상황에서만 적합 |
| PGGAN | 점진적 네트워크 확장 | 고해상도 이미지에서 뛰어난 성능 | 학습 시간이 오래 걸림 |
| cGAN | 조건 기반 이미지 생성 | 특정 특성을 가진 데이터 생성 가능 | 조건 데이터 필요 |
| StyleGAN | 스타일 조정 및 고품질 이미지 생성 | 이미지 다양성 및 속성 제어 가능 | 복잡한 구조, 높은 계산 비용 |
| VAE | 잠재 공간 확률 모델링 | 안정적인 학습, 잠재 공간 구조 해석 가능 | 생성 데이터의 세부 묘사 제한적 |
| Diffusion | 노이즈 추가 및 제거 | 안정적이고 다양한 데이터 생성 | 학습 속도 느림, 높은 계산 자원 요구 |
6.3 GAN vs VAE vs Diffusion
GAN
- 장점: 고품질 이미지 생성, 다양한 변형 가능
- 단점: 학습 불안정성, 모드 붕괴 문제
VAE
- 장점: 안정적인 학습, 잠재 공간 해석 가능
- 단점: 생성 이미지의 품질이 상대적으로 낮음
Diffusion Models
- 장점: 안정적이고 고품질 이미지 생성
- 단점: 학습 속도 느림, 높은 계산 비용
7. VAE의 구조와 작동 원리
7.1 VAE의 정의
Variational Autoencoder (VAE)
Autoencoder의 확장판으로, 데이터의 잠재 분포(Latent Distribution)를 학습해 데이터를 생성할 수 있는 모델입니다.
7.2 VAE의 구조
Encoder
- 입력 데이터를 잠재 공간의 평균(μ)과 분산(σ²)으로 변환
z ∼ N(μ, σ²)
μ = f_enc^μ(x), log σ² = f_enc^σ(x)
Latent Space Sampling
- Reparameterization Trick 사용
z = μ + σ·ϵ, ϵ ∼ N(0,1)
Decoder
x' = f_dec(z)
7.3 VAE의 손실 함수
ELBO (Evidence Lower Bound)
ℒ_ELBO = Reconstruction Loss + KL Loss
Reconstruction Loss
- 목적: 입력 데이터 x와 복원된 출력 x' 간의 차이 최소화
- 일반적으로 MSE 또는 BCE 사용
Reconstruction Loss = -𝔼_q(z|x)[log p(x|z)]
KL Divergence Loss
- 목적: 잠재 변수 z의 분포 q(z|x)를 표준 정규분포 p(z) = N(0,1)과 비슷하게 만듦
- 학습된 잠재 공간이 정규분포를 따르도록 제약
KL Loss = KL(q(z|x)||p(z)) = ∫ q(z|x)log[q(z|x)/p(z)]dz
7.4 VAE의 장점과 한계
장점
- 확률적 모델링을 통한 데이터 생성
- 의미 있는 잠재 공간 학습
- End-to-End 학습 가능
- 안정적인 학습
한계
- 복잡한 데이터에 대한 성능 한계
- 세밀한 디테일 생성 어려움
- 생성 이미지의 블러 현상
Q&A 정리
Q. "조건부 확률에서 몬티 홀 문제가 GAN과 어떤 관련이 있나요?"
GAN은 조건부 확률을 기반으로 동작합니다. 몬티 홀 문제는 조건부 확률의 대표적인 예시로, 특정 조건(문이 하나 열린 상황)이 주어졌을 때 확률이 어떻게 변하는지 보여줍니다.
GAN에서도 마찬가지로:
- 생성자는 노이즈 z가 주어졌을 때 이미지 x가 생성될 조건부 확률 P(x|z)를 학습
- 판별자는 이미지 x가 주어졌을 때 진짜일 조건부 확률 P(y|x)를 학습
Q. "GAN의 적대적이라는 의미는 정확히 무엇인가요?"
적대적(Adversarial)이라는 의미는 생성자와 판별자가 서로 반대되는 목표를 가지고 경쟁한다는 뜻입니다:
- 생성자: 판별자를 속이려고 함 (라벨 1로 인식되길 원함)
- 판별자: 생성자가 만든 이미지를 가짜로 판별하려고 함 (라벨 0으로 인식)
이러한 적대적 관계를 통해 생성자는 점점 더 진짜 같은 이미지를 만들게 됩니다.
Q. "노이즈에서 어떻게 이미지가 만들어지나요?"
신경망의 선형 변환과 활성화 함수를 통해 가능합니다:
- 작은 차원의 노이즈 벡터(예: 100차원)를 입력
- 여러 레이어를 거치면서 차원 확장
- (100,) → (256,) → (512,) → (1024,) → (28×28)
- 각 레이어에서 가중치(weight)와 편향(bias)을 곱하고 더함
- 활성화 함수(ReLU, Tanh 등)를 적용
- 최종적으로 이미지 크기(예: 28×28)의 출력 생성
핵심은 신경망이 학습을 통해 "어떤 가중치를 사용하면 진짜 같은 이미지가 나오는지"를 배운다는 것입니다.
Q. "GAN과 Autoencoder, U-NET의 차이는 무엇인가요?"
Autoencoder & U-NET
- x 데이터와 y 데이터가 동일 (입력 = 출력)
- 목적: 데이터 복원 및 특징 학습
GAN
- x 데이터(노이즈)와 y 데이터(이미지)가 다름
- x 사이즈가 작거나 의미가 없는 랜덤 값
- 목적: 새로운 데이터 생성
Loss 계산 방식
- Autoencoder/U-NET: MSE, MAE 등 단순 재구성 손실
- GAN: 적대적 손실 (생성자 vs 판별자)
핵심 정리
-
GAN은 생성자와 판별자의 적대적 학습을 통해 이미지를 생성하는 모델이다.
-
생성자는 무작위 노이즈를 입력받아 신경망을 거쳐 이미지를 생성한다.
-
판별자는 입력 이미지가 진짜인지 가짜인지 판별하며, 무조건 생성자의 출력을 가짜로 판단하려 한다.
-
GAN의 학습은 조건부 확률 P(x|z)와 P(y|x)를 기반으로 한다.
-
주요 문제점으로 Mode Collapse, 학습 불안정성, Gradient Vanishing이 있다.
-
WGAN, LSGAN, StyleGAN 등 다양한 변형 모델이 문제점을 해결하기 위해 제안되었다.
-
VAE는 잠재 공간의 확률 분포를 명시적으로 모델링하며 GAN보다 안정적이지만 이미지 품질이 낮다.
-
Diffusion 모델은 노이즈를 점진적으로 제거하여 고품질 이미지를 생성한다.
-
GAN의 손실 함수는 Minmax 게임 형태로 표현된다.
-
하드웨어 자원 이슈로 인해 실습 환경에서는 제약이 있을 수 있다.
추가 학습 권장 사항
심화 주제
1. GAN의 수학적 이론
- Nash Equilibrium과 GAN의 관계
- KL Divergence, JS Divergence, Wasserstein Distance 비교
- 최적 판별자 및 생성자 유도
2. 고급 GAN 아키텍처
- BigGAN: 대규모 이미지 생성
- StyleGAN2/3: 더욱 정교한 스타일 제어
- CycleGAN: 이미지 간 변환 (말→얼룩말 등)
- Pix2Pix: 이미지 투 이미지 변환
3. Diffusion Models 심화
- DDPM (Denoising Diffusion Probabilistic Models)
- Score-based Generative Models
- Stable Diffusion의 원리와 응용
4. 실무 응용
- Text-to-Image 생성 (DALL-E, Midjourney, Stable Diffusion)
- Image Super-Resolution
- Image Inpainting (이미지 복원)
- Anomaly Detection (이상치 탐지)
참고 자료
논문
- Goodfellow et al. (2014): Generative Adversarial Networks
- Radford et al. (2015): Unsupervised Representation Learning with DCGAN
- Arjovsky et al. (2017): Wasserstein GAN
- Karras et al. (2018): A Style-Based Generator Architecture for GANs
- Ho et al. (2020): Denoising Diffusion Probabilistic Models
온라인 자료
실습 환경
- TensorFlow/Keras: tf.keras.layers를 이용한 GAN 구현
- PyTorch: torch.nn을 이용한 GAN 구현
- Colab: GPU 무료 제공 (하드웨어 제약 해결)
실습 프로젝트 추천
-
MNIST 데이터셋으로 간단한 GAN 구현
- 숫자 이미지 생성
- Mode Collapse 관찰 및 해결
-
DCGAN으로 얼굴 이미지 생성
- CelebA 데이터셋 사용
- 고품질 얼굴 이미지 생성
-
Conditional GAN으로 특정 클래스 이미지 생성
- MNIST 또는 Fashion-MNIST
- 원하는 숫자/의류 생성
-
Style Transfer 프로젝트
- 예술 작품 스타일을 사진에 적용
- CycleGAN 활용
-
이미지 복원 (Inpainting)
커뮤니티 및 도구
커뮤니티
- Reddit: r/MachineLearning, r/deeplearning
- Discord: ML/DL 관련 서버
- Kaggle: GAN 관련 Competition 및 Notebook
유용한 라이브러리
- TensorFlow GAN (TF-GAN)
- PyTorch-GAN
- Keras-GAN
- Stable Baselines3 (강화학습 + GAN)
시각화 도구
- TensorBoard
- Weights & Biases (W&B)
- MLflow