Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

No Limitation

[Deep Learning] GAN (2) - Evaulating & Various Architecture 본문

ML & DL & RL

[Deep Learning] GAN (2) - Evaulating & Various Architecture

yesungcho 2022. 5. 30. 19:50

본 포스팅은 카이스트 산업 및 시스템 공학과 박찬영 교수님의 지식서비스를 위한 기계학습 강의를 중심으로 정리하였고 부가적으로 데이비드 포스터의 Generative Deep Learning 교재를 참고하였습니다. 

 

그 외에도 다음 글들을 참고하였습니다. 

https://m.blog.naver.com/chrhdhkd/222013835684

https://wikidocs.net/149481

 

GAN에 대한 개념적인 설명은 앞선 포스팅(https://yscho.tistory.com/106)에 정리해놓았으니 참고 부탁드립니다.

 

본 포스팅에서는 GAN 성능을 평가할 수 있는 지표와, GAN을 더 개선한 다양한 모형들에 대해 추가로 간단하게 정리하고자 합니다. 

 

GAN에서 만들어진 어떠한 샘플들이 잘 만들어진 샘플들인지, 즉 GAN의 최종 퍼포먼스를 측정할 수 있는 지표가 필요한데, 정량적인 평가를 하는 것이 생각보다 쉬운 일은 아닙니다. 이는, GAN이 VAE처럼 어떠한 분포를 가정하고 generate하는 explicit generative model이 아닌 implicit generative model이기 때문입니다. 따라서 GAN이 만약 input을 그저 memorize하고 generate하더라도 이를 인간이 한 눈으로 알아보기는 쉽지 않습니다. 여러 번 생성해보면서 경험적으로 확인하는 것 뿐이니까요. 그래서 GAN이 잘 수행했는 지를 정량적으로 평가할 수 있는 지표들이 필요합니다.

 

첫 번째로 고안된 방법은 Inception Score입니다. 줄여서 IS로 표현하기도 합니다.이 IS는 2가지를 측정하고자 하였는데요, 첫 번째로는 생성된 데이터의 품질이 얼마나 given class와 유사하냐, 두 번째로는 생성된 데이터가 얼마나 다양하게 형성되었냐 입니다. 이를 측정하기 위해 IS는 다음과 같이 정의됩니다.

출처 : 카이스트 산업 및 시스템 공학과 박찬영 교수님 지식서비스를 위한 기계학습 강의자료
Expectation 안에서 x는 generate된 샘플을 의미하고 y는 x가 given class에 속하게 되는 확률, likelihood가 된다. 이 확률은 Inception Network라는 Classifier를 정의하여 그 모형에서, 주어진 이미지 x를 가지고 y라고 잘 분류를 하게 되면, 그 샘플은 잘 생성이 된 것입니다. 이 부분이 바로 구하게 된 distribution의 sharpness를 나타내는 스코어입니다. 반면, p(y)는 marginal distribution을 의미합니다. 아래 수식과 같이 나타낼 수 있습니다.
즉, 이러한 샘플들은 다양한 곳에서 샘플링 되어야 하기 때문에 y에 대한 데이터 분포는 균일해야합니다. 즉, 엔트로피가 커야 합니다. p(y|x)는 낮은 엔트로피를 가져야 하고 p(y)는 높은 엔트로피를 가져야 하죠. 이를 간단하게 그림으로 나타내면 아래와 같게 됩니다. 
이 때 두 분포 간의 KL-Divergence를 계산해 그 값을 sharpness와 variability를 나타내는 스코어로 정의를 하게 됩니다. 따라서 위처럼 표시가 가능하게 되고 그 값에 exponential을 취하여 최종 score로 활용하게 됩니다. 

 

그리고 다음으로는 Frechet Inception Distance (FID)라는 지표를 사용하게 됩니다. 본 지표도 IS만큼 중요하게 많이 사용되지만 이번 시간에는 따로 다루지는 않겠습니다. 본 지표도 굉장히 중요하기 때문에 참고하실 분들은 다음 블로그 링크들을 참고하시면 좋을 것 같습니다. https://m.blog.naver.com/chrhdhkd/222013835684https://wikidocs.net/149481

 

 

다음으로는 이러한 GAN을 바탕으로한 많은 모형 아키텍처를 다루어보도록 하겠습니다. 정말 많은 모델들이 나왔지만, 대표적으로 이번 포스팅에선 CGAN, BiGAN, ACGAN, CycleGAN만을 간단하게 개념을 소개해 드리도록 하겠습니다.

 

Conditional GAN

: Mirza, M., & Osindero, S. (2014). Conditional generative adversarial nets. arXiv preprint arXiv:1411.1784.

 

CGAN의 경우 다음 문제를 해결하고자 하였습니다. "특정 class에 대한 샘플을 생성하고 싶다면? 그러한 제약 조건을 GAN에 줄 수 있다면?" 그래서 실제 Generator와 Discriminator가 이를 분간할 수 있게 Generator가 학습할 때 노이즈와 함께 class 정보를 주게 되고 Discriminator가 real data를 학습할 때 class 정보를 주게 됩니다. 그래서 class에 대한 제약 조건이 들어간 채로 GAN loss를 계산하게 됩니다. 바로 아래와 같은 형태로 말이죠.

기존 GAN과 다른 점은 바로 저 빨간 부분, 즉 class에 대한 제약이 들어간 것 외에는 다른 부분은 크게 다른 부분은 없게 됩니다. 바로 이 class 정보는 원 핫 벡터 형식으로 주어지고 다음과 같이 생성됨을 확인하였다고 합니다.
출처 : 카이스트 산업 및 시스템 공학과 박찬영 교수님 지식서비스를 위한 기계학습 강의자료

 

Bidirectional GAN 

: Donahue, J., Krähenbühl, P., & Darrell, T. (2016). Adversarial feature learning.  arXiv preprint arXiv:1605.09782 .

BiGAN은 Generator가 샘플을 만들어낼 때, 그냥 노이즈에서 출발하는 것이 아니라, 샘플들의 feature를 어느 정도 알고 있다면 더 생성을 잘하지 않을까? 하는 아이디어에서 출발합니다. 즉, representation learning을 활용하는 거죠. 단순 noise vector만이 아니라 latent vector를 활용하자는 것입니다. 

 

이를 간단하게 도식화해보면 다음과 같습니다.

Donahue, J., Krähenbühl, P., & Darrell, T. (2016). Adversarial feature learning.  arXiv preprint arXiv:1605.09782 .
즉 위의 z는 noise vector고 x는 real input입니다. 여기서 기존에는 Generator와 Discriminator만 사용되지만 아래 밑단처럼 E라고 하는 Encoder가 추가됩니다. 이 encoder를 통해 E(x)를 도출하고 이 정보와 G(z) 정보를 넘기게 되어 Discriminator에게 판단을 맡기게 됩니다. 즉, Generator와 Encoder는 서로가 Discriminator를 속이기 위해 학습을 수행하게 됩니다. 따라서 이는 아래와 같이 objective function이 구축됩니다.

 

Auxiliary Classifier GAN 

: Odena, A., Olah, C., & Shlens, J. (2017, July). Conditional image synthesis with auxiliary classifier gans. In International conference on machine learning (pp. 2642-2651). PMLR.ACGAN은 기존 CGAN에서 discriminator에게 class를 주지 말고 pre-trained된 classifier를 통해 real, fake 외에도 class에 대한 구분을 할 수 있게끔 design을 하는 것을 제안합니다. Q라고 하는 classifier를 통해 분류는 수행되고 여기서 Q는 매우 잘 분류를 수행하는 모형을 사용하게 됩니다. 아래 그림이 그 차이를 한 눈에 보여주는 도식도입니다. 

출처 : https://twitter.com/ch402/status/996784269782495234/photo/1

 즉 ACGAN은 바로 discriminator가 class 정보를 받지 않는다는 것이 특징입니다. pre-train 모형을 사용함으로서 더 강력하게 class를 구분할 수 있게 되죠. 그리고 기존 GAN이 겪은 mode collapse 문제에 잘 대응할 수 있게 됩니다. Loss function은 아래와 같이 구축되게 됩니다. 기존 GAN Loss를 조금 조작했는데, Q의 loss를 같이 넣어준 점이 CGAN과 유사한 것을 확인할 수 있습니다. 

출처 : 카이스트 산업 및 시스템 공학과 박찬영 교수님 지식서비스를 위한 기계학습 강의자료

 

Cycle-consistent adversarial networks 

: Zhu, J. Y., Park, T., Isola, P., & Efros, A. A. (2017). Unpaired image-to-image translation using cycle-consistent adversarial networks. In Proceedings of the IEEE international conference on computer vision (pp. 2223-2232).

 

Image-to-image translation을 수행한다고 해보겠습니다. 아래의 왼쪽 그림처럼 image Pair가 쌍으로 잘 매칭이 되는 경우는 일반적인 CGAN으로 수행을 할 수 있습니다. 

출처 : 카이스트 산업 및 시스템 공학과 박찬영 교수님 지식서비스를 위한 기계학습 강의자료

하지만 오른쪽 그림처럼 pair를 매길 수 없는 경우, 즉 실제 사진과 그림 사진만 데이터로 받게 된다면 이는 제대로 image-to-image translation을 학습하는 것이 만만한 문제는 아닐 것입니다. 그래서 CycleGAN은 2개의 CGAN을 사용해서 이 문제를 풀고자 합니다. 

Unpaired인 2개의 이미지 도메인 X, Y가 있다고 하면, 2개의 Generator ( G, F )와 2개의 Discriminator ( Dx, Dy )를 구축합니다. 그리고 Generator G의 경우 X에서 Y로 convert하는 것을 학습한다면 Generator F는 Y에서 X로 convert하는 것을 학습하게 됩니다. 아래 그림이 이를 잘 보여줍니다.

그리고 이를 수행하기 위한 과정으로 Cycle-consistency loss를 정의합니다. 아래 그림을 보시죠.

즉, Y가 만약 입력이라고 하면, Generator F를 통해 F(Y)를 만들게 됩니다. 이는 X와 유사하겠죠. 그리고 이 F(Y)를 다시 Generator X를 넣어 Y 비스무레 한걸 만듭니다. 그러면 우리는 저 수식이 바로 reconstruction loss라는 것을 알 수 있습니다. 이 loss를 바로 cycle-consistency loss라고 부릅니다. 

 

그리고 이걸 정리하면 아래 그림과 같습니다.

출처 : 카이스트 산업 및 시스템 공학과 박찬영 교수님 지식서비스를 위한 기계학습 강의자료

아래 그림에서 저 빨간 부분이 바로 Cycle-consistency loss가 됩니다. reconstruction error로 구성되어 있죠. 그리고 앞에는 (G,Dy), (F,Dx) 쌍의 GAN loss들로 이루어져 있습니다. 이렇게 3개의 term으로 최종 loss function을 구성하게 됩니다. 

 

그래서 아래와 같이 결과를 만들었다고 합니다.

 

 

이 외에도 GAN 기반의 다양한 모형들이 등장했습니다. 이에 대해서도 논문들을 공부하는대로 바로 리뷰 포스팅을 올리겠습니다.

 

이상 GAN에 대한 포스팅을 마치도록 하겠습니다! 긴 글 읽어주셔서 감사합니다!