Hello Computer Vision

비전공생의 InfoGAN(Information Maximizing Generative Adversarial Nets, 2016) 논문 리뷰 본문

Generative

비전공생의 InfoGAN(Information Maximizing Generative Adversarial Nets, 2016) 논문 리뷰

지웅쓰 2022. 11. 7. 23:55

지난 번 LSGAN에 이어서 이번에는 InfoGAN논문리뷰입니다.

제가 GAN을 처음 공부할 때만 해도 cycleGAN, StyleGAN이런 모델들만 봐서 그런지

흥미로웠지만 이해가 안가는 것 투성이였는데 태초의 논문들부터 보니 재밌습니다.

이번 InfoGAN은 disentanglement 한 특징을 잡아내기 위한 방법을 고안한 논문인데요, 천천히 논문 처음부터 읽어보겠습니다.
(mutual information과 disentanglement가 핵심이니 두가지를 잘 들고 가시면 될 거 같습니다)

 

Introduction

unsupervised learning(비지도학습)에서는 extracting value를 하는 것이 어렵다고 합니다. 
(아마 여기서 extracting value는 우리가 원하는 특징을 말하는 거 같습니다)

그래서 이러한 표현을 disentanglement representation이라고 하는데요, 

Data가 가진 feature들을 다 학습하였을 때 만약 Generator들의 feature 분포가 이러한 실타래의 모습을 띈다면

빨간색 실을 꺼내고 싶은데 파란색 실이 잡히고(머리카락 색을 변경하고 싶은데 눈의 크기가 작아진다든지)

이렇게 무작위성이 많이 들어날 것입니다. 이러한 것을 해결하기 위한 것이 disentanglement representation입니다.

이러한 문제를 해결하기 위해서는

이렇게 가지런히 정리한다면 우리가 원하는 feature들을 변경할 수 있을 거 같습니다.

 

기존의 GAN은 이러한 것을 전혀 하지 못하고 arbitraily representation한다고 합니다.
(아무리 멋진 이미지를 만든다하더라도 결과를 사용자가 제어하지 못한다면 난감한 문제일 거 같습니다) 

그래서 저자들은 이러한 문제를 해결하기 위해 GAN 모델과, 넣는 노이즈벡터간의

mutual infromation을 Maximizing 하기로 결정합니다.(이 부분은 조금 뒤에 더 자세히 설명하겠습니다)

 

Related work

항상 논문들의 관련 자료들을 볼 때마다 공부할 것이 너무 많다는 생각이듭니다..

여기서는 disentanglement 학습을 위해 기존에는 supervised data를 이용해서 많이 시도했었고

hossRBM은 unsupervised data로 학습했지만 discrete한 vector한해서만 효과가 있었다고 하며

여기 InfoGAN에서는 continuous, discrete 두개의 특징 잡아낸다고 합니다
(처음에는 discrete, continuous특징들의 차이가 한번에 이해가 되지 않았는데,
discrete한 특징은 digit 1혹은 3 혹은 5를 그려달라! 이고 continuous는 왼쪽으로 31도, 32도 회전 이런 특징들이라고 뒤에 논문에서 표시를 합니다)

 

Background

GAN 모델에 대해서 소개해줍니다. 이 부분은 써놓은 글이 있으니 가볍게 봐주시면 되겠습니다

https://keepgoingrunner.tistory.com/8

 

비전공생의 GAN(Generative Adversarial Nets, 2014) 논문 리뷰

GAN에 관심가진지 한 3달 정도가 지났고 논문에 대해서도 한번 겉핥기로 본 적이 있긴한데 앞으로 더 많은 논문을 볼텐데 GAN의 시초인 이 논문을 제대로 안 볼 수 없다고 생각하여 논문을 따로 복

keepgoingrunner.tistory.com

 

Mutual Information for Inducing Latent Codes

이제 본격적으로 어떻게 disentanglement한 특징들을 representation할 것인지 나옵니다.

기존 GAN에서는 z라는 벡터를 넣어서 이미지를 생성하였고 z에 대해 아무런 제약을 주지 않으면

당연히 Generator의 특징들은 위에있는 실타래처럼 얽힌 상태로 있을 것입니다.

그렇다면 저자들은 이미지를 만들어내는 벡터에 대해 z뿐만 아니라 c를 준다고합니다.

이러한 latent variables $c_{1}, c_{2},...c_{L}$ 들을 추가하고 결국 우리는 $G(z,c)$를 훈련시키는 것과 같습니다.

(표기의 편리상 $c_{1}, c_{2},...c_{L} = c$ 라고 표기)

 

그런데 우리가 이렇게 따로 c를 정의해도 훈련 과정에서 generator는 무시하고 훈련할 가능성이 큽니다.
(generator입장에서는 z= 100, c= 10을 받나 그냥 z = 110 을 받나 똑같이 훈련할테니까요)

그렇기 때문에 여기서 제약을 주는데요, 바로 mutual information이라는 것을 최대화 하는 것입니다.

예시로 mutual information을  $I(X; Y)$라고 했을 때 이 값은

Y를 알았을 때 X에 대해 사라지는 불확실성의 양. 이라고 합니다.

만약 Y를 알았는데도, X에 대해서 하나도 모른다면 0이 됩니다. 이를 이미지로 나타내면
(H(X), H(Y)는 각 정보의량, Entropy)

 이를 수식으로 나타내보자면 다음과 같다.

$$I(X;Y) = H(X) - H(X|Y) = H(Y) - H(Y|X)$$

 

여기서 $H(x)$는 엔트로피 양인데 이는 $H(x) = -\int_{x}p(x) log p(x) dx$ 이다.

 

다른 확률변수가 condition으로 들어온다면 $H(X|Y) = -\int_{x}\int_{y}p(x,y) \frac{p(x,y)}{p(y)} dydx = -\int_{x}\int_{y}p(x,y) logp(x|y) dydx$

$$ = -E_{x~P_{X}} [E_{y~P_{Y}}[log P(X|Y)]]$$

이런 식을 도출해 낼 수 있습니다.(엔트로피 식은 알고 있었는데 condition 들어간 엔트로피는 처음 봤네요..)

그렇다면 결국 $$I(X;Y) = H(X) - H(X|Y) = E_{x~P_{X}}[E_{Y~P_{Y|X}}[logP(X|Y)]] + H(X)$$

식을 도출할 수 있습니다. (참고 : https://haawron.tistory.com/10)

(방금 정리한 식들은 다음 장에서 활용됩니다)

그렇다면 위에서 우리는 $c$가 훈련되는 동안 무시되지 않게 mutual information을 최대화 하는 것이 목표라고 했는데 조금 감이 오시나요? 

$c$와 $G(z,c)$ 의 mutual information의 양을 최대화한다면 $G$가 c를 무시못하는 것입니다.

 

이를 바탕으로 GAN에 대한 목적함수를 새롭게 정의해보자면

$$min_{G}, max_{D} = V_{I}(D,G) = V(D, G) - \lambda I(c;G(z,c))$$

 

Variational Mutual Information Maximization

여기서 문제점이 하나 있습니다.

$I(c;G(z,c))$를 최대화해야하는데 이에 필요한 posterior distribution인 $P(c|x)$를 알 수 없는 것입니다.

그래서 저자들은 알아내기 어려운 $P(c|x)$ 대신에 auxiliary distribution인 $Q(c|x)$ 를 가정하고 수식을 세웁니다.

$$ I(c;G(z,c)) = H(c) - H(c|G(z,c))$$

$$ = E_{x~G(z,c}[E_{c'~P(c|x}[logP(c'|x)] + H(c)$$

$$ = E_{x~G(z,c}[D_{KL}(P('|x) || Q('|x)] + [E_{c'~P(c|x}[logQ(c'|x)] + H(c) $$

$$>= E_{x~G(z,c)}[E_{c'~P(c|x)}[logQ(c'|x)]] + H(x)$$

 

해당 수식을 도출해낼 수 있는데요,두번째 수식까지는 위에서 정의한 수식대로 따라갈 수 있습니다.

그리고 두번째에서 세번째 식으로 넘어갈 때 P에서 Q로 변환이 되는데 이러한 차이를 주기 위해

KL divergence가 사용되었음을 알 수 있습니다.

KL divergence 값은 0보다 큰 값을 가지기 때문에(분포 간의 차이를 나타내는 지표)

마지막 식으로 도출해 낼 수 있음을 알 수 있습니다.(수식부분 언제든 지적 바랍니다)

 

$$ L_{I}(G,Q) =  E_{c~P(c), x~G(z, c)}[logQ(c|x) + H(c)$$

$$ E_{x~G(z,c} [E_{c~P(c'|x} [logQ(c'|x)]] + H(c)$$

$$ <= I(c;G(z,c))$$

위에 나온 식은 $ L_{I}(G,Q) $ 을 지금까지 써왔던 $I(c;G(z,c))$ 으로 변형해주는 작업입니다.(주관적인 이해입니다)
(그리고 $L_{i}(G, Q) $ 는 몬테카를로 시뮬레이션으로 근사할 수 있다고 합니다. 몬테카를로 시뮬레이션에대한 참고 : https://keepgoingrunner.tistory.com/25)

 

결국 마지막 InfoGAN의 목적함수를 다시 정의해보자면

$$min_{G,Q}, max_{D} V_{InfoGAN}(D,G,Q)  = V(D, G) - \lambda L_{i}(G;Q)$$

 

으로 정의했습니다.

 

Implementation

길고 길었던 수식의 우주에서 벗어났습니다.(늪이라고 표현할라 했지만 긍정적으로!!)

이제 도출해낸 식 이후의 결과를 짧게 이야기해주는데요, $L(G, Q)$ 는 일반  GAN보다 빠르게 수렴한다고 합니다.

그리고 전체적인 구조는 DCGAN을 따랐다고 합니다.

 

Experiments

저자들의 목표들을 이야기해줍니다.

1. maximizing mutual information

2. disentangled and interpretable representation. 

가장 중요한 핵심들이며 사실 두개는 연관되어 있고 첫번째 목표를 이룬다면 두번째도 어느정도 달성한 거 같습니다.

 MNIST 데이터셋에 대하여 categorical distribution latent codes $c ~ (K = 10, p = 0.1)$ 을 실험해 보았을 대

mutual information에 대하여 그래프를 그려보았을 때 InfoGAN이 2.3정도로 빠르게 수렴하였음을 알 수 있습니다
(H(c) = 2.3) 

 

그리고 categorical 한 특징을 잡아내는 c1, continuous 한 특징을 잡아내는 c2, c3(회전과, 넓이) 을 설정한 결과

원하는 대로 결과를 조절할 수는 없었지만 두께에서 차이가 있는 등 유의미한 결과를 얻었다고 합니다.

a에서는 categorcial한 특징을 잡아내서 숫자가 다름을 알 수 있고(2번째 row에서 7을 9로 잘못 분류한 것도 보입니다)

c와 d에서 방향과 width도 어느 정도 차이가 있음을 알 수 있습니다.

이 외에도 다양한 데이터셋을 활용하여 특징을 잡아내었음을 알 수 있습니다.

 

Conclusion

InfoGAN을 통해 이전 연구들과는 달리 비지도학습으로 disentanglement representation을 이루었다고 합니다.

그리고 연산 또한 아주 사소하다고 합니다(negligible)

그리고 이 아이디어는 VAE 등  많은 곳에 적용될 수 있다고 하네요.(VAE도 리뷰 해보겠습니다)

 

느낀 점

저는 disentanglement라는 용어를 StyleGAN을 하면서 처음 들었는데요, StyleGAN에서는

기존 z에다 비선형성을 더해주어 이 위에다 Adain 을 입혀 disentanglement를 주었다고 하였는데 이부분이 굉장히 쉽게 

들리면서도 이해가 잘 되지 않았는데 확실히 이러한 접근을 초기부터 한 논문을 살펴보니 직관적으로

이해가 잘 되는 거 같습니다. 처음에는 논문 하나하나 읽는게 쉽지 않았고 까마득했는데 읽을 수록 재미가 느껴집니다.

다음에는 BEGAN이 될 거 같은데 InfoGAN에 대한 코드도 빠른 시일내에 올려보겠습니다.

 

지적 언제든지 해주시면 감사하겠습니다.