GAN 겉햙기(latent space)
들어가며
GAN 을 두가지로 나눈다면 Generator 와 Discriminator 로 나눌수 있습니다.
이때 Generator 전 상황을 보면 윗 그림으로 볼수 있다시피
Dynamic Map z 라는게 있습니다.
그렇다면 이 Dynamic Map z 이라는것은 무엇을 의미하는것인가요?
Dynamic Map z 이란?
GAN 을 풀어 말하자면 (Generative Adversarial Network) 로써 한국말로 생성적 적대 신경망 입니다
여기서 볼것은 "생성적" 이라는것인데, 이 말은 무언가를 생성한다는 것입니다.생성하다 의 사전적 의미는 이렇습니다.
1. 무엇을 생기게 하다.
2. 없는 것을 만들어 내다
1. 무엇을 생기게 하다 라는 뜻은 기존의 것에서 새롭게 추가되던가, 없애서 그 차이점을 만들어 낸다는 뜻이고,2. 없는 것을 만들어 내다는 무에서 유를 창조하는 개념입니다.
GAN 에서 생성하는곳은 Generator 이고 생성하기 위해서는
"기존의 것"이 있던가, 아예 "무" 의 상태인게 필요합니다.
그렇다면 해당하는것만 있으면 되지 왜 굳이 차원을 확장하는 것일까요?
이것은 간단한 예로써 설명할수 있을것 같습니다. 우리가 소위 말하는 "짝퉁"도 급이 있습니다.
S 급, A 급, B 급 이렇게 나누어져 있을때, 그 기준은 무엇일까요? 바로 진짜와 구별이 힘드냐 입니다.
S급 같은 경우 어떤면에서는 진짜를 뛰어넘는 짝퉁일수도 있지만, B 급인 경우는 멀리서 봐도 짝퉁인거지요
그렇다면 S급 과 B 급을 만드는 사람들의 차이점은 무엇일까요? 이건 바로 디테일 입니다.
S급 짝퉁의 경우 진짜와 매듭 하나까지 똑같은 경우가 존재하죠, 하지만 B 급의 경우 브랜드 로고 조차
살짝 다를수 있습니다. 이런게 바로 디테일인데, 이것을 GAN 에서도 쓰인다고 말할수 있습니다.
이때 이 디테일은 데이터적으로 보자면 데이터의 특징이라 말할수 있는데, 아직 Generator 은 알지 못합니다.
이 데이터의 특징이라는것을 알려주기 위해서, 데이터를 압축해야 합니다.
이 압축된 데이터의 형태를 latent space 라 하며 차원을 줄였을때, 특징이 비슷한것들 끼리 뭉친다는 생각에서
나왓다고 보시면 될것같습니다.
여기서 드는 의문점은 다른 GAN 에서는 잠재공간 z 만 설명하는데, Encoder 가 왜 필요하냐 말씀하실수 있는데,
이것은 어떻게 보면 제가 이 글을 쓴 이유이기도 합니다.
latent Space 에서부터 출발하여 Decoder 를 통해 Gan 을 생상하게 된다면 latent space 의 z 는 평균값을 사용하므로
이미지의 특징을 나타낼수 없습니다. 그러나 Encoder 을 통해 latent space 를 만든다면 이 latent space z 는 평균값이 아닌 이미지의 각각의 특징을 나타낼수 있습니다. 이러한 내용을 StarGAN, StyleGAN 에서 다루고 있으며,
특히 StyleGAN 에서 Perceptual path length 라는 것을 통해 latent space 를 linear 하게 구성하게 합니다.
방금전에 제가 말씀드린 생성하다의 사전적 의미는 두가지로
기존의 것을 바꾸거나, 무에서 유를 창조하는것입니다.
이때 GAN 은 어떻게보면 무에서 유를 창조하나,
창조의 개념이 아닌 모방의 개념으로써 결국 기존의 것을 바꾸는것입니다.
그렇다면 이제 기존의 것을 어떻게 바꾸느냐에 대해서 질문을 해야하는 차례가 왔습니다.
이 질문에 따라 GAN 에 종류가 달라진다고 볼수 있는데요.
여기서 다시 처음으로 돌아가서 생각해보죠, 기존의 것을 "그냥"모방하는게 GAN 이라면 사실 z 는 필요없습니다.
왜냐하면 어차피 Generator 는 점차 학습하면서 latent space 를 이해할 테니까요.
그런데 만약 기존의 것을 "어떤 무언가" 와 비슷하게 모방해야 한다면 z 가 필요합니다.
이것을 실제로 StyleGAN 에서 쓰였으며 실제 예로 두사람을 넣었을때 두사람의 특성이 혼합된
새로운 사람이 나오는것을 확인할수 있습니다.
이제 Decoder 을 통해 차원을 확장합니다. 이를 통해 기존의 차원과 같이 만들어야 모방이 가능해 집니다.