생성자(Generator)와 판별자(Discriminator)가 서로 경쟁하며 학습하는 구조이다.
이 두가지의 신경망은 경쟁 관계로, Generator는 Discriminator를 속이기 위해 더 진짜같은 데이터를 생성하고, Discriminator는 더 잘 구분하려고 학습하게 된다.
이러한 과정을 반복해서 두 가지 모두 동시에 발전할 수 있게 된다. 어느 시점에 이르게 되면, Discriminator는 진짜와 가짜를 제대로 구분하지 못할 만큼 Generator가 현실적인 데이터를 만들게 된다.
Generator가 입력받는 고차원의 잠재 변수 공간이다. 이 공간의 각 점은 데이터 생성의 씨앗이 된다.
보통 정규분포 또는 균등분포에서 샘플링한 벡터를 입력한다. 이 벡터는 특징의 축약된 표현으로, Latent Space 내의 작은 변화가 생성 데이터에 의미 있는 변형(ex. 얼굴 방향, 표정 변화)으로 나타날 수 있다.
Generator와 Discriminator 둘이 서로의 성능을 개선하며 경쟁적으로 학습한다.
두 모델이 "제로섬 게임" 방식으로 동시에 최적화되어 Generator가 만든 데이터와 진짜 데이터를 Discriminator가 구분하지 못하는 지점에 도달하게 되는 것이 목표이다.
반복적으로 두 네트워크를 번갈아 학습시키며, 구조의 균형을 맞추는 것이 중요하다. 한쪽이 압도적으로 강하면 학습에 실패할 수 있다.
Generator가 만들어내는 데이터가 다양성을 잃고, 일부 소수의 유형만 반복 생성하는 현상이다.
학습 데이터의 분포 전체를 포괄하지 못하고 특정 "mode(패턴)"만 만들어내게 되는 문제점이 있다.
원인은 Discriminator가 너무 강하거나, Generator가 너무 약할 때 주로 발생한다.
다양한 Loss 함수 도입, 미니배치 정보 추가, 다양한 GAN 변형(ex. Minibatch Discrimination) 등의 방안이 있다.
Binary Cross-Entropy 를 가장 기본적으로 사용한다.
Discriminator는 진짜 데이터에서 1, 가짜에서는 0이 나오도록 학습한다.
수식은 아래와 같다.
위의 수식은 Discriminator 수식이며, 아래는 Generator의 수식이다.
| 아키텍처 | 구조적 특징 | 핵심 아이디어 |
|---|---|---|
| DCGAN | CNN 기반 Generator/Discriminator | Convolution Layer로 이미지 공간 특징을 처리, 안정적 학습을 유도한다. 얼굴 생성 등 고해상도 이미지 생성에 많이 사용된다. |
| Conditional GAN(cGAN) | 조건 벡터(input label -> one-hot 등)를 Generator와 Discriminator 모두에 입력 | 원하는 속성(ex. 특정 숫자, 이미지 스타일 등)을 제어하며 샘플을 생성할 수 있다. 이미지 클래스를 지정하여 데이터 증강 등에 활용할 수 있다. |
| CycleGAN | 쌍(pair)이 없는 데이터 간 스타일 변환 | ex. 말 ↔ 얼룩말, 여름사진 ↔ 겨울사진 Cycle Consistency Loss로 두 도메인 간 상호 변환을 강제, 라벨 없는 도메인 변환에 효과적이다. |
| StyleGAN | 대규모/고해상도 이미지 생성, 세밀한 스타일 제어 | Style Mapping Network 도입, 스타일 벡터로 각 계층마다 영향력을 분리한다. 얼굴 특성과 자세 등 기여를 조절하여 고화질이나 자연스러운 이미지 생성을 가능하게 한다. |
| WGAN | Wasserstein distance 도입 | Discriminator 대신 "critic" 을 사용한다. output이 probability(확률)가 아니라 real value(실수)이다. Gradient vanishing 문제 감소, 모드 붕괴에 견고하다는 특징이 존재한다. |
증거 이미지 조작 여부 판단하는 연구를 해보면 좋을 듯하다.
GAN 또는 안티포렌식 도구에 의해 위조되었는지 탐지하고 조작된 부분의 위치를 식별해보는 포렌식 AI 모델을 설계하고 개발해보는 것이다.