ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • cs236 9-10장 Generative Adversarial Networks(GAN)
    논문 리뷰/cs236 2024. 7. 29. 12:19

    Generative model 복습을 위해 CS236 강의를 듣고 정리해보고자 한다.

    피피티는 아래 페이지를 참고하면 된다.

    https://deepgenerativemodels.github.io/

     

    ※ PPT의 내용 정리와 더불어 같이 보면 좋을 자료들을 정리했습니다. 강의를 보고 이해한대로 작성했기 때문에 부정확한 내용이 포함되어 있을 수 있음을 알려드립니다. 또한 참고한 모든 블로그와 유튜브는 출처(Reference)에 있습니다.

     

    Recap

    앞서 배운 내용들을 다시 상기시켜보자.

    - Autoregressive Model

    - VAE(Variational Autoencoder)

    - Normalizing Flow Models

     

    이 세 모델은 모두 KL divergence $D_{KL}(p_{data}||p_{\theta})$의 값을 최소화(혹은 likelihood를 최대화) 하는 것이 목표인 모델이다.

     

    그런데...

    과연 likelihood가  항상 샘플의 퀄리티를 결정하는 중요한 요소라고 말할 수 있을까?

     

    Toward likelihood-free learning

    case 1) Optimal generative model will give best sample quality and highest test log-likelihood

    For imperfect models, achieving high log-likelihoods might not always imply good sample quality, and vice-versa (Theis et al., 2016)

     

    optimal한 생성형 모델은 같은 정도의 샘플 퀄리티와 높은 test log-likelihood를 보장하지만, 완벽하지 않은 모델의 경우 높은 log-likelihood가 항상 좋은 샘플의 퀄리티를 보장해주는 것은 아니다.(그 반대도 마찬가지이다)

     

    case2) Great test log-likelihoods, poor samples

    예를 들어 이와 같은 이산 모델이 있다고 가정하자.

    99%의 샘플들은 noise에서 나오며, 1%의 샘플만이 데이터에서 얻어진다.

    Expected log-likelihood의 상한과 하한은 아래와 같이 얻어질 수 있다.

    $-\log 100$은 상수이기 때문에 $x$의 차원이 커지면 likelihood는 최대값을 얻을 수 있다. 하지만 그래도 샘플의 퀄리티는 여전히 나쁘다.

    x의 차원이 높아질수록 더 높은 likelihood를 얻는다.

     

    case 3) Great samples, poor test log-likelihoods

    만약 training set을 외워버린다면 샘플의 퀄리티는 매우 좋을 것이지만, test set에 대해서는 확률이 0이 부여되어 매우 낮은 log-likelihood를 얻게 될 것이다.

     

    즉 위 세 개의 예제에서 말하는 것처럼, likelihood가 높다고 항상 샘플의 퀄리티가 좋다는 것을 보장하지 않는다.

     

    Comparing distribution via samples

    두 개의 샘플은 각각 $S_1 = {x ~ P}$, $S_2 = {x ~ Q}$에서 뽑은 샘플 셋이라고 하자. 

    우리는 이 두 샘플이 같다는 것을 어떻게 알 수 있을까?

     

    가장 간단한 방법은 통계학에서 배웠다시피 각 샘플들의 평균과 분산을 비교해 보는 것이다. 또한 통계량(평균, 분산 등)이 검정을 통해 유의수준 내에서 가설이 기각되는지, 기각되지 않는지를 살펴보아 샘플이 같은지 다른지를 판단할 것이다.

     

    하지만 복잡한 분포의 경우 평균과 분산만으로 데이터의 중요한 특징을 나타내기엔 한계가 있다.

     

    여기서 우리는 "통계량" 자체를 학습해 두 샘플$S_1$, $S_2$가 같은지 다른지를 판별할 것이다!

    (Learn a statistic to automatically identify in what way the two sets of samples $S_1$ and $S_2$ differ from each other)

     

    How? Train a classifier!

    그리고 우리는 이 classifier를 앞으로 판별자(discriminator)라고 부를 것이다.

     

    Discriminator

    $D_{\phi}$는 데이터 셋에서 뽑은 real sample (y = 1) 을 모델이 만들어낸 fake sample(y = 0)과 구분하고자 하는 binary classifier이다. 

     

    여기서 사용하는 statistic은 classifier의 -loss로 loss가 작을수록 판별자가 real sample과 fake sample을 잘 구분하는 것이며, loss가 클수록 구분하기 어려워 하는 것이다.

     

    Training objective for discriminator

    위에서 가장 optimal한 판별자는 아래와 같다.

     만약 $p_{data} = p_{\theta}$가 되면, 즉 $p_{\theta}$가 data distribution을 완전히 학습했다면 판별자 D는 항상 1/2의 확률로 true sample과 fake sample을 고르게 될 것이다.(쉽게 말해 뭐가 진짜고 뭐가 가짜인지 몰라 찍는다는 말이다.)

     

    Generative Adversarial Networks

    GAN은 판별자와 생성자가 서로를 속이기 위해 하는 일종의 minimax game이다. 

     

    Training objective for generator

    그리고 이 식은 결국 아래와 같이 쓸 수 있다.

     

    위 식에 optimal한 판별자를 대입하면 우리는 아래와 같은 식을 얻는다.

    여기서 $D_{JSD}$는 Jensen-Shannon Divergence로 symmetric KL divergence의 일종이며 $p_{data} = p_G$일 때 최소값으로 0을 갖는다. 

     

    즉, optimal한 판별자 D에 대해 optimal한 생성자 G를 고르면 $p_{data} = p_G$이며 $V(G, D) \ geq -\log{4}$이다.

     

    GAN의 장점

    1. Loss only requires samples from $p_{\theta}$. No likelihood needed!
    2. Lots of flexibility for the neural network architecture, any $G_{\theta} defines a valid sampling procedure
    3. Fast sampling (single forward pass)

     

    GAN의 단점

    very difficult to train in practice

     

    GAN을 학습하는 알고리즘

    1. m개의 데이터 $x^{(i)}$, n개의 noise $z^{(i)}$를 뽑는다.

    2. 판별자는 stochastic gradient ascent를 이용해 업데이트한다.

    3. 생성자는 stochastic gradient descent를 이용해 업데이트한다.

     

    GAN 학습 결과

    이 두 이미지 모두 GAN의 생성자를 통해 얻었다.

     

    GAN 논문(Proposition 2에서 제시)에서는 아래와 같이 생성자와 판별자가 잘 학습될 것이라는 정리를 제안하고 있으나, 실제로는 loss가 크게 흔들리면서 GAN이 학습되는 것을 볼 수 있다.

    논문에서 제시
    실제로 GAN이 학습될 때의 loss

    Mode collapse 

    Mode collapse GAN에서 생성된 데이터의 다양성이 부족한 현상으로 생성자 G가 만든 한 샘플이 판별자 D를 잘 속이게 된다면 생성자 G는 계속 같은 샘플을 만드는 방향으로 학습할 가능성이 있다. Mode collapse는 GAN에서 흔히 볼 수 있는 현상으로 regularization term을 더해주거나 추가적인 GAN loss등을 고려하는 방법 등으로 해결해야 한다.

     

    GAN은 나온지 아주 오래된 모델이라서 GAN을 베이스로 한 모델들이 많이 나왔다. GAN 모델들을 모아놓은 아래 깃허브 링크에 가면 다양한 종류의 GAN 모델을 살펴볼 수 있다.

    GitHub - hindupuravinash/the-gan-zoo: A list of all named GANs!

     

    우리는 이번 수업에서 많은 모델들 중 아래 나열된 모델에 대해서만 공부해보고자 한다.

    (안타깝게도 수업은 BiGAN만 빠르게 훝고 끝났다)

    - f-GAN

    - WGAN(Wasserstein GAN)

    - BiGAN

    - CycleGAN

     

    f-GAN

    f divergence는 함수 f를 어떤 것을 고르는지에 따라 그 식이 바뀐다. 우리가 알고 있는 KL Divergence는 $f(u) = u\log{u}$일 때의 특수한 형태다.

    f divergence의 값을 샘플링을 통해서 알기 위해서는 Expectation 안 값을 알아야 하는데, 그 비율을 알 수는 없다.(그 비율이 알려졌다면 우리가 이미 데이터의 분포를 안다는 말이랑 동치다@@)

     

    식을 변형하기에 앞서 우선 Fenchel conjugate과 Lemma를 보고 가자.

    Fenchel conjugate
    lemma

    Fenchel conjugate과 Lemma를 이용하면 우리는 f divergence식을 다음과 같이 변형할 수 있다.

    $x$와 x를 구분해서 썼는데,, 헷갈리면 lecture note를 참고!

    즉, 우리는 f-GAN에서의 variational lower bound를 얻었다. 여기서 $p = p_{data}$, $q = p_G$라고 하고, 판별자 T는 $\phi$로 생성자 G는 $\theta$로 parametrize된다고 하자. 

    그러면 우리는 f-GAN의 objective를 아래와 같이 쓸 수 있다.

    Wasserstein GAN

    WGAN 논문WGAN-GP 논문 리뷰를 따로 해놓았으니 참고하세요!

    다음과 같은 예제를 생각해보자. $q_{\theta}(x)$와 $p(x)$의 거리를 생각해보자. 

    우리는 두 확률분포가 $\theta$만큼만 밀어서 옮기면 된다고 생각한다. 그러므로 이 두 분포 사이의 거리는 $\theta$일 것이라고 흔히들 생각한다.

    그러나, KL divergence 값이나 JS 값은 아래와 같이 discontinuous한 함수의 꼴로 나온다.

     따라서 우리는 좀 더 smoother한 distance $D(p, q)$를 갖기를 원하며, WGAN에서는 Wasserstein distance를 smoother한 distance function으로 고른다.(이 distance 함수는 Earth-Mover distance, EM distance라고도 부른다.)

    Wasserstein distance

    Wasserstein distance는 Kantorovich-Rubinstein duality theorem으로 아래와 같이 표현 가능하다.

    위에서 얻은 식을 이용해 우리의 objective function을 아애와 같이 쓸 수 있다.

    이 논문에서는 Lipschitz constraint를 만족하기 위해 함수 weight clipping을 사용하는데(Weight clipping은 Discriminator의 weight를 일정 범위([-c, c])내로 강제로 고정한다.) 이 방법을 극복하기 위해 gradient policy 방법을 사용한 WGAN-GP 모델이 등장하였으며, WGAN보다 좋은 퍼포먼스를 보인다고 알려져있다.

    위 그림에서 WGAN은 smooth한 gradient를 주기 때문에 GAN과 달리 지속적으로 gradient의 값을 얻을 수 있어 학습이 더 안정적이며, mode collapse가 덜하다고 알려져있다.

     

    BiGAN

    BiGAN 논문 리뷰를 따로 해놓았으니 참고하세요!

    GAN은 Normalizing Flow와 달리 latent representation을 알 수가 없다. 우리의 생성자는 역변환이 존재하지 않기 때문이다! 따라서 BiGAN에서는 인코터 E를 추가해 데이터 공간에서 latent 공간으로 가는 인코더 맵을 학습하다. 

     판별자 $D$는 $(G(z), z)$와 $(x, E(x)$쌍을 받아 판별하게 되며, 사실 생성자 $G$와 인코터 $E$는 역함수 관계임을 논문에서 증명한다.(엄밀한 수학적 증명을 포함하고 있다.) 고로 학습이 끝난 다음에는 생성자 $G$는 새로운 샘플을 생성할 수 있도록 학습되고, 인코더 $E$는 latent representation을 나타낼 수 있도록 학습된다.

     

    CycleGAN

    CycleGAN 리뷰를 따로 해놓았으니 참고하세요!

    우리에게 같은 대상을 그린 서로 다른 화풍의 사진 두 장이 쌍으로 있다고 하자. 이렇게 쌍으로 주어진 이미지에 대해 한 사진을 다른 사진으로 화풍을 바꾸는 작업은 과거부터 많은 연구가 이뤄지고 있다. 하지만 이렇게 짝을 이루는 데이터를 만드는 것은 상당히 비싸고 어려운 일이다. 따라서 CycleGAN에서는 쌍을 이루지 않는 사진들에 대해서도 학습할 수 있는 모델을 만들었다.(일종의 unsupervised learning)

     

    이 논문의 메인 아이디어는 "cycle consistent"이다. 두 개의 생성자 $G$와 $F$를 상정하고,  아래와 같이 매핑을 정의한다. 이 논문은 두 개의 생성자가 역함수 관계에 있도록 학습하면서, $G$를 통해 만든 $\hat{y}$이 $Y$의 원소들과 구분할 수 없고, $F$를 통해 만든 $\hat{x}$가 $X$의 원소들과 구분할 수 없도록한다.(GAN의 구조 차용)

    이 모델의 loss function은 아래와 같다.

    결과는 아래와 같다.(결과가 상당히 좋다..!)

    * AlignFlow는 생략하겠다.(인용수가 높지 않아서..ㅎㅎ)

     

    StarGAN 논문 대신 StyleGAN에 대해 정리해보았다. StyleGAN 논문은 이후 StyleGAN2, StyleGAN2-ADA, StyleGAN3 등의 후속 논문이 나왔으며, 이 모델은 상당히 뛰어난 성능을 보이고 있다.

     

     

     

    댓글

Designed by Tistory.