WGAN-GP가 GAN을 학습시킬 때 안정적으로 빠르게 학습이 가능하다고 말로만 들었어서 제대로 공부하여 정리한 글이다.
GAN
GAN은 latent(noise) space를 정의하고 Generator, Discriminator가 학습을 진행해 실제 분포로 유사하게 만들고자 한다.
두 개의 네트워크의 균형을 맞추면서 학습하는 것은 굉장히 어려운 일이다. 예시로, 자주 발생하는 문제가 mode collapse인데, G가 비슷한 정보(mode)만 이용해 D를 속이고, 이 과정에서 전체 분포로 학습되지 않아 일부 분포만 표현할 수 있게 된다.
WGAN
GAN의 discriminator와 비슷한 역할을 하는 WGAN에서는 Critic이라 칭한다. 이는 진짜와 가짜를 구분하는 discriminator가 아니다.
- critic은 Lipschitz condition을 만족해야 하고, EM distance로부터 도출한 특정 sclar 값을 지닌다.
- critic을 5번 학습하고, generator를 1번 학습한다.
- 따라서 보다 안정하고 mode collapse 문제를 해결하고자 했다.
Lipschitz condition
generator와 discriminator 사이의 함수를 제약하는 조건으로써, 함수의 기울기를 최대 1로 제한하게 되는데, WGAN에서는 generator와 discriminator의 가중치를 clipping 해서 강제로 적용하는데, 이는 generator와 discriminator 간 gradient가 소실되지 않도록 안정적으로 유지하면서 학습을 가능하게 해 gradient vanishing 문제를 완화할 수 있다.
Wasserstein distance
또한 WGAN에서 분포가 얼마나 유사한지를 wasserstein distance를 통해 알려주는데, 분포를 한 곳에서 다른 곳으로 이동시킬때 최소 비용을 의미하는데, 분포의 형태와 모양을 고려해 거리를 측정하기 때문에 더 정확하게 평가할 수가 있다. JS divergence와 KL divergence는 분포가 겹치지 않거나, mode collapse가 발생할 때 정확한 거리를 측정하는데 어렵다.
수식적인 내용은 다음 블로그를 통해 참고해주세요.
https://rosinality.github.io/2017/04/wasserstein-%EA%B1%B0%EB%A6%AC/
Wasserstein 거리
지금 시점에서는 나온지 좀 되긴 했지만 여전히 재미있는 Wasserstein GAN에 대해서 정리해본다. 뉴럴넷이라는 측면에서도 재미있지만 나오는 수학도 재미있다. Read-through: Wasserstein GAN과
rosinality.github.io
이런 알고리즘을 통해 어떻게 WGAN이 학습하는지 알아보자.
loss는 real과 fake의 점수 차이를 최대화하는 방식으로 작동한다.
wgan_algorithm을 참고하면, 우선 두 이미지(real, fake)를 비교한다. critic 네트워크에서 fake, real의 점수를 구하고, 두 점수의 기댓값 차이(wassertein distance)를 최대화하는 방식으로 학습한다.
GAN과 WGAN의 학습 결과는 다음과 같다.
WGAN의 경우 GAN에 비해 더 부드러운 기울기(하늘색) 값을 보인다.
WGAN-GP (Wassertein GAN with gradient penalty)
이제 WGAN-GP가 왜 등장했는지 설명을 하자면, WGAN에서 Lipschitz condition을 만족하기 위해 가중치에 clipping을 해서 강제로 맞춰줬지만, 이도 불안정한 방법이었고, 따라서 다르게 이 조건을 만족시키게 한다. 그것을 penalization이라고 하고 critic network의 가중치에 penalty를 주는 것으로 구현된다.
만약 gradient의 norm이 전부 1로 가깝게 한다면 lipschitz condition을 만족하게 될 것이다. 미분 가능성을 해결하기 위해 soft 한 방식의 gradient norm penalty를 제시한다.
실제와 가짜 사이의 데이터를 선형적으로 보간 된 데이터를 생성해 해당 데이터에 대한 기울기를 계산한다. 기울기의 제곱을 페널티로 추가하는 방식으로 작동한다.
학습 결과는 다음과 같다.
왼쪽은 iteration에 따른 Inception Score, 오른쪽은 시간에 따른 Inception Score이다. WGAN-GP는 weight clipping 보다 성능이 좋고 DCGAN과 비슷하다. RMSProp를 사용할 때는, weight clipping과 같은 learning rate를 사용하고, Adam 사용 시에는, 더 높은 learning rate를 사용한다. 같은 optimizer일지라도, WGAN-GP는 더 빠르게 수렴하고 weight clipping보다 좋은 score를 보인다. 그리고 Adam이 더 좋은 성능을 보인다. DCGAN보다는 수렴속도가 느리지만(오른쪽) 수렴에 있어서 점수가 더 안정적이다.
참고
[Deep learning 논문 읽기] StyleGAN loss 이해, 얕게 읽는 WGAN, WGAN-GP
style gan loss 이해하기 위해, 여기에 쓰인 WGAN-GP loss를 살펴볼까 한다. 우선 GAN loss, WGAN loss의 차이를 살펴보고 WGAN loss를 이해한다면 WGAN-GP loss도 이해할 수 있다. 수식적으로 깊게 들어가진 않는다.
study-grow.tistory.com
https://leechamin.tistory.com/232
[논문읽기] 11. WGAN-GP : Improved Training of Wasserstein GANs
< WGAN-GP : Improved Training of Wasserstein GANs >weight clipping → Gradient penalty0. AbstractWGAN에서 critic에 대해 Lipschitz constraint를 강요하기위한 weight clipping이 발생시키는 문제, 즉 undesired behavior로 이끌 수 있다
leechamin.tistory.com
'기초 지식' 카테고리의 다른 글
Prior VS Posterior (2) | 2023.05.21 |
---|