이전 포스터에서 Wasserstein distance를 사용한 cost ft을 이용하여 기존 GAN의 단점들을 보완할 수 있었다. 이를 통해 smooth하게(conti&diff) 바꿔주었다.
또한 WGAN critic을 통해 vanishing gradient문제를 해결했다.
실제 WGAN을 구현하는 과정에서는 infimum을 찾는 과정이 있기에 이를 찾는 문제는 대부분 다룰 수 없다. 즉, intractable하다. 따라서 이를 변형시켜 real data의 분포와 fake data의 분포를 분리시켜 Kantorovich-Rubinstein duality를 이용한 cost ft으로 사용하게 된다.
이를 통해 1-Lipschitz ft으로 sup값을 찾는 것이다.
1-Lipschitz ft를 DNN으로 학습하고 이를 maximize시키는 쪽으로 학습하게 된다.
이를 WGAN critic이라고 한다.
WGAN 논문에 나오는 두 가지 정리를 살펴보자.
Thm 1
Pn은 확률분포를 의미한다. p1,p2,p2,.. 점점 p에 가까워지는 sequence이다.
KL div가 0으로 converge하면 -> JS div도 0으로 converge하게 된다.
JS div가 0으로 conv <=> total variance distance가 0으로 conv
total variance distance가 0으로 conv하면 -> Wasserstein distance가 0으로 conv한다.
즉, Wasserstein distance가 가장 약한 조건이다.
Wasserstein distance의 장점은
Wasserstein distance가 0으로 conv <=> pn->p(convergence in distribution in random variable) 라는 것이다.
Thm 2
pr : real / pΘ : fake / gΘ : generator
Wasserstein distance W(Pr,PΘ) 가 conti & diff하다.
이렇게 Wasserstein distance는 smooth하기에, 따라서 기존 GAN의 판별자를 사용하지 않고 WGAN critic을 사용하는 수학적 근거가 된다.
아래의 disjoint supports를 예시로 보아 이해해보자.
3차원으로 표현하면 아래와 같이 표현되며 이를 각 계산해보자.
만약 KD div경우 Θ=0일 때만 p0/pΘ=1로 0이 되고, 나머지는 p0=0이기에 infinity를 갖게 된다. JS도 유사하지만 Θ=0일 때만 0이고, 나머지는 log2를 갖는다. total variance distance는 적분을 하는 것으로 Θ=0일 때는 0이고 나머지는 1이 된다.
그에 반해 Wasserstein distance는 CDF를 이용한 것으로, 거리를 이용한 것이기에 1의 면적을 Θ만큼 이동하기에 값이 Θ가 된다.
여기서 pΘ가 p0로 converge하는 것을 원하는 것이다.
앞의 세 개는 이동시켜도 전혀 값의 변화가 없다. 하지만 Wasserstein distance는 다가갈 수록 값이 점점 줄어들기에 효과적이다. 즉, Wasserstein distance로 gradient를 계산하여 Θ->0으로 학습하면 자연스럽게 pΘ가 p0로 converge 하게 되는 것이다.
이렇게 Wasserstein distance는 conti & diff(at 0!=0) 이므로 gradient descent를 사용할 수 있다!
이제 Wasserstein의 실체 architecture를 알아보자!
pr : real data distribution / pΘ : fake data distribution / gΘ : generator model distribution 이라고 하자.
이랬을 때, W(pr,pΘ) 을 cost ft으로 잡아 이것의 infimum을 찾는 것이었다. 하지만 이 infimum을 찾는 것은 어렵기에 highly intractable하다고 했다. 적용할 수가 없는 것이다.
따라서 Kantorovich-Rubinstein duality를 통해 Wasserstein distance를 효율적으로 변경한 후 사용하게 된다.
이 식은 기존에서는 joint distribution을 사용했다면, 분리가 되어 계산한다. 또한 infimum에서 supremum으로 바뀌었고, 여기서 특정한 함수(1-Lipschitz ft)에 대한 supremum으로 바뀌었다.
1-Lipschitz ft은 domain의 두 점의 차이보다 함수값의 차이가 더 작거나 같다를 만족하는 함수이다.(Lipschitz constraint라고 한다.) 즉, 평균 기울기가 항상 1보다 작다는 것이다.(급격하게 증가하거나 감소하지 않는다.)
하지만 이것을 network로 정확히 구현할 수 없기에 간단한 형태로 해서 어느정도만 충족시켜주는 방법을 사용한다.(cliping이라는 기법을 사용하여 설정한 상수 c에 대해 |w|값이 [-c,c]사이에 있게 해준다. ex) c보다 큰 w 값이 나오면 그 값을 버리고 c를 선택하는 것)
f를 기존 GAN의 판별자 D라고 생각해도 무방하다.
기존에는 maximize하는 것이었다면, 이제는 이 평균 차의 식을 maximize하는 1-Lipschitz ft을 찾는 문제로 바뀌었다.
이 1-Lipschitz ft을 DNN으로 구현하여 판별자의 역할을 하게 한다.
기존에는 0~1로 출력했지만, 이제는 f를 가지고 sup을 구한 것이 W(pr,pΘ)이 되는 것이므로 굳이 확률로 나타낼 필요가 없다.
따라서 output 값에 굳이 sigmoid를 취하지 않는다.
WGAN에서는 기존 GAN의 판별자 역할을 대신하는 1-Lipschitz ft f를 w라는 weight parameter를 써서 network로 구현하는 것이다. f를 fw라는 network로 구현!
따라서 real data x를 fw라는 network로 보낸 것의 평균을 계산하고, latent variable에 대해서도 generator로 보낸 fake data를 fw라는 network로 보낸 것의 평균을 구한다. 그리고 궁극적으로 이 둘을 뺀 것의 maximize시키는 weight parameter w를 찾게 된다면 이것이 결국 W(pr,pΘ)이 되는 것이다!
여기서 fw 이 critic이라고 불린다. (critic은 강화학습에서 보통 maximize시키는 ft을 말한다.)
이제 W(pr,pΘ)의 값을 계산하는 방법을 네트워크로 구현했다!
우리의 최종 목적은 이 W(pr,pΘ)가 cost ft이므로 이것을 낮추는 쪽으로 generator가 학습을 진행해야 한다. W(pr,pΘ)를 구현하는 network에서 generator가 관여하는 것은 뒤의 식 뿐이기에 뒤의 식만을 이용하여 gradient를 계산하여 학습을 진행하게 된다.
이제 WGAN의 수도코드를 확인해보자.
(n critic : 기존 GAN에서 생성자를 한 번 돌릴 때 마다, 판별자를 여러 번 돌린 것 처럼
생성자 한 번 돌릴 때 마다 WGAN critic을 얼마나 돌릴 지)
real data m개를 가져오고, latent variable m개를 가져와 fake를 만든다.
이후 m개의 real data를 fw로 보낸 값 - fake data를 fw로 보낸 값 에 대해 gradient를 계산한다. 이 gradient를 gw라고 한다면, WGAN critic에서는 이것을 maximize시키는 것이다. gradient ascent 방법을 사용한다.
그리고 본 논문에서는 optimizer을 Adam 대신 RMSProp을 사용한다.(RMSProp가 stability가 더 좋다.)
마지막으로 cliping을 통해 c를 넘는 값들을 제한해준다.
이것을 n critic만큼 반복한 후에 생성자로 넘어가게 된다.
이제 m개의 latent variable을 sampling한 후 이를 fake data m개를 만든 후 fw로 보낸다.
그 이후 gradient를 계산하여 gradient descent방법을 통해 parameter를 업데이트 한다.(optimizer는 여기서도 RMSProp)
regular GAN과 목적함수가 상당히 유사하다.
고려대학교 오승상 교수님 딥러닝 강의 : https://www.youtube.com/watch?v=j-xaXnD0tO8&list=PLvbUC2Zh5oJvByu9KL82bswYT2IKf0K1M&index=44