머신러닝&딥러닝/베이지안

베이지안 딥러닝 (3) - 베이지안 딥러닝은 무엇인가?

Like_Me 2020. 10. 12. 19:42
반응형

  Deep Learning에 베이지안을 사용하면 뭐가 좋은가? 불확실성에 대해 알 수 있다. 이에 대한 지표로 Expected Calibration Error (ECE)를 알면 좋다. 이번에 새롭게 알게 된 지표인데 상당히 유용한 것 같다.

 

  Classification을 하게 될 때 softmax를 사용하게 된다. 이 softmax는 결과값에 대한 확률 값을 주게 되는데 일반적인 머신러닝 방법에서는(특히 데이터가 별로 없을 때) 그 값이 over-confident 하게 나온다. 쉽게 예를 들어보면 고양이와 강아지를 분류하는 모델인데 어떤 사진을 주었을 때, 결과에 대한 확률 값이 한쪽으로 쏠려서 높게 나온다는 이야기이다. 제대로 분류를 하여 잘 나온다면 괜찮겠지만 아리송한 경우에도 그 값이 높을 때는 문제가 된다. 한마디로 정말 당당히 틀리는 경우가 나올 수 있다는 것이다. 우리가 원하는 것은 80% 확률로 예측을 했을 때 실제 데이터에 대해 80% 정도로 맞추는 것이다. 이를 수식으로 나타내면 다음과 같다. $$P(\hat {Y}=y|\hat {P}=p) = p$$

 

  이에 대해 완벽한 경우 완벽히 calibration된 모델이라고 한다. 이 경우 확률을 정확히 믿을 수 있게 된다. 아래는 각 확률 값(x축)에 대해 실제 데이터의 분포 확률(y축)을 나타낸 그래프이다.

 

calibration graph (출처: sklearn)

점선이 Perfectly calibrated된 경우인데 y=x를 그리고 있다. 이 선에 가까울수록 softmax로 나온 확률을 믿을만한 모델이다. 초록색 Support vector classification을 보면 초반에 확률 값이 낮을 때 실제 데이터 분포는 0에 가깝다. 즉 0~0.4 근처까지는 실제 맞추는 경우가 0%에 가깝다고 판단할 수 있고 오히려 0.5 이상 부터는 softmax 확률 대비 실제 분포의 확률 값이 더 높음으로 나온다. 이런 경우는 별로 탐탁지 않을 것이므로 ECE를 통해 평가를 하는 것이 좋다.

 

  우선 calibration error를 구할 수 있어야 한다. calibration error는 아래의 수식과 같다. 이 수식은 위에서 봤던 perfect calibration model의 좌항과 우항의 차이 평균값이다.

$$ E_{\hat {p}}[P(\hat {Y}=y|\hat {P}=p)-p]$$

  최종적으로 Expected calibration error는 calibration error를 실제 데이터 포인트에 대해 평가한 것이다. 이는 위의 그래프에서 perfectly calibrated와 실제 모델이 예측한 그래프의 차이에 대한 면적을 weighted sum 한 값이다. 수식은 다음과 같다.

$$ \sum_{m=1}^{M} \frac {|B_{m}|} {n} |acc(B_{m}) - conf(B_{m})| $$

 

  결과적으로 ECE를 잘 나오게 하는 것이 Bayesian의 목적이라고 할 수 있을 것 같다. 어떤 input에 대해 output을 내는데 확률 값이 정확하다면 이에 대한 불확실성을 알 수 있기 때문이다. 일반적인 머신러닝에서는 Likelihood를 최대화하는 Maximum-Likelihood(ML) 방법을 사용한다. 하지만 베이지안에서는 Prior로 Posterior를 찾는 방법을 쓴다. 단순히 Maximum-A-Posterior(MAP)를 찾는 것은 베이지안이 아니다. MAP는 over-confident 한 결과를 주기 때문에 uncertainty를 추정하기 힘들다. Bayesian Posterior는 MAP와 같이 최대가 되는 하나의 값을 찾는 것이 아니라 output에 대한 distribution을 추정하는 것이다. 예를 들어 아래 그림과 같은 Classification문제를 푼다고 가정한다. 이때 decision boundary distribution은 회색 선들로 나타낼 수 있다. 선이 진한 부분은 MAP를 이루는 부분이 될 것이며 선이 연해질수록 거기서 멀어지는 값이 된다. 이렇게 여러 분포를 알면 새로운 입력이 들어왔을 때, 적절한 output 확률 값을 구할 수 있다.

 

Decision boundary distribution

  

  Bayesian predict inference는 새로운 입력 $x^{*}$가 들어왔을 때 그에 대한 mean 값을 구하는 것이다. 식으로 보면 다음과 같다. $$\bar {y^{*}} = \int P(y^{*}|x^{*}, w) P(w|D) dw$$ 이때 P(w|D)는 Posterior로 식이 다음과 같다. $P(w|D) = \frac {P(D|w) P(w)} {P(D)} = \frac {P(D|w)P(w)} {\int P(D|w) P(D) dw}$. Posterior 분모 항의 Evidence는 구하는 게 어렵다. 만약 구했다고 해도 posterior를 구하기 위해서는 w에 대해 적분을 해줘야 하는데 w는 파라미터의 수가 많기(보통 딥러닝의 경우 파라미터를 수백만 개 이상 사용하므로) 때문에 적분이 힘들다. 따라서 Bayesian Model Averaging으로 근사를 한다. 근사식은 다음과 같다. $$ \bar {y^{*}} \sim \frac {1} {T} \sum_{w_{t} \sim q(w)} P(y^{*}|x^{*}, w_{t}) $$

 

  간단히 정리하면 우리는 Posterior를 근사하는 q(w)를 구하고 싶은 것이다. 이때 weight를 sampling 하여 Average를 구하면 대략적 근사를 할 수 있다. 이 weights를 어떻게 sampling 하는가가 중요하게 작용한다. 이에 대한 주제가 Approximate Bayesian inference이다. 이에 대한 방법들로는 Bayes By Backprop(BBB), Markov Chain Monte Carlo method(MCMC), MC Dropout 등이 있다.

 

참조 : www.youtube.com/watch?v=Gm-TJ82vj6E&list=WL&index=9&t=421s

반응형