LSGAN & ACGAN

1. LSGAN ( Least Squares GAN )

이전 절에서는 WGAN에 대해서 배웠다. WGAN이 좋았던 이유는, 두 분포 (\(p_{data}\) 와 \(p_g\)) 사이의 중첩되는 부분이 없을 때에도, Loss Function으로 Wasserstein Distance를 사용함으로써 이미지를 생성할 수 있다는 안정성 측면의 장점이 있었다. 하지만, 그렇다고 이 모델이 반드시 좋다고 할 수는 없다.

지금까지 배웠던 GAN의 여러 모델들 (GAN, CGAN, WGAN 등)에서는 정답이냐 아니냐”에만 신경을 썼지, 그것이 “얼마나 잘해서” 정답이고, “얼마나 못해서” 오답인지를 반영하지는 못했다. () 이미 결정 경계에서 진짜 혹은 가짜로 분류된 이상, 그 경사는 손실되었다 ) 따라서 이 모델들 같은 경우에는, 생성된 fake image가 Discriminator만 속인 이상, 보다 더 낫게 진짜처럼 보이려는 노력을 하지 않게 된다. 그래서 나오게 된 개념이 LSGAN이다.


Loss Function of LSGAN

LSGAN의 Loss Function이 기존의 GAN의 것과 어떻게 다른지를 확인해보면 이해할 수 있을 것이다.


GAN

  • Discriminator의 Loss Function : \(L^{(D)} = - E_{x \sim P_{data}}logD(x) - E_z log(1-D(G(z)))\)
  • Generator의 Loss Function : \(L^{(G)} = - E_zlogD(G(z))\)


LSGAN

  • Discriminator의 Loss Function : \(L^{(D)} = E_{x \sim P_{data}}(D(x)-1)^2 + E_zD(G(z))^2\)
  • Generator의 Loss Function : \(L^{(G)} = E_z(D(G(z))-1)^2\)

Loss가 모두 MSE로 대체된 것을 확인할 수 있다. 이러한 Loss Function을 사용함으로써, 판별기가 판독을 한 이후, 그 정답/오답의 ‘정도’또한 반영하여 품질의 개선에 기여할 수 있다는 것을 알 수 있다.



2. ACGAN ( Auxiliary Class GAN )

ACGAN은, CGAN과 마찬가지로 Generator의 입력으로 class의 label값을 받는다. 하지만 차이점은, CGAN에서는 Discriminator의 입력으로도 class의 label값을 받고, 생성해낸 이미지가 진짜일 확률값을 출력하지만, ACGAN에서는 Discriminator의 입력은 이미지이고, 출력값은 해당 이미지가 진짜이면서 해당 class에 속할 확률이다. 다음 그림을 통해 쉽게 이해할 수 있다.

https://www.researchgate.net/figure/GAN-conditional-GAN-CGAN-and-auxiliary-classifier-GAN-ACGAN-architectures-where-x_fig1_328494719


ACGAN에서 “AC”는 Auxiliary Class를 뜻하는 것으로, 보조 클래스를 의미한다. 위 그림에서도 알 수 있듯, ACGAN의 Discriminator은 CGAN과 마찬가지로 “해당 fake image가 진짜/가짜일 확률”을 반환할 뿐만 아니라, 보조적으로 생성한 fake image가 각 class에 속할 확률을 계산하여 이 또한 모델의 평가에 있어서 반영한다. 우선 두 모델 (CGAN과 ACGAN)의 Loss Function을 살펴보자.


Loss Function of ACGAN

CGAN

  • Discriminator의 Loss Function : \(L^{(D)} = - E_{x \sim P_{data}}logD(x\mid y) - E_z log(1-D(G(z\mid y)))\)
  • Generator의 Loss Function : \(L^{(G)} = - E_zlogD(G(z\mid y))\)


ACGAN

  • Discriminator의 Loss Function : \(L^{(D)} = - E_{x \sim P_{data}}logD(x\mid y) - E_z log(1-D(G(z\mid y))) - E_{x\sim P_{data}}logp(c\mid x)-E_z logp(c\mid G(z\mid y))\)
  • Generator의 Loss Function : \(L^{(G)} = - E_zlogD(G(z\mid y)) - E_zlogp(c\mid G(z\mid y))\)


ACGAN의 Loss Function을 보면, 기존 CGAN의 Loss Function에 다음과 같은 추가적인 손실이 붙은 것을 확인할 수 있다.

[ Discriminator의 Loss Function 에 추가로 붙은 부분 ]

  • \(- E_{x\sim P_{data}}logp(c\mid x)\) : real image가 주어졌을 때, 해당 class에 속할 확률
  • \(-E_z logp(c\mid G(z\mid y))\) : fake image가 주어졌을 때, 해당 class에 속할 확률

[ Generator의 Loss Function 에 추가로 붙은 부분 ]

  • \(- E_zlogp(c\mid G(z\mid y))\) : 생성해낸 fake image가, 해당 class에 속할 확률

위와 같이, 부가적인 분류기 손실함수가 추가되었다는 점을 제외하고는 CGAN과 동일하다.