반응형

논문 :  https://arxiv.org/pdf/1703.05192.pdf


공식소스:  https://github.com/SKTBrain/DiscoGAN



최근들어 많은 사람들에게 관심을 받는Gan의 한 종류인 DiscoGan 논문을 봤다.

한국의 sk-Tbrain의 논문인데 세계적으로 관심을 많이 받는 논문이여서 언젠가 꼭 한번은 공부하고 싶었는데

생각보다 늦게 논문을 접하게 되었는데 이제라도 보게 되서 다행이라는 생각이 든다.


GAN에 대해서 정확히 알지는 못하지만, 해당 논문을 어렴풋이 이해를 할수 있었는데 아이디어에 대한 발상과 구현이 참으로 재밌게 느껴진 논문이었다.


GAN을 만든 Goodfellow의 발상도 독특한데, Gan자체가 어찌보면 수학적으로 증명하기보다는 발상적인 접근으로 발전을 하고 있는것은 아닌지라는 생각을 가지게 된다. 그렇기에 학습을 시키기에는 어렵지만 효과는 좋은게 아닐까?? 그냥 내 생각을 주저리주저리 쓴다.


처음에 DiscoGan이라고 하기에, 뭐지 라고 생각을 했는데 Discovery-Gan의 준말이다. 논문 내용도 좋고 네이밍센스가 좋으니깐 더 이슈가 된건 아닐까 한다.


기존의 GAN은 새로운 무언가를 unsupervised하여 생성해내는 녀석이다.

그 새로운 무언가를 학습을 시키는데 사용되는 테크닉이 Generator와 Discriminator라는 툴을 이용해서 학습을 시킨다.

누군가는 그것을 만들고 그리고 그걸 감시하는 녀석이 존재하는 것이다.

여기서 우리는 한단계를 더 호기심을 가지고 들어가보자.

내가 어떠한 특징을 가지고 있는데, 그 특징을 가진 다른 영역의 물체를 만드는 것이다.

예를들어, 사자의 갈퀴가 너무나 마음에 들어서 그것을 내가 좋아하는 강아지도 이식을 시켜본다는 개념이다.

다른 영역에 존재하는 특징을 우리 영역으로 가져오는걸 말하는데 이를 cross-domain relations 이라고 얘기를 한다.


discoGan은 cross-domain을 GAN에다 적용을 한것이다.


늘 그래왔듯이 결론을 먼저보면 더욱 호기심이 자극되지 않을까?ㅎㅎ





INPUT을 특정스타일의 갖춘 가방을 넣어준다면 OUTPUT은 그 가방과 같은 스타일의 신발을 만들어내는것이다.

딱봐도 해당스타일의 옷과 스타일이 같은 다른 종류의 악세사리나 그런것에다 사용을 할 수있지 않을까?

이 재질로 옷을 만들거나, 다른 악세사리를 만들면 어떨까할때 우리가 데모로 테스를 하거나 할 수 있는 새로운 방법이 생긴것이다.

이외에도 정말 많은곳에 쓰일수 있겠지만, 이는 추후에 논의를 하고, 논문의 내용에 조금은 더 집중을 해보자.



위와 같은 cross-domain문제는 우리 인간에게는 생각보다 쉬운일이다. 누군가의 작품을 베껴서 나만의 새로운 작품을 만드는것은

생각보다 어렵지는 않다. 하지만 이를 컴퓨터에게 시키는 것은 생각보다 쉽지않은 일이다.

인공지능이 해당 기능을 하는 function을 만들어내는 일이라면, 수많은 어려움이 우리앞에 존재한다.

그래서 다른 도메인에 변환시키는 특정한 함수를 찾아내는것이라는 의미에서 discovery 라는 단어로 논문에서는 해당 네트워크를 설명을 한다.


논문에서는 몇가지의 믿음(?)이라고 할 수 잇는 것이 있는데,

우리가 현재 가지고 있는 input들은 바뀌려는 해당 domain을 나타낼수 있는 함수로 온전히 바뀔수 있다는 것이다.

다시 말하면, 우리가 가방을 신발영역으로 바꾼다고 했을때 모든가방도메인의 그림은 그의 대응하는 모든 신발도메인의 그림이 존재한다는것이다. 이러한 믿음(?)을 논문은 몇가지 실험을 통해서 증명해주고 있다.


모델에 대해 조금 더 알아보자.

 라는 notation이 나오는데, 이는 domainA에서 domain B로 바뀌주는, 즉 생성해주는 generator와 그 반대인 domainB에 있는 것을 domain A로 바꿔주는 Generator 함수를 각각 말한다. 이 두 함수는 서로 역함수의 관계를 가지기때문에 다음과 같은 연산이 성립이 가능하다.




입력이미지 x1를 B도메인으로 바꾸고, 다시 도메인 B에서 도메인A로 바꾼다면 원래의 input xA가 나온다는 것을 의미한다.

따라서 우리의 Generaor의 Loss Function은 원래 이미지xA와 위의 함수(A domain->B domian -> A domain)의 결과인 xA와의 차이를 줄이는 방향으로 generator를 학습을 시키면 된다.


 

 를 줄이는 방향으로 학습이 될텐데, Loss함수의 종류는 L1,L2, Huber loss가 있을것이다.


그런데 이렇게 쌩으로 distance를 줄이는 방향으로 학습이 진행이 되면

생각보다 학습이 안된다고 논문에서 말한다. 그래서 우리는 그대신 generative adversarial loss를 줄이는 방향으로 해당 lossFunction의 제약을 조금 덜고 학습을 시키게 되는데 그 식은 다음과 같다.




위와 같이 학습을 하려고 한다고 했을때에

조금은 큰 그림으로 DiscoGan을 바라보자.


일반적인 GAN모델에서 DISCO-GAN까지 큰 구조로 바라보고자 한다.


그러면 GAN-> GAN with reconstruction loss -> DiscoGAN의 방향에서 논문은 설명을 하고 있다.



(a)는 stand Gan의 구조를 설명을 한다. 입력이미지 xa가 generator를 통과해서 나온 Xab를 discrimator가 구별을 할수 있는지 판별을 하는것이다. 그리고 Disciminator를 학습하기 위해서 진짜이미지인 xb를 간간히 넣어줘서 discriminator를 학습을 시키기도 한다.




다음은 위의 Gan에서 조금은 cross-domain을 위해서 향상된 gan 네트워크이다.

위의 standard Gan과 달라진점은 GeneratorAB에 의해서 생성된 Xab를 다시 원래의 도메인영역으로 만들어주는 GeneratorBA에 집어넣고

이렇게 생긴 Xaba를 얼마만큼 기존의 Xa와 비슷한지 체크하지 위한 LossFuction인 LconstA를 측정하는 거다.

그래서 GeneratorAB의 lossfuction은 달라지게 된다.  기존에 얼마큼 잘 만들어졌는지 Discriminator에 의해서 얻게 되는 LOSS와 Reconstruction을 잘했는지 나타내는 LconstA의 합으로 나타난다.





그리고 Disriminator는 다음과 같은 LossFunction을 가진다.




그런데 이렇게 학습을 시키게 되면 도메인A->도메인B로 가는것은 제대로 되는데

도메인B->도메인A로 가는 방향에서는 mapping에 대한 부분에는 보장을 하지 못하는 문제가 발생을 한다(?)


이를 논문에서는 gan에서 자주 발생하는 mode collapse problem이라고 얘기한다.

논문에서 나와 있는 예시를 한번 보자.




우리가 생각하는 가장 이상적인 gan의 domain-change된 학습된 상태는 (a)의 상태이다.

자동차가 왼쪽을 바라보고 있다면, 얼굴을 가지고 있는 domain으로 변형을 한다면 얼굴도 왼쪽을 바라보고,

자동차가 오른쪽을 바라보고 있다면, 얼굴을 가지고 있는domainB에서는 오른쪽을 바라보는것이 딱딱 뭔가 맞아 떨어지고 기분이 좋은 완벽한 학습된 상태가 된다. 하지만 세상 일이 우리 맘처럼되면 모두가 행복해지겠지만, 이는 잘 일어나지 않는 일이다.

그래서 우리의 학습된 상태는 자동차가 왼쪽이나 오른쪽을 보는 두가지 상태 모두 그림(b)처럼 얼굴이 오른쪽을 바라보는 방향으로 바뀌는 것을 알수있다. 대략난감.......................... 어떻게 학습을 하는건데 이렇게 나와 버리면 짜증날것 같다.

이러한 문제가 reconstruction Loss를 추가한 업그레이드된 GAN의 네트워크에서도 나타난다.

왼쪽을 보는 자동차이던, 오른쪽을 보는 자동차이던 오른쪽을 바라보는 사람의 영역으로 바뀌게 되고,

사람을 다시 자동차의 영역으로 바꿀때 (우리가 위에서 말한 Gaba로 나온 결과를 말함) 한쪽 방향의 결과만 나오게 되어

이 아키텍처는 mode collapse를 탈출하지 못한다.ㅠㅠㅠㅠㅠㅠ


그래서 우리는 최적의 함수를 찾기위한 discovery가 필요하여 discoGAN이 나온다ㅋㅋㅋㅋ


다음은 DiscoGAN의 아키텍처 구조이다.


기존의 reconstruction loss를 가진 네트워크의 문제점은 뭐였나면, 한쪽 방향은 가능했는데, 양쪽이 안됐다는 거다. 그래서 고안한게

양쪽 방향이 가능하게, 즉 두가지의 const Loss를 가지면 어떨까하는 발상인거 같다.

위의 아키텍처를 보자.  

학습을 시킬때 두가지 네트워크를 가지는데 

Xa에서 부터 시작해서 Xab 그리고 다시 Xaba를 뱉어내는 네트워크와

Xb에서 부터 시작해서 Xba 그리고 다시 Xbab를 뱉어내는 네트워크를 동시에 학습을 시킨다.

그러면 각각 Gab와 Gba가 두개씩 생기는 이들은 서로 paramerter를 학습을 시킬때 공유를 하면서 학습을 하게 된다.

Generator는 이렇게 학습이 된다고 하면,

Discriminator는 어떻게 학습이 될까?

진짜 Xb인 그림과 Gab를 통해서 만들어진 Xab인 그림을 DiscriminatorB에 넣고 학습을 시키고,

진짜 Xa인 그림과 Gba를 통해서 만들어진 Xba인 그림을 DiscriminatorA에 넣고 학습을 시키는걸로 Discriminator도 학습 로직을 완성한다.


다음은 최종적인DiscoGan의 LossFunction 이다.




이 논문에서 사용한 LossFunction은 두개의 Loss GAN과 두개의 Loss const가 존재하기에

bijective mapping이 가능하고 일대일 대칭이 가능하게끔했다.


mode collapse의 문제를 해당 영역의 LossFunction을 추가함으로써 풀었다고 주관적으로 이해하고 있다.


최종결과는 논문을 참고하면 될듯하다. 끝.

반응형

+ Recent posts