GAN

AI
qwen-3-235b-a22b
작성자
익명
작성일
2025.07.28
조회수
9
버전
v1

GAN (Generative Adversarial Network)

개요

GAN(Generative Adversarial Network)은 2014년 Ian Goodfellow 등에 의해 제안된 딥러닝 모델로, 생성자(Generator)와 판별자(Discriminator)의 경쟁적 학습을 통해 데이터를 생성합니다. 주로 이미지, 음성, 텍스트 등의 생성에 활용되며, 데이터 과학 분야에서 데이터 생성 기술의 핵심으로 자리잡았습니다.

구조

생성자 (Generator)

  • 목적: 잠재공간(latent space)의 노이즈 벡터(z)를 입력으로 받아 실제 데이터와 유사한 가짜 데이터를 생성
  • 구조: 주로 딥 신경망(예: CNN, RNN)으로 구성되며, 입력 데이터의 분포를 모방
  • 활용 예시: 난수 생성 → 이미지 생성(예: 얼굴, 풍경)

판별자 (Discriminator)

  • 목적: 입력된 데이터가 실제 데이터인지(GAN 생성물) 판별
  • 구조: 이진 분류기로 설계되어 확률적 결과(0~1)를 출력
  • 수학적 표현: $ D(x) $는 데이터 x가 실제일 확률을 나타냄

작동 원리

학습 과정

  1. 단계 1: 생성자가 노이즈를 입력으로 받아 가짜 데이터 생성
  2. 단계 2: 판별자가 실제 데이터와 가짜 데이터를 구분
  3. 단계 3: 생성자와 판별자의 손실 함수 기반 파라미터 업데이트
  4. 반복: 생성자가 실제 데이터와 구분 불가능한 수준에 도달할 때까지 반복

손실 함수

\min_G \max_D V(D,G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]
- 생성자 목표: $ \log(1 - D(G(z))) $ 최소화 (가짜를 실제로 속이기) - 판별자 목표: $ \log D(x) $ 최대화 (정확한 분류)

응용 분야

  • 이미지 생성: StyleGAN을 활용한 고해상도 얼굴 생성
  • 데이터 증강: 의료 이미지 생성으로 학습 데이터 부족 해결
  • 스타일 전이: CycleGAN을 통한 예술적 이미지 변환
  • 비디오 생성: 시퀀셜 데이터 기반 동영상 합성
  • 딥페이크: 얼굴 교체 기술, 윤리적 문제 논란

주요 도전 과제

문제 설명 해결 방안
모드 붕괴 생성자가 단일 유형의 데이터만 생성 미니-배치 다양성 추가, Loss 함수 개선
학습 불안정 생성자와 판별자의 경쟁으로 수렴 실패 Wasserstein 거리 활용(WGAN), 경사 페널티
평가 지표 생성 품질 정량적 평가 어려움 FID 점수, Inception Score 사용

주요 변종

  1. DCGAN (Deep Convolutional GAN)
  2. CNN 기반 구조로 이미지 생성 안정성 향상
  3. 2015년 발표, 전이 학습 기법으로 활용 가능

  4. WGAN (Wasserstein GAN)

  5. 유클리드 거리 대신 Wasserstein 거리 사용
  6. 학습 안정성과 수렴성 개선

  7. CGAN (Conditional GAN)

  8. 라벨 정보를 조건으로 추가
  9. 특정 클래스 이미지 생성 가능 (예: "고양이" 생성 요청)

  10. CycleGAN

  11. 도메인 간 이미지 변환 (예: 말→얼룩말)
  12. 순환 일관성(cycle consistency) 손실 적용

  13. StyleGAN2

  14. 스타일 기반 생성 구조
  15. 세부 특징(예: 머리카락, 표정) 독립 제어 가능

최근 발전

참고 자료

  1. Goodfellow et al., 2014 - GAN 원본 논문
  2. Arjovsky et al., 2017 - WGAN 이론 정립
  3. Karras et al., 2019 - StyleGAN2 구현
  4. GAN-Application Survey - 최근 동향 총정리

코드 예시 (PyTorch 기반 간단한 GAN 구조):

import torch
from torch import nn

class Generator(nn.Module):
    def __init__(self):
        super().__init__()
        self.model = nn.Sequential(
            nn.Linear(100, 256),
            nn.ReLU(),
            nn.Linear(256, 28*28),
            nn.Tanh()
        )
    
    def forward(self, z):
        return self.model(z)

class Discriminator(nn.Module):
    def __init__(self):
        super().__init__()
        self.model = nn.Sequential(
            nn.Linear(28*28, 256),
            nn.LeakyReLU(0.2),
            nn.Linear(256, 1),
            nn.Sigmoid()
        )
    
    def forward(self, x):
        return self.model(x)

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?