Hello Computer Vision

Bayes Theorem의 MAP, MLE에 대한 이해 본문

mathematics

Bayes Theorem의 MAP, MLE에 대한 이해

지웅쓰 2023. 12. 23. 17:40

MLE, MAP에 대한 이해 및 헷갈리는 부분을 정리해보려고 한다. 참조한 글 및 영상 정보는 밑에 남겨두었습니다.

 

우선 기본적으로 MLE에 대한 이해, 왜 딥러닝에서 MLE를 쓰는지 이유를 알고 있다는 전제이다. 

https://keepgoingrunner.tistory.com/186

 

Gaussian distribution과 Mean Squared Error와의 관계

우선 해당 내용은 아래 블로그의 내용을 따랐으며 개인 공부를 위해 개인적인 이해를 추가로 담은 내용입니다. https://hyeongminlee.github.io/post/bnn002_mle_map/ Maximum Likelihood Estimation(MLE) & Maximum A Posterior

keepgoingrunner.tistory.com

 

 

추가적으로 우리의 task는 딥러닝에서 최적의 모델을 찾는 것이다.

그렇다면 하나씩 정의햐보자. Why 우리는 딥러닝을 사용하는가? 이유는 간단하다. 복잡하면서도 잘한다. 잘하는 이유에 대해서는 정확히 설명할 수 없고 문제가 되지만 최고의 성능을 보이는 것만으로 쓸 이유는 충분하다

How 우리는 딥러닝을 이용해서 문제를 해결할 것인가? D라는 (x, y)로 이루어진 데이터셋이 있을 때 NLL을 활용할 것이다.

What 푸는 것이 목적인가? 우리의 목적은 실생활에도 사용할 수 있는 복잡한 함수를 알아내는 것이다.

 

궁극적으로  What에 해당하는 것을 풀기 위해서 준비해야하는 것은 훈련에 사용할 D, 테스트에 사용할 Dt, 함수에 들어가는 파라미터 w 가 있다. 그리고 기본적인 가정은 테스트셋 Dt는 실제를 반영한다라는 가정이 있으며 D에 대한 성능이 좋다면 Dt 도 좋을 것이라는 것이 기본이다(물론 오버피팅, unseen class등 여러 문제점이 있지만 위에서는 기본적인 가정이다)

그렇다면 우리가 풀어야하는 분포는 $P(D | w)$ 일까 아니면 $P(w | D)$ 일까?  둘 중 어느 분포의 가능도를 최대화해야할까? 딥러닝에서는 우리가 풀어야할 것은 $P(w | D)$ 라고 할 수 있다. 즉 N개의 x,y쌍이 주어졌을 때 likelihood를 최대화하는 w를 찾는 것이라고 할 수 있다. 근데 좀 이상할 수 있다. w를 이용해서 D를 잘 푼다면 Dt 도 잘 풀 수 있을 것이고 궁극적으로 우리의 목적에 부합할 수 있다. 우리가 Bayes Theorem을 공부할 때 기본적인 것은 조건부 확률이라는 것은 너무나도 많이 보았고 $P(D | w), P(w | D)$는 명확히 다륾을 알고 있다. 그런데 왜 헷갈릴까? 

 

그 이유는 빅데이터를 사용하면 2개의 값이 같은 값으로 수렴할 것이고 실생활에서도 거의 상관관계를 갖기 때문이다. 엄밀하게 말하면 다른 확률이지만 D를 이용해 w에 대한 가능도를 최대화하는 것과 w를 활용해 D의 가능도를 최대화 하는 것이 데이터가 많다면 거의 근사하다. 이제 MAP, MLE를 한번 정의해보자.

우리가 구해야 할 것은 실생활에도 잘 맞는 딥러닝 함수의 파라미터이므로 $P(w | D)$이다. 그런데 여기서 어려운 점이 있다. 식을 전개해보면 $ \frac{P(D, w)}{P(D)} $ 우리는 D 의 분포를 모르므로 $P(D, w)$이 식을 직접적으로 사용할 수 없다. 그러나 w의 값은 우리가 처음에 초기화해주었으므로 아는 값이다. 여기서 조건부 확률을 사용해준다면 $P(w | D) = \frac{P(D | w) * P(w)}{P(D)}$ 이다. 여기서 우리가 훈련과정에서 어떤 w 집합에 대하여 y의 가능도를 아주 정확하게 계산할 필요가 있을까? 아니다. 단순히 어떤 y의 가능도가 높은지만 계산에 필요할 뿐이다. 그렇기 때문에 P(D)라는 값은 어떤 가능도를 계산하든 공통으로 들어가는 계산이므로 고려할 필요가 없으므로 $P(w | D) \propto P(D | w) * P(w)$ 으로 나타낼 수 있는 것이다.

 

즉, 우리가 구하려는 값은 $P(w | D)$ 이지만 바로 접근해서 풀수는 없는데 그 이유는 데이터의 분포 값을 모르기 때문이다. 그렇기 때문에 우리가 기본적으로 딥러닝에 사용되는 데이터셋은 굉장히 크고 조건부 확률로 식을 풀어냈을 때 근사한 값을 낼 수 있는 $P(D | w)$를 구하는 것이고, 이를 likelihood라고 하는 것이다. likelihood만 최대화 해도 충분하지만 추가적으로 $P(w)$ 의 분포값을 곱해주는데 이를 prior라고 한다. 조금 직관적으로 이해를 돕는 말을 첨언해보자면, likelihood만 사용해도 충분하지만 해당 task, domain, 훈련에 대하여 사전 지식을 추가할 수 있는 정보를 prior라고 할 수 있다. 우리가 추가적인 제약을 걸어줄 수 있는 값인 것이다. 그리고 우리가 구하고자 하는 $P(w | D)$ 값은 앞에서의 likelihood, prior로 구분할 수 있으므로 posterior, 사후(직역하니 좀 어색한데, 그냥 조합되어서 나온 결과라고 생각하면 편할 거 같다)라고 하는 것이며 이를 최대화 하는 것을 MAP, Maximum A Posterior라고 하는 것이다. 

 

이제 마지막으로 식을 전개함과 동시에 P(w)를 한번 알아보자. $ P(D | w) * P(w)$ 를 최적화 하는 것이고 likelihood를 최대화 하는 것에 대해서는 곱셈보다는 덧셈이 낫고 최적화 방법으로는 gradient descent를 기본적으로 사용하니 음수를 붙여야한다. 그러나 여기선는 식의 편리성을 위해 음수는 붙이이 않았다. $ log P(D | w) + log P(w) $ 여기서 regression 문제라고 했을 때 가능도는 gaussian 을 따른다고 가정하기 때문에$ P(D | w)$ 는 $ (x - \mu)^{2} $ 로 변환이 될 수 있다. 여기서 x는 우리가 w값을 이용해 예측한 값을 평균으로 하는 정규분포를 따르는 값인 것이다. 그럼 이제 P(w), 즉 prior를 생각해보자. 여기서의 prior는 우리가 자주 쓰는 weight decay, 즉 가중치 감쇠를 사용해보자. 우리가 푸는 task에 대해서 경험적으로 weight가 0을 평균으로 하는 정규분포를 따르면 성능이 높다 라는 정보를 가지고 있고 이를 훈련과정에 포함해보는 것이다. 식으로는 다음과 같이 사용할 수 있다.

$w = N(0, \sigma^{2})$

$p(w) = \frac{1}{\sqrt{2\pi}\sigma}e^{\frac{(w-\mu)^2}{2\sigma^{2}}}$  

여기서 $mu$ 값은 0이고, sigma값은 우리가 계산할 필요가 없는 값이며 그 이유는 위에서 posterior, prior계산 과정에서 P(D)를 계산하지 않은 것과 같다.

$ log P(w) = log \frac{1}{\sqrt{2\pi}\sigma}  - \frac{w^2}{2} $ 으로 나타낼 수 있다. 앞의 값은 위에서 제거했던대로 계산할 필요 없으니 제거하면 우리가 흔히 사용하는 regularizer, 즉 weight decay를 사용하는 것이며 이는 우리가 weight가 평균 0에서 머무를 것이라는 사전 정보에 의하여 사용하는 것이다.

 

진짜진짜 마지막으로 위에서의 likelihood, prior같이 써본다면

$ L(x) = (x - \mu)^2 + \frac{w^2}{2} $ 이고 gradeint descent 최적화 방식을 통해 해당 값을 최소화 한다고 보면 된다. 

 

참조

https://hyeongminlee.github.io/post/bnn002_mle_map/

https://www.youtube.com/watch?v=sBevFRPlLnA