Deep Learning study

InfoGAN : Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets 본문

AI/papers

InfoGAN : Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets

HwaniL.choi 2019. 5. 18. 13:28
반응형

오늘은 infoGAN에 대해서 정리해보도록 하자.

 

InfoGAN은 기존의 GAN에 정보(information) 이론을 가지고 확장시킨다.

기존의 GAN모델이 entangled(얽혀있는) representation들을 학습해왔는데, InfoGAN에서는 disentangled(엉킨것이 풀어진) representation들을 학습하는 방법을 제시한다. 이게 무슨 말 이냐면 , 일반적인 GAN은 input에서 noise에 대한 아무런 제약이 없으므로 noise에 대한 정보를 알 수 없다. 즉, noise input 에서 어느부분이 어떤 representation을 조절하는지를 알기 힘들다. 하지만 이것을 disentangle하게 , 다시말하면 해석가능하게(어느부분이 의미를 가지도록) 만들어 핵심적인 representation을 학습 할 수 있게 해준다는 것 이다.

 

Mutual Information for Inducing Latent Codes

 

일반적인 GAN은 simple factored continuous input noise vector를 사용한다. Generator가 이 noise를 사용하는 방법에는 어떠한 제약도 가해지지 않는다. 따라서 generator가 어떻게 noise를 이용하는지 알기가 매우 힘들다. 즉, noise vector의 각 dimension들이 데이터의 어떤 의미있는 특징과 대응되는것이 아니라 매우 얽혀있는 방식(highly entangled way)으로 사용된다는 것이다.

 

MNIST의 데이터만 보더라도 0-9 같은 digit의 특징, 숫자의 기울기(또는 회전) 그리고 숫자의 굵기등의 특징을 가진다. 이 특징들을 어떻게 하면 의미있게 얽혀있지않은 방법으로 표현 할 수 있을까.

 

그래서 이 논문에서는 하나의 체계없는(unstructured) noise vector를 사용하는것이 아니라, input noise vector를 2개의 파트로 분리한다.

 

(1) z : 더이상 압축할 수없는 noise.

(2) c : latent code라고 부르며 data distribution의 semantic feature를 표현.

 

latent variable들은 c1,c2,....,cL로 쓰며, 가장간단하게 factored distribution을 가정한다. 그리고 모든 latent code ci의 concatenation한 것을 c라고 쓰기로 하자.

 

대충 어떤 아이디어인지 알았으니, 이제 이런 latent factor들을 비지도적인 방법(unsupervised way)을통해 찾아내는 방법에대해서 알아보자.

 

일반적인 GAN은 noize z 를 Generator에 대입하는 방식으로 G(z)의 형태가 되지만, 여기서는 incompressible noise z 와 latent code c를 가져오기 때문에 G(z,c)의 형태가 된다. 그렇지만 c를 추가했다고해서 의미하는 것이 명확해지는것은 아니다. 왜나하면 기존의 GAN은 어떠한 제약도 주어지지 않기 때문에 단순히 P(x|c) = P(x)가 되어버리기 때문이다. 즉 c를 무시해버리기 때문에 있으나 마나 한 것이다.

 

이런 문제를 해결하기 위해서 information theoretic regularization을 소개한다. Latent code c와 generator distrubution G(z,c)간의 mutual information이 높아야 한다는 것을 말한다.

 

정보이론에서 X 와 Y의 mutual information( I(X;Y) ) 는 Y에 의해서 얻어지는 X의 정보의 양이다. 또한 이것은 두 entropy term의 차 로써 표현 할 수있다.

직관적인 해석으로 , I(X;Y)는 Y가 관찰되었을때 X에대한 불확실성의 감소를 나타낸다. 만약 X 와 Y가 독립이라면 (관계가 없다면)  I(X;Y) = 0이 되는 것이다. 왜냐하면 두 변수가 독립이기때문에, 한 변수를 아는것이 다른 변수의 어떠한것도 드러내지 않기때문이다. 반대로라면 당연히 0 아닌 값이 얻어지게 되겠다.

 

이제 우리가 해야하는것은 x ~ P(x)에 대해서 P(c|x)가 적은 entropy를 갖게 하는 것이다. 다시말해서 , latent code c의 정보가 generation 과정에서 사라지지 않아야한다는 것이다. ( c가 표현하고자 하는것이 결과에 나타나야 한다는 말 정도로 이해할 수 있을것같다.)

그렇게해서 기존의 GAN의 minimax게임에서 regulariation term( I(c;G(z,c) )을 추가한 위의 information regularized minimax game을 풀게된다.

 

Variational Mutual Information Maximization

 

하지만 posterior P(c|x)를 구하는것은 힘들기때문에 , I(c; G(z,c))를 직접 maximize시키는것은 매우 어렵다. 대신에 P(c|x)를 근사하는 auxiliary distribution Q 의 lower bound 를 사용하게 된다.

 

그렇다면 위의 식에서 두 번째 줄에 있는 P(c'|x)대신에 Q(c'|x)를 사용하게 된다. 하지만 어디까진나 Q는 P의 근사치이기 때문에 두 distribution사이에는 차이가 생길 수 있다. 그 차이를 수치적으로 나타내주는것이 Kullback leibler divergence 이다. 그럼 여기서 Q → P라면 KLD가 0이 되는것은 당연하기때문에 마지막 줄의 부등식으로 넘어갈 수 있다.

 

하지만 여전히 마지막 부등식에 안쪽의 기댓값에 P(c|x)가 살아있기 때문에 없애줄 필요가있다.

논문에서 소개한 위의 Lemma를 통해서 P(c|x) term을 제거할 수 있다. 그러면 다음과 같은 Lower bound가 얻어지게 된다.

위의 식에서 최종적인 Lower bound는 P(c|x)가 없는 첫 번재 줄의 식이 된다.

논문에서는 Lemma를 통해 복잡한 증명을 해주었지만 이 과정은 law of total expectation으로 간단히 보일 수 있다고 한다. ( - 유재준님의 블로그)

 

여튼 이제는 P(c|x) 항이 없어졌기 때문에, L(G,Q)가 Monte Carlo simulation을 통해서 근사하는것이 쉬워졌다.

이제 우리는 L(G,Q) = H(c)일때 variational lower bound 가 최대임을 알고, 경계에 타이트하게 도달할수 있으며 (즉, infimum (= greatest lower bound)에 가깝게 값을 찾을 수 있다.) maximal mutual information에 도달한다.

 

그러므로 다시 변형된 minimax game 을 정의 할 수있다.

 

Implementation

 

 

위에서 뭐 많은 수식을 거쳐온 것 같은데, 정작 auxiliary distribution Q를 찾는것은 neural network의 몫이다. 어찌됐든 Q와 D 는 모든 layer를 공유하며 Q를 구하는데에는 단지 마지막 FC layer를 통해서 구한다. 그러므로 일반적인 GAN의 계산 비용 (시간) 과 차이가 거의 없다. 또한 L(G,Q)가 항상 일반적인 GAN의 objective보다 빨리 수렴하기때문에 InfoGAN은 GAN에서 공짜로 딸려온다고 한다..( 그만큼 간단한 아이디어지만 대단한 효과이다.. 뭐 그런말 이겠지..)

 

 

Experiments

 

InfoGAN의 결과중하나인 MNIST data로 학습한 것이다. (a),(c),(d)가 InfoGAN의 결과물로써, 각각 차례대로 digit type의 변화, Rotation의 변화, Width의 변화를 나타낸다. 이처럼 InfoGAN은 유의미한 latent code들을 mutual information을 통해 학습함으로써 latent code들이 조금식 변화할때에 그 변화들이 특징을 잘 표현한 것을 볼 수 있다.

하지만 일반적인 GAN 의 결과 (b)를 보면 어떠한 의미있는 변화를 찾기 힘들다. 왜냐하면 위에서 말했듯이 latent code를 무시한 채 매우 얽혀있는(entangled) 상태로 학습하기 때문에, 이 c1이 표한하고있는 것이 모호하기 때문이다.

 

 

 

위의 사람의 3D표현이나 의자도 마찬가지로 latent code에 변화를 줌으로써, 고정된 자신의 본질(원래의 모양)은 유지 한 채 latent code가 나타내고자 하는 것에만 중점적으로 변화를 주게 된다.

 

 

 

 

뭔가 간단한 내용인것 같긴한데, 계속 생각하다보면 뭔가 복잡하고 자꾸만 헷갈리것 같다. 그리고 통계쪽 수식때문에 이해하는데 조금 애먹은것 같다. 여튼 뭔가 찝찝한 구석이 있지만 구현된 코드를 한 번 찾아보면 사라질 것 같은 기분이다.. 코드도 찾아봐야겠다.

 

 

Reference

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

반응형
Comments