일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 우분투
- AI
- pandas
- pytorch
- 텍스트마이닝
- 빅데이터
- 백준
- 코딩테스트
- 베이지안
- GNN
- PYTHON
- 알고리즘
- 강화학습
- DATA
- 텍스트분석
- 불확실성
- uncertainty
- R
- bayesian
- 논문리뷰
- VAE
- dropout
- selenium
- YarinGal
- 데이터분석
- 크롤링
- Crawling
- 파이썬
- Graph
- 리눅스
- Today
- Total
끄적거림
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 5.Methodolgy 본문
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 5.Methodolgy
Signing 2021. 2. 1. 15:02[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 1.Prologue
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 2.Abstract
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 3.Introduce
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 5.Methodolgy
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 6.Experiment
[논문 리뷰] Dropout as a Bayesian Approximation 설명 - 7.Conclusion
[논문 실습] Dropout as a Bayesian Approximation 실습 코드 - pytorch ver
위의 사진중 NN을 표현한 사진은 Yarin Gal의 블로그에 포스팅된 그림이다.
왼쪽 그림은 우리가 흔히 알고 있는 결정론적 NN 모델이다.
오른쪽 그림은 저번 시간에 다뤄본 BNN의 모델이다.
BNN모델 그림의 가운데를 보면, 무한대 표시가 있는데 이는 parameter가 분포를 이루기 때문에 그 수가 무한대와 같다는 의미와 동시에 무한차원인 G.P.와도 같다고 말할 수 있다.
어쨌든 우리의 목표는 BNN의 posterior인 p(w|X,Y)를 찾는 것이다.
이 posterior를 찾아내서 BNN을 모델링하기를 바라는 것이다.
이제 이 posterior를 구해보도록 해보자.
호기롭게 posterior를 구해볼 생각인데, 이 문제는 사실 전 포스팅에서도 다뤘었다.
바로 V.I.에 대해서 살펴볼때 동일한 문제를 구했다.
때문에 우리는 그 과정을 이용할 생각이다.
posterior를 구하는 문제를 variational distribution인 q(w)를 구하는 문제로 바꾸고,
다시 이 q(w)를 구하는 문제를 KL-d를 minimize하는 문제로 바꾸고,
또 다시 이 문제를 ELBO를 maximize하는 문제로 바꿔버렸었다.
그리하여 나오는 식이 위의 그림에 나와있다.
그런데 여기서, 빨간색 네모를 주목해보자.
저 것은 log-likelihood이다.
일단 이것부터 구해야지 나머지도 어떻게든 구할 수 있을 것처럼 보인다.
그러면 이 log-likelihood를 어떻게 구할 수 있을까?
바로 background에서 살펴보았던 G.P.의 kernel function으로 구해보고자 한다.
우리가 kernel function을 정의하면 zero-mean의 G.P. 정의할 수 있다고 했었다.
여기서는 kernel function을 마치 single layer를 갖는 NN처럼 묘사되고 있다.
하지만, 이 생각을 잠시 뒤로하고 그냥 어떤 선형조합의 함수에 마지막에 비선형 함수를 곱해준 것이라 생각해보자.
(사실 이게 NN 모델이지만,,,)
어찌되었든 이렇게 kernel function을 정의했다.
그런데 문제가 있다.
바로 이 커널 함수에 적분이 있는 것이다.
우리는 이 적분을 계산 가능한 형태로 바꾸어 계산을 하고 싶을 뿐이다.
마침 보니 수식에 함수뿐 아니라 확률도 있다.
가만보니 함수값 * 확률값 의 형태를 띄고 있다.
그렇다 여기에 MC Integration을 적용시키면 적분을 계산 가능한 summation으로 바꿀 수 있다.
빨간 네모 박스 위에 있는 것들은 각각의 분포에서 sampling 했다는 것이고,
여기서 K의 의미는 나중에 이것이 NN에 적용되었을 때, K번째 layer의 의미로 해석할 수 있지만, 아직은 NN을 가정하고 수식을 진행하는 것이 아니기 때문에 그냥 알고만 넘어가자.
그래서 우리는 이렇게 K번 MC하여 계산할 수 있는 kernel function까지 만들었다.
만든 kernel function으로 G.P.에 fitting하여 함수값들의 분포를 구할 수 있다.
왜냐하면 함수값들은 (zero-mean, kernel function) gaussian distribution을 jointly하게 따르고 있으니 결국 함수값을 평균으로 갖는 gaussian distribution이기 때문이다.
여기서, 공분산 자리에 measurement noise가 붙는다.
이것은 G.P.의 kernel function을 다룰 때 다뤘었기 때문에 넘어가도록 하겠다.
G.P. 함수도 정의했고, 그에 따른 Y의 분포도 구할 수 있기 때문에 우리는 이 것들을 marginalize할 수 있다.
marginalize 역시 background에서 설명했기 때문에 넘어가도록 하겠다.
marginalize된 likelihood의 식을 가지고 장난질을 쳐보려한다.
위에서 정의했던 kernel function을 위의 그림처럼 만들어 phi라는 것으로 치환시켜보면, kernel function이 phi matrix의 제곱꼴로 나타난다.
치환된 phi를 다시 원래의 marginalized likelihood에 대입하면, 그림과 같은 식이 나온다.
이 식은 우리가 background에서 G.P.편의 kernel 파트에서 살펴본 꼴이랑 같은 꼴이다.
잠깐 딴 얘기를 해보자.
우리가 흔히 dataset을 input으로 받으면 보통은 D개의 변수(column)가 있는 N개의 관측치(row)로 데이터를 읽게된다.
하지만, 이것을 반대로 생각해보자!
N개의 column을 갖는 D개의 관측치로 말이다.
왜 이런 역발상을 생각해야하냐면, 바로 NN을 G.P.로 모델링할 때, kernel function을 정의하기를 w1,b1까지만 고려한 h이었던 것이다.
h layer를 거친 뒤 y로 향하는 w2까지 곱해야 NN모델을 G.P.로 모델링시킬 수가 있다.
자 그렇게 해서 column과 row를 뒤바꾸어 적용할 때, 사실, 이렇게 적용해도 괜찮은 것이,
하나의 column, 즉, N개의 관측치를 갖는 D개중의 하나는 데이터 전체의 element를 다루고 있을 뿐 아니라, Normal distribution을 따르는 gaussian 분포기 때문에 행과 열을 바꿔준다 하더라도 결국 다시 gaussian distribution인 것이다.
그렇기 때문에 G.P.의 모델링 자체는 깨지지 않고 계속 이어서 모델링을 진행할 수 있다.
이해가 잘 가지 않는다면 단순히 두번째 w를 적용시키기 위해서라고 이해하고 넘어가도 좋다.
그렇게 행과 열을 바꾼 뒤 나오는 결과물을 또 하나의 새로운 input이라 생각하고 위에서 작업했던 것들을 다시 같은 방식으로 적용하면 결과는 다음과 같다.
이렇게 우리는 single layer를 모두 거친 NN의 likelihood를 구할 수 있게 되었다.
이것을 처음에 보았던 ELBO에 적용시켜보자
여기에 W에 대해서 적분을 하고 싶은데 쉽지 않다.
왜냐하면 우리는 BNN을 가정했기 때문에 w가 gaussian 분포를 따르고 있기 때문이다.
그에 대한 해결방안으로 우리는 re-parameterization trick을 알아보았고, w를 고정된 theta와 epsilon으로 분할하여 적용시키면 다음과 같은 식이 완성된다.
Re-parametrization trick을 사용할 때, 우리는 stochastic node를 stochastic part와 deterministic part로 나누는 것을 확인했었다.
그러면 우리는 그 randomness를 어디서 찾을 수 있을까?
바로 베르누이 분포를 따르는 확률변수인 z1, z2를 사용한 Dropout으로부터 randomness를 얻을 수 있다.
정리해보자면, 다음과 같다.
우리의 goal은 posterior를 찾는 일이었고, V.I.를 통해 이를 variational distribution인 q를 지나 ELBO의 최대화 문제까지 도달시켰다.
ELBO가 갖는 log-likelihood를 구하기 위해서 우리는 G.P.의 kernel 함수를 사용하였고, NN을 fitting 시켰다.
그 과정중에서 MC-Integration, re-parametrization 등의 trick등을 이용해 근사시킬 수 있었고,
결국 posteroir를 찾는 문제를 우리가 흔히 알고 있는 NN에 dropout을 부여한 것과 같은 문제라는 것으로 문제를 수렴시켰다.
굉장히 돌고 돌아 BNN의 목적을 찾는 문제가 NN with Dropout이라는 것을 증명했다.
이것이 시사하는바는 "기존에는 여러 제약사항들로 인해서 BNN을 모델링하는 것이 거의 불가능 했었는데, dropout이라는 우리가 흔히 쓰는 regularization 방법론을 통해 BNN을 모델링 할 수 있다는 것"이다.
그래서 우리가 BNN을 얻으면 무엇을 할 수 있냐면, 바로 모델의 uncertainty(불확실성)을 구할 수 있음을 의미한다.
w의 분포를 아는 것과 같은 것이기 때문에 여러 분포로 인해 함수의 결과값 역시 lower bound와 upper bound 사이의 값으로 일정 분포를 갖을 것이다.
이 분포의 기댓값으로 우리는 예측값을 구할 수 있고, lower bound와 upper bound를 통해 우리는 예측값의 신뢰구간을 알 수 있다.
여기서 말하는 신뢰구간은 통계학에서 말하는 신뢰구간이 아니라 흔히 일상에서 얘기하는 신뢰구간을 의미한다.
이 신뢰구간이 바로 모델의 uncertainty를 나타내는 것이다.
그럼 이 uncertainty를 어떻게 구할까?
간단히 이는 개념적으로 접근하겠다.
불확실성을 구하기 위해서 BNN 모델링을 진행해야했고, 수월하게 모델링하기 위해 NN with dropout을 적용하였다.
이때, dropout의 의미는 베르누이 분포를 따르는 확률 변수 z에 의해서 발생한다고 했다.
그러면 z에 의해서 w들이 0 혹은 1이 곱해지는데, 이 작업들을 random하게 작업한다면 매번 다른 NN모델이 튀어나오게 될 것이다.
매번 다른 NN모델이 튀어나왔을 때 여기에 input을 흘려보내서 output을 얻는다면 그 ouput들의 분포는 곧 위에서 말했던 신뢰구간의 의미와 같아질 것이다.
말했듯이, 신뢰구간의 기댓값과 분산으로 기술통계량을 구할 수 있고 여기서의 분산이 곧 우리가 구하고자하는 uncertainty가 된다.
여기까지가 본 논문의 방법론 부분에 해당하는 파트이다.
사실 완벽하게 논문의 내용을 cover하지 못했다.
그냥 이해하기 좋은 정도로만 했는데 이걸 보는 사람들은 어떨지 잘 모르겠다.
내가 이 논문을 준비할 때 꼬박 4주가 걸렸다.
그만큼 배경지식이 없었을 뿐 아니라 어려운 개념들이 많았기도 했고, 논문이 그렇게 친절한 논문이 아니었다.
모든 background는 appendix와 thesis에 소개가 되어 있었고, 그마저도 그렇게 친절한 교재가 되지 못한다.
도움을 얻고자 edwith의 최성준 박사님과 문인철 교수님의 수업을 들었고 많은 도움이 되었다.
이 글을 보는 사람들은 내가 겪었던 시행착오들을 다소 덜 겪길 바라며 정리해보았다.
다음 포스팅에서는 실험 위주의 설명이 이어질 것이다.