WGAN
WGAN(워서스테인 거리 생성적 적대 신경망, Wasserstein Generative Adversarial Network)은 GAN의 한 변형으로서, GAN의 안정성과 생성된 이미지의 품질을 향상시키기 위해 도입된 개념입니다. WGAN은 기존 GAN의 손실 함수를 Wasserstein 거리를 기반으로 재정의하여, 모드 붕괴와 학습 불안정성 문제를 완화시키고 안정적인 학습을 가능하게 합니다.
WGAN이 도입하는 주요 개념은 다음과 같습니다:
Wasserstein 거리:
Wasserstein 거리(또는 Earth-Mover's Distance)는 두 분포 사이의 거리를 계산하는 방법으로, 기존 GAN에서 사용되던 JS Divergence나 KL Divergence보다 더 안정적이고 좋은 거리 측정 방법입니다. Wasserstein 거리는 두 분포 간의 최소 이동 비용을 의미하며, 생성된 분포와 실제 분포 사이의 거리를 측정하여 더 좋은 학습을 도모합니다.
Lipschitz 제약:
WGAN은 경사 소실 문제를 완화하기 위해 판별자(Discriminator)가 Lipschitz 연속 함수라는 제약을 받도록 합니다. Lipschitz 연속 함수는 특정 입력 간의 함수 값의 차이가 입력 간의 거리의 상수 배보다 크지 않도록 제한하는 함수입니다. 이러한 제약을 통해 경사 소실 문제를 해결하고 안정적인 학습을 촉진합니다.
WGAN의 손실 함수는 기존 GAN과 다르게 Wasserstein 거리를 기반으로 하며, 다음과 같이 표현됩니다:
판별자(Discriminator)의 손실 함수:
D(x)는 진짜 데이터 x의 판별자의 출력이며, D(G(z))는 생성자(Generator)가 생성한 가짜 데이터 G(z)의 판별자의 출력입니다. WGAN에서 판별자의 손실 함수는 다음과 같이 표현됩니다:
L_D = E[D(x)] - E[D(G(z))]
여기서 E는 기댓값을 의미합니다.
생성자(Generator)의 손실 함수:
WGAN에서 생성자의 손실 함수는 다음과 같이 표현됩니다:
L_G = -E[D(G(z))]
WGAN의 학습은 이러한 손실 함수를 사용하여 진행되며, 판별자와 생성자가 서로 경쟁하면서 모델이 학습됩니다. 이때 생성자는 더 작은 Wasserstein 거리를 만들기 위해 판별자의 출력을 최대화하고, 판별자는 더 큰 Wasserstein 거리를 만들기 위해 진짜와 가짜를 잘 구분하도록 최소화하는 방향으로 학습을 진행합니다.
WGAN은 안정적인 학습과 모드 붕괴 문제 해결 등에서 기존 GAN보다 더 좋은 성능을 보여주는데, 이를 통해 생성 모델의 성능 향상과 더 현실적인 이미지 및 데이터 생성을 가능하게 합니다.
WGAN-GP
WGAN-GP(워서스테인 거리 생성적 적대 신경망 - Gradient Penalty)는 워서스테인 거리 생성적 적대 신경망(WGAN)의 한 변형으로서, 기존 WGAN의 손실 함수에 Gradient Penalty를 도입하여 안정적인 학습과 모드 붕괴 문제를 더욱 효과적으로 해결하는 방법입니다.
WGAN-GP에서 도입되는 주요 개념은 다음과 같습니다:
Gradient Penalty:
WGAN-GP에서는 판별자(Discriminator)의 Lipschitz 제약을 강화하기 위해 Gradient Penalty를 손실 함수에 추가합니다. 기존 WGAN에서는 Lipschitz 제약을 이루기 위해 가중치 클리핑(weight clipping) 방법을 사용하는데, 이는 안정적인 학습을 방해할 수 있습니다. Gradient Penalty는 가중치 클리핑 대신에 판별자의 경사를 제한하는 방법으로, 더 안정적이고 효과적인 방법으로 Lipschitz 제약을 부여합니다.
Lipschitz 제약 강화:
WGAN-GP에서는 경사가 너무 커지지 않도록 하기 위해 판별자의 손실 함수에 Gradient Penalty 항을 추가합니다. Gradient Penalty는 실제 데이터와 생성된 가짜 데이터 사이의 랜덤한 점을 뽑아 해당 점에서의 경사를 계산하고, 이 경사의 크기를 일정한 값(주로 1로 설정)으로 제한합니다. 이로 인해 판별자가 훈련 초기에 폭발적으로 커지는 경사를 가지는 것을 방지하며, 더 안정적인 학습을 도모합니다.
WGAN-GP의 손실 함수는 다음과 같이 표현됩니다:
판별자(Discriminator)의 손실 함수:
D(x)는 진짜 데이터 x의 판별자의 출력이며, D(G(z))는 생성자(Generator)가 생성한 가짜 데이터 G(z)의 판별자의 출력입니다. WGAN-GP에서 판별자의 손실 함수는 다음과 같이 표현됩니다:
L_D = E[D(x)] - E[D(G(z))] + λ * E[(||∇D(εx)||2 - 1)^2]
여기서 E는 기댓값을 의미하며, ε는 랜덤하게 생성한 값(0과 1 사이의 균등 분포에서 추출)으로서 실제 데이터와 가짜 데이터 사이의 선형 보간을 수행하는 역할을 합니다. λ는 Gradient Penalty의 강도를 조절하는 하이퍼파라미터입니다.
생성자(Generator)의 손실 함수:
WGAN-GP에서 생성자의 손실 함수는 기존 WGAN과 동일하게 다음과 같이 표현됩니다:
L_G = -E[D(G(z))]
WGAN-GP의 학습은 이러한 손실 함수를 사용하여 진행되며, 판별자와 생성자가 서로 경쟁하면서 모델이 학습됩니다. Gradient Penalty를 사용함으로써 안정적인 학습과 모드 붕괴 문제를 효과적으로 해결하여 생성 모델의 성능을 개선할 수 있습니다.