본문 바로가기

Enginius/Machine Learning

On Bayesian Deep Learning and Deep Bayesian Learning

요즘엔 말장난이 유행인가 보다. 그 Yee Whye의 발표를 한번 정리해보자. 



토마스 베이즈랑 힌튼의 두 접근을 합쳐보자는 게 목적이다. 일단 베이지안 러닝에 대해서 알아보자. 



이예테니까 할 수 있는 멋진 그림이다. 우리(=베이지안)가 원하는 것은 포스테리어를 구하는 것이다. 즉 reverse conditional distribution을 Bayes' rule로 구하는게 목적이다. 실제로 써먹을 때는 posterior mean을 구해야 한다. 예를 들어 RL에서는 유틸리티를 최대로 하는 action을 고를 수 있다. 이 경우에 파라미터는 유틸리티의 파라미터이다. 


위 그림은 LDA를 이용해서 87년부터 2015년까지 토픽을 보여주는 것이다. 딥러닝이 뜨고 있다!! 

베이지안 학습의 장단점에 대해서 생각해보자. 장점으로는 

1. 우리가 unlimited computational resource에 접근이 가능하다면 perfect learner가 어떤 행동을 할지를 알려준다(?). 물론 우리가 가지고 있는 가정 하에서, 무한한 데이터를 봤을 때이다. 여기서 perfect라는 것은 무엇일까? 베이지안 방법론의 consistency를 말하는 건가? 

2. Prior와 inductive bias에 대해서 표현할 수 있다? 

3. Uncertainty를 자동으로 다루게 해준다? 이건 베이지안 만의 장점은 아닌 것 같은데, 확률 기반 방법의 장점 아닌가? 

4. 통계학자들과 대화가 가능하다. -_-?

단점으로는 

1. 우리가 가지고 있는 가정이 틀리면?

2. 모든 prior를 쉽게 적용가능하지 않다. 이미지에 대해서 prior는? 실제로 적용이 거의 불가능하다. 

3. Conditional distribution이 analytic form으로 안나오면 적용히 아주 힘들다. MCMC를 써야 하는데, scalable하지 않다. 


Posterior Server


우리의 관심은 뉴럴넷의 파라미터를 찾는데 있다. 우리의 가정은 파라미터에 대한 prior가 가우시안으로 있다고 가정한다. 


위의 그림인데, 일단 파라미터의 prior를 가우시안으로 하고 MAP를 하면.. (그럼 그렇지..) weight decay로 변경된다. 결국 posterior를 쓰지 않는 것 같다..? 


이 경우에 MCMC를 쓰는 방법론은 파라미터 공간에서 MCMC를 한다. 이게 되나..??? 다른 방법은 variational inference를 쓰는 것이다. 이건 좀 될 수 있다. 이예테의 연구에서는 distibuted learning에 집중을 하였다. 



즉 어떤 서버가 있고, 이 서버는 각 파라미터의 copy를 들고 있다. 각 iteration에서 각 worker는 latest copy를 가져다가 학습을 한다. 한번 통신하기 전에 여러 번의 iteration을 돌려서 학습을 한다. 문제는 이렇게 하면 sync에서 벗어나서 학습이 noisy하게 된다. 이를 해결하려면 syncronization이 필요하게 된다. 


베이지안 관점에서는 각 워커가 서로 다른 파라미터를 들고 있어도, 괜찮게 된다? 싱크가 필요 없게 된다..? 즉 하나의 파라미터 서버가 하나의 파라미터를 들고 있는 것이 아니라 posterior 분포를 트랙하게 해서, 아래 그림과 같은 posterior server와 같은 개념을 사용하게 된다. 



그러면 문제는 이 posterior sever가 어떻게 동작해야 하는가? 



각 워커는 각 likelihood를 가지고 있고, posterior server는 이를 합쳐서 하나의 trackable posterior를 계속 만들게 된다. 결과는 사실 별로 맘에 안들어서 그냥 첨부 안하겠다. 동영상을 보면 나온다. 맨날 나오는 MNIST와 CiFAR에 해서 잘된다. 모 이런 얘기이다. Distributied 알고리즘이면 ImageNet에는 해야하는거 아닌가? 


이건 continual learning에 같은 개념을 적용한 것이다. 여러 문제를 순차적으로 학습 하면 앞에 것을 잊어버리는 forgetting 문제가 생기는데 이를 좀 해결 가능하다는 것 같다. 



여기서 대가 답게 Bayesian 뉴럴넷에 대해서 한마디 한다. 대부분의 BNN은 데이터가 주어졌을 때 파라미터에 대한 posterior를 찾는 것이 목표이다. 근데 문제는 

뉴럴넷에서 파라미터는 일반적으로 별 의미를 갖지 않는다!

그리고 그렇기 때문에 여기에 대한 유의미한 prior를 정하는 것도 어렵다. 게다가 가우시안 놓아도 posterior를 구하는 것도 쉽지 않다. 그래서 우리가 한가지 생각해 보면 좋은 것은, 지금가지 하는 것 처럼 파라미터에 대한 prior를 놓고 posterior를 찾는 것 보다, 

함수들의 공간 자체에 대해서 prior를 놓고, 

함수들 자체에 대한 posterior를 찾아 보는 것은 어떨까?

이렇게 되면 Gaussian process가 떠오르는군.. 


두 번째 토픽으로 넘어가자. 


앞에서 살펴 본것은 베이지안이 어떻게 딥러닝을 도와주는지인데, 뒤에 두개는 어떻게 딥러닝이 베이지안을 도와줄지에 대한 연구이다.


1. 뉴럴넷을 이용해서 model capacity를 키워준다. 즉 rigidity를 늘려준다. 

2. Posterior를 뉴럴넷으로 만들어서 Inference에 scalability를 높인다. Amortizing inference in the multiple run이라고 하는데 어떤 뜻인지 잘 모르겠다. Amortizing은 최근에 많이 보이긴 한다. 뒤에서 잘 나오겠지? 



Deep generative model이다. VAE! 아주 멋진 알고리즘이고, 학습을 위해서는 variational inference를 용한다. 어떤건지는 대충 한다. ELBO를 쓰는 것이지! 예로는 DRAW가 있다. 



RNN이 encoder와 decoder에 둘 사 사용한다. 다시 VAE로 돌아와서 학습에 중요한 파트는 바로 reparametrization trick이다. 



하지만 만약에 latent variable이 discrete하면 위의 trick은 쉽게 적용가능하지 않다. 



그럼 어떻게 하면 될까? 

Discrete random variable을 concrete random variable이란 것으로 relax를 한다.


우리에게 아래 그림과 같이 discrete random variable이 있다고 해보자. 



그러면 우리는 아래 그림과 같은 graph에서 샘플링이 가능하다. 



위에서 정의된 discrete random variable이 Gumbel distribution에서 뽑은 값과 합쳐지면 정확히 일치가 된다. 

In probability theory and statistics, the Gumbel distribution (Generalized Extreme Value distribution Type-I) is used to model the distribution of the maximum (or the minimum) of a number of samples of various distributions.

위의 그림이 Gumbel distirubtion의 pdf이다. 

즉 discrete rv에 대한 일종의 reparametrization trick이 된다. 그리고 학습을 좀 더 용이하게 하기 위해서 argmax를 softmax로 치환해서 아래 그림과 같이 graph를 만든다. 



여기에 sparsemax를 쓰면 조금 더 잘 될 수도 있겠다. 여튼 이렇게 해서 만들어지는 것이 Concrete distribution이다. 



이걸 refinforce에 적용도 하였다. 



이제 드디어 마지막 application이다. 



VAE를 응용했다고 한다. Importance weighted AE이라고 한다. 



IWAE라고 하고, Variational Lower Bound를 구하는 다른 방법이다. 즉 '$q(Z|X)$'라는 sampling distribution을 도입해서 '$p(X | \theta )$'의 marginal을 표현하고, Jensen ineq를 이용해서 log를 expectation 안으로 집어넣는다. 그리고 '$Z$'를 샘플링한다. 이러면 IWAE를 유도할 수 있다. 


그리고 FIVO: Filtered Variational Objectives라는 것도 등장한다. 



몬가 파티클 필터를 이용해서 sequential data를 처리한다는 것 같은데? particle filter가 sequencial importance sampling과 같은 의미니 말은 되는 것 같은데, 잘 모르겠다. 


일단 FIVO를 적용한 것은 observation sequ가 주어졌을 때 latent vector의 sequence를 찾는것이 목표이다. 



먼저 입력의 sequence가 주어졌을 때 먼저 posterior에서 z들을 샘플링을 한다. 그리고 각 파티클을 다른 step으로 넘긴다. (이것도 물론 학습을 하는 것이다.???) 그리고 resampling을 한다. 



Resampling을 하면 결국 몇 개의 더 중요한 z를 보도록 한다. (high posterior를 갖는 z를 집중) 그리고 이것을 계속 반복한다. 



에잉 잘 모르겠다. 나중에 논문을 읽어봐야겠다. 


여튼 드디어 결론이다. 




1. Kendall의 uncertainty를 역시 언급하는군!! 

2. Uncertainty를 두 개로 decompose를 한다? 이것 또 모지? 

3. 딥마인드의 deep ensemble을 언급한다. 별거 없네 

4. DRAW 좋은 논문이지. 딥마인드 흥보 많이 하네 

5. WaveNet 좋은 논문이지. 딥마인드 흥보 많이 하네 (2)

6. Graphical model? 

7. Deep generative model의 disentangleed model? 

8. ,,,????



'Enginius > Machine Learning' 카테고리의 다른 글

CapsNet  (0) 2017.12.19
NIPS 2017 - Interpretable ML workshop  (0) 2017.12.19
Google Developer Expert  (0) 2017.12.11
Graphical model  (0) 2017.12.06
수학 용어 정리  (0) 2017.10.24