논문 리뷰/Generative model

[InfoGAN] Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets

dororo_27 2024. 4. 8. 20:35

 

[ 목차 ]

    오늘은 2016년에 NeurIPS에 발표된 InfoGAN이라는 논문을 리뷰해 보겠습니다.

    1. InfoGAN이란?

    InfoGAN이란 기존의 GAN 모델에서 정보이론(information-theoretic)의 개념을 추가하여 Disentangled representation을 학습할 수 있도록 하는 모델입니다.

     

    Disentangled representation이란? 

    데이터의 특징(feature)이나 변수가 서로 분리되어 표현된다는 것을 의미합니다.

    사람의 얼굴 이미지를 다룬다고 할때 사람의 표정, 눈 색상, 헤어스타일, 선글라스 유무, 숫자 이미지를 다룬다고 할때 숫자의 크기, 두께(thickness), 각도(angle) 등의 특징이 분리되어 표현된다면 disentangled representation이라고 합니다.

    분리된 feature를 통해 사람의 얼굴 이미지를 생성


    기존의 GAN 모델에서는 Input data와 유사한 데이터를 만드는 것에 목적을 두었다면, InfoGAN은 유사한 데이터를 만들면서 데이터의 특징을 잘 학습하는데 중점을 둡니다. 

    잘 학습되게 된다면, 숫자 데이터에서 두께, 각도 등을 다르게 생성할 수 있게 된다는 큰 장점이 있습니다.


    위 그림을 보면 (a),(c),(d)의 경우 InfoGAN의 결과이고, (b)는 Original GAN의 결과입니다. 변수에 약간의 값을 변경해서 넣어주게 되면 회전하는 것과 넓이가 커지는 것을 볼 수 있습니다. (위 그림에선 c2는 회전의 특징을 학습한 변수이며 c3는 넓이의 특징을 학습한 변수라고 생각할 수 있습니다.)

     

    2. Abstract

    1. ‘learn disentangled representations’
      위에서 말했듯이 정보이론의 개념을 도입해 데이터의 특징을 잘 학습할 수 있도록 학습하는 것입니다.

    2. maximizes the mutual information
      mutual information term을 maximize하는 것을 목표로 합니다. (Mutual information은 상호정보라 불리고 아래에서 자세하게 설명하겠습니다.)

    3. lower bound of the mutual information
      직접적인 mutual information term을 구할 수 없으므로 lower bound를 구해서 그 lower bound를 maximize하는 것을 목표로 합니다.

    4. learns interpretable representations
      실험결과에서 InfoGAN은 해석가능한 representation을 학습했다고 말하고 있습니다.

    3. Background: Generative Adversarial Networks

    GAN(Generative Adversarial Networks) 모델의 목적은 생성된 데이터 분포 $P_{G}(x)$ 가 실제 데이터 분포인 $P_{data}(x)$와 유사하게 학습하도록 하는 모델입니다. 


    그러기 위해서는 생성자(Generator)와 판별기(Discriminator)를 학습하게 되는데 생성자의 경우 noise를 입력으로 받아 생성자(G)를 통해 이미지를 생성하고, 판별기(D)는 입력으로 받은 데이터가 실제 데이터인지, G가 생성해낸 이미지인지 판별하게 됩니다.


    생성자(G)의 입장에서는 실제 데이터와 아주 유사하게 만들어야 하고, 판별기(D)는 실제 데이터인지, 생성자(G)가 만든 데이터인지 구분을 잘 할 수 있도록 설계되어 있다고 생각하시면 됩니다! 이 내용을 식으로 쓰게되면 아래와 같이 표현할 수 있습니다.

    GAN의 목적함수

    이제 G와 D입장에서 minimization, maximizatinon하는 과정을 보겠습니다.


    Discriminator :
    D의 입장에서는 실제 데이터를 1로 출력하고 생성된 데이터는 0이라고 출력하길 원합니다!

    위 그림처럼 되면 maximization이 되겠지요!


    Generator : G의 입장에서는 판별기(D)가 1로 출력해주길 원합니다!

    첫 번째 항에는 G가 없으니 두 번째 항만 신경쓰면 됩니다! minimization해야하니 log0 에 수렴해야 가장 작은 값을 얻을 수 있겠죠!

     

    4. Mutual Information for Inducing Latent Codes

    GAN에서 noise vector(z)를 입력으로 받고 G가 데이터를 생성했었습니다. 하지만 이때 z에게 아무런 제약을 주지 않았습니다. 그렇기 때문에 Generator는 매우 꼬여있다(entangled way)고 볼 수 있습니다. 여기서 꼬여있다는 것은 z의 차원들이 data에서 의미를 가지는 feature와 대응되지 않는다고 볼 수 있습니다!

    아래 사진처럼 얼굴 이미지를 생성할 때처럼 z의 차원들이 의미(특징)를 가지고 있지 않다는 것으로 보면 될 것 같습니다!

     

    분리된 feature를 통해 사람의 얼굴 이미지를 생성

    MNIST data의 경우만 봐도 0~9 숫자를 나타내는 digit type, 회전을 나타내는 Rotation, 너비를 나타내는 Width, 두께를 나타내는 thickness 등의 특징을 가지고 있음을 알 수 있습니다.

    이런 특징에 대한 정보를 가지고서 이미지를 생성하면 원하는 데이터를 생성할 수 있지 않을까? 라는 생각에서 GAN의 확장모델인 InfoGAN이 만들어진 것입니다!

    InfoGAN에서는 noise vector(z)를 두개의 파트로 나누어서 사용합니다.

    1. 압축할 수 없는 noise z
      이 z는 생성된 데이터에 무작위성이나 변동성을 주입하기 위해 사용된다고 합니다.  데이터의 구조를 설명하진 않지만, 생성된 샘플의 다양성을 증가시키는 역할을 합니다.

    2. 데이터분포에서 특징을 가지는 latent code “c”
      얼굴이미지를 생성한다고 할 때 표정, 눈 색상 등 의미를 가지는 feature를 c라고 생각하시면 됩니다.
      또한 latent code c는 factored distribution을 가정합니다.
      factored distribution은 변수들과 독립성을 가정하고 확률분포로 표현합니다.  $P(c_1,c_2,...,c_L)=\Pi_{i=1}^LP(c_i)$

    저희는 이제 noise vector를 두 파트로 나누었으니 Generator에서는 z와 c를 입력으로 받아 생성해야겠죠! G(z) → G(z,c)가 됩니다!

    🤔 However, in standard GAN, the generator is free to ignore the additional latent code c by finding a solution satisfying $P_G(x|c)=P_G(x)$

    기존의 GAN의 모델에서는 아무런 제약을 주지 않아 $P_G(x|c)=P_G(x)$를 만족하는 solution을 찾기 때문에 c가 무시되게 됩니다.

    이렇게 되는 것을 피하기 위해 우리는 추가로 제약을 걸어줘야 합니다! 그래서 저자는 information -theoretic regularization을 제안하였고, latent code c와 G(z,c)간의 상호정보량이(mutual information) 높아야 한다고 말하고 있습니다. 따라서 $I(c;G(z,c))$이 값이 높기를 원한다는 겁니다.(제가 초반에 정보이론개념을 추가할거라고 말한 부분입니다!)

    정보이론에서 X와 Y 사이의 상호정보량(mutual information)은 $I(X;Y)$로 표현되고 Y 변수를 통해 X에 대해 얻어진 “정보량”이라고 하고 식은 아래와 같이 쓰일 수 있습니다.

     

     

    $I(X;Y)=\Sigma_{x\in X,y\in Y}P_{X,Y}(x,y)log(\frac{P_{X,Y}(x,y)}{P_{X}(x)P_{Y}(y)})$

              $\ \ \ \ =\Sigma_{x\in X,y\in Y}P_{X,Y}(x,y)log(\frac{P_{X,Y}(x,y)}{P_{X}(x)}) - \Sigma_{x\in X,y\in Y}P_{X,Y}(x,y)(logP_Y(y))$

              $\ \ \ \ = \Sigma_{x\in X,y\in Y}P_X(x)P_{Y|X=x}(y)log(P_{Y|X=x(y)}) - \Sigma_{x\in X,y\in Y}P_{X,Y}(x,y)(logP_Y(y))$

              $\ \ \ \ = \Sigma_{x\in X}P_X(x)(\Sigma_{y\in Y}P_{Y|X=x}(y)logP_{Y|X=x}(y))-\Sigma_{y\in Y}(\Sigma_{x\in X}P_{X,Y}(x,y))logP_Y(y)$

              $\ \ \ \ =  -H(Y|X)+H(Y)  $

              $\ \ \ \ =  H(Y)-H(Y|X)   = H(X)-H(X|Y)  $

    entropy term : $H(X)=-\Sigma_{x\in X}P_X(x)logP_X(x)$

     

    또한 Y가 관측되었을 때 X에서 불확실성의 감소량이라고도 해석할 수 있습니다!

    불확실성 감소량이 직관적으로 와닿지 않을수도 있으니 예를 들어보겠습니다.

    Y(동물의 특징) : 크기, 발 개수, 이빨의 형태, 육식
    X(동물) : 고양이, 얼룩말, 코끼리


    동물의 특징이 주어졌을 때 동물을 예측하는것과 특징이 주어지지 않았을 때 동물을 예측하는 것 중 어느것이 더 ‘’ 예측할 수 있을까요? → 당연히 정보가 주어졌을 때 예측하기 쉽겠죠!(불확실성이 더 감소!) 이렇게 정보가 주어졌을 때 얼마나 더 잘 예측할 수 있는가를 불확실성의 감소량이라고 볼 수 있습니다!

    만약 X와 Y가 독립이면

    $I(X;Y)=\Sigma_{x\in X,y\in Y}P_{X,Y}(x,y)log(\frac{P_{X,Y}(x,y)}{P_{X}(x)P_{Y}(y)})$ 이 부분에서 $P_{X,Y}(x,y)=P_X(x)P_Y(y)$로 쓸 수 있기 때문에 $I(X;Y)=\Sigma_{x\in X,y\in Y}P_{X,Y}(x,y)log(1)$ =0이 되는 것을 알 수 있습니다!

    직관적으로 해석해보면 동전을 던져서 나오는 결과를 생각해본다고 해보겠습니다.

    첫 번째 동전을 던져서 앞면이 나왔다고 두 번째 동전이 앞면이 나올 확률이 바뀔까요? 아닙니다. 그대로 $\frac{1}{2}$인 것을 알 수 있죠. 즉, 두 번째 결과는 첫 번째 결과를 통해 얻어진 정보가 없다고 볼 수 있죠! 그렇기에 상호정보량은 0이라고 할 수 있습니다.

     

    다시 돌아와서, 저희는 $P_G(x)$에서 뽑힌 x가 주어졌을 때, $P_G(c|x)$가 small entropy를 갖기를 원합니다!(small entropy는 정보의 불확실성이 적다는 것을 의미한다고 생각하시면 됩니다.)

    그래서 기존 GAN의 목적함수에서 information-regularized term인 $I(c;G(z,c))$을 추가하여 이 값이 최대가 되도록 합니다! 식을 쓰면 아래와 같습니다.

     

    GAN에서는 G를 minimization하도록 만들었으니 $I(c;G(z,c))$을 maximization하는 것 대신 -$I(c;G(z,c))$를 minimization하도록 term을 추가한 것입니다! ($\lambda$는 hyperparameter 입니다.)

    5. Variational Mutual Information Maximization

    이제 우리는 $I(c;G(z,c))$ term을 maximization[ -$I(c;G(z,c))$를 minimization하는 것과 같아서 maximization관점으로 보겠습니다.]해야합니다. 하지만, 우리는 이 식을 통해서 직접적으로 maximization할 수 없습니다. 왜그럴까요? 우선 $I(c;G(z,c))$ 식을 전개해 보겠습니다.

     

    식이 되게 복잡해 보입니다… 차근차근 하나씩 살펴보죠!! 형광색으로 칠한 부분 먼저 보겠습니다.

    $I(X;Y)$에서 {X ← c, Y ← G(z,c)}대입하시면 $I(c;G(z,c))$ 이렇게 위 식처럼 나오게 됩니다.

    참고) $H(X)-H(X|Y)=\Sigma_{y\in Y}(\Sigma_{x\in X}P_{X|Y=y}(x)logP_{X|Y=y}(x))-\Sigma_{x\in X}(\Sigma_{y\in Y}P_{X,Y}(x,y))logP_X(x)$


    그 다음 칠해져 있는 부분이 왜 저렇게 분리가 되는지 보겠습니다!

    위와 같은 식($I(c;G(z,c))$)을 maximization하기 위해서는 $P(c|x)$의 분포에서 뽑은 샘플 $c'$이 필요합니다. 즉, 우리는 데이터가 주어졌을 때 그 데이터의 특징(헤어스타일, 표정 등)을 알고싶은 것입니다!
    하지만 우리는 알지 못하기 때문에 auxiliary distribution(보조분포) Q를 사용하여 근사하려 합니다. 보조분포는 보통 우리가 흔히 알고있는 Gaussian distribution으로 설정합니다! 그렇게 $Q(c|x)$를 설정하게되면, $P(c|x)$의 분포와 $Q(c|x)$의 분포간 차이가 있겠죠?? 그래서 분포들 간 거리를 측정하는 지표로 KL divergence라는 함수로 거리를 측정합니다.

    $$ D_{KL}(P(|x)||Q(|x))=\Sigma_{c'}p(c'|x)log\left(\frac{P(c'|x)}{Q(c'|x)}\right)=\mathbb{E}\left[log\left(\frac{P(c'|x)}{Q(c'|x)}\right) \right] $$

     

    위 식을 통해 KL divergence는 다음과 같이 나눌 수 있습니다.

    $D_{KL}(P(|x)||Q(|x))=\mathbb{E}_{c'\sim P(c|x)}[logP(c'|x)]-\mathbb{E}_{c'\sim P(c| x)}[logQ(c'|x)]$ 항을 넘기게 되면

    $\mathbb{E}_{c'\sim P(c|x)}[logP(c'|x)]=D_{KL}(P(|x)||Q(|x))+ \mathbb{E}_{c'\sim P(c| x)}[logQ(c'|x)]$식으로 바꿀 수 있습니다!

     

    $D_{KL}(P(|x)||Q(|x))$식 아래에 보면 $\geq$0 으로 표현되어 있습니다. 왜 이 식은 항상 0보다 클까요? 분포들간의 ‘거리’를 측정하는 것이기 때문에 항상 0보다 크다고 보면 됩니다! 직관적으로 해석도 되지만, 수식적으로 증명도 해보겠습니다!

    $$ D_{KL}(P(|x)||Q(|x))=\mathbb{E}\left[log\left(\frac{P(c'|x)}{Q(c'|x)}\right) \right]=\mathbb{E}\left[-log\left(\frac{Q(c'|x)}{P(c'|x)}\right) \right] $$

    위의 식을 그대로 갖고와서 log에음수를 취해서 분모 분자를 바꿨습니다. 편의를 위해 $\frac{Q(c'|x)}{P(c'|x)}=Z$라고 설정하겠습니다.

    $\mathbb{E}\left[-log(Z)\right]$로 표현이 됩니다. 그런데 이 식을 자세히 보면 $-log(x)$와 $\mathbb{E}$의 형태로 이루어진 것을 볼 수 있습니다. $-log(x)$는 convex function이기 때문에 Jensen’s inequality를 적용할 수 있죠!


    $D_{KL}(P(|x)||Q(|x))=\mathbb{E}\left[-log(Z)\right]\geq-log\mathbb{E}\left[Z\right]=-log\Sigma_{c'}P(c'|x)\frac{Q(c'|x)}{P(c'|x)}=-log(1)=0$

    따라서 $D_{KL}(P(|x)||Q(|x))\geq 0$을 만족하는 것입니다!


    마지막으로 $D_{KL}(P(|x)||Q(|x))$ 식은 항상 0보다 크기때문에 이 식을 삭제하면 저 부등호가 성립한다는 것도 알 수 있습니다! 결국 하고싶은건 $I(c;G(z,c))$을 maximization을 하고싶은데, $P(c|x)$를 알지 못하니까 보조분포인 $Q(c|x)$를 이용해서 lower bound를 만들고 저 lower bound를 maximization 하고자 하는 것 입니다! 이것을 variational mutual information maximization라 합니다.

    하지만 여기서 또 한가지 문제점이 있죠. 저희는 $P(c|x)$를 모르기 때문에 $Q(c|x)$를 사용한다고 했는데, 마지막에 구한식을 보면 $c'$을 $P(c|x)$분포에서 뽑고있습니다.

     

    저자는 이 Lemma를 사용하여 값 교묘하게 변경하였습니다!

    🔑 Lemma 5.1 For random variables X,Y and function $f(x,y)$under suitable regularity conditions: $\mathbb{E}{x\sim X,y\sim Y|x}\left[f(x,y)\right]=\mathbb{E}{x\sim X,y\sim Y|x,x'\sim X|y}\left[f(x',y)\right]$.

    약간의 트릭을 사용하여 이렇게 변환이 가능하다고 하네요! 이 자료는 고려대학교 임성빈 교수님께서 2가지 방식으로 증명해주신 자료입니다.

    첫 번째 증명

     

    2번째 줄에서 3번째줄에서 x→ x’ 으로 rename했는데, 확률변수를 바꾼게 아니라 적분할 때 변수 표기를 바꾼거에 불과하다고 합니다. 그래서 성립하는 것을 볼 수 있죠.


    2번째 증명에서는 Law of total expectation(이중 기대값) 정리를 사용하여 증명하셨습니다.

    Law of total expectation 증명을 먼저 보시고 아래의 사진을 참고하시면 됩니다!

    🔑 $\mathbb{E}\left[\mathbb{E}\left[X|Y\right]\right]=\mathbb{E}\left[X\right]$

    참고) $\mathbb{E}[Y|X]$는 X에 대한 함수입니다!

     

     

    위 식이 만족하기 때문에 이렇게 되는 것을 볼 수 있습니다.

     

    $I(c;G(z,c))$을 maximization하는 것 대신에 lower bound인 $L_1(G,Q)$을 maximization하자!!

    따라서 infoGAN의 최종 목적식은 다음과 같습니다. ($\lambda$는 hyperparameter입니다.)


    6. Experiments

    실험을 통해 저자는 2가지를 달성하고자 합니다.

    첫 번째 : 실제로 mutual information이 maximization이 되는지

    두 번째 : InfoGAN이 구분되고 해석 가능한 representation을 학습하는지(사람의 표정, 헤어스타일 등의 특징을 잘 학습했는지)

     

    6-1. Mutual Information Maximization

    latent codes c와 G(z,c)간의 mutual information을 평가하기 위해서 MNIST 데이터셋을 사용했습니다. $c \sim Cat(K=10,p=0.1)$의 분포로 설정하고나서 Lower bound를 각 iteration(반복)마다 $H(c)$값을 기록했습니다. $H(10) \approx 2.30$으로 빠르게 maximization되는 것을 확인할 수 있습니다.

    Cat(카테고리 분포)의 pmf를 나타내면 다음과 같습니다.

     

    Lower bound L1 over training iteration

     

    6-2. Disentabgled Representation

    MNIST 데이터셋에서 Disentabgled Representation을 잘 학습했는지 확인하기 위해 latent code $c_1,c_2,c_3$를 추가했는데 $c_1 \sim Cat(K=10,p=0.1)$이며 $c_2,c_3$변수는 연속형 변수로 $Unif(-1,1)$을 사용하였습니다.

    $c_1$ 변수의 경우 label에 대한 정보도 없이 0~9까지의 숫자를 잘 생성해낼 수 있는 것을 볼 수 있었습니다.

    $c_2,c_3$ 변수의 경우 $c_2$는 숫자의 rotation(회전)에 대한 변수이고 $c_3$는 숫자의 Width(너비)에 대한 변수인것을 확인할 수 있습니다. 논문에서는 $Unif(-2,2)$를 사용해서 결과를 보여주고 있습니다.(더 극명한 결과를 보여주기 위함입니다.) latent code가 이런 특징들을 잘 포착한 걸로 보아 Disentabgled Representation을 잘 학습했다고 볼 수 있습니다.

    즉, InfoGAN을 통해서 Mutual Information Maximization, Disentabgled Representation을 모두 달성했다고 볼 수 있습니다!

     

    7. Conclusion

    이 논문은 “Information Maximizing Generative Adversarial Networks”(InfoGAN) 이라고 불리는representation 학습 알고리즘을 소개했습니다. supervision을 요구로 하는 이전의 접근방법들과 다르게, InfoGAN은 비지도학습으로 해석과 분리가능한 representation을 학습하였다는 것입니다. 또한 GAN과 연산시간이 거의 비슷하다고 합니다!

     

     

    8. 참고문헌

    [1] InfoGAN : https://arxiv.org/abs/1606.03657

    [2] 유재준님 블로그 : https://jaejunyoo.blogspot.com/2017/03/infogan-1.html

    [3] 하우론브레인님 블로그 : https://haawron.tistory.com/10

    [4] Mutual information : https://en.wikipedia.org/wiki/Mutual_information

    [5] EECS498 Generative Models Part 2 : https://www.youtube.com/watch?v=igP03FXZqgo&list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r&index=21

     

    다음에는 InfoGAN을 코드로 구현해보도록 하겠습니다.