2017년 2월 13일 월요일

초짜 대학원생의 입장에서 이해하는 Deep Convolutional Generative Adversarial Network (DCGAN) (1)

* Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks - Alec Redford et al. (2016)을 기본으로 작성한 리뷰. 

오늘 다룰 논문에서 보여줄 내용에서 제가 아주 재미있다고 생각한 부분을 먼저 소개해드리면서 시작해보겠습니다.
$$KING~(왕) - MAN~(남자) + WOMAN~(여자)$$
만약 위에 수식을 계산해야한다면 어떤 단어가 답이 될 것이라 생각되시나요?
$$QUEEN~(여왕)$$
은 어떤가요? 사람에게는 이런 연산이 그리 어려운 일이 아니지만 컴퓨터에게 이런 연산은 사실 1) 단어의 의미를 이해하고 2) 그에 맞는 새로운 단어를 찾는 생각보다 고차원의 처리가 필요한 어려운 문제일 수 있습니다. 이런 문제를 인공신경망으로 해결하려 한 것이 word2vec이란 이름으로 연구되어있고 이 또한 상당히 흥미로운 주제 중 하나입니다.

오늘 소개해드릴 DCGAN은 이런 문제를 단어나 말뭉치가 아닌 이미지에서 하는 것이 가능하다는 것을 보여줍니다. 예를 들자면 실제 논문에 있는 그림인데 다음과 같은 것을 말합니다:


지금 여기에 나온 사진들은 실제 사진 등으로 찍은 이미지가 아닌 모두 다 학습된 뉴럴 네트워크가 만들어낸 이미지입니다.

이 이미지를 만들어내는 입력값($z$) 중에 "안경을 쓰고 있는 남자들"을 그리게 하는 입력값들을 모아 평균치를 구하고, "안경 없는 남자""안경 없는 여자"들을 만들어 내는 입력값들에 대해서도 평균치를 구한 후 각각 빼고 더해주면 새로운 입력값($\tilde{z}$)들이 나오겠지요?

그 입력값들($\tilde{z}$)을 다시 뉴럴 네트워크에 넣어서 이미지가 뭐가 나오는지 보면 놀랍게도 "안경을 쓴 여자"가 나온다는 것입니다. 심지어 이 결과들이 처음부터 이런 문제를 풀기 위한 것이 아니라 이미지를 생성하기 위해 학습을 하고나서 부수적으로 얻은 결과라는 것이 매우 놀랍죠....

아무튼 여러분이 DCGAN에 흥미를 가지셨다면 성공입니다. 이젠 DCGAN이 어떻게 이런 결과가 나오도록 학습한 것인가?!에 대해 찬찬히 살펴보겠습니다.



DCGAN이 대단한? 이유


GAN의 불안정성


Ian Goodfellow가 GAN을 발표한 이후로 많은 분야에 GAN이 적용하여 연구가 되었지만 그 때마다 항상 불안정한 구조로 인한 문제가 따라붙었습니다. 그래서 GAN을 다룬 논문들을 보면 하나같이 이 부분에 대한 어려움에 대하여 얘기를 하고 있고, NIPS 2016에서 Tutorial이나 workshop 세션에서도 큰 주제가 되었던 부분이 바로 이 "GAN의 안정화"였습니다.

Minimax 혹은 saddle problem을 풀어야하는 GAN은 어쩔 수 없이 태생적으로 불안정할 수 밖에 없는데요 앞선 글에서 살펴보았듯이 이론적으로는 fixed solution으로 수렴하는 것이 보장되어 있지만, 실제 적용에서는 이론적 가정이 깨지면서 생기는 불안정한 구조적 단점을 보이곤 했습니다.

이후 나온 여러 논문들이 GAN의 이런 단점을 지적하고 극복하기 위해서 다양한 접근을 통해 해결하고자 했는데, DCGAN은 개중 거의 끝판왕이라고 불릴만한 결과를 보여주며 이 논문 이후에 나오는 대다수의 GAN 구조는 전부 다 어떤 식으로든 DCGAN 구조를 사용했다고 해도 과언이 아닙니다.

"Most GANs today are at least loosely based on the DCGAN architecture." - NIPS 2016 Tutorial by Ian Goodfellow

DCGAN은 이름에서 알 수 있듯이 Convolutional 구조를 GAN에 녹여 넣었습니다. 아시다시피 지도학습(Supervised Learning)에 Convolutional Neural Network (CNN)을 이용한 것은 Computer vision application에 큰 반향을 일으켰죠. 그에 반해 비지도 학습(Unsupervised Learning)에 CNN을 이용하는 것은 아주 적은 관심을 받았는데요 DCGAN paper는 지도학습에서의 CNN의 성공과 비지도 학습 간의 격차를 줄이는 데에 큰 역할을 하였습니다.....만

사실 위와 같은 역사적 중요성과 같은 추상적이고 서사적?인 영향력을 굳이 말할 필요도 없이 그냥 결과가 엄.청.납니다.

일단 DCGAN에서 제시한 가이드 라인대로 GAN 구조를 짜면 상당히 안정적으로 학습이 되는 것을 볼 수 있는데다, 생성 모델(Generative Model)이 보여줄 수 있는 역할은 거진 다 보여주었습니다.
* 도대체 얼마나 많이 노가다를 해야...이렇게 "일반적으로" 안정화할 수 있는 네트워크 구조를 찾아낼 수 있는건지...아니 facebook이 대단한건가..orz...

이 논문에서 기여한 바를 정리해보면,

  • 대부분의 상황에서 언제나 안정적으로 학습이 되는 Convolutional GAN 구조(DCGAN)를 제안하였다는 점
  • 마치 word2vec과 같이 DCGAN으로 학습된 Generator가 벡터 산술 연산이 가능한 성질을 갖고 이것으로 semantic 수준에서의 sample generation을 해볼 수 있다는 점
  • DCGAN이 학습한 filter들을 시각화하여 보여주고 특정 filter들이 이미지의 특정 물체를 학습했다는 것을 보여주었다는 점
  • 이렇게 학습된 Discriminator가 다른 비지도 학습 알고리즘들과 비교하여 비등한 이미지 분류 성능을 보였다는 점

이렇게 네 가지로 요약할 수 있겠습니다.

그 중 제가 상당히 재미있다고 그리고 대단하다고 생각한 부분들을 강조해두었는데요. 테크니컬한 구조에 대한 설명도 좋지만 학습된 네트워크를 분석한 결과들이 더 흥미롭기 때문에 구조에 대한 부분은 가볍게 언급하고 분석에 대한 내용을 중점적으로 소개해보도록 하겠습니다.

DCGAN이 해결하고자 하는 문제


생성 영상의 해상도


일단 DCGAN이 처음으로 Convolution을 GAN에 넣으려 시도한 논문은 아닙니다. 이전에도 다른 연구자들이 Convolution을 GAN 구조에 넣으려 시도했으나 별로 좋은 결과를 얻지는 못했는데요 자연스럽게 굳이 Convolution을 왜 넣으려고 하는가? 하는 의문이 들 수 있습니다.

제가 아는 바로는 Scale up의 문제 때문에 그런 것으로 알고 있습니다. DCGAN의 이전에 고해상도? 혹은 높은 품질의 이미지 생성이 가능하기라도 한 GAN 모델으로는 LAPGANs(Denton et al.,2015)가 유일했습니다. 그러다 최소한 한정된 이미지 종류에 대해서긴 하지만 (예를 들자면, 침실 이미지들) DCGAN이 최초로 상당히 높은 품질의 영상을 single shot으로 만들어 내는 것에 성공하였습니다.
* 사실 여기서 DCGAN이 만들어내는 이미지도 고해상도라고 하기엔 참...갈 길이 멀지만요...

이전에 있던 여러 생성 모델들의 결과를 보면, 사실 MNIST 숫자에 대한 결과들이나 질감 합성(texture synthesis) 등에 한정적으로 사용이 된 경우가 아니면 현실로부터 얻을 수 있는 자연적인 영상을 생성하는 것에 성공한 모델은 거의 없다고 보시면 됩니다. Ian Goodfellow가 제시한 초기 GAN도 생성된 이미지를 보면 사실 해석을 하기엔 뭔가 좀 그런 영상들을 만들어내었지 정말 사람이 보아도 그럴듯한 이미지를 만들어 내지는 못했습니다. LAPGAN은 조금 더 그럴듯한 영상을 만들기는 했지만 구조로부터 기인하는 노이즈로 인해 물체들이 마치 흔들린 듯한 형체로 생성되는 문제가 여전히 남아있었습니다.

CNNs are Black-box Methods 


생성 영상의 품질에 대한 문제 외에도 Neural Network는 항상 black-box method일뿐이라는 지적을 피할 수가 없죠. 이를 해결하기 위해 Zeiler가 2014년에 deconvolution을 이용해서 convolution filter들이 네트워크에서 어떤 역할을 하고 있는지 보여주려한 시도 등이 있었지만 여전히 남아있는 문제들이 있습니다. (Zeiler는 해당 논문을 쓰고 Clarifai라는 벤처를 세워서 잘 나가고...있나? 확실히 논문 내용은 꽤 인상깊었는데요)

Measure for sample evaluation 


특히나 생성 모델(Generative Model)의 성능을 판단하는 기준이 모호하기 때문에 실제 네트워크가 잘했는지 못했는지를 정량적으로 얘기하기가 쉽지 않다는 것이 같이 결부되면서 문제가 심화됩니다.

아무래도 정답이 있는 것이 아니다보니 생성한 이미지가 '얼마나' 정확한지 혹은 그럴듯한지를 얘기하기가 쉽지 않을뿐더러 그에 맞는 측정 방법이 마땅치도 않습니다. 주관적인 판단으로 얘기를 할 수는 있겠지만 말 그대로 이는 선호도 조사와 다를바가 없지요.

이 때문에 아직도 이 부분은 많은 연구가 필요한 부분으로 남아있는 것 같습니다. 다만 이런 측정 방법이 없는 문제를 우회적으로나마 해결하기 위해 GAN의 학습이 끝난 이후 얻은 Discriminator 혹은 Generator의 feature(weight)들을 이용하여 데이터를 transform한 후 K-mean clustering 등을 통해 분류한 결과가 얼마나 좋은 지로 간접적으로 얘기하는 방법을 택하는 경우도 많이 사용되는 것 같습니다.

기존의 GAN 논문에서는 Parzen window based likelihood를 이용하여 네트워크가 생성한 이미지와 원래 이미지가 얼마나 유사한지를 비교하는 방식을 사용했는데, 최근 NIPS 2016 Tutorial report에서도 언급되었듯 더이상 이런 방식을 사용하지는 않는 것 같습니다. 이에 관한 얘기는 Theis의 2015년 논문 "A note on the evaluation of generative models"를 보시면 될 듯 합니다.
* 자세히 읽지는 않았지만 최소한 Parzen 방식은 쓰지 말자는게 주요 메시지인 것으로 보입니다.

짚고 넘어갈 점


사실 마지막 Measure에 관한 부분은 DCGAN이 해결했다거나 해결하고자 한 문제는 아닙니다. 하지만 DCGAN 논문을 보면, 측정 방법을 사용하지 않더라도 최소한 생성 모델이 학습이 잘 되었다는 것을 어떻게 보여줄 수 있는지 매우 잘 분석해두었습니다.

(이 부분은 논문에 나온 내용이 아니라 제가 해석한 것입니다만)
즉, 생성 모델에 대한 연구에서는 측정 방법보다 더 중요한 점을 보여줄 수 있어야 한다는 일종의 틀? 기준?을 저자들이 분석해둔 것 같습니다. 제 스스로 생각하길 DCGAN 논문에서 개념적으로 얻을 내용이 있다면 중 이 부분을 캐치하는 것이 아닐까 합니다.

앞으로 나올 결과 분석들이 이 기준에 따라 제시가 되는데요 크게 두 가지로 압축됩니다:

  1. Generator가 이미지를 외워서 보여주는 것이 아니란 것을 확인시켜줘야합니다. (즉, memorization이 일어난 것이 아니란 것을 보여줘야 합니다.) 
  2. Generator의 input 공간인 latent space ($z$ space)에서 움직일 때 급작스러운 변화(sharp transition)이 일어나는 것이 아닌 부드러운 변화를 보여줘야합니다. (이를 논문에서는 "walking in the latent space"라고 표현하는데요 재미있는 표현인 것 같습니다.)

1과 2는 사실 같은 맥락에서 이해할 수 있습니다. Memorization이 일어난다는 말은 Generator가 유의미한 특정을 학습하는 것이 아니라 overfitting이 일어나서 1:1 matching을 하는 mapping을 배웠다는 얘기입니다. 따라서 굳이 latent space에서 어떤 부드러운 변화가 있을 이유가 없지요(바로 옆의 $z$값이 다른 sample과 1:1 연동이 될 수 있다는 말입니다.).


DCGAN Architecture


DCGAN Generator 구조

DCGAN의 구조에 대한 얘기는 생각보다 단순합니다. 어떻게 하면 된다는 식으로 거의 메뉴얼에 가깝게 작성해두었는데 다음과 같습니다:


저자들 스스로도 이런 구조를 제안하기 위해 "extensive research and testing"을 통해서 CNN architecture 중 세 가지 최신 변화를 적용하고 바꿔서 성공하였다고 얘기했는데 음.....도대체 얼마나 노가다를 한 것일까...상상이 안 가는군요...ㅋㅋ

아무튼 위에 내용을 좀 풀어보자면 다음과 같습니다.

먼저 max pooling과 같이 미분이 되지 않는 부분을 convolution으로 대체하여 "all convolutional net" (Springenberg et al 2014) 사용했다고 합니다. Spatial pooling이 Convolution을 통해 되기 때문에 어떤 의미로는 generator와 discriminator가 own spatial upsampling을 학습 수 있게 해주어 구조의 자유도를 증대한 것으로 보입니다.

그리고 왜인지는 전혀 모르겠습니다만.... 보통 MNIST 예제를 보면 마지막에 fully connected layers가 붙곤 하지요? 요즘은 이를 쓰지 않고 없애는 추세라고 합니다...(왜 때문이죠?!) 여기에 가장 강력한 예시로는 global average pooling을 이용한 Mordvintsev et al. 논문의 art image classification 모델이라 하는데 보질 않아서 추후에 보고 혹시 뭔가 이론적인 이유가 있다면 추가하도록 하겠습니다.

세 번째로 Batch Normalization (BN)을 추가한다는 것인데요. 뭐 요즘은 하도 Batch Normalization을 사용하는 것이 거의 루틴과 같이 정형화되어서 크게 신선하다 느껴지지는 않네요. 다만 모든 layer에 BN을 추가하면 문제가 생기고 Generator의 output layer와 discriminator의 input layer에는 BN을 넣지 않는다고 세세한 팁이 있습니다. 이유를 추측해보자면 아무래도 Generator가 생성하는 이미지가 BN을 지나면서 다시 normalize 되면 아무래도 실제 이미지와는 값의 범위가 다를 수 밖에 없으니 그런 문제가 생기지 않을까 싶습니다. 저자들은 BN을 넣으면 GAN의 고질적 문제 중 하나인 Mode collapsing 문제를 어느 정도 완화해준다고 하는데 이 부분은 사실 아직 해결되었다고 보기는 어렵습니다. NIPS 2016 Tutorial에서도 언급되었습니다만 BN이 거꾸로 특정 문제를 일으키기도 하는 경우가 있습니다.

마지막으로 ReLU를 사용하였다는데 generator에서는 ReLU를 사용하되 output에서만 Tanh를 사용하였고 discriminator에서는 leacky ReLU를 사용해야 잘 작동한다고 합니다. 이 역시도 왜 잘 되는지를 명확히 설명하기는 좀 어렵네요.
* 역시나..도대체 어떻게 이걸 다 시도해본거지?!!!!

이 정도로 일단 논문의 전반부 소개가 다 끝난 것 같습니다. 사실 테크니컬한 구조에 대한 얘기는 이렇게가 다이고 뒤에 분석이 매우 흥미로운 논문이라 이렇게 끊기가 조금 그렇습니다만 스크롤이 길어지는 관계로 다음 편에서 재밌는 분석 부분만 다뤄보도록 하겠습니다.

다음 읽을거리
(GAN이 어떻게 이런 이미지를 만드는지 알고 싶다면)

참고문헌:
[1] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks - Alec Radford et al. 2016
[2] Generative Adversarial Nets - Ian Goodfellow et al. 2014 논문, 
[3] NIPS 2016 Tutorial: Generative Adversarial Networks



댓글 5개:

  1. 비지도학습에서 이러한 성과를 내다니 정말 대단한 논문같아요. 저도 논문보면서 한번 따라해보고 싶네요. 포스트 잘읽었습니다. 감사합니다!

    답글삭제
    답글
    1. 안녕하세요 Prosik님 댓글 감사합니다. 대단한 논문이죠ㅎ 음 GAN이 비지도학습에서 연구해야할 방향을 어느정도 보여주고 있는 것 같습니다.

      삭제
  2. 감사히 읽습니다. 이미 아실지 모르겠지만 FC를 쓰게되면 결정적으로 weight(=parameter)가 엄청나게 늘어나게 됩니다.
    전체 모델에서 parameter 비중 대부분을 잡아먹지요 = 연산량도 엄청남.

    답글삭제
    답글
    1. 정현석님 답변 감사합니다. 어림짐작으로 알고 있었는데 덕분에 좀 더 구체적으로 확신하게 되었습니다ㅎ

      삭제
  3. 만약에 학습에 사용된 데이터 중에 안경쓴 여자에 대한 샘플이 없어도 인풋 배리어블 z끼리 빼고 더하는 과정을 통해서 안경쓴 여자 사진을 생성해낼 수 있을까요?

    답글삭제