2018년 2월 4일 일요일

[PR12-Video] 56. Capsule Network


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

#56. Capsule Network


이 리뷰에서는 최근 NIPS 2017에서 발표된 힌튼 교수님의 Capsule Network에 대해 소개해보았습니다. Capsule network가 기존의 CNN의 문제점에 대해 지적하며 새로운 프레임의 학습 방식인 라우팅을 들고 왔지요. 처음 읽는 분들은 생각보다 논문이 친절하지 않아서 헷갈릴 수 있는 부분이 있고 이해가 직관적이지는 않아서 어려움을 겪을 수 있습니다. 제 소개를 통해 조금이나마 이해가 쉽게 될 수 있도록 준비해보았습니다. 짧지만 제 생각도 넣어보았네요. 즐겁게 들어주시면 감사하겠습니다.


슬라이드: https://www.slideshare.net/thinkingfactory/pr12-capsule-networks-jaejun-yoo

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

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

다음 읽을거리






[PR12-Video] 34. Inception and Xception


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

#34. Inception and Xception


그동안 블로그 글은 뜸했어도 PR12 활동은 빠지지 않으려 노력했습니다. 유튜브에는 시간에 맞춰 꼬박꼬박 올렸습니다만 블로그에 중복으로 올리는 것이 조금 품이 들어서 그런지 여기에는 업데이트가 늦었네요. 조금 여유가 생겼기에 블로그에도 정리를 해서 올립니다.
여전히 매주 일요일마다 12명이 돌아가며 두 명씩 두 편의 논문을 40분 동안 발표하고 있습니다. 이 리뷰에서는 구글에서 발표한 모델인 Inception과 CVPR 2017에서 Keras의 저자 프랑수아 숄레가 발표한 Xception에 대해 살펴보았습니다. Inception 초기 모델부터 가장 최근의 extension인 Xception까지 한 영상으로 쭉 훑어보실 수 있도록 노력했습니다. 즐겁게 들어주시면 감사하겠습니다.


슬라이드: https://www.slideshare.net/thinkingfactory/pr12-inception-and-xception-jaejun-yoo

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

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

다음 읽을거리






[PR12-Video] 24. Pixel Recurrent Neural Network


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

#24. Pixel Recurrent Neural Network


그동안 블로그 글은 뜸했어도 PR12 활동은 빠지지 않으려 노력했습니다. 유튜브에는 시간에 맞춰 꼬박꼬박 올렸습니다만 블로그에 중복으로 올리는 것이 조금 품이 들어서 그런지 여기에는 업데이트가 늦었네요. 조금 여유가 생겼기에 블로그에도 정리를 해서 올립니다.
여전히 매주 일요일마다 12명이 돌아가며 두 명씩 두 편의 논문을 40분 동안 발표하고 있습니다. 이 리뷰에서는 Generative Model 중 GAN과는 아예 다른 갈래에 속하는 Autoregressive Model를 소개하였습니다. 이후 DeepMind의 WaveNet의 전신이 되는 논문이지요. 즐겁게 들어주시면 감사하겠습니다.


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

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

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

다음 읽을거리






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 증명에 대한 설명도 함께 넣을 예정입니다. 그럼 다음 글에서 뵙겠습니다.

다음 읽을거리



참고문헌:



2018년 1월 27일 토요일

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

* Lec. 16 Learning: Support Vector Machines, Patrick Winston MIT OCW 6.034 Fall 2010을 바탕으로 한 리뷰

오늘은 클래식한 내용을 다뤄볼까 합니다. 기계 학습 분야에서 한 시대를 풍미하였고, 여전히 매우 다양한 현장에서 사용되고 있는 Support Vector Machine (SVM)에 대해 정리해보았습니다.

SVM은 이미 역사가 오래되기도 하였지만 매우 멋진!! 방법이기에 여러 학습 자료들이 있습니다. 그런데도 불구하고 제가 그 많은 자료에 하나를 더 추가하는 까닭은 이 영상만큼 간결하지만 핵심을 관통하는 자료를 본 적이 없기 때문입니다. 오직 스스로를 위해 이 강의의 Insight를 잊기 전에 정리하고자 글을 적어봅니다.

MIT OCW는 정말 은혜로운데요 이 글을 찾으신 분들 중 시간이 있는 분들은 제 정리 글을 보기 보다는 시간을 내어 꼭 영상을 직접 보시는 것을 추천합니다. 이렇게 넓고 깊은 시야를 지닌 교수님께 강의를 온라인으로나마 들을 수 있다는 것은 정말 축복입니다.

슬프지만 시간이 없으신 분들께서 (혹은 미래에 내용을 까먹은 내가...) 이 글만으로도 강의의 핵심을 맛볼 수 있도록 최대한 노력하여 정리해보겠습니다.

Support Vector Machine


SVM의 매력은 매우 아름답고 탄탄한 이론적인 배경을 바탕으로 정교하게 고안된 기계학습 알고리즘이라는 것에 있습니다. 여기에 알고리즘의 실제 적용이 여러 모로 쉽고 성능이 강력하며 따라서 실전적이라는 점이 그 매력을 더합니다.

SVM에서 풀고자 하는 문제는 다음과 같습니다.

"How do we divide the space with decision boundaries?"


예시와 함께 보면 좀 더 구체적으로 문제를 좁힐 수 있습니다:

  1. 우리가 $'+'$ 샘플과 $'-'$ 샘플을 구별하고 싶다면 어떤 식으로 나눠야 하는가? 
  2. 만약 선을 그어 그 사이를 나눈다면 어떤 선이어야 할 것인가? 
가장 쉽게 그리고 직관적으로 생각할 수 있는 답은 아마도 $'+'$와 $'-'$ 샘플 사이의 거리를 가장 넓게 쓰는 어떤 line으로 다음과 같은 녀석(점선)일 것입니다.


"widest street strategy"

흠... 매우 직관적으로 풀 수 있는 별 것 아닌 문제로 보입니다. 하지만 이 문제에 대한 답을 구체적이고 논리정연하게 이론으로 일반화하는 것은 언뜻 보기와는 달리 쉬운 작업이 아닙니다. SVM은 지금 던진 문제에 대한 답을 찾기 위해 풀어나간 과정입니다.

그래서 제가 오늘 정리하고자 하는 것은 SVM이기도 하지만 어떤 문제를 풀기 위해 체계적으로 아이디어를 개발하고 논리를 전개하는 과정 그 자체라고도 얘기할 수 있겠습니다. 그만큼 SVM은 매우 정교하게 고안된 알고리즘인데요 앞으로도 이런 관점에서 어떤 식으로 문제를 설정하고 어떻게 풀어나가는 지를 염두에 두면서 정리하고자 합니다. 이제 그 과정을 하나하나 따라가 보겠습니다.

Decision rule


그럼 먼저 "decision boundary를 정하기 위한 decision rule은 어떤 형태여야 할 것인가?"에 대해 생각해보겠습니다. 이를 위해 $\vec{w}$를 하나 그려볼텐데요 이 벡터는 우리가 그릴 street의 중심선에 대해 직교하는 벡터입니다. (일단 여기서 그 길이는 잠시 arbitrary로 제쳐두겠습니다.)


그리고 이제 모르는 샘플 $\vec{u}$ 하나가 있을 때 우리가 궁금한 것은 street를 기준으로 이 녀석이 오른쪽에 속할지 혹은 왼쪽에 속할지입니다. 자 여기서 우리가 해볼 수 있는 한 가지 방법은 $\vec{w}$와 $\vec{u}$를 내적한 후 그 값이 어떤 상수 $c$보다 큰 지를 확인하는 것입니다; $\vec{w}\cdot \vec{u} \geq c$. 혹은 일반성을 해치지 않는 범위에서 아래와 같이 얘기할 수도 있겠죠:
\begin{align} \vec{w}\cdot \vec{u}+b \geq 0 \qquad then \quad`+' \label{eq:dr}\end{align}
논리는 매우 간단합니다. 내적을 한다는 것은 위에 그림에서 $\vec{u}$를 $\vec{w}$에 projection 한다는 것이고, 그 길이가 길어서 어떤 경계를 넘으면 오른쪽, 짧으면 왼쪽에 속한다는 것을 생각해보면 쉽게 이해하실 수 있을 것입니다.

따라서 수식 \eqref{eq:dr}이 우리의 decision rule이 됩니다. 우리가 SVM을 이해하는데 필요할 가장 첫번째 도구이기도 합니다. 하지만 아직은 부족한 점이 많죠. 아직 우리는 저 수식에서 어떤 $\vec{w}$를 정해야하는지 어떤 $b$를 잡아야하는지 전혀 모릅니다. 다만 $\vec{w}$가 우리가 원하는 street의 중심선에 직교한다는 것 하나만 알 수 있을뿐이죠.

아쉽게도 그런 $\vec{w}$는 매우 다양하게 그릴 수 있기에 여기서 내릴 수 있는 판단은 아직 constraint가 부족하다는 것입니다. 그래서 앞으로 할 것은 우리가 $\vec{w}$와 $b$를 계산할 수 있도록 저 수식에 여러 제약 조건들을 추가해가는 작업이 되겠습니다.

Design and add additional constraints


자 그러면 이제 위의 식에서 조금 더 나아가서 $x_+$를 $`+'$ 샘플 $x_-$가 $`-'$ 샘플이라 할 때 다음과 같이 적어보겠습니다:
$$\vec{w} \cdot \vec{x}_+ + b \geq 1 \\ \vec{w} \cdot \vec{x}_- + b \leq -1$$
즉, `+' 샘플을 예를 들면 이 샘플에 대해서는 우리의 decision rule이 최소한 1보다는 큰 값을 주도록 해본 것입니다.

흠...문제가 좀 더 구체화된 것 같기는 합니다..그런데 여전히 문제가 쉬워지지는 않았네요...안 그래도 복잡한데 따로 노는 두 개의 식들을 다루는 것은 짜증나는 일이지요. 그래서 여기에 variable 하나를 고안해서 문제를 좀 바꿔보겠습니다. (이런 variable들을 추가하는 이유는 정말 단순히 그저 수학적으로 편리하기 위함입니다)
$$y_i=\begin{cases}\begin{align*}~1&\qquad for \quad `+' \\ -1&\qquad for \quad `-'  \end{align*}\end{cases}$$
이제 이 $y_i$를 위에 수식에 각각 곱해보겠습니다.
$$y_i(\vec{w}\cdot\vec{x}_i+b) \geq 1$$
오! 이제 수식이 하나로 줄었습니다. 이걸 좀 정리하면 아래와 같고,
\begin{equation}y_i(\vec{w}\cdot\vec{x}_i+b) - 1 \geq 0 \label{eq:const}\end{equation}
여기서 등호가 성립할 때는 $\vec{x}_i$가 정확히 street의 양 쪽 노란 경계선에 정확히 걸쳐 있을 때라는 제약을 하나 더 추가해보겠습니다. 즉, 위에 그림에서 경계(노란선, gutters)에 걸칠 $`+'$ 샘플 하나와 $`-'$ 샘플 두 개에 대한 수식의 결과가 0이 되겠습니다.
\begin{equation}y_i(\vec{w}\cdot\vec{x}_i+b) - 1=0 \qquad for\quad \vec{x}_i \in노란선~(gutters)\label{eq:2}\end{equation}
이 쯤에서 다시 우리가 하고자 했던 목적을 재차 상기해보겠습니다. 우리가 하고 싶은 것은 어떤 선을 잡되 이로 인해 생기는 $`+'$ 샘플과 $`-'$ 샘플 사이의 거리를 가능한 최대로 넓게 하고 싶습니다. 그러면 일단 '거리'라는 것을 어떻게 표현할 수 있을지 고민해봐야 합니다.
위 그림에서 보여주는대로 하면 거리를 다음과 같이 표현 할 수 있겠습니다:
$$WIDTH = (x_+-x_-)\cdot\frac{\vec{w}}{||\vec{w}||}$$
오! 그런데 \eqref{eq:2}번 수식 덕분에 위에 WIDTH의 분자를 계산하면,
\begin{align}WIDTH = \frac{2}{||\vec{w}||}\label{eq:3}\end{align}
가 된다는 것을 알 수 있습니다. 이 수식 \eqref{eq:3}이 SVM을 이해할 때 필요한 세번째 도구입니다.

Optimization techniques


식 \eqref{eq:3}이 있기에 우리는 WIDTH를 최대화하고 싶다는 목적을 다음과 같이 수식화하여 적을 수 있게됩니다:
$$\max \frac{1}{||\vec{w}||} \leftrightarrow \min ||\vec{w}|| \leftrightarrow \min \frac{1}{2}||\vec{w}||^2$$
(이렇게 표현 하는 것 역시도 오로지 최종 목적을 위해서 그리고 수학적 계산의 용이함을 위함입니다.)

단, 이 문제를 풀 때 $\vec{w}$가 수식 \eqref{eq:2}이라는 제약 조건을 만족시켜야 한다는 점을 잊으면 안 됩니다. 이런 등식 제약 조건이 있는 최적화 문제는 다양하게 연구되어 왔는데, 많이들 알고 계시는 라그랑주 승수법(Lagrange Multiplier Method)를 적용하면 제약 조건을 신경쓰지 않고 풀 수 있도록 문제를 바꿀 수 있습니다:
\begin{equation} \cal{L}(w,b,\alpha) = \frac{1}{2}||\vec{w}||^2-\sum_{i=1}^N\alpha_i[y_i(\vec{w}\cdot\vec{x}_i+b)-1]\\ minimize\quad w.r.t.\quad \vec{w}~and~b \qquad maximize\quad w.r.t.\quad \alpha_i \geq 0  \quad \forall i\label{eq:4} \end{equation}
여기서 $\alpha$는 Lagrange multiplier입니다.

(* 나중에 얘기하게 되겠지만 $\alpha$들 중 경계에 걸친 샘플 $\vec{x}_i$(or support vector)에 대한 $\alpha_i$ 외에는 모두 값이 $0$이 됩니다. 그리고 모든 샘플들에 대해 얘기하려 하면 등식이 아닌 부등식 \eqref{eq:const}를 제약 조건으로 사용해야 하는데요 이 때는 KKT 조건이란 것을 설명해야 합니다. 엄밀히 말하면, 위 식 \eqref{eq:4}에서 $\alpha_i\geq0$라는 것과 $\alpha$에 대해 maximize 문제가 나온 이유 등이 이로부터 비롯합니다. 다만 이런 내용들을 지금 얘기하기에는 지금까지 전개해온 큰 흐름을 놓칠 우려가 있기에 당장은 이 녀석들이 해주는 역할이 제약 조건이 있는 최적화 문제를 제약 조건이 없는 문제로 바꾸어 주는 것이라는 점만 알고 넘어가겠습니다.)

이제 거의 다 왔습니다. 우리가 관심있는 각각의 변수에 대해 미분을 해주면 다음 식들을 얻을 수 있습니다.
\begin{align} \nabla_\vec{w}\cal{L} = \vec{w} - \sum_i\alpha_i y_i\vec{x}_i = 0 \label{eq:w}
\\ \nabla_b\cal{L} = -\sum_i\alpha_i y_i = 0 \label{eq:b}\end{align}
흠 매우 흥미로운 결론입니다. Now the math begins to sing! 여기서 첫번째 식을 정리해보면 $\vec{w} = \sum_i\alpha_iy_i\vec{x}_i$이므로 우리가 관심있는 decision vector $\vec{w}$가 "some" 샘플들의 선형 합으로 나타낼 수 있다는 점을 알 수 있습니다. $\vec{w}$는 꼭 이런 형태야 할 필요는 없었는데 말이죠. 차분히 문제를 풀어가다보니 마침내 이른 형태가 샘플들의 선형 합입니다. (제곱, log 등 별 희안한 조합이 뒤섞인 형태일 수도 있었는데 말이죠) 여기서 "some"이라 굳이 강조한 이유는 경계에 걸친 샘플들 외에는 $\alpha$ 값들이 0이기 때문입니다.

결국 $\alpha$ 값만 알게 되면 $\vec{w}$를 구할 수 있게 되었습니다. 그럼 이제 여기서 얻은 식들을 이용해서 \eqref{eq:4}에 대입하여 $\alpha$에 대한 식으로 바꾸고 문제를 더 단순화 해보겠습니다. 식 \eqref{eq:4}에서 두번째 항의 $-1$ 부분을 밖으로 꺼내고 식\eqref{eq:b}을 이용하여 $b$ 부분을 없앨 수 있습니다. 이어 식 \eqref{eq:w}을 이용하여 $\vec{w}$를 대신 넣어주면 다음과 같이 정리가 가능합니다:
\begin{align*} \sum_{i=1}^N \alpha_i + \frac{1}{2}||\vec{w}||^2-\sum_{i=1}^N\alpha_iy_i\vec{w}^T\vec{x}_i
&\iff \sum_{i=1}^N \alpha_i + \frac{1}{2}\vec{w}^T\vec{w}-\vec{w}^T \vec{w}  \\
&\iff \sum_{i=1}^N \alpha_i - \frac{1}{2}\vec{w}^T \vec{w} \\
&\iff \sum_{i=1}^N \alpha_i - \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_j y_iy_j\vec{x}_i^T\vec{x}_j\\
&\iff \cal{L}(\alpha).
\end{align*}
따라서 이제 모든 것이 $\alpha$에 대한 maximization 문제로 정리가 끝났습니다. 이 문제를 풀어 $\alpha$를 구하면, 식 \eqref{eq:w} $\vec{w} = \sum_i\alpha_iy_i\vec{x}_i$을 사용해서 $\vec{w}$를 구할 수 있게 되고 이어 식 \eqref{eq:2}을 통해 $b$도 구할 수 있게 됩니다. 식 \eqref{eq:2}에 의해 $\alpha$ 값이 0이 아니라는 것은 해당 $\vec{x}$가 경계선을 정하는 샘플이라는 뜻이고 SVM에서는 이런 샘플들을 "support vector"라고 부릅니다.
"support vectors"

오 그런데 전개를 하고 보니 $\cal{L}(\alpha)$ 식은 매우 좋은 성질을 갖고 있습니다. $\alpha$에 대해 첫째 항은 선형이고 둘째 항은 quadratic이기 때문에 quadratic programming 테크닉을 사용하여 어떠한 off-the-shelf 알고리즘이든 사용하면 $\alpha$ 해를 구할 수 있습니다.

즉, 이 SVM은 신경망과는 달리 local minima에 빠질 걱정을 전혀 하지 않아도 된다는 것이죠. 따라서 SVM으로 구한 해는

"언제나 (현재 SVM이 줄 수 있는) 최적의 해라는 것이 이론적으로 보장"

됩니다 (소름!).

따라서 support vector들로 정해진 decision boundary가 가장 최적의 boundary이며, 현재 가지고 있는 데이터만으로 새로운 샘플이 들어왔을 때 일반화를 가장 잘 할 수 있는 decision rule을 찾을 수 있게 된 것입니다.

(bonus) The way to Kernel trick


짠! 우리는 이제 SVM에 대한 큰 줄기를 모두 훑었습니다. 재미있는 사실은 SVM과 관련된 핵심 수식들이 모두 샘플에 대한 "내적"으로 이루어져 있다는 것입니다. $\cal{L}(\alpha)$ 식에서 $\vec{x}_i^T\vec{x}_j$ 부분이 그러하고 우리가 decision rule로 정의하였던 식 \eqref{eq:dr} 역시도 식 \eqref{eq:w}을 대입하여 바꿔주면 결국 $\vec{x}\cdot\vec{u}$과 같이 sample과 모르는 unknown 샘플의 내적에 따라 값이 바뀌는 것을 보실 수 있습니다.

왜 갑자기 내적을 강조하는지 의아하실 수 있는데요 지금까지 소개한 SVM은 우리가 흔히 아는 Euclidean 공간에서의 내적을 사용하고 있었습니다. 그런데 샘플들이 살고 있는 공간이 매우 복잡하여 두 샘플 간의 거리를 가늠할 때 단순한 내적을 사용하는 것이 맞지 않는 경우가 있을 수 있습니다. (사실 대다수의 흥미로운 문제들은 그렇죠) 즉, 샘플들이 linearly separable한 경우라면 지금까지 본 SVM이 매우 잘 동작하지만 그게 아닌 경우는 문제를 전혀 풀지 못하는 문제가 생기게 됩니다.

바로 이 부분에서 재미있는 아이디어들이 많이 나옵니다. 현재 샘플이 살고 있는 공간에서 샘플 군간의 구별이 어렵다면, 어떤 함수 $\phi(\cdot)$을 잘 디자인하여 샘플들이 linearly separable한 공간으로 샘플들을 보내준 후 그 공간에서의 SVM을 적용하는 것을 생각해볼 수 있습니다.

이를 심지어는 무한 차원을 갖는 어떤 feature space로 확장하여 생각을 해볼 수 있는데요. 이 경우 매우 큰 차원이 갖는 풍부한 표현력을 이용하면서도 실제 decision boundary에 영향을 주는 support vector들은 상대적으로 매우 적을 수 있기 때문에 일반화를 매우 잘 하는 모델을 세울 수 있게 됩니다.

다만 $\phi(\cdot)$이라는 무한 차원으로 보내줄 적절한 함수를 찾는 것도 쉬운 일은 아닐테죠. 그런데 잘 생각해보면 SVM을 적용할 때 우리가 필요한 것은 사실 그 차원으로 보내는 함수가 아니라 그 공간에서의 내적값입니다. 즉, 만약 어떤 Kernel이 있어서 우리가 $K(\vec{x},\vec{y}) = \phi(\vec{x})\cdot\phi(\vec{y})$와 같이 우연히도 다른 공간에서의 내적값에 대응하는 값을 주는 녀석을 잘 디자인할 수 있다면 non-linearly separable한 경우에 있어서도 SVM이 잘 작동할 수 있을 것입니다.

이게 제가 이해하고 있는 Kernel trick의 흐름입니다. 아마 기회가 된다면 다음 번 글에서 앞서 자세히 소개하지 못한 최적화 부분 얘기와 함께 내용을 다룰 수 있지 않을까 싶습니다.

마무리


이 글을 쓰기 위해 Patrick Winston 교수님의 MIT OCW 강의를 듣다 멈추다 하며 정리를 하다보니 오히려 더 배웠습니다. SVM이라는 방법론이 나오게 된 이유부터 문제 설정, 문제를 풀기 위해 필요한 요소들을 하나하나 만들어 나가는데, 별다른 강의 자료 하나 없이 그리고 복잡한 수식 따위 없이 분필 하나만을 쥐고서 처음과 끝은 잇는 커다란 흐름에 따라 칠판에 차근차근 논리를 전개하는 50분의 강의는 버릴 프레임이 단 한 프레임도 없습니다.

매우 단순하고 명료한 논리를 따라가다보면 모든 수식이 모자람도 덜어낼 것도 없이 딱 필요한만큼 당연히 있어야 할 자리에 있을뿐 전혀 어렵지 않게 설명이 가능하다는 것을 알 수 있습니다. SVM이라는 키워드에 같이 따라오는 여러 수식들 때문에 두려움이 있었던 분들께 이 강의를 다시 한 번 강력히 추천합니다.

함께 보면 좋은 영상







2017년 12월 24일 일요일

When a ball put inside a box has a longer diameter than the box (What happens when we put a ball inside a box in a high dimensional world?)

When a ball put inside a box has a longer diameter than the box


I had a chance to read Ferenc's interesting post about counter-intuitive things happening in a high dimensional space. This reminds me a very simple but another interesting example I met in a topology class.

I found this example in a series of YouTube lectures about topology and geometry by professor Tadashi Tokieda.  This example is very easy to understand with a simple logic though it triggers a lot of interesting thoughts and broadens my sight. I hope this would also help the readers to glimpse a deep and extraordinary world of a high dimensional space.

To start, let's begin with an easy example of 2D space. Think about the situation that you put every corner of the square (each side has a length of one, $I^2$ with a white disk. Then, try to fit a red disk in the middle.

2D square example

Then, what is the diameter of the red disk? You can solve this problem in various ways but let me introduce a very intuitive and simple way.

Solution

As you can see in the above picture, you would immediately notice that the length of the diagonal line is equal to the sum of two white disks' and two red disks' diameters. Therefore, you can derive the diameter of the red ball $d_{red}$ as below:
$$d_{red} = \frac{\sqrt{2}-1}{2}.$$
Since the value of $\sqrt{2}$ is approximately 1.414, the diameter of the red disk is approximately 0.2, which is definitely smaller than the length of each side of the square. This simply means that this disk in the middle is smaller than the square. Well... Of course! Because we put it in the square.

What would happen when we go to 3D box $I^3$?

3D box example

Again, it is not hard to find $d_{red}$. In an analogous way with the previous solution, we can simply find the fact that the length of the diagonal line of the box would be also same with the sum of two white balls' and red balls' diameters.

By the Pythagorean theorem, we can easily derive the diameter of the red ball by
$$d_{red} = \frac{\sqrt{3}-1}{2}\approx 0.35 <1.$$
It is still smaller than the box though it has increased a little.

Let's do the same in $I^m$. Still the length of the diagonal line across the high dimensional box would be found by the square root of the sum of the squares of all the sides it has.

Therefore, the general solution for $d_{red}$ in $m$-th dimension can be derived as follows:
$$d_{red} = \frac{\sqrt{m}-1}{2}.$$
You may already notice that this will give a very interesting result when $m\geq 9$. Whenever $m$ goes beyond 10, we would find the ball which is put inside the box would have longer diameter than the length of each side of the box!

"When a ball put inside a box has a longer diameter than the box's side!"

This simple but very counter-intuitive example shows how much our intuition can be wrong when it comes to a high dimensional space. As written in the front desk of my blog, I always try to think in pictures and visualize more when I meet a new concept. However, this example always rings me a warning that I have to be very careful whenever I cross the line above three-dimensional space.

I hope the readers would also find the fresh impression that I felt when I met this example for the first time. Thank you for your reading and please leave the comments if you liked it.



박스 안에 넣은 공의 지름이 박스보다 클 때 (What happens when we put a ball inside a box in a high dimensional world?)

박스 안에 넣은 공의 지름이 박스보다 클 때


(* For English speakers: En version)

facebook의 게시글 중 임성빈 박사님이 올리신 고차원으로 생각을 확장할 때 주의할 내용에 관한 글을 보고 문득 떠오른 재미있는 예시가 있다.

예전에 위상 수학을 혼자 공부하다 본 Tadashi Tokieda 교수님의 Topology & Geometry 강의 중 있던 예시인데 일반적인 상식이 뒤집어지는 예시면서도 매우 쉽게 보일 수 있어서 감명 깊었던 것을 공유하기 위해 정리해본다.

먼저 쉬운 예부터 시작하기 위해서, 각 변의 길이가 1인 2D 사각형 $I^2$ 안에 네 귀퉁이마다 흰 공을 넣고 맨 중간에 남는 공간에 빨간 공을 채운다고 해보자.

2차원 박스 예시

이 때, 이 공의 지름은 어떻게 되는지 생각해보자. 다양한 방법으로 이를 구할 수 있겠지만 매우 직관적이고 깔끔한 방법 하나를 소개해보면 다음과 같다.

풀이

이렇게 여러 사각형을 붙여보면 대각선의 길이는 빨간 공 두 개와 흰 공 두 개의 지름을 합한 것과 같고, 흰 공 두 개의 지름의 합은 1이기 때문에 아래 수식으로 빨간 공의 지름 $d_{red}$를 쉽게 구할 수 있다:
$$d_{red} = \frac{\sqrt{2}-1}{2}.$$
$\sqrt{2}$의 값은 대략 1.414이므로 빨간 공의 지름은 대략 0.2이고 박스의 크기인 1보다 작다. 뭐, 당연한 일이다. 애초에 박스 안에 공을 넣었는데 박스보다 공이 클 수가 있겠는가?

자, 조금 더 확장해서 3차원 박스 $I^3$가 되면 어떨까?

3차원 박스 예시

이 때의 $d_{red}$ 역시도 그리 어렵지 않다. 앞서 소개한 방식으로 생각을 조금만 더 확장하면, 박스를 가로지르는 빗변의 길이가 흰 공 두 개와 빨간 공 두 개의 지름의 합과 같다는 것은 여전히 유효하다는 것을 알 수 있다. 따라서 피타고라스 정리를 생각하면 아래 사각형의 변들의 제곱과 높이의 제곱을 모두 더한 것에 루트를 씌워 쉽게 구할 수 있다:
$$d_{red} = \frac{\sqrt{3}-1}{2}\approx 0.35 <1.$$
이 역시도 여전히 박스 한 변의 길이인 1보다는 작다. 그런데 여기서 재미있는 점은 빨간 공의 지름이 조금 커졌다는 것이다.

이를 임의의 $m$ 차원으로 확장하면 어떻게 될까? $m$ 차원 박스 $I^m$을 가로지르는 빗변의 길이는 피타고라스의 정리에 의해 모든 변의 제곱의 합에 루트를 씌운 것과 같다.

그러면 위에 공식에 따라 $m$ 차원 구 $d_{red}$에 대한 일반 해를 다음과 같이 정리할 수 있는데:
$$d_{red} = \frac{\sqrt{m}-1}{2}.$$
눈치 빠른 분들은 이미 아셨겠지만, $m\geq 9$가 되는 순간 빨간 공의 지름이 박스 한 변의 길이인 1보다 크거나 같아지게 된다. 즉, 우리는 분명 박스 안 모든 귀퉁이에 흰 공들을 넣고 그 안 쪽 공간에 빨간 공을 우겨 넣었지만 빨간 공의 지름은 박스보다 크다!

"박스 안에 넣은 공의 지름이 박스보다 크다!"

매우 단순하고 쉽지만 차원으로 넘어갈 때, 우리의 직관이 얼마나 틀릴 수 있는지 보여주는 좋은 예시라고 생각한다. 블로그 인사글과 같이 언제나 그림으로 상상하는 것을 즐기고 그렇게 할 수 있을 때, 가장 강력한 직관과 이해를 얻을 수 있다고 생각하지만 (Think in Pictures and Visualize More!) 고차원으로 갈 때는 이런 재미있는 일들이 자주 일어나기 때문에 매우 조심해야한다는 것도 염두에 두어야하겠다.

처음 이 예시를 접했을 때 느꼈던 신선함을 다른 분들도 느끼길 바라며 초짜 공돌이의 짧은 위상 수학 산책을 마친다.

다음 읽을거리