레이블이 GAN인 게시물을 표시합니다. 모든 게시물 표시
레이블이 GAN인 게시물을 표시합니다. 모든 게시물 표시

2019년 5월 20일 월요일

[PR12-Video] 87. Spectral Normalization for Generative Adversarial Networks


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 deep learning papers

#87.Spectral Normalization for Generative Adversarial Networks


이 리뷰에서는 ICLR 2018에 발표된 SNGAN 논문을 리뷰하겠습니다. 즐겁게 들어주시면 감사하겠습니다.




(paper) Spectral Normalization for Generative Adversarial Networks

Paper:  https://openreview.net/forum?id=B1QRgziT-
슬라이드: https://www.slideshare.net/thinkingfactory/pr12-spectral-normalization-for-generative-adversarial-networks

이 발표가 제가 PR12에서 마지막으로 발표한 논문이었네요. 처음 시작할 때는 언제 100회가 끝날까 싶었는데, 새삼 시간이 참 빠르게 흐른다는 생각을 해봅니다. 끝까지 열심히 했는데 다음에도 여유가 된다면 다시 참여하고 싶네요. 지금도 새로운 멤버로 계속되고 있는 것으로 알고 있으니 다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임 에서 확인하시면 되겠습니다 :)

다음 읽을거리






2019년 5월 13일 월요일

카카오 리포트 (Part II)

지난 글에서 GAN의 기본 원리와 배경 이론에 대해 살펴보았다면, 이번 글에서는 GAN에 대한 기본적인 이해를 바탕으로 GAN의 특징과 장단점에 대해 조금 더 심화된 내용을 다루고자 한다. 

DCGAN


초창기 GAN에 대해 얘기하려고 하면 빼놓을 수 없는 연구가 바로 DCGAN이다. GAN이 지금은 매우 뛰어난 결과들을 보여주고 있지만, 초기 결과는 아이디어의 참신성에 비해 그리 인상적이지 않았다. GAN 구조가 학습시키기 매우 어려웠다는 것도 여러 이유 중 하나였는데 Deep Convolutional GAN (DCGAN)이 나온 이후, GAN으로 만드는 결과들이 매우 급격하게 발전하기 시작했다. 크게 이 논문이 기여한 바를 정리해보면,

  • 대부분의 상황에서 언제나 안정적으로 학습이 되는 구조를 제안하였다는 점
  • 마치 word2vec과 같이 DCGAN으로 학습된 생성기가 벡터 산술 연산이 가능한 성질을 갖고 이것으로 의미론적(semantic)으로 신규 샘플을 생성할 수 있다는 것을 보여주었다는 점

등이 있겠다. 

DCGAN 논문은 GAN이 잘 학습되는 구조를 매우 세세한 가이드라인으로 제시한 연구이다. 이 논문 이후에 나온 대부분의 GAN 연구들은 어떤 형태로든 DCGAN 구조를 바탕으로 하고 있다고 할 정도로 매우 잘 확립된 구조이다. 일단 DCGAN에서 제시한 가이드 라인대로 GAN 구조를 짜면 상당히 안정적으로 학습이 된다. 이런 구조를 발견하기 위해서 얼마나 대학원생들이 힘들었을지 논문의 한 구절에서 언뜻 느껴볼 수 있다. 

“However, after extensive model exploration, we identified a family of architectures that resulted in stable training across a range of datasets and allowed for higher resolution and deeper generative models.”

DCGAN은 이름에서 알 수 있듯이 convolution 구조를 GAN에 잘 결합한 것이다. Convolutional neural network (CNN)이 지도학습(supervised learning)에서 매우 큰 성공을 거둔 것에 비해 비지도 학습(unsupervised learning)에서는 상대적으로 잘 사용되지 못하였다. 그런 면에서 DCGAN 논문은 지도학습에서 CNN의 성공적인 모습과 비지도 학습에서의 격차를 줄이는 데에 큰 역할을 하였다고도 평가된다. 그러나 이렇게 추상적인 영향력을 굳이 말할 필요가 없을 정도로 생성한 이미지의 질부터 매우 인상적인 것을 볼 수 있다. 

DCGAN 결과에서 가장 재미있는 부분은 아래와 같이 생성기의 입력으로 들어가는 $z$ 은닉 공간(latent space)에서 벡터 산술 연산이 가능하다는 점이다. 가장 흔한 예시로 word2vec 연구가 있다. 다음 수식을 계산하고 답을 추정해보자: $$KING~(왕) - MAN~(남자) + WOMAN~(여자)$$
사람은 생각보다 쉽게 
$$QUEEN~(여왕)$$
이라는 단어를 연상할 수 있지만 컴퓨터에게 이런 연산은 사실 

  1. 단어의 의미를 이해하고,
  2. 그에 맞는 새로운 단어를 찾는 등의

매우 고차원의 처리가 필요한 어려운 문제이다. 기존의 word2vec 연구에서는 뉴럴넷을 사용하여 말뭉치에서 실제로 단어 간의 관계를 학습하는 것을 보여주었고, DCGAN은 이런 문제를 말뭉치가 아닌 이미지에서 하는 것이 가능하다는 것을 보여주었다. 아래 그림이 바로 그 결과이다.



실제로 모두 DCGAN으로 생성된 결과들이다. 상당히 진짜 같은 결과만으로도 놀라운데, 이미지가 갖는 의미를 바탕으로 직관적인 벡터 산술이 된다는 것을 알 수 있다. 안경을 쓴 남자와 그냥 남자 그리고 일반 여자를 생성하게 하는 입력값들이 은닉 공간에 각각 벡터로 존재하고 있을텐데, 각각의 벡터를 서로 빼고 더해주면 최종적으로는 안경을 쓴 여자를 생성하는 입력 벡터를 찾을 수 있다는 것이다. 

물론 생성기의 입력인 $z$ 벡터 하나만으로는 깔끔한 결과가 나오지 않기에 세 개 정도를 평균한 $\bar{z}$ 벡터를 사용해서 결과를 만든 것이기는 하지만 신기한 것은 매한가지다. 어떻게 보면 네트워크가 영상의 의미를 이해했다고 생각할 수 있다. 

이 외에도 아래와 같이 침실을 생성한 결과 그림들을 보면 작은 그림이긴 하지만 꽤나 그럴듯한 결과를 만들어 냈다는 것을 확인할 수 있다. 

다섯 번 epoch을 돌려 학습한 후 생성된 침실 사진

뿐만 아니라 논문에서 "공간을 걷는다"라고 표현하였듯이 은닉 공간에서 천천히 벡터의 값을 바꿔가면, 생성기가 내보내는 이미지가 하나의 침실에서 다른 침실로 위화감 없이 부드럽게 변화하는 것을 볼 수 있다. 특히 벽이었던 부분이 자연스럽게 하나의 창으로 변화해가는 것을 보면 매우 놀랍다. 

"은닉 공간에서 돌아다니기"

만약 생성기가 단순하게 영상을 외워서 보여줄 뿐이라면 주어진 특정 입력에 대해 특정 이미지를 내보내는 일대일 대응 함수를 학습한 것으로 생각할 수 있다. 이럴 경우 은닉 공간에서 굳이 부드러운 변화가 있을 이유가 없다. 바로 옆의 $z$ 벡터가 전혀 다른 샘플과 일대일로 연동될 수 있기 때문이다. 이렇듯 은닉 공간에서 벡터 연산이 가능하다는 것과 입력에 변화를 줬을 때 생성되는 결과가 부드럽게 변하는 것을 보는 등의 분석이 중요한 이유는 우리가 학습시킨 GAN의 생성기가 일대일 대응 함수와 같이 매우 단순한 의미없는 함수(mapping)를 학습한 것이 아니란 것을 시사하기 때문이다. 

이렇게 수많은 이미지를 표현할 수 있는 정보들을 포괄할 수 있으면서도 부드러운 변화에 대응할 수 있는 함수를 학습할 수 있게 하기 위해서 은닉 공간을 잘 정하는 것도 매우 중요한 일이다. GAN에서는 보통 $z$ 은닉 공간은 고차원의 가우시안 분포를 많이 사용한다. 적절한 가정 하에서 충분히 복잡한 함수를 사용하여 대응시킬 수만 있다면 임의의 $d$ 차원 분포는 정규 분포를 따르는 $d$개의 변수로 나타낼 수 있다는 것이 알려져 있기 때문이다. 

기존 생성 모델과 GAN의 차이점


그러면 GAN은 기존의 생성 모델들과 어떤 면이 다르기에 이렇게 비교적 또렷한 이미지를 만들 수 있는 것일까? GAN의 특징이자 가장 큰 차이점은 바로 GAN이 사실 샘플러(sampler)라는 것이다.  즉, 직접적으로 데이터의 분포를 학습하는 형태가 아니라 하나의 입력이 들어갔을 때 하나의 출력을 주는 형태의 독특한 특징을 지닌다.

조금 더 자세히 이해하기 위해 "확률 모델을 학습한다"는 것에 대해 생각해보면,


모델을 추정한다는 것은 일반적으로 우리가 알고 싶은 $\cal{P}$라는 진짜 데이터의 분포가 어딘가에 있을 때, 이로부터 얻은 샘플들이 i.i.d.하게 관측되었다고 가정한 후 $\cal{Q}$라는 모수 모델 클래스(parametric model class)를 만들어 그 안에서 $\cal{P}$와 가장 "가까운" 모델의 모수를 찾아내는 것을 말한다. 가장 간단한 예시로 데이터의 분포가 정규 분포를 따를 것이라 가정하여 가우시안 모델을 세우고 현재 내가 갖고 있는 데이터를 가장 잘 설명할 수 있는 평균과 분산 값을 찾는 과정을 생각해볼 수 있다.

이를 위해서는 $\cal{P}$와 $\cal{Q}$의 "차이" 혹은 "거리"를 계산할 수 있어야 한다. 그러면 구한 두 분포 사이의 거리를 줄여나가는 방향으로 모델의 모수들을 조정할 수 있고, 이 과정을 적합(fitting)이라고 한다. GAN도 Jensen-Shannon divergence라는 측도를 사용하여 분포 간의 거리를 계산하고 이를 최소화하는 방향으로 생성기를 학습한다고 분석할 수 있다. 

보통 기존의 방식에서는 아래와 같은 $\cal{Q}$에 대한 가정들을 사용하는데:
  • tractable sampling
  • tractable parameter gradient with respect to sample
  • tractable likelihood function

이 중 가장 강력한 가정이 바로 우도 함수(likelihood function)가 계산 가능하다(tractable)는 것이다. 많은 경우 현실의 모델은 계산이 불가능한 형태의 수식으로 나타나는 것을 상기한다면 기존의 모델들이 얼마나 강력한 가정을 사용하고 있는지 알 수 있다. 

한편 GAN 형태의 모델들은 임의의 확률 변수 입력 값을 사용하여 비선형 변환 함수를 통과시키면 출력으로 샘플이 하나 튀어나오는 구조이다. 마치 버튼을 누르면 샘플이 튀어나오는 자판기처럼 생각할 수 있다. GAN 모델들의 독특한 점은 바로 이 부분에서 나온다. GAN 모델들은 다른 확률 모델들과는 달리 우도 함수를 근사하려하지 않고 샘플을 뽑아주는 함수를 학습했을뿐이기 때문에 우도 함수 모델링이 필요없는(likelihood-free) 모델이라고 할 수 있기 때문이다. 

물론 이 부분은 GAN의 특징일뿐 장점일 수도 있고 단점이라 할 수도 있다. 데이터 분포에 대한 모델을 특정하지 않고 하나의 샘플을 뽑아서 보여주기 때문에 고정된 모델에 한계에 제약을 받지 않고 또렷한 이미지를 보여줄 수 있기도 하지만, 다른 한편으로는 정작 이미지를 잘 뽑더라도 데이터의 분포에 대한 정보를 직접적으로 얻기는 어렵기 때문에 분포를 알았을 때 시도해볼 수 있는 많은 분석들을 시도할 수가 없다는 아쉬움이 있다. 이 부분에 대해서는 Ian Goodfellow의 NIPS 2016 tutorial 논문[ref]이나 같은 워크샵에서 발표된 Sebastian Nowozin의 f-GAN [ref] 논문을 참고한다면 조금 더 심화된 내용을 확인할 수 있다.

이외에도 이후 연구된 WGAN에서는 기존의 GAN이 divergence를 측도로 사용하기 때문에 생기는 여러가지 문제를 지적하며 다른 방식의 측도를 제안하는 등, 점차 수식적인 분석과 함께 GAN의 가치 함수 자체를 근본적으로 수정하는 방향으로 연구가 발전되었다. 이를 바탕으로 보다 안정적인 학습과 결과를 보여주었는데 EBGAN LSGAN BEGAN 등 이후 나온 많은 GAN들이 WGAN의 카테고리로 분류할 수 있다.

이렇게 보면 모든 연구가 끝나서 더이상 할 것이 없는 것처럼 보이고 점차 이론적인 문제로 깊게 들어가면서 수학이 많이 들어가고 공학자들이 개입할 수 있는 여지가 없는 것 같지만 아직은 직관이 필요한 부분들이 많이 남아있으며 풀어야할 문제들도 많이 남아있다. 

학습이 예전에 비해 수월해졌다는 것이지 정말 쉬워졌다는 것을 의미하진 않고 네트워크의 안정적으로 학습이 이미지의 질을 보장하지 않는 경우가 많으며 수렴은 여전히 어렵고 이어 소개할 mode collapse나 모델 평가 등 역시 아직도 풀어야 할 문제가 산적해 있다. 그런 의미에서 GAN 학습이 어려운 이유를 하나씩 소개하겠다. 

GAN 학습이 어려운 이유 I: Convergence


지난 글에서 소개하였듯이 원 논문에서 GAN에 대한 이론적 근거를 증명해주었지만 아쉽게도 실제 구현은 이론적 배경이 되는 가정과 거리가 있다. 때문에 GAN 가치 함수를 뉴럴넷을 이용하여 풀었을 때 이상적인 전역해로 수렴한다는 보장이 되지 않는다. 게다가 풀어야하는 문제의 형태부터 이미 쉽게 문제를 풀 수 있는 볼록 함수 형태가 아닌 변수 두 개가 서로 엮여있는 안장점 문제(saddle point problem)를 고려해야하기 때문에 GAN은 학습이 매우 어렵기로 유명하다. 

이 때문에 많은 사람들이 생각보다 간단한 예제에서도 문제를 풀기가 어려울 수 있는데 더 복잡한 문제에서 GAN 형태가 잘 풀릴 것인지에 대해 의문을 제기한 바 있다. 이 문제를 약간 더 직접적으로 느끼기 위해서 실제로 간단한 예제인 $V(x,y) = xy$가 어떻게 생겼는지 그려보면 다음과 같다. 
f(x,y) = xy

이 문제는 $x=0, y=0$에서 안장점을 갖는 매우 대표적인 예시다. 그리고 $x$와 $y$에 대해 최소최대 문제를 풀면 이 안장점이 평형점이라는 것도 쉽게 알 수 있다. 사실 안장점이 모두 평형점이 되는 것은 아니지만 이 경우 하나의 변수에 대한 작은 변화가 다른 변수에 대해 가치 값을 줄일 수 없기 때문에 평형점이 되는 것이다. 만약 이 문제를 구배 감소법(gradient descent)으로 풀면 결과가 평형점 주변에서 수렴하지 못하고 최초 시작점에 따라서 반지름이 정해지는 궤도(orbit)를 영원히 움직이는 것을 확인할 수 있다. 심지어 학습율(learning rate)이 크면, 바깥 방향으로 발산하는 경우도 생길 수 있다. 

이를 수식과 함께 확인해보면 좀 더 명확해진다. 학습율 $\gamma$를 고정하고 $n\in\mathbb{N}$일 때, 각 변수에 대해 구배 감소를 번갈아 계산하는 것은
$$\begin{align*} &x_{n+1} = x_n-\gamma y_n \\&y_{n+1}= y_n+\gamma x_n\end{align*}$$
와 같이 나타낼 수 있다. 이 때,
$$\left[ {\begin{array}{c}
x_{n+1} \\
y_{n+1} \\
\end{array} }\right] = \left[ {\begin{array}{cc}

1 & -\gamma \\

\gamma & 1 \\

\end{array} }\right] \left[{\begin{array}{c}

x_n \\

y_n \\

\end{array} }\right]$$
이므로 여기서 $$\left[{\begin{array}{cc}
1 & -\gamma \\
\gamma & 1 \\
\end{array} }\right] = \frac{1}{\alpha}\left[ {\begin{array}{cc}
\alpha & -\alpha\gamma \\
\alpha\gamma & \alpha \\
\end{array} }\right] = \frac{1}{\alpha}\left[{\begin{array}{cc}
\cos\theta & -\sin\theta \\
\sin\theta & \cos\theta \\
\end{array} }\right] $$
로 바꾸고 $\alpha = \sqrt{\frac{1}{1+\gamma^2}}\in(0,1), \theta = \cos^{-1}\alpha\in\left(0,\frac{\pi}{2}\right)$이라 해보겠다. 고등학교에서 회전 행렬에 대해 배운 사람이라면 위의 행렬식이 매우 익숙할 것이다.  $\gamma\approx0$일 때, 즉 학습율이 충분히 작아서 $\alpha\approx 1$이면 구배 감소의 결과가 언제나 안정한 궤도(stable orbit)으로 빠지고, $\alpha<1$인 경우 $(x_n,y_n)$이 나선형으로 발산하게 된다. 

GAN 학습이 어려운 이유 II: Mode Collapse


앞서 소개한 문제도 그렇지만 GAN 학습이 어려운 이유는 대부분 그 가치 함수의 형태에서 기인한다. 두 번째로 소개할 mode collapse 문제 역시도 GAN의 독특한 가치 함수와 그 문제 풀이 방식 때문에 생기는 것으로 해석할 수 있다. 
Mode Collpase 예시 [ref]

위 그림이 전형적인 mode collapse 문제의 예시다. 맨 오른쪽의 목표 분포를 보시면 가우시안 혼합 모델로 총 여덟 개의 최빈값(mode)이 있는 것을 볼 수 있다. 아래 줄의 그림이 이 목표 분포를 근사하기 위해 GAN으로 여러번 반복하여 학습을 한 결과들을 보여준다. 

GAN이 뽑은 샘플들을 보면 각각의 최빈값들을 각 단계마다 돌아가며 방문하는 것을 볼 수 있다. 즉, 원래라면 윗 줄과 같이 전체 최빈값들을 보고 목표 분포가 여덟 개의 최빈값을 갖는 분포라는 것을 찾아내야하지만, GAN은 그렇게 하지 못하는 모습을 보여준다. 좀 더 직접적인 예를 들자면 숫자가 1부터 8까지 섞여 있는 이미지들로 데이터 분포가 있을 때, 우리는 GAN이 1부터 8까지 모든 숫자들을 만들어낼 수 있기를 바라는데 실제로는 1과 같이 가장 쉬운 한 가지 숫자만 만드는 모델을 학습한다는 것이다. 이런 현상을 하나의 최빈값에만 함몰되는 모델이나 함수를 학습한다고 하여 mode collapse 문제라고 부른다. 

사실 우리가 매 단계마다 최적의 구별자 $D^*$를 계산할 수 있다면야 이런 문제가 생기지 않겠지만 뉴럴넷으로 모델을 만들 경우 수렴이 될 때까지 계산을 매우 여러 번 해야하고 여러 가정이 깨지면서 수렴이 보장되지도 않는다. 따라서 현실적으로는 가치 함수를 각각의 변수에 대해 일정 횟수만큼 번갈아 푸는 방식을 택하는데 이런 방식 때문에 문제가 생기게 된다. 

원래 풀고자하는 GAN의 가치 문제는 다음과 같은 최소최대 문제이다:
$$G^* = \min_G \max_D V(G,D).$$
그렇지만 실제 학습을 할 때는 $G$와 $D$에 대해 번갈아가며 풀어주기 때문에 뉴럴넷의 입장에서는 이러한 최소최대 문제와 아래 같은 최대최소 문제가 구별되지 않는다:
$$G^* = \max_D \min_G V(G,D).$$
문제는 최대최소 문제에서 생긴다. 수식의 안 쪽부터 살펴보면 $G$에 대한 최소 문제가 먼저 있기 때문에 생성자의 입장에서는 현재 고정되어있는 (비최적, non-optimal) 구별자가 가장 헷갈려 할 수 있는 샘플 하나만 학습하면 된다. 즉, 가치 함수를 가장 최소화할 수 있는 최빈값 하나만 내보내면 된다. 이렇듯 GAN의 가치 함수 자체와 엮여 있는 문제이기 때문에 mode collapse 문제는 아직도 GAN에서 완전히 해결되지 않고 있다. 

GAN 학습이 어려운 이유 III: Evaluation


이에 더해 모든 생성 모델이 갖는 고질적인 문제가 파로 평가의 객관성이다. 생성을 한 이미지의 질을 평가할 수 있는 객관적인 기준을 정하는 것이 매우 어렵기 때문에 새로운 모델이 예전의 모델에 비해 발전한 것인지 평가하는 것이 쉽지 않고 연구의 방향을 잡기도 어렵다.

현재 사용되는 방식을 몇 가지 살펴보자면 대표적인 것이 아마존 매카니컬 터크(Amazon Mechanical Turk)를 사용하여 사람이 직접 평가하도록 하는 방식이다. 그러나 이런 방법은 매우 주관적이고, 일관된 평가가 어려우며, 위에서 설명한 mode collapse가 일어난 경우 전혀 모델의 문제점을 파악할 수 없다는 단점이 있다. Mode collapse가 일어난 모델의 경우 생성하는 이미지의 다양성이 부족할 뿐이지 단일 이미지의 자체는 상당히 질이 좋을 수 있기 때문이다.

두번째로는 Inception score라고 하여 구글의 인셉션 이미지 분류 모델에 생성된 이미지를 넣어 나오는 값을 바탕으로 평가를 하는 방식이 있다. 이 방법은 값이 일관되고 어느 정도 객관성을 보장할 수 있다는 장점이 있어 꽤 자주 사용되고 있다. 하지만 굳이 인셉션 모델을 사용해야하는 이유도 없고 어떤 모델의 경우 인셉션 모델에 특화(overfitting)되어 실제 이미지의 질과는 무관하게 점수가 좋게 나올 수도 있다는 문제를 안고 있다.

이렇게 앞서 소개한 문제들 외에도 다양한 연구거리가 남아있겠지만 세 가지로 크게 정리해보았다. GAN 연구가 활발하고 매일 하루가 멀다하고 쏟아지는만큼 더이상 연구할 것이 없고 너무 늦었다고 생각할 수 있으나 알고보면 아직 가야할 길이 멀다.

창GAN기-믿거나 말거나


마지막으로 GAN에 대한 탄생비화 [ref]를 소개해드리면서 글을 마무리하겠다. Ian Goodfellow가 최초로 만든 GAN은 multi-layer perceptron (MLP)을 이용한 매우 단순한 형태의 GAN이었다고 한다. 거짓말 같지만 단 한 번의 시도만에 바로 성공했다는데... 물론 매우 간단한 문제에 대해 적용해봤을 것으로 추측되지만 GAN이 수렴시키기 어렵기로 악명 높다는 것을 생각해보면 솔직히 믿기지 않는 일화이다 (마치 박혁거세 설화를 보는 느낌이랄까...). 

Ian Goodfellow가 GAN에 대한 아이디어를 처음 떠올린 순간은 몬트리올의 ``The 3 Brewers''라는 펍에서 친구들과 얘기를 하던 중이었다고 한다. 박사를 마치고 연구실을 떠나는 친구를 송별하는 자리였는데, 그렇게 모인 친구들 중 한 명이 모든 사진의 통계적 정보를 넣어서 스스로 사진을 만들어 낼 수 있는 기계에 대해 얘기를 꺼냈고, 어떻게 하면 그런 기계를 현실적으로 만들 수 있을 지에 대해 논쟁이 벌어졌다. 

존재하는 모든 사진에 대한 통계적인 정보를 얻는 것부터 일단 말이 되지 않으니 불가능한 프로젝트라고 생각하다가 순간 뉴럴넷을 사용해서 기계를 가르치면 더 진짜 같은 사진을 만들 수 있지 않을까 하는 생각이 들었다고 한다. 하지만 친구들은 그 아이디어에 대해 부정적이였고, 살짝 열이 받은 Ian은 새벽에 술자리에서 돌아오자마자 앉은 자리에서 노트북으로 GAN을 코딩했다고 한다. 그리고 거짓말 같이 단 번에 성공했다는데, 이후 인터뷰에서도 ``매우 매우 운이 좋았다. 만약 GAN이 한 번에 성공하지 않았다면, 그냥 포기했을 것이다'' 라며 스스로도 운이 좋았다고 하였다. 

이 인터뷰 내용이 사실이라면 여기서 우리는 여러가지 교훈을 얻을 수 있다 (옛날 이야기에는 언제나 교훈이 있는 법). 문제를 설정하고 풀 때 직관력이 매우 중요하다는 것과 그 직관으로 얻은 아이디어를 바로 실험해보는 실행력이 중요하다는 것, 술자리에서 연구 얘기만 주구장창 하여도 진지하고 재미있게 들어줄 사람들이 있는 집단에 들어가야 한다는 것 그리고 마지막으로 되는 놈은 뭘 해도 된다고 운도 조금은 좋아야 한다는 것이다. 희망적인 것은 어떤 문제에 대한 직관력은 그 분야와 연관된 깊은 수학적 지식에서 나올 수도 있지만 수많은 시행착오(a.k.a. 삽질)을 바탕으로 한 경험으로 길러질 수도 있다는 점이다. 그리고 매우 다양하게 많은 시도를 하다보면 통계적으로 되는 방법을 찾을 확률이 높으니 운이라는 것도 어느 정도 통계에 기대볼 수 있을 것 같다. 이렇게 열정적으로 문제를 풀다보면 비슷한 사람들이 모여있는 집단(카카오..?)에 갈 수 있는 기회가 생기고, 더 재미있게 잘 연구를 할 수 있는 선순환이 이루어지지 않을까? 

엄밀한 수학 지식을 바탕으로 차근차근 쌓아 올렸을 것 같은 매우 복잡한 이론들도 순간적인 직관에서 시작하는 경우가 매우 많은 것 같다. 그러니 수학이 어려운 공학자들이여 우리 모두 힘을 내자! 수학을 잘하는 수학자들과 실험을 바탕으로 감이 살아있는 공학자들이 각자가 잘하는 영역에서 연구를 하며 협업을 통해 문제를 발전시켜 나간다면 언젠가는 정말로 이미지뿐만 아니라 사람의 생각을 모사하는 궁극의 생성 모델을 만들 수 있지 않을까 기대해본다.

다음 읽을 거리





카카오 리포트 (Part I)

이전에 카카오 리포트에 기고한 글을 개인 블로그에도 올린다. 두 파트로 나뉘어 글을 기고하였는데, 둘이 합쳐 GAN에 대한 전체적인 조망이 되기 때문에, 개별 GAN 논문을 리뷰하는 것에 비해 개괄적인 정보를 알 수 있을 것이다.

파트 I은 GAN에 대한 소개로 이전 초짜 대학원생 시리즈에서 대부분 다룬 내용이지만 첫 글 이후로 GAN에 대해 이해가 더 깊어진 후 정리한 글이기에 내용적 측면에서 낫다는 장점도 있겠다. 파트 II는 GAN 연구에 대해 좀 더 개괄적으로 다루고 있으므로 연구 방향이나 흐름을 빠르게 알고 싶은 사람들에게 도움이 되리라 생각한다.

** 이 글을 기고할 당시만 해도 대학원생으로 박사 졸업을 언제 할 수 있을지 불분명 하였을뿐 아니라, GAN이 참 재미있으면서도 내 연구 주제에 머신러닝을 적용하는 것이 가능할지도 잘 모르던 때였는데, 지금은 네이버에서 본격적으로 generative model들을 연구하고 있으니 시간이 참 빠르다. 열심히 살아야지. 
2019.05.13




2019년 5월 7일 화요일

공이 점점 비눗방울처럼 변할 때 (When ball becomes a soap bubble)

공이 점점 비눗방울처럼 변할 때


이전에 소개했던 박스 안에 넣은 공의 지름이 박스보다 클 때처럼 고차원으로 갈 때 우리의 직관이 얼마나 달라질 수 있는지를 알려주는 또 다른 좋은 예시를 소개해보자.

구의 부피


또다시 공(ball)이다! 수학적인 용어에서의 공은 간단히 말해 겉껍질이 자기보다 한차원 낮은 구(sphere)로 쌓여있는 닫힌 공간 전체, 즉, 안이 꽉 찬 공간을 뜻한다. 1차원 공(ball)은 선(line segment)이고 2차원 공은 원반(disk), 3차원 공은 음...공(ordinary ball)이다. 대응되는 구(sphere)를 생각해보면 0차원 구는 시작과 끝 점(point), 1차원 구는 원(circle), 2차원 구는 구(ordinary sphere)다.

이런 공의 부피를 바탕으로 초등학교 시절 배운 내용 수준만으로 아주 쉽고 간단하게 고차원에서는 직관이 우리를 배반한다는 것을 보일 수 있다.

이전 글과 같이 먼저 쉽고 우리 직관이 잘 통하는 2차원에서부터 시작해보자:


우리 모두 초등학교 때, 원의 부피, 즉 2차원에서의 넓이를 구하는 것은 배웠을 것이다: $$V_2(r)=\pi r^2.$$ 한 차원 더 나가서,


3차원 공의 부피는 $$V_3=\frac{4\pi}{3}r^3$$이라는 것도 열심히 외웠을 것이다.

그리고 아마도 이걸 $d$차원에 대해 일반화하는 공식은 테이블 형태로 "심화 학습" 뭐 이런 형태로 가볍게 보여주고 지나갔을 것이다: $$V_d(r)=k_d r^d.$$ 여기서 $k_d$는 상수다.

구각 (Spherical shell)


이제부터 좀 재미있는 실험을 할텐데, 원점을 중심으로 반지름이 1인 구와 반지름이 $1-\epsilon$으로 그보다 아주 약간 ($\epsilon\ll 1$만큼) 공 두 개를 준비하고 이 두 공 부피의 차를 구해보자: $$V_d(1) - V_d(1-\epsilon).$$
이걸 겉 껍데기를 구하는 것이라 해서 구각(spherical shell)이라 하는데 두 공의 반지름의 차이가 $\epsilon$만큼 나기 때문에 우리가 생각하는 겉껍질(구각)이 차지하는 부피는 매우 작다.

만약 정확히 그 비율이 얼마나 되는지 알고 싶다면 반지름이 1인 구와 위에서 구한 구각의 비율을 구하면 될텐데 이 비율은 간단히: $$\frac{V_d(1) - V_d(1-\epsilon)}{V_d(1)}=1-(1-\epsilon)^d$$가 될 것이다.

이제 준비물은 모두 모았으니 사고 실험을 해보면 재미있는 일이 벌어지는 것을 알 수 있다.  점점 고차원으로 갈수록 ($d\rightarrow \infty$) 두번째 항의 값이 0에 가까워지고 공과 구각의 비율이 1로 수렴한다! 즉, "공이 점점 비눗방울처럼 바뀌는 것" 이다.

모든 부피가 껍데기에만 몰려있고 안이 텅텅 비어있는 매우 요상한 "속이 꽉찬" 공이 될 것이다. 이 역시도 고차원으로 넘어갈 때, 우리의 직관이 얼마나 틀릴 수 있는지 보여주는 좋은 예시로 이 글을 읽는 다른 분들에게도 brain candy가 되었길 기대한다.

딴 이야기 

(for those who are interested in GANs)


재미있는 GAN blog 글로 유명한 inFERENCe가 "Gaussian Distributions are Soap Bubbles"라는 제목으로 글을 써서 화제가 된 적이 한 번 있는데, 생각보다 복잡하게 설명을 해서 이해하기 어려울 수 있지만 사실 지금 한 얘기를 다른 방식으로 열심히 적은 것이다.

GAN 모델을 학습시킨 다음 High dimensional Gaussian latent space에서 walking을 하기 위해 두 latent vector간의 interpolation을 할 때, 왜 linear interpolation을 하면 문제가 될 수 있는지 이 글을 읽으신 분들이 이해가 쉽게 될 것이라 생각한다.

어떤 의미에서는 중간이 텅 비어있는데 겉껍질을 타고(polar) 움직여야지(interpolate) 중간을 쑥 뚫고(linear) 움직이면 본적이 없는 latent vector가 model로 들어갈 수 있기 때문이다.

다음 읽을거리





2018년 9월 2일 일요일

[PR12-Video] 71. Categorical Reparameterization with Gumbel Softmax


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 Deep learning paper awesome list 100선 by Terry Um.

#71. Categorical Reparameterization with Gumbel Softmax


이 리뷰에서는 NIPS 2016 workshop에 같이 발표되었고 최근 ICLR 2017에 발표된 두 편의 논문을 리뷰하겠습니다. 재미있는 점은 이 두 편의 논문들이 똑같은 아이디어를 바탕으로 정확히 같은 수식을 사용하여 arXiv에도 고작 하루 차이로 올라왔다는 것입니다. 아이디어가 공중에 떠다닌다는 말이 정말 맞는가 싶습니다. 즐겁게 들어주시면 감사하겠습니다.


(추신) 24분 부분에 질문 주신 부분에 대해 답이 미진한것 같아 끝나고 곰곰히 생각해본 답글을 여기에 추가합니다.  둘 다 categorical dist를 만드는데 다른 방법을 사용할 뿐이라는것이 맞는 답인것 같습니다. 우리가 nn으로부터 샘플링을 하고 싶으면 logit을 받아서 softmax를 통과시켜서 확률값을 얻어서 이를 바탕으로 분포에 값을 넣어주고 그 분포로부터 샘플을 뽑는 방법이 있겠구요 (이 방법이 준범님이 말씀하신 보통의 방식인 것 같습니다. 결국 마지막 단에서 softmax하여 확률 값을 주니까요) 다만 샘플링을 하지 않고 확률값 자체를 라벨과 빼서 에러를 계산하는데 사용되는 것이라 백프롭에서는 문제가 없는것 같습니다. 자기자신으로 1이니까 그렇다고 생각하는데 혹 이상하면 말씀주세요. 그리고 두번째 방법이 logit에 검벨에서 뽑은 노이즈를 더하여 argmax를 통과시켜서 값을 얻으면 그 자체가 discrete categorical dist에서 나온 샘플입니다. 여기서 argmax를 softmax로 relaxation한 것이 gumbel softmax trick이구요 그래서 이렇게 복잡하게 과정을 거친 이유는 말씀드린 바와 같이 미분이 가능하게 해서 중간에 node가 껴있을때 gradient를 계산하기 위해서인 것으로 이해하면 되지 않을까 싶습니다.

(paper1) Categorical Reparameterization with Gumbel Softmax and
(paper2) The Concrete Distribution: A Continuous Relaxation of Discrete Random Variables

Paper1: https://arxiv.org/abs/1611.01144
Paper2: https://arxiv.org/abs/1611.00712
슬라이드: https://www.slideshare.net/thinkingfactory/pr12-categorical-reparameterization-with-gumbel-softmax

다음에 또 다른 주제로 뵈어요~!

다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임

다음 읽을거리






2018년 5월 9일 수요일

[Paper Skim] Spectral Normalization for Generative Adversarial Networks

Spectral Normalization for Generative Adversarial Networks

TL;DR: A novel weight normalization technique called spectral normalization to stabilize the training of the discriminator of GANs.
Keywords: Generative Adversarial Networks, Deep Generative Models, Unsupervised Learning
Accept: (Oral)
Rating: 8-8-8
Review: https://openreview.net/forum?id=B1QRgziT-

1. Introduction


Preferred network 그룹에서 나온 논문. (최근 핫한 일본 그룹) 그리고 Ian Goodfellow의 홍보 (보증?...) 개인적으로 매우 취향인 논문. (이후 더 자세히 리뷰 예정) 


GANs를 안정적으로 학습시키는 것을 새로운 weight normalization으로 해결해보고자 함. Spectral normalization이라 불리는 이 방법은,
  • Intensive hyper parameter이 필요없음. Lipshitz constant가 유일한 hyperparameter to be tuned. (심지어는 tuning 안 해도 잘 됨)
  • Implementation이 단순하고 computational cost가 적음. 
Batch normalization이나 weight decay, feature matching on the discriminator와 같은 regularization tech.가 없이도 working 잘 함.

2. Spectral Normalization


각 레이어의 spectral norm을 제약함으로써 Discriminator function $f$의 Lipschitz constant를 컨트롤 함. 

ReLU와 같은 activation function의 Lipschitz norm은 1이기 때문에 네트워크 전체를 볼 때 고려하지 않아도 되고, 결국 Weight의 Lipschitz norm을 나눠줌으로써 각 weight matrix $W$의 Lipschitz constant $\sigma(W)=1$:
$$\bar{W}_{SN}(W):=W/\sigma(W).$$

이를 바탕으로 $||f||_{Lip}$가 1로 상계를 갖도록(upper bounded) 함.

Gradient Analysis of the Spectrally Normalized Weights


The gradient of $\bar{W}_{SN}(W)$ w.r.t. $W_{ij}$:
\begin{align} \frac{\partial\bar{W}_{SN}(W)}{\partial W_{ij}}  &= \frac{1}{\sigma(W)}E_{ij} - \frac{1}{\sigma(W)^2}\frac{\partial \sigma(W)}{\partial W_{ij}}W \\&= \frac{1}{\sigma(W)}E_{ij} - \frac{[u_1v_1^T]_{ij}}{\sigma(W)^2}W \\&= \frac{1}{\sigma(W)} (E_{ij} - [u_1v_1^T]_{ij}\bar{W}_{SN}) \end{align}
여기서 $E_{ij}$는 $(i,j)$-th entry는 1 나머지는 0인 행렬이고 $u_1$과 $v_1$이 first left and right singular vecotrs of $W$. $h$를 hidden layer라고 하면 아래가 성립함:
\begin{align}\frac{\partial V(G,D)}{\partial W}&=\frac{1}{\sigma(W)}(\hat{E}[\delta h^T]-(\hat{E}[\delta^T\bar{W}_{SN}h])u_1v_1^T)\\
&= \frac{1}{\sigma(W)}(\hat{E}[\delta h^T]-\lambda u_1v_1^T) \end{align}
여기서 $\delta:=(\partial V(G,D)/ \partial(\bar{W}_{SN}h))^T, \lambda:=\hat{E}[\delta^T(\bar{W}_{SN}h)]$이고 $\hat{E}[\cdot]$은 각 미니 배치의 empirical expectiation을 나타냄.
For some $k\in \mathbb{R}$, $\hat{E}[\delta h^T]=ku_1v_1^T$일 때 $\frac{\partial V}{\partial W}=0$이 성립함.

여기서 식 (5)의 해석이 매우 재미있는데, 식의 첫번째 항은 normalize되지 않은 weights에 대한 미분이므로 별다를 것이 없고 두번째 항이 추가된 것으로 생각해보면, 이를 adaptive regularization coefficient $\lambda$만큼 첫번째 singular component를 penalize하는 regularization 항으로 본다면 다음과 같은 해석이 가능함:

$\lambda$가 양수라는 얘기는 $\delta$와 $\bar{W}_{SN}h$가 비슷한 방향을 가르키고 있다는 것을 의미함. 즉, $W$의 column space가 한 쪽 방향으로만 집중해서 update되는 것을 막아준다고 해석할 수 있음. 논문에서는 이를 통해 spectral normalization이 네트워크의 각 layer가 한 방향으로만 sensitive하지 않도록 막는다고 얘기함.

3. Spectral Normalization vs Other Regularization Techniques


Weight normalization은 결과적으로 너무 강한 constraint를 걸어버리는 경향이 있음. Weight normalization은 weight matrix의 rank를 1이 되도록 강제함 (matrix norm과 weight normalization definition에 의해 수식을 보면 확인할 수 있음). 

그런데 이렇게 하면 discriminator가 하나의 feature만을 보고 probability distribution을 구별해야하기 때문에 discriminator가 매우 sensitive하고 unstable하게 만드는 경향이 있음.

Orthonormal regularization on each weight는 spectral normalization과 유사하면서도 학습을 안정화해주기는 하지만,
$$||W^TW-I||_F^2$$
weights를 orthonormal하게 하므로써 (모든 singular value를 1로 강제하기 때문에) spectrum의 envelop을 망치고 중요한 정보를 잃어버리는 경향이 있음. Spectral normalization은 spectrum의 scale만을 조절하기 때문에 (최대 값을 1) 이와는 다름.

GP와 같은 경우는 위에서 설명한 다른 normalization tech.들과 같은 문제는 없지만 현재 generative distribution의 support에 매우 강하게 엮여있다는 약점이 있음. 이 때문에 학습이 진행됨에 따라 generative distribution의 support도 바뀌기 때문에 학습 과정이 불안정적이 된다는 단점이 생김. Spectral normalization은 학습하는 함수를 operator space에서 regularize하기 때문에 들어오는 데이터 batch에 보다 덜 민감한 것을 볼 수 있음.


4. Experiments


최초로 단일 네트워크로 이미지넷 1000개 범주의 이미지를 생성한 방법인 것만으로도 큰 의미를 지님.







2018년 5월 1일 화요일

[Paper Skim] AmbientGAN: Generative Models From Lossy Measurements

AmbientGAN: Generative Models From Lossy Measurements





TL;DR: How to learn GANs from noisy, distorted, partial observations
Keywords: Generative models, Adversarial networks, Lossy measurements
Accept: (Oral)
Rating: 8-7-7


GAN을 학습시키기 위해서 고퀄리티 샘플들이 필요한데 (예시: 노이즈가 없는 사진들) 보통 그런 경우가 많지 않다는 것을 지적하고 이를 해결하고자 한 논문. 

즉, 샘플에 occlusion이나 noise, blur 등의 문제가 있는 데이터셋만으로도 원래와 같이 고퀄리티 샘플(occulusion noise blur 혹은 unknown any noise가 없는)을 생성할 수 있는 Generative model을 학습하고자 함. 

직관적인 이해를 위해 결과부터 좀 소개하자면:

이렇게 맨 왼쪽과 같이 patch가 잘려서 zero가 되는 noise function으로 더럽혀진 데이터셋만 있는 경우에도 generator가 맨 오른쪽과 같이 어느정도 얼굴 형태를 생성해내는 모델을 학습함. (중간은 baseline)

개인적으로 재미있었던 실험은 MNIST 데이터를 패딩을 바탕으로 크기를 키운 다음 임의의 각도로 회전하고 한쪽 방향으로 sum 된 1D 데이터로 squash한 데이터들을 바탕으로 학습을 해도 generator가 아래와 같이 어느정도 숫자를 generate하는 모델을 학습해내는 것.


추가 정보로 회전각을 넣어주었을 때 더 잘 복원됨. (오른쪽, 사실 이건 의료 영상에서 CT와 같은 projection으로 생각해보면 자명함)

이 논문이 재미있는건 이렇게 이미지가 복원이 되는 조건을 명확하게 하고 수학적으로 증명을 하였다는 점. 

네트워크 구조도

Generator가 먼저 깨끗한 이미지 $X_g$를 만들면 $f_{\theta}$가 이를 corrupt하는 noise function을 학습해서 $Y_g$를 만들어내고 Discriminator가 corrupt된 real data $Y_r$와 이를 비교하게 하는 구조.

풀고자 하는 문제를 참 잘 특정해서 잡았다고 생각하는 것이, 우리가 얻을 수 있는 데이터는 실제로는 이미 어떤 unknown noise function에 의해 corrupt 되어 나온 것인 경우가 많다는 것이 기본 바탕.

AmbientGANs에서는 데이터가 충분히 많기만 하다면, 이런 noise function을 학습하고 기존의 data distribution을 복원하는 것이 가능하다는 것을 analytically & empirically 보임.

이거 보고 나서 결과를 improve해볼 수 있는 idea들이 몇 개 생각나긴 했는데 해보고 싶은것들이 막 생깁니다ㅋㅋ 당장 recon loss와 cyclic loss를 붙여볼 수 있겠네요.

참고자료





[Paper Skim] Progressive Growing of GANs for Improved Quality, Stability, and Variation

Progressive Growing of GANs for Improved Quality, Stability, and Variation


TL;DR: Train generative adversarial networks in a progressive fashion, enabling us to generate high-resolution images with high quality.
Keywords: generative adversarial networks, unsupervised learning, hierarchical methods
Accept: (Oral)
Rating: 8-8-8
Review: https://openreview.net/forum?id=Hk99zCeAb

GANs를 학습하는 새로운 방법을 제안.
핵심 아이디어는 generator와 discriminator를 점진적으로 키운다는 것: 저해상도에서 시작해서 세밀한 점들을 배울 수 있도록 새로운 레이어들을 추가하는 방식.
이런 방식을 취함으로 인해 GANs을 보다 안정적이면서 빠르게 학습하는 것이 가능해졌다고 얘기함; CelebA 1024^2 해상도 이미지를 만들어 내는 네트워크 학습.
또한 CIFAR10에서 비지도학습 방식으로 생성된 이미지들의 종류가 다양하도록 할 수 있는 간단한 방법을 제안함. Inception score가 8.80에 달한다고 함.

1. Introduction


고해상도 이미지를 만드는 것은 매우 어려운데 그 이유는 해상도가 높을 수록 생성한 이미지인지를 구분하는 것이 쉬워지기 때문.
게다가 큰 해상도 이미지로 인해 메모리 문제로 더 작은 minibatches를 사용하게되고 학습 안정성에 문제가 됨.
여기서 저자들의 주요 insight는 generator와 discriminator를 점진적(progressively)으로 키우는 것.

기존의 GAN 수식은 학습된 생성 모델이 굳이 학습 데이터 분포 전체를 모두 표현할 필요가 없었음. (?)
기존의 공통된 의견은 이미지의 질과 다양성이 서로 tradeoff 관계라는 것이었으나 최근 Odena et al. 2017에 의해 다른 의견이 제기됨. (확인 필요)
다양성에 대한 측정 방법에 대해 매우 많은 방식들이 제안되고 있는데:
including inception score (Salimans et al., 2016), multi-scale structural similarity (MS-SSIM) (Odena et al., 2017; Wang et al., 2003), birthday paradox (Arora & Zhang, 2017), and explicit tests for the number of discrete modes discovered (Metz et al., 2016). 
PGGAN에서는 이 외에 다양성을 보다 북돋기 위해 사용한 방법을 설명하고 이미지의 질과 다양성을 측정하기 위한 새로운 metric을 제안하였음.

2. Progressive Growing of GANs


키 아이디어 정리: 단계별 학습 (구몬??!)
"The complex mapping from latents to high-resolution images is easier to learn in steps" 


아래 그림에서 볼 수 있듯이 점진적으로 네트워크 레이어를 추가할 때 sudden shock이 일어나지 않도록 새로 추가하는 레이어를 부드럽게 (fade in) 넣어줌.



3. Increasing Variation using Minibatch Standard Deviation


이미지가 다양하게 생성되도록 하기 위해 GANs이 학습 데이터의 일부분만 집중하는 성질이 있는 것을 고려하여 Salimans et al. (2016)에서는 Minibatch discrimination 방식을 제안했었음. Feature statistics를 계산할 때 각각의 이미지만 보는 것이 아니라 minibatch 전체에 대해 계산하므로써 생성된 이미지와 학습 이미지들이 비슷한 statistics를 갖도록 하자는게 아이디어였음. (구체적 방식은 다시 체크) PGGAN에서는 이 접근 방식을 보다 단순하게 만들면서도 다양성은 증대하는 방법을 제안함. 

이 방식은 parameter 학습이 필요하거나 새로운 hyperparameter가 필요하지 않음. 먼저 minibatch에 있는 각 spatial location에서의 feature 각각의 stardard deviation을 계산함. 이 estimates를 모든 features와 spatical locations에 대해 평균을 내고 하나의 값을 계산함. 이 값을 복사해서 모든 spatial locations와 minibatch에 대해 concat하는 방식으로 (constant) feature map을 하나 추가함. 이 레이어는 discriminator의 어느 위치에도 들어갈 수 있으나 inset it towards the end가 가장 좋은 성능을 보였음. 
Parallel work으로 Lin et al. (2017)이 이와 유사한 방식(multiple images를 discriminator에 보여주는 것이 좋은 이유)을 이론적으로 설명한 바 있음. (체크)

4. Normalization in Generation and Discriminator


GANs에서의 normalization은 signal magnitude와 competition을 제한하는 쪽에 주안점을 두어야한다고 생각함.

4.1 Equalized Learning Rate


기존의 방식들이 weight initialization에 심혈을 기울이는 것과는 달리 여기서는 초기값은 대충 표준정규분포로 주되 runtime 중 weights의 scale을 조절하는 방향을 취함.

4.2 Pixelwise Feature Vector Normalization in Generator


Generator와 Discriminator가 서로 경쟁한 끝에 발산하는 경우를 막기 위해서 generator에서 하나의 conv layer를 지날때마다 각 pixel의 feature vector를 정규화. 
이 방식이 실험 결과는 크게 바꾸지 않았지만 signal magnitude가 급격히 커지는 현상을 매우 효과적으로 없애주었다고 함. 

5. Multi-Scale Statistical Similarity for Assesing GAN results


서로 다른 GAN을 비교하는 것은 여러모로 쉽지 않음. MS-SSIM(Odena et al., 2017)과 같은 방식은 large-scale mode collapse를 잘 발견하지만 color나 texture의 작은 loss들을 발견하지 못하는 단점들이 알려져있음. 그리고 학습 데이터와의 유사한 정도를 직접적으로 고려하지 않기 때문에 문제가 있음.

PGGAN에서는 각 scale 별로 학습데이터와 생성 데이터의 local structure가 서로 유사해야한다는 intuition을 바탕으로 local image patches의 분포 간의 multi-scale statistical similarity를 확인하는 방식을 취함(Laplacian pyramid, Burt & Adelson, 1987 다시 체크).  

6. Experiments


 판타스틱함!

Stillcut from ICLR oral presentation 


Video presentation










2018년 2월 3일 토요일

초짜 대학원생의 입장에서 이해하는 Energy-Based Generative Adversarial Networks (1)

* Energy-Based Generative Adversarial Networks J. Zhao ICLR 2017을 바탕으로 한 리뷰

오늘은 매우 오랜만에 GAN 논문을 포스팅하려 합니다. 2016년 9월에 올라왔고 ICLR 2017에서 발표된 EBGAN입니다. 우리의 연예인 Yann Lecun 교수님께서 저자로 있기에 매우 유명했던 논문이기도 하죠.

NIPS 2016 당시 keynote presentation에서 여러 차례 자신의 EBGAN을 홍보하시던 Lecun 교수님을 잊을 수가 없습니다. Keynote, panel discussion, GAN 워크샵에 내내 언급할 기회가 있을 때마다 "GAN은 내가 근 $x$년간 들어본 아이디어 중 최고이다"라 강조하시는데 $x$가 10년씩 추가되는 재미있는 모습을 볼 수 있었습니다. 그 특유의 프랑스 억양이 섞인 말투가 아직도 기억에 남네요.

이 바닥이 워낙 빠르게 발전하는지라 이미 유물이 되어 버린 느낌입니다만 GAN이 발전하는 과정에서 최소한 한 획을 그었다고 평할만한 논문이므로 EBGAN은 정리를 하고 넘어가는게 맞는 것 같습니다.

Energy-Based Model (EBM)


제가 EBGAN이 중요한 논문 중 하나라 꼽은 이유는 아직 대다수의 GAN 모델이 Discriminator가 0 아니면 1을 뱉도록 디자인 된 기존의 probabilistic GAN에서 벗어나지 못하고 있을 때, energy라는 개념을 도입하여 기존 구조를 깨는 모델을 제안했기 때문입니다.

이 energy 개념을 도입하면 GAN 구조를 좀 다른 각도로 살펴볼 수 있게 되는데요 처음 보았을 때 꽤나 신선한 접근이라고 생각했기에 여기에 같이 정리하여 소개해보겠습니다.
(아마도 이번 글은 또.... EBGAN 설명 이전에 Intro가 길어질 것 같네요...하... insight가 많은 논문은 읽기는 재미있는데 정리하기는 매우 귀찮다아...orz....이런 식으로 아직 엄두도 못내는 것들이 산더미. 말로 하면 편한데...)

Statistical learning이나 machine learning의 주요 목적을 한 문장으로 정리해보자면 여러 변수들간의 상관관계를 어떻게 하면 잘 인코딩해볼까로 얘기할 수 있습니다. 이렇게 변수들간의 상관관계를 데이터로부터 잘 학습하고 나면, 모르는 변수의 값이 들어왔을 때 이미 알고 있는 변수들의 값을 바탕으로 모델이 질문에 답할 수 있겠죠 (아래 예시).


위 그림에서 보실 수 있듯이 우리가 $Y_1$과 $Y_2$의 관계를 알고 나면 이미 관측한 데이터가 아닌 어떤 새로운 $Y_1$값 혹은 $Y_2$ 값이 들어오더라도 서로의 관계를 바탕으로 값을 새로운 데이터가 우리가 학습한 data manifold 위에 적합한 값인지 아닌지를 알 수 있습니다. 여기서 data manifold는 $Y_2= Y_1^2$로 표현되는 curve라 할 수 있겠군요.

이런 설명은 지도학습과 비지도학습을 가리지 않습니다. 다만 지도학습에서는 위 그림에서 점(데이터)들이 있을 때 그 점이 data manifold에 속하는지 속하지 않는지를 알려주는 정보가 있는 반면에 비지도학습에서는 학습 데이터셋에서조차도 어떤 점이 outlier인지 아닌지 알 정보가 주어지지 않는다는 차이가 있을뿐입니다.

따라서 학습을 energy의 관점에서 얘기해보면, 데이터를 바탕으로 어떤 energy surface를 만들어 나가되 데이터가 살고 있는 부분 혹은 공간에 대해서는 낮은 energy를 할당하고 다른 부분에는 높은 energy를 할당하도록 하는 그런 과정이라고 생각할 수 있습니다. 즉, 인코딩을 해줄 값 = energy가 되는 것이고 이를 인코딩하는 함수 = energy function이 되는 것입니다.



(여기서 왜 하필 데이터 근방에서 energy가 낮도록 설정하였는지 의아하실 수 있습니다. 이는 energy가 낮을 수록 안정된 구조를 가지는 물리적인 관점에서 개념을 가져온 것으로 보입니다.)

그래서 지도학습은 enegry 관점에서 $X$가 데이터 $Y$가 정답일 때, $(X,Y)$라는 쌍(pair)에서 $Y$가 제대로 된 정답이면 이 쌍의 energy에 낮은 값을 주고 반대의 경우 높은 에너지를 갖게 하는 어떤 방법론이라고 생각할 수 있습니다. 한편 비지도학습은 $X$만이 있기에 data manifold에는 작은 energy를 부여하도록 $X$를 잘 모델링 하는 것이라고 생각할 수 있습니다.

매우 그럴듯하죠. 그래서 두루뭉술 아 저렇게 하면 되는구나 하고 넘어갈 수 있지만 조금만 곰곰히 생각해보면 여기서 한 가지 의문점이 생깁니다.  위의 관점에서 비지도학습 문제를 푼다고 해보겠습니다. 그나마 $X$가 있는 부분의 값은 data manifold라 생각하여 값을 낮게 할당하면 되겠지만 정보조차 없는 data manifold 밖의 공간은 무엇을 기준으로 어떻게 값을 할당해야할까요? 사실 이는 지도학습에서도 학습 데이터셋이 전체 데이터 공간을 표현할만큼 충분하지 않은 경우 똑같이 발생할 수 있는 문제입니다. 데이터를 존재할 수 있는 모든 조합에 대해 구할 수 있을리가 없죠.

How do we make the energy higher outside the samples?


여기서 어떤 식으로 문제를 풀어나갈 것이냐에 따라 비지도학습에 속하는 알고리즘들의 갈래를 나누어 energy 관점으로 설명할 수 있습니다.

Seven Strategies to Shape the Energy Function


1. 모델을 만들되 낮은 energy를 가질 수 있는 공간을 한정짓는다. 
(Build the machine so that the volume of low energy stuff is constant)
> PCA, K-mean, GMM, square ICA

여기에 속하는 알고리즘들은 data manifold 밖의 공간의 energy를 explicit하게 올리지는 않습니다. 다만 디자인에 따라서 자연스럽게 그렇게 될 수 밖에 없도록 만들뿐입니다. 예를 들자면 PCA는 분산이 가장 많이 설명되는 방향을 찾고 각각 orthogonal한 basis로 표현되는 linear subspace로 data manifold를 한정짓습니다. 그렇기에 principal subspace로 설명할 수 없는 다른 공간에 해당하는 녀석들은 정보가 복원되지 않을 것이기 때문에 이 부분에서 들어온 데이터들은 모두 에너지가 높게 하는 모델이라 생각할 수 있습니다.
K-means는 샘플에서 energy가 0이고 멀어질수록 quadratic하게 energy가 증가하도록 하는 모델이라 생각할 수 있습니다. GMM이나 ICA도 결국 위에 설명한 것과 비슷한 분류라 생각할 수 있겠죠.



그래서 보시듯이 이런 Spiral data에 대해 PCA가 좋은 모델이 아닌 것을 금방 알 수 있습니다. K-means는 이런 경우에 좀 잘 하는 것처럼 보이지만 사실 고차원 공간으로 가면 제대로 동작하지 않을 것이 뻔히 보이죠.

2. Parametric 모델 사용하여 샘플에서의 energy는 낮추고 다른 모든 부분에서는 올린다. 
(Push down of the energy of data points, push up everywhere else)
> Maximum likelihood (needs tractable partition function)

우리가 흔히 아는 Maximum likelihood가 여기에 속합니다. 다만 이 경우 보통 probabilistic model을 만들기 위해 전체 domain, 모든 parameter에 대한 적분 함수를 계산해야하는데 이런 partition function이 보통 intractable한 경우가 많습니다. Tractable한 함수로 한정지어 계산하면 그만큼 모델에 한계가 생기겠죠. Variational bound를 적용해서 surrogate 함수를 만들어 사용하는 방법도 있지만 여전히 한계점들이 있습니다.

3. 2번과 달리 모든 부분에서 energy를 올리는 것이 아니라 선택된 일부에서만 올린다.
(Push down of the energy of data points, push up on chosen locations)
> Contrastive divergence, Ratio matching, Noise contrastive estimation, Minimum probability flow

이 경우 문제가 "선택된 일부"를 어떻게 찾을 것인가에 대한 것으로 변할뿐 본질적인 문제는 해결되지 않습니다. 기본적으로 이 분류에 속하는 알고리즘들은 현재 가지고 있는 energy 모델에 대해 샘플에 약간의 noise를 주어 근방을 탐색해서 값을 계산하고 energy 함수를 업데이트 하는 전략을 취합니다. 즉 어떤 샘플링을 하는 것으로 생각하실 수 있는데요 이 과정이 반복수가 많아지면 결국 MCMC를 하는 것과 같아집니다.

4. 샘플 근방의 curvature는 극대화시키고 gradient는 최소화시킨다.
(Minimize the gradient and maximize the curvature around data points)
> score matching

5. 어떤 dynamical system을 학습시켜서 결국에는 data manifold로 수렴하도록 한다.
(Train a dynamical system so that the dynamics go to the manifold)
> denoising auto-encoder

6. Regularizer를 사용해서 낮은 enegy를 가질 수 있는 공간을 한정짓는다.
(Use a regularizer that limits the volume of space that has low energy)
> Sparse coding, sparse auto-encoder, Predictive Sparse Decomposition

PCA나 K-means와는 다르게 loss function 혹은 energy function에 regularizer를 explicit하게 붙여서 공간을 제한하는 방식을 취합니다. Lecun 교수님은 Variational Auto-Encoder (VAE)도 이 관점으로 보면 중간 latent space에 noise를 넣어 code가 표현할 수 있는 정보의 양 혹은 공간을 제한하는 것으로 생각할 수 있다고 언급하고 넘어갑니다.

"sparse coding energy surface"


7. If $E(Y) = ||Y-G(Y)||^2$, make $G(Y)$ as "constant" as possible
> Contracting auto-encoder, saturating auto-encoder

So what is this all about? 


EBGAN을 설명한다면서 EBM에 대해 설명을 하다가 갑자기 비지도학습의 분류만 주구장창 설명하니 이게 무슨 뜬금포인가 할 수 있으실텐데요.

GAN은 사실 3번에서 "선택된 일부"를 찾아내는 과정을 매우 신박한 방식으로 해결한 모델이라 생각할 수 있습니다. MCMC는 이런 선택된 일부 = contrastive data를 생성하는 non-parametric model이라 할 때, GAN은 이를 parametric model을 바탕으로 contrastive data를 생성하는 방법인 것이죠. 즉, GAN 학습과정에서 generator가 하는 역할을 data manifold 밖에 속하는 데이터(contrastive data, e.g. 매우 이상한 사람 사진)를 생성하는 것으로, 그리고 discriminator가 샘플에 energy를 할당하는 energy function 역할을 하는 것으로 생각할 수 있습니다.

여기서 멋진 점은 학습이 진행됨에 따라 generator가 점차 data manifold에 가까운 샘플들을 생성하기 때문에 data manifold에서 멀리 있는 contrastive data들부터 생성해나가며 전체 energy surface를 구성할 수 있게 됩니다. 마찬가지로 discriminator 역시 data manifold에서 먼 곳의 data가 없어도 generator가 생성하는 sample로부터 이에 대한 정보를 자연스럽게 얻어내어 좋은 energy function을 학습할 수 있게 되구요.

따라서 GAN이 학습 데이터셋이 없거나 불충분한 경우에도 학습이 가능하도록 하는 일종의 매우 강력한 비지도학습 방법론이라 생각할 수 있습니다. 그렇기에 지도학습의 눈부신 성과에 비해 정체되어있던 비지도학습의 연구에 GAN이 매우 큰 breakthrough를 가져올 수 있는 Clue가 되지 않을까 하며 Lecun 교수님이 매번 강조하는 것이 아닌가 싶습니다.

다음 글에서는 위와 같은 관점에서 EBGAN을 분석해보도록 하겠습니다. 전반적인 구조를 설명하고 실험 결과와 Theoretical 증명에 대한 설명도 함께 넣을 예정입니다. 그럼 다음 글에서 뵙겠습니다.

다음 읽을거리



참고문헌:



2017년 7월 1일 토요일

초짜 대학원생의 입장에서 이해하는 f-GAN (3)

* f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization, Sebastian Nowozin et al. 2016을 바탕으로 한 리뷰

자 오늘은 f-GAN의 main theorem을 증명하고 저자가 NIPS 2016 workshop에서 발표할 때 전해줬던 insight 하나를 소개하는 것으로 f-GAN에 대한 설명을 마무리하겠습니다. 먼저 설명의 편의를 위해 오늘 증명할 Theorem 1과 그 조건을 다시 가져와보겠습니다.

지난 글에서 f-GAN 저자들이 Single-Step 알고리즘을 제안하였던 것을 기억하실겁니다:


우리가 풀고자 하는 GAN objective 함수 $F$에 대하여, 우리가 찾고 싶은 saddle point의 근방(neighborhood)에서 $F$가 strongly convex in $\theta$ 그리고 strongly concave in $w$일 때, 이 알고리즘이 실제로 그 saddle point $(\theta^t,w^t)$에 수렴한다는 것을 확인해보겠습니다. 이 조건들을 수식으로 나타내면 다음과 같습니다:
\begin{equation}\nabla_\theta F(\theta*,w*)=0, \nabla_w F(\theta*,w*)=0, \nabla^2_\theta F(\theta,w) \succeq \delta I, \nabla^2_w F(\theta,w)\preceq -\delta I.\label{cond}\end{equation}
이 가정들은 "strong"하다는 부분만 빼면 f-GAN 형태로 도출된 saddle point를 정의하기 위해서 필수적인 조건들입니다. 따라서 deep networks의 구조로 인해 생기는 수많은 saddle point들이 있습니다만 대부분이 이 조건을 만족하지 않습니다.

저는 이 부분을 GAN이 원하는 saddle point가 독특하고 GAN objective를 알고리즘을 적용하여 풀어서 나오는 solution들은 이러한 조건을 만족하는 point로 수렴한다는 것을 말하고자한 것으로 해석했습니다.

이제 이 조건이 성립한다는 가정하에 다음 정리가 성립하게 됩니다.
Suppose that there is a saddle point $\pi^*=(\theta^t,w^t)$ with a neighborhood that satisfies conditions \ref{cond}. Moreover, we define $J(\pi)=\frac{1}{2}||\nabla F(\pi)||^2_2$ and assume that in the above neighborhood, $F$ is sufficiently smooth so that there is a constant $L>0$ such that $||\nabla J(\pi')-\nabla J(\pi)||_2 \leq L||\pi'-\pi||_2$ for any $\pi,\pi'$ in the neighborhood of $\pi^*$. Then using the step-size $\eta=\delta/L$ in Algorithm 1, we have
$$J(\pi^t)\leq \left(1-\frac{\delta^2}{2L}\right)^t J(\pi^0).$$
That is, the squared norm of the gradient $\nabla F(\pi)$ decreases geometrically.
(우와 어려워보인다...) 아닙니다! 생각보다 쉬워요!

본격적인 증명에 앞서 이 복잡해보이는 정리가 의미하는 바를 좀 정리해보겠습니다. 이 정리는 알고리즘의 "local" convergence를 증명해주고 있습니다. 

$J(\pi) \overset{\Delta}{=}\frac{1}{2}||\nabla F(\pi)||^2_2$로 정의한 것을 곰곰히 생각해보면 됩니다. 결국 이 정리에서 결론으로 내리는 부등호가 하고자 하는 말은 우리가 구하고자 하는 GAN objective $F$의 gradient인 $\nabla F(\pi)$의 크기가 점차점차 줄어든다는 것입니다. 즉, 수렴한다는 것이죠. 

"어때요 참 쉽죠?"

다만, 우리가 saddle point의 근방에 있다면 언제나 saddle point로 수렴한다는 것을 증명한 것이지 global convergence를 증명해주진 못했습니다. 그러면 자연스럽게 떠오르는 의문이 있죠? "어떻게 그 근방에 갈껀데?" 네...그건 뭐 저자들도 "일단 practically 잘 되니까 쓰자"고 하네요 -_-ㅎㅎ (이전 글에서 두 가지 예를 보여드렸었죠?)

먼저 몇 가지 notation을 정하고 가겠습니다. 편의상 $\pi=(\theta^t,w^t)$라 정의하고 각각의 편미분을 다음과 같이 나타내겠습니다:
$$\nabla F(\pi) = \begin{pmatrix} \nabla_\theta F(\theta,w) \\ \nabla_w F(\theta,w) \end{pmatrix}, \tilde{\nabla} F(\pi) = \begin{pmatrix} -\nabla_\theta F(\theta,w) \\ \nabla_w F(\theta,w) \end{pmatrix}.$$
그러면 Algorithm 1은 다음과 같이 쓸 수 있게 됩니다:
\begin{equation}\pi^{t+1} = \pi^t + \eta \tilde{\nabla} F(\pi^t)\label{eq2}\end{equation}

이제 본격적으로 증명을 시작해보겠습니다. 기본적으로 증명에 쓰이는 가장 어려운 수준의 수학은 Taylor series 전개입니다. Taylor series를 이용하면,
\begin{equation}J(\pi')\approx J(\pi)+<\nabla J(\pi),\pi'-\pi>+\frac{1}{2}(\pi'-\pi)^T H(J(\pi))(\pi'-\pi). \label{eq3}\end{equation}
여기서 $H$는 Hessian matrix를 뜻합니다. 주어진 조건을 바탕으로 다음과 같은 부등호를 얻을 수 있고:
$$||\nabla J(\pi')-\nabla J(\pi)||_2 \leq L||\pi'-\pi||_2 $$
$$\lim_{\pi'\rightarrow \pi}\frac{||\nabla J(\pi')-\nabla J(\pi)||_2}{||\pi'-\pi||_2} \leq L $$
\begin{equation}\therefore H(J(\pi)) \leq L \label{eq4}\end{equation}
이렇게 얻은 부등호 eq.\ref{eq4}을 eq.\ref{eq3}에 적용하면,
\begin{equation}J(\pi')\leq J(\pi)+<\nabla J(\pi),\pi'-\pi>+\frac{L}{2}(\pi'-\pi)^T (\pi'-\pi). \label{eq5}\end{equation}
여기서 $J(\pi) \overset{\Delta}{=}\frac{1}{2}||\nabla F(\pi)||^2_2$이므로, $\nabla J(\pi)=\nabla^2 F(\pi)\nabla F(\pi)$입니다.

따라서, 다음과 같은 전개가 가능해집니다:



자, 이걸 곰곰히 생각해보시면 Algorithm 1이 해주는 일이란 것이 결국 $||\nabla F(\pi)||_2^2$에 비례하는 양으로 $J$를 줄여주고 있는 것이란 것을 아실 수 있습니다. 


안 되요 안 되요! 정신줄 놓아버리시면 안 됩니다!! ㅋㅋ 뜬금없이 뭔소리냐 위에 부등식은 왜 갑자기 푸는가?가 궁금하시죠? Eq.\ref{eq2}와 eq.\ref{eq3}를 조금만 바꾸면 아래 과정을 왜 하는지 이해할 수 있습니다. 

Algorithm 1이 eq. \ref{eq2}로 나타내진다고 했었죠? 이를 $\pi^{t+1} - \pi^t = \eta \tilde{\nabla} F(\pi^t)$로 조금만 바꾸고 eq.\ref{eq3}에 대입하면 이 짓을 왜 하는지 이해하실 수 있습니다:
$$J(\pi^{t+1})\leq J(\pi^t)+<\nabla J(\pi^t),\eta\tilde{\nabla} F(\pi^t)>+\frac{L\eta^2}{2}\tilde{\nabla} F(\pi^t)^T \tilde{\nabla} F(\pi^t). $$
자, 이렇게 하고 나니 아래의 수식 전개에서 두번째 부등호가 위에서 구한 부등호 때문이란 것을 알 수 있게 되는 것입니다:
여기서 마지막 equality는 $\eta = \delta/L$일 때 성립합니다. 그래서 step size $\eta$를 이렇게 정하면 위 부등식에 의해 local convergence가 보장되는 것이죠.

드디어 증명이 끝났군요 (에고 힘들다).

Discussion


그래요 이제 증명도 되었고 (local이긴 하지만), 여러가지 함수로 divergence를 바꿔가며 GAN을 해보면 그 때마다 새로운 녀석이 나올 것이고, 수학적으로는 어떤 divergence가 어떤 녀석보다 더 나은지 등등이 연구가 되어있기 때문에 이제 내 상황에서 가장 적절한 f-divergence를 만들어서 쓰기만 하면 될 것 같습니다.

그런데...대다수의 divergence가 잘 동작하긴 하는데....결과를 일단 먼저 보여드리자면:
(* LSUN dataset의 classroom에 대해서 학습을 시킨 것이고 각각 Jensen-Shannon, Hellinger, Kullback-Leibler divergence를 사용한 결과입니다)

GAN (Jensen-Shannon)

Hellinger

Kullback-Leibler

생각보다 결과가 그놈이 그놈이더라...하는 것입니다.

왜?!! 어째서?!!!


Insights from the Authors


자연스래 아래와 같은 질문이 나올 수 밖에 없죠.
"Does the divergence REALLY matter?"

그래서 저자가 한 가지 추측을 내놓는데 다음과 같습니다:


각각의 색으로 나타낸 점이 서로 다른 divergence로 학습한 수렴점이라고 생각하시면 됩니다. 이와 같이 우리가 세운 모델의 공간과 실제 확률 분포 $P$가 이렇게 꽤나 가까이에 있을 때는 divergence 간에 수렴점이 차이가 있습니다. 그런데 이게 아니라 다음과 같이 멀리 떨어져 있다고 해봅시다:



이러면 마치 태양에서 오는 빛은 직선이라고 생각할 수 있듯이 divergence 간에 차이가 매우 적어집니다. 즉, 저자들은 우리의 모델이 생각보다 실제 분포와 매우 멀리 떨어져 있는 것이 아닌가 하는 추측을 내놓는 것입니다.

매우 직관적이고 그럴 듯하죠? 이에 대한 토론이 NIPS 2016 Workshop 영상에서 보이듯이 발표 이후로도 이어졌습니다. 실제도 이런 추측이 최근 GAN에 대한 연구 결과들과도 어느 정도 부합하는 것 같습니다.

이로써 f-GAN에 대한 설명을 모두 마쳤네요. 슬슬 그래도 제가 생각한 골격을 하나하나 따라 올라가고 있습니다. 다음은 EBGAN을 리뷰할 생각입니다. EBGAN까지 하면 어느 정도 제가 구상했던 커다란 틀이 80% 정도는 완성되는 것입니다. 참 오래 걸리네요. 역시 이론 위주의 논문은 글을 쓰기가 힘듭니다. 수식도 많고...-_-;; 아무쪼록 이 글이 읽는 분들께도 많은 도움이 되었길 기대합니다. 다음 글에서 뵙겠습니다.

다음 읽을거리



참고문헌:



2017년 6월 22일 목요일

초짜 대학원생의 입장에서 이해하는 f-GAN (2)

* f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization, Sebastian Nowozin et al. 2016을 바탕으로 한 리뷰

지난 글에서 f-divergence를 estimate하기 위해 시작한 전개로부터 일반적인 GAN objective까지 전개하는 것을 따라가 보았습니다. 이제는 이를 풀 알고리즘과 convergence를 증명하는 부분이 남았는데요. 본격적으로 들어가기 전에 지난 내용을 리뷰하고 GAN formulation과의 관계에 대해 약간 더 구체적으로 이해하기 위해 조금 더 설명을 해보도록 하겠습니다.

먼저 설명의 편의를 위해 지난 글에서 전개했던 variational representation을 가져오면 다음과 같고:

여기서 우리는 맨 마지막 식을 사용하여 true distribution $P$를 generative model $Q$로 estimate할 것입니다.




2017년 6월 18일 일요일

초짜 대학원생의 입장에서 이해하는 f-GAN (1)

* f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization, Sebastian Nowozin et al. 2016을 바탕으로 한 리뷰

오랜만에 다시 GAN으로 돌아와서 포스팅을 해봅니다. 요즘은 너무 GAN쪽 연구가 많이 그리고 빨리 발전하고 있어서 글을 리뷰하는 것이 민망할 지경입니다. 심지어 응용뿐 아니라 이론적인 부분에서도 꽤나 많은 부분이 연구되고 바뀌고 있기에 따라가기가 벅찹니다. 

이 논문만 해도 작년 6월 arXiv에 올라왔고 NIPS 2016 워크샵에서 발표하는 것을 직접 들었었는데 이게 한~~~~~~참 전 논문으로 취급되고 있는 것을 보면 머신러닝 분야는 참 짧은 시간에 격세지감 느끼기 좋은 분야인 것 같습니다...orz

WGAN 이전에는 f-GAN 논문이 다른 연구들을 모조리 잡아먹는? 느낌을 주었으나 이제는 이 말도 무색할 지경입니다. 그래도 f-GAN 논문은 여러모로 GAN 분야에서 매우 중요한 milestone이기 때문에 사실 다른 것보다 더 먼저 리뷰했어야 하는데 여러 이유로 블로그 글로 정리하지 못해서 항상 마음에 걸렸습니다.

아무튼 이 논문이 마치 어제 나온 것인양! 한 문장으로 요약해보자면 다음과 같습니다:

"앞으로 너희가 어떤 divergence를 사용해서 GAN을 구성하든지 모두 다 나의 하위 호환(special case)일 따름이다."

...패기롭다....ㅋㅋ

이 때만 해도 vanilla GAN objective가 JSD를 이용해서 $p_{model}$과 $p_{data}$의 차이를 계산하는 것이란 분석을 바탕으로, 조금씩 네트워크의 구조를 바꾸거나 regularization term을 새로 붙여본다거나 하는 등 약간의 변화만 주고 있던 때라는 점을 생각해보시면...

이렇게 근간을 쥐고 흔드는 내용을 NIPS 2016 워크샵에서 얘기해줄 때 이제 막 혹시 다른 divergence는 어떨까 하면서 새로운 GAN 형태를 연구해보던 사람들은 어떤 느낌이었을까요? 저는 그 때서야 갓 GAN을 접하던 시기(사실 처음 그곳에서 GAN이란 게 있단 것을 알았습니다ㅎㅎ)라 잘 못 느꼈습니다만 기존에 연구를 하던 사람들에게는 꽤나 충격적이었을 것으로 보입니다.

아무튼 오늘은 이 f-GAN에 대해 차근차근 알아보도록 하겠습니다.




2017년 4월 19일 수요일

[PR12-Video] 1. Generative Adversarial Nets


TensorFlowKR facebook comunity에서 모인 12명의 paper readers (PR12)가 읽어주는 Deep learning paper awesome list 100선 by Terry Um.

#1. Generative Adversarial Nets


매주 일요일 두 명이 각각 40분 동안 발표하고 질문을 받으며 진행하게 되었는데요 그 첫 머리를 제가 GAN으로 시작하는 영광을 얻었습니다. 이런 촬영이 처음이라 맨 뒤에 GAN variants를 소개하다가 40분을 초과하여 살짝 끊겼지만 그래도 주요한 내용은 모두 커버해서 다행입니다. 다음부터는 타이머를 켜두려구요.

슬라이드: https://www.slideshare.net/thinkingfactory/pr12-intro-to-gans-jaejun-yoo

동영상이 너무 길다 싶으신 분은 아래 다음 읽을거리 중 GAN 포스팅을 읽으셔도 됩니다 :)
다음에 또 다른 주제로 뵈어요~!

다른 분들의 발표도 보고 싶다면: PR12 딥러닝 논문읽기 모임

다음 읽을거리






2017년 4월 6일 목요일

초짜 대학원생의 입장에서 이해하는 BEGAN: Boundary Equilibrium Generative Adversarial Networks (2)

* BEGAN: Boundary Equilibrium Generative Adversarial Networks David Berthelot et al. 2017을 바탕으로 한 리뷰

지난 글에 이어 BEGAN 내용을 쭉 살펴보고 마무리해보겠습니다. 마지막 부분에 얘기했었지만 GAN에서는 generator와 discriminator 사이의 파워 게임에서 균형을 맞춰주는 것이 매우 중요합니다. 이 균형이 잘 안 맞으면 discriminator가 generator를 쉽게 이기는 경우가 많은데 BEGAN에서는 이 부분도 equilibrium measure technique이라는 개념을 도입해서 일부분 해결을 해줍니다. 심지어 한 쪽이 좀 더 학습이 잘 된 경우에도 모델이 안정적으로 학습되게 해준다는 것을 실험 결과로도 보여줍니다.




2017년 4월 5일 수요일

초짜 대학원생의 입장에서 이해하는 BEGAN: Boundary Equilibrium Generative Adversarial Networks (1)

* BEGAN: Boundary Equilibrium Generative Adversarial Networks David Berthelot et al. 2017을 바탕으로 한 리뷰

구글이 미쳤어요


Hot한 논문은 빨리 리뷰해야 제맛이죠. 3월 31일날 arXiv에 올라온 따끈따끈한 논문인데 커뮤니티 사이트에 올라오는 글 덕에 편하게 살펴보다가 깜짝 놀랐습니다. 구글은 역시 구글인가 봅니다. 결과가 아주 어마무시하네요. 본문 중에
" We focus on the image generation task, setting a new milestone in visual quality, even at higher resolutions."
라는 말이 나오는데 과연 milestone이라 자신할만한 결과입니다...이름도 정말 멋지게 잘 지었습니다. BEGAN이라니.

BEGAN으로 생성된 이미지들 (구글이 정말 미쳤습니다..)

정말 이 정도면 data augmentation을 해도 되지 않나 하는 생각이 듭니다. 이 결과만 해도 128 X 128 이미지 사이즈로 생성된 것인데 사실 확대해서 보아도 어색함을 느끼기가 어려울 정도입니다.  처음엔 실제 데이터 이미지를 소개하는 것을 잘못 이해했나 하고 캡션을 다시 봤을 정도입니다.

BEGAN의 contribution 


저자들이 얘기하는 BEGAN의 contribution은 다음과 같습니다 (하나하나 따로만 봐도 빠질 것이 없네요):

  • 단순하지만 강력한 구조 빠르고 안정적인 학습과 수렴이 가능한 GAN
  • Discriminator와 generator 사이의 균형을 조정해주는 equilibrium contept
  • 이미지의 다양성과 질(quality) 사이의 trade-off를 조정하는 것이 가능한 새로운 방법
  • "수렴"의 approximate measure 

BEGAN은 기본적으로 앞서 나온 EBGAN과 WGAN에서 얻은 아이디어와 지금까지 개발된 다른 테크닉을 잘 사용해서 (물론 새로운 아이디어도 많이 있으나) 이렇게 좋은 결과를 만들어냅니다. 여기에 더해 (이미 알려진 것을 잘 사용하는 것도 정말 능력입니다만 이렇게까지 좋게 만들 수 있을 지는 상상도 못했네요.)

일단 BEGAN은 EBGAN과 상당히 닮은 뼈대를 가지고 있습니다. EBGAN이 discriminator에 auto-encoder를 사용하였던 것과 마찬가지로 BEGAN도 auto-encoder를 사용합니다. 다만 한 가지 중요한 다른 점은 일반적인 GAN이 data distribution을 맞추기 위해 학습하는 것에 반해 BEGAN은 auto-encoder loss distribution을 맞추려 한다는 것입니다. 이 때 Wasserstein distance를 사용한다는 점도 per-pixel Euclidean distance를 사용하는 EBGAN과는 다른 점입니다.




2017년 4월 2일 일요일

초짜 대학원생의 입장에서 이해하는 LSGAN (2)

Least Squares Generative Adversarial Networks Xudong Mao et al. 2016을 바탕으로 작성한 리뷰

저번 글에 이어 LSGAN의 장점과 f-divergence와의 관계 등을 수식과 함께 좀 더 구체적으로 살펴보겠습니다.

LSGAN의 장점


LSGAN의 장점은 크게 두 가지로 나눌 수 있습니다. 지난 글에서도 언급했었지만 기존 GAN은 generator가 만든 sample이 실제 data distribution과 거리가 멀지라도, sigmoid cross entropy loss function 입장에서는 일단 discriminator를 속이기만 하면 문제가 없기 때문에 별다른 피드백을 주기 어렵습니다 (아래 그림).

Sigmoid decision boundary

하지만 LSGAN은 least square loss function을 사용하여 sample이 decision boundary로부터 멀리 떨어져 있는 경우 거리에 따라 패널티를 주기 때문에 generator가 좀 더 decision boundary에 가까운 (hopefully or approximately data distribution에 가까운) sample을 만들도록 할 수 있습니다.

LSGAN의 두번째 장점도 이 loss function과 관련이 있습니다. 아래 그림에서 보실 수 있듯이 $x$ 값에 따라 saturate 될 수 있는 sigmoid cross entropy loss function과는 달리 least square loss function이 오직 한 점에서만 최소값을 갖기 때문에 LSGAN이 좀 더 안정적인 학습이 가능하다고 설명하는군요.

(a) The sigmoid cross entropy loss (b) The least square loss




2017년 3월 22일 수요일

초짜 대학원생의 입장에서 이해하는 LSGAN (1)

Least Squares Generative Adversarial Networks Xudong Mao et al. 2016을 바탕으로 작성한 리뷰

점점 읽은 논문은 쌓여가고 포스팅은 속도가 느려 따라가지 못하는 상황이 많이 발생합니다. 하루에 읽고 쓰고 처리할 수 있는 정보의 양이 한정적이란 것이 정말 아쉽습니다. 세상에 보고 읽고 공부해서 해봐야할 것들이 정말 많은데 좀 더 효율적인 방법 없을까..하는 생각이 들곤합니다. 머리에 GPU를 달 수도 없고...orz... 이럴땐 처리 속도가 빠른 천재들이 부럽습니다.

그런 의미에서!? 아직 InfoGAN에서 하고픈 얘기가 좀 남았지만 최근 읽은 논문 하나를 더 소개해보고자 합니다. (일단 저질르면 언젠가는 다 마무리하겠지..-_-...)

사실 순서대로 따지면 f-GAN을 한 번 소개하고 WGAN과 그 직전에 WGAN의 모태가 된 논문도 정리하고 뭐 할 것이 많지만....

어느 세월에 다 쓰나싶어 거두절미하고 이해하기 편하고 쓰기 편한 LSGAN부터 올리기로 했습니다! 이름부터 뭔가 편합니다. Least Square는 regression이나 optimization을 공부하면 가장 처음에 나오는 내용이죠. 매우 익숙한데 얘를 어떻게 이용하는지 한 번 살펴보겠습니다.




2017년 3월 19일 일요일

초짜 대학원생의 입장에서 이해하는 InfoGAN (2)

InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen et al. 2016을 바탕으로 작성한 리뷰

지난 글에 이어 오늘은 InfoGAN의 이론적인 부분을 중점적으로 살펴보도록 하겠습니다. 저번에 얘기했던 내용을 짧게 정리해보면 다음과 같습니다

기존의 GAN과는 달리 InfoGAN은 생성 모델에 들어갈 Input에 latent code $c$를 추가하여 학습합니다. 이 때, 무의미한(trivial) code가 학습되는 것을 막기 위해 생성 모델의 분포 $G(z,c)$와 상호 정보량(Mutual Information, MI)이 높도록 제약을 부여합니다. 즉, $I(c;G(z,c)$가 높게 유지시킵니다.

"In other words, the information in the latent code $c$ should not be lost in the generation process."

즉, $c$가 생성 모델을 지나는 동안 변형되지 않는 뭔가 중요한 정보를 담도록 학습하길 기대하는 것입니다.

결과적으로 InfoGAN은 아래와 같은 information-regulaized minimax 문제를 풉니다: $$\min_G \max_D V_I(D,G) =V(D,G)-\lambda I(c;G(z,c)).$$



2017년 3월 15일 수요일

초짜 대학원생의 입장에서 이해하는 InfoGAN (1)

* InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Xi Chen et al. 2016을 바탕으로 작성한 리뷰

오늘은 InfoGAN이라는 논문을 소개하고자 합니다. 정보 이론(information-theoretic)에서 아이디어를 가져와 GAN에 붙여 확장한 것인데, 어려워 보이는 수식어가 붙는 것에 비해 아이디어가 상당히 간단하고 매우 흥미로운 결과를 보여줍니다. 더불어 original GAN을 다른 관점으로 분석하는 길을 열어주기 때문에 GAN을 더 깊히 이해하는데 도움이 될 것이라 생각합니다.

기본적인 아이디어는 다음과 같습니다. 기존의 GAN은 생성 모델의 input이 $z$ 하나인 것에 비해 InfoGAN은 ($z,c$)로 input에 code라는 latent variable $c$가 추가됩니다. 그리고 GAN objective에 애드온(add-on)을 하나 붙여서 생성 모델이 학습을 할 때, latent 공간($z$-space)에서 추가로 넣어준 코드 $c$와 생성된 샘플(generated sample) 사이의 Mutual Information (MI)가 높아지도록 도와줍니다.



2017년 2월 28일 화요일

초짜 대학원생의 입장에서 이해하는 Unrolled Generative Adversarial Networks (2)

* Unrolled Generative Adversarial Networks - L. Metz et al. 2016을 바탕으로 작성한 리뷰

이전 글의 마지막 부분에서 unrolled GAN이 어떻게 기존의 GAN과 다른지 짧게 살펴보았었습니다. 오늘은 그 부분에 대해 좀 더 설명을 하고 unrolling한 결과가 어떤 지에 대해 확인해보겠습니다.