작성자: 고려대학교 산업경영공학과 이예지
이번에는 disentanglement에 대한 내용을 다루고자 합니다.
deeplearning.ai의 Build Basic Generative Adversarial Networks (GANs) 강의에서 짧게 disentanglement에 대해 알려주었는데, 많은 자료를 보여주진 않더라구요.
이번에는 해당 강의를 토대로, disentanglement와 관련된 몇 가지 페이퍼를 짧게 요약해보자 합니다.
이 글이 disentaglement의 완벽한 이해를 드리기는 힘들지만, 어떤 것을 하고자 하는지에 대 큰 그림을 얻어가셨으면 좋겠습니다. 오늘 다루는 페이퍼 이외에, 관련 페이퍼를 추가로 적어놓았으니, 관심있으시면 꼭 읽어보시길 바랍니다. :)
[Figure 1] coursera - Build Basic Generative Adversarial Networks (GANs), 'Challenges with Controllable Generation'
데이터의 분포를 학습하기 위해 우리는 GAN을 사용했습니다. 어떤 노이즈 벡터를 생성하고 GAN의 입력으로 넣었을 때, 우리가 가진 학습 데이터와 비슷하지만 학습 데이터에는 존재하지 않았던 랜덤한 이미지를 만들어낼 수 있습니다.
그러나 우리가 원하는 특징을 가진 랜덤한 이미지를 만드는 것은 쉽지 않습니다. Figure 1을 살펴봅시다. 갈색머리를 가지고 있는 사람의 이미지를 파란머리를 가진 사진으로 변경한 것입니다. 지금까지 다룬 Vanilla GAN은 이렇게 하나의 피쳐만을 변경하는 것이 불가능합니다. 왜 그럴까요? 다른 예를 살펴보겠습니다.
[Figure 2] coursera - Build Basic Generative Adversarial Networks (GANs), 'Challenges with Controllable Generation'
Figure 2를 봅시다. 제가 랜덤 벡터()로 생성한 이미지가 왼쪽의 수염이 없는 여성이라고 해봅시다. 저는 여기서 수염을 추가하고 싶고, 축을 조절하여 수염을 추가할 수 있는 랜덤 벡터()를 찾았다고 가정해보겠습니다. 이 여성의 그림에 수염을 추가할 수 있을까요? 물론 가능합니다. 그러나, 오랜쪽 아래의 수염을 가진 남성의 사진이 나오게 됩니다. 즉 수염을 추가한 것 뿐만 아니라 다른 피쳐들이 동시에 변한 것입니다.
[Figure 3] coursera - Build Basic Generative Adversarial Networks (GANs), 'Challenges with Controllable Generation'
이러한 결과가 나오는 것은 축이 수염에 관련된 특징뿐만 아니라 다른 어떤 특징과도 연관이 되어있기 때문입니다. 이 예시로 볼 때는 머리 길이, 눈매, 그리고 눈썹 정도일 것 같습니다. 다시 말하면, 하나의 축이 하나의 특징을 의미하는 것이 아닙니다. 이를 entanglement (뒤얽힘, 꼬여있음)혹은 축이 entangle 되어있다. 라고 표현합니다. 축이 꼬여있는(entangle) 이유 중 한 가지는 일반적으로 의 차수가 충분하지 않을 때 발생하지만, 이외에도 여러 가지 이유가 있습니다.
내가 원하는 피쳐들 외에 나머지는 고정한채로 이미지를 생성하고 싶다면 축을 disentagle되어있게 하면 되겠죠? disentanglement에 대한 해석을 그대로 인용하자면 다음과 같습니다.
[Figure 4] Takato Horii, Review "Info GAN"
Transforming from an uninterpretable space with entangled features to eigen spaces where features are independent.
자, 이제부터 disentanglement 관련 페이퍼를 다음 순서로 짧게 리뷰해보겠습니다.
다음의 페이퍼는 이번 글에서는 다루지 않지만 읽어보면 큰 도움이 될 거라고 생각합니다. 몇 가지는 이곳에 짧게 정리되어 있습니다. 지금은 미루고 있지만 ☹️, 저도 나중에 꼭 페이퍼를 읽어보려구요 🙂!
[Figure 4] DC-IGN 요약
[Figure 5]
컴퓨터 화상처리(Computer graphics)를 하기 위해서는 개발자들이 프로그래밍 언어를 사용해서 명령을 하겠죠? 그 명령(graphics code; )은 매우 디테일 할 것입니다. 예를 들어 공의 위치는 어디이고, 밝기는 몇이고, 무슨 색깔을 가졌는가? 이렇게요. 이처럼 우리가 원하는 이미지 혹은 그래픽을 생성하기 위해서는 disentangled feature가 필요합니다.
해당 모델(DC-IGN)은 입력 값이 주어졌을 때, 같은 object지만 pose와 lighting에 따라 새로운 이미지를 만들어내는 것을 목표로 합니다.
[Figure 6]
VAE(D. P. Kingma and M. Welling, 2013)를 변형한 형태의 모델 구조를 가고 있습니다. 따라서 크게 encoder와 decoder로 이루어졌으며, encoder는 {convolution layers+max-pooling}, decoder는 {convolution laysers+unpooling(upsampling using nearest neighbors)}로 구성됩니다.
Input: data
The posterior approximation: , where ~
Graphics code:
encoder의 output ():
[Figure 7]
를 만들어내기 위해 데이터 가 encoder를 통과합니다. 의 모수는 다음과 같이 만들어집니다.
,
code 가 different view를 가진 이미지를 생성하기 위해 decoder를 통과하고,
를 object function으로 사용하여 학습하면 됩니다. 이 때, code 는 Figure 7 처럼 disentaglement와 entaglement 파트가 섞여있는 벡터입니다.
[Figure 8]
여기까지는 다른 모델과 크게 다를 것이 없습니다. 그렇다면 어떻게 disentanglement를 할 수 있을까요?
DC-IGN은 mini-batch 를 이용하는 것입니다.
현재 우리가 여러 특징(feature)을 가진 학습데이터를 가지고 있다고 가정합시다. feature의 종류는 (방위각, 고도 각, 광원의 방위각, and intrinsic properties (shape, texture, etc)) 입니다. 앞의 3개의 feature를 각각 라고 인코딩했다고 하겠습니다.
미리 mini-batch가 오직 한 개의 variable만 변하도록 데이터를 구성합니다. 예를 들어 elevation angle만 변할 수 있도록 구성하는 것입니다. 다음과 같은 procedure를 통해 모델은 학습됩니다.
[Figure 9]
intrinsic representation의 경우 와 달리 매우 고차원이므로, 더 많은 학습이 요구됩니다. 따라서 논문의 저자들은 1:1:1:10의 비율로 모델을 학습했다고 합니다.
즉 한 번에 하나의 transfomation만 사용하여 학습함으로써, disentanglement를 시도하였습니다. 또한 하나의 변환을 보장하기 위해 선택된 차원을 제외하고는 평균과의 차이 값으로 하였습니다
[Figure 10] *Kulrarni, Tejas D., et. al. 2015.*
[Figure 11] *Kulrarni, Tejas D., et. al. 2015.*
---[Figure 12] InfoGAN 요약
A disentangled representation should be helpful for the relevant but unknown tasks.
이에 따라 InfoGAN은 interpretable하고 meaningful representations을 만들어내기 위해 GAN의 구조를 사용하였습니다. 또한, 상호정보량(mutual information; MI)을 최대화하도록 하여 모델을 학습하였습니다.
InfoGAN 자체는 매우 간단하지만, 다양한 데이터셋에서 매우 효과적인 결과를 보여주었다고 합니다. 결과적으로 disentanglment 학습에 MI cost가 효과적이였음을 보여준 것이죠.
[Figure 13]
the generator distribution:
the real data distribution:
a generator:
a discriminator:
a noise variable:
모델에 사용된 GAN을 간단하게 표현하자면 Figure 13과 같이 표현할 수 있습니다. 우리는 가 를 approximate하기를 원합니다. 따라서 를 변형하여 로부터 샘플 이미지를 생성할 수 있는 를 학습시키게 됩니다. 이때, 는 와 minmax game을 하며 경쟁적으로 모델을 학습하게 되며, 는 와 를 구별하기를 원합니다. 이를 수식으로 정리하자면 다음과 같습니다.
위 식에서 볼 수 있듯이, GAN은 에 아무런 제약조건을 주지 않습니다. 따라서 는 entangled vector일 것입니다.
[Figure 14]
기존 GAN과 다르게, InfoGAN은 noise vector 뿐만 아니라 latent code 라는 벡터를 만들었습니다. 따라서 모델의 input은 Figure 14의 오른쪽 그림과 같이 두 개입니다. 이 때, latent codes를 이라고 표기하는데, 독립 가정을 하여 가 성립합니다.
그러나 기존 GAN의 만 추가한다고 해서 학습이 우리가 원하는 방향으로 이루어지는 것은 아닙니다. 모델이 를 만들어 내기 위해 를 무시하고 학습을 할 수 있기 때문입니다. 이를 위해 저자들은 information-theoretic regularization을 제안하였습니다. 이것은 latent codes c와 disribution G(z,c)의 상호정보량을 높이는 방식입니다. 즉, 값을 높게 하는 것이죠.
[Figure 15] Mutual information From Wikipedia, the free encyclopedia
[Figure 16]
Figure 16를 보면, 두 개의 변수들이 독립이라면 상호정보량 이 됩니다. 따라서 Info GAN은 이 값을 maximize하도록 목적함수를 설계한 것입니다.
이를 정리하면 다음과 같습니다.
—— (1)
[Figure 17] Chen, Xi, et al. 2016.
아직, InfoGAN이 끝나지 않았습니다. ☹️위의 식 (1)을 그대로 사용한다면, 한 가지 문제가 있습니다. 어떤 문제가 있을까요?
상호정보량은 이전 관측 를 통해 새로운 관측 의 불확실성이 얼마나 제거 되는가에 대한 척도라고 할 수 있습니다. 즉 Figure 16 에서 볼 수 있듯이 이 필요합니다. 따라서 저자들은 Variational Information Maximization 테크닉을 이용하여 를 approximate 하기 위한 lower bound를 구합니다.
Figure 17 에서 3번째→ 4번째는 trivial하기 때문에 생략하고, 1번째→2번째에 대해 살펴보겠습니다. 해당 내용은 InfoGAN의 Appendix에 있습니다. 이해를 돕기 위해 외부 자료를 참고하였습니다. 🙂
[Figure 18] 임성빈 박사님, [학부생의 딥러닝] GANs | InfoGAN : Information maximizing GAN, 하우론 브레인
(Wikipedia, *Fubini theorm: 이중 적분은 두 번의 일변수 적분을 통해 구할 수 있고, 이는 두 변수에 대한 적분의 순서와 무관하다는 정리)
따라서 최종 목적함수는 다음과 같습니다.
[Figure 19] Chen, Xi, et al. 2016.
[Figure 20] Chen, Xi, et al. 2016.
[Figure 21] Chen, Xi, et al. 2016.
[Figure 22] Chen, Xi, et al. 2016.
[Figure 23] Yong-min Shin, GNN-YYK, beta-VAEs
disentanglemet의 대표적인 모델 중 한가지는 infoGAN이라고 할 수 있습니다. 그러나 infoGAN은 여러 한계점이 존재합니다. 저자가 언급한 info GAN의 단점은 (1) 다양하고 큰 데이터셋에는 적용하기 힘들다. (2) noize variables의 수에 민감하다. 등등이 있습니다.
이러한 문제를 해결하기 위해 저자들은 -VAE를 제안하였습니다. 모델 하이퍼파라미터인 를 조절함으로써 disentanglement의 정도를 조절할 수 있습니다.
images:
two sets of ground truth data generative factors:
conditionally independent factors:
conditionally dependent factors:
[Figure 23] Yong-min Shin, GNN-YYK, beta-VAEs
저자는 이미지를 생성하기 위한 모델을 Simulator라는 말로 표현하고 있는 것 같습니다. 따라서 우리는 image 가 로 부터 생성되었다고 가정합니다.
기존 VAE와 어떻게 달라졌는지 살펴봅시다.
[Figure 24] Higgins, Irina, et al. 2017
(1) 모델은 data x와 latent factors z의 결합 분포를 학습할 수 있습니다. 이 때 z는 x를 생성할 수 있는 factor겠죠? 즉, 입니다. 따라서 수식(1)을 maximize하길 원합니다.
(2) VAE에서 공부했듯이, 우리는 로부터 의 분포를 추정합니다.
중요한 것은, 가 disentanglement part인 를 잘 capture해야 합니다. v를 제외한 나머지 part가 w라고 생각할 수 있습니다. 이를 보장하기 위해, 가 와 match 되게끔 constraint을 걸게 됩니다.
이렇게 제약조건을 걸면,
이는 를 가정하면 조건부 최적화 문제로 풀 수 있습니다.
(3) 수식 (2)를 KKT 조건 하에 라그랑지안으로 풀면 (3)을 얻게 됩니다. (KKT 조건을 만족한다고 가정했기 때문에 (2)의 최적 솔루션이 (3)의 최적 솔루션을 구하는 것과 같음을 알 수 있습니다.)
눈치채셨겠지만, 논문 제목의 beta 파트가 여기서 등장하게 됩니다. 😉
여기서 KKT multiplier 는 latent information channel 를 통제하는 regularization coefficient가 됩니다.
(4) KKT 조건의 the complementary slackness(KKT 조건 중 하나)에 따라 ≥ 0이므로, 최종적으로 lower bound (4)가 나오게 됩니다.
beta의 효능 💪:
최종 목적식 (4)에서도 알 수 있듯이, 실제로 v, w는 가정일 뿐 conditionally independent factors , conditionally dependent factors 에 관여하는 텀은 없습니다.
결국 제약조건으로 인해 등장한 텀을 잘 조절하며 학습하면, z가 v, w로 분해가 되는 것입니다. 이러한 이유로 InfoGAN의 한계점을 커버할 수 있다고 말한 것 같습니다.
따라서 전반적인 모델 구조에 대한 코드는 다음과 같이 심플합니다.
[Figure 25] 1Konny, "Pytorch implementation of β-VAE", Github.
Disentanglement의 Metric에 관하여 해당 논문의 section 3에서 소개하고 있습니다만,
생략하도록 하겠습니다. 😂
[Figure 26] Higgins, Irina, et al. 2017
오늘 다룬 모델들을 베이스라인으로 하여 비교하고 있네요![Figure 27] Higgins, Irina, et al. 2017
1개의 latent 값을 바꿨을 때 1개의 특징만 변하고 있는 것을 볼 수 있습니다.
최신 논문들을 다루지 않아 조금 아쉽지만, 어느정도 disentanglement와 친해지셨길 바라겠습니다. 🙂
읽어주셔서 감사합니다.
해당 글은 연세대학교 신용민님의 도움을 받아 작성하였습니다.
투빅스 14기 김상현
이번 강의는 생성모델에서 disentanglement와 관련된 논문 리뷰 강의로 투빅스 13기 이예지님이 진행해주셨습니다.
DC-IGN
InfoGAN
Beta-VAE
DC-IGN, InfoGAN, Beta-VAE에 각각의 손실함수 및 학습방법을 자세히 설명해주셔서 전반적인 이해를 할 수 있었습니다.
유익한 강의 감사합니다!
투빅스 14기 정재윤:
오늘은 투빅스 13기 이예지님께서 disentangelment라는 주제로 강의를 진행해주셨습니다.
일반적으로 생성모델에서 우리가 사용하는 noise vector z는 여러 feature를 담고 있으나 이것들이 명확하게 구분되어 있진 않습니다. 즉, 하나의 특성을 바꾸려고 z를 바꾸면 나머지 특징들도 따라 바뀌게 되어 원하는 이미지가 생성되지 않게 됩니다. 이를 entanglement하다라고 하며, 많은 연구자들은 좀 더 원하는 이미지를 생성하기 위해서 z를 disentanglement하게 만드는 것입니다.
DC-IGN은 mini-batch를 사용하여 disentanglement를 가능케 했습니다. 모든 feature를 조작하는 것은 아니고 오직 하나의 variable만 변하도록 데이터를 구성하는 것입니다. 오직 하나의 변환을 보장하기 위해 선택한 차원을 제외하고는 모두 평균값과의 차이로 대체하였습니다. 그래서 나온 결과는 우리가 선택한 variable에 대해서는 확실히 조절이 가능케 됩니다.
InfoGAN은 GAN의 구조에 상호정보량이라는 개념을 넣어 학습한 모델입니다. infoGAN의 input은 noise vector z와 latent code c입니다. 이 때 모델은 의도한대로 학습을 진행하지 않을 가능성이 있는데 이를 위해 I(c;G(z,c))라는 information-theoretic regularization을 제안합니다. 이렇게 진행을 하면 좀 더 disentanglement한 이미지가 만들어지게 됩니다.
베타 vae는 infoGAN의 단점인 다양하고 큰 데이터셋에 적용하기 힘든 점, noise variable의 수에 민감하다는 점을 보완하여 나온 모델입니다. 여기서 베타를 조절하여 disentanglement의 정도를 조절하는 것입니다. 기본적으로 vae의 구조를 가지고 있습니다. Z를 disentanglement한 파트인 v와 그렇지 않은 파트인 w로 구분하여 풀어주는 것인데, 이렇게 분해하기 위해서는 제약조건들을 걸어야 하며 이 제약조건들로 베타텀을 조절하는 것입니다.
어려운 내용들이었지만 덕분에 쉽게 이해하고 넘어갈 수 있었습니다. 감사합니다. 😊
투빅스 14기 박지은
투빅스 14기 박준영
이번강의는 투빅스 13기 이예지 님께서 disentanglement를 주제로 진행해주셨습니다.
DC_IGN에서는 out-of-plane rotations과 lighting variations과 같은 변형에 대해
disentanglement를 시도하였고 입력값이 주어지면 같은 object지만 pose와 lighting에 따라 새로운 이미지를 만들어내는 것을 목표로 하는것을 배웠습니다.
minibatch를 이용하여 lighting과 rotation 중 하나에 해당하는 변수 z_train을 선택하고 minibatch중 하나를 선택하여 이것을 모델의 input으로 사용하여 벡터값을 알아낸뒤 평균을 계산합니다. 그리고 Decoder 통과 전 z_train이 아닌 다른 z_i값들은 평균값으로 대체하고 decoder에 back-propagation을 한다. 그리고나서 Z_i의 gradient값을 평균값과의 차이로 대체하여 수정된 gradient값으로 encoder를 학습시킴으로써 disentanglement를 시도했다는 것을 배웠습니다.
InfoGAN에서는 Mutual Information을 최대화하도록 학습함으로써 disentanglment를 시도하였다는 것을 배웠습니다.
InfoGAN에서는 latent code c라는 벡터를 추가하여 input을 noise vector z와 latent code c 2개로 두었습니다.
이때 noise vector z와 latent code c의 상호정보량을 높임으로써 disentanglment를 시도하였다는 것을 배웠습니다.
beta-VAE는 VAE를 구조를 사용했는데 기존의 다양하고 큰 데이터셋에는 적용하기 힘들고 noise variables의 수에 민감하다는 한계를
개선하기 위해 만들었습니다. 이 문제를 해결하기 위해 beta-VAE는 모델 하이퍼파라미터인 β를 조절했다는 것을 배웠습니다.
이 세미나를 통해 disentanglement를 해결하기 위한 다양한 방법에 대해 배울 수 있었던 유익했던 시간이었습니다.
투빅스 12기 김태한
이번 강의는 disentanglement에 대하여 13기 이예지님께서 강의해주셨습니다.
크게 다음의 3가지 논문을 토대로 DC-IGN, info-GAN, beta-VAE 설명해주셨습니다.
[DC-IGN]
DC-IGN은 latent vector z의 특정 차원만 가지고 disentanglement를 해결하는 학습을 진행합니다.
이때 disentanglement를 반영하는 방법으로 mini-batch 방법을 제시합니다.
즉, 학습시킬때 사람이 의도적으로 반영하고 싶은 특징이 반영되도록 데이터셋을 구성한 후 전체 latent vector크기중 임의의(1~3개) 차원만 일반적인 방법으로 gradient를 update하며 나머지 차원의 값들은 평균값으로 대체합니다.
그래서 굉장히 train dataset에 영향을 받는 학습방법입니다.
[InfoGAN]
InfoGAN은 특정 역할을 하는 latent code c를 추가로 반영하여 variational information maximization을 적용하여 특징을 담아내도록 학습하는 방법입니다.
loss function이 조금 독특하여 인상깊게 다가왔습니다.
유도과정 또한 너무 멋있었습니다:)
[]
betaVAE는 latent vector가 disentangle한 부분과 entangle한 부분으로 구분된다는 개념을 기반으로 되어있다는 것을 바탕으로 하이퍼파라미터 beta를 통해 disentanglement를 조절하는 방법입니다.
결과적으로 vanilla VAE의 loss function에 beta라는 parameter를 추가하여 학습하는 방법입니다.
disentanglement라는 학습 분야가 생소했는데 너무 잘 설명해주셔서 이해가 잘 되었습니다.
정말 감사합니다 :)
투빅스 11기 이도연
지난 강의에서 짧게 다루었던 Disentanglement에 대해 다룬 세 가지 논문을 리뷰하면서 더 많은 내용을 알 수 있었고 소개해주신 다른 논문들을 읽어보고 싶게 하는 강의였습니다! 감사합니다.
투빅스 14기 김민경
투빅스 14기 한유진
생소했던 것들이 많이 등장해서 긴장했지만, 하나하나 풀어주듯이 설명을 해주셔서 이해하기 수월했습니다! 들어는 보았지만 자세하게 알진 못했던 DC-IGN, InfoGAN, beta-VAE에 대해서 배울 수 있었던 유익한 강의였습니다 감사합니다!