데이터사이언스 이론 공부

MLE 에 대한 정리

soopy 2022. 8. 12. 17:20
728x90

MLE가 무엇인가요?

Maximum Likelihood Estimation의 줄임말 입니다.

주어진 샘플을 토대로 모수의 확률 분포를 추정하는데 사용하는 방법을 말합니다.

 

즉 샘플을 가장 잘 모사하는 확률 분포를 찾는 것에 목적이 있습니다.

그렇게 찾은 확률 분포는 (샘플이 모집단을 대변할 만큼 충분하다는 전제 하에)

모집단의 확률 분포를 모사한다고 설명할 수 있게 됩니다.

 

어떤 방식으로 확률 분포를 찾는 것인가요?

임의의 확률 분포함수에 샘플을 입력하면 각 샘플에 해당하는 확률 밀도값을 출력하게 되고,

그렇게 모든 샘플에 대응하는 확률밀도값을 모두 곱한 값이 최대가 되게 하는 확률 분포가

해당 샘플을 가장 잘 설명하는 확률 분포라고 볼 수 있다고 합니다.

 

좀 더 이해하기 쉽게 주사위 예시로 설명해 보겠습니다.

주사위를 20번 던진 결과(샘플) 아래와 같은 결과가 나왔다고 합시다.

 

주사위번호 등장 횟수 등장 확률
1 2 0.1
2 2 0.1
3 2 0.1
4 10 0.5
5 2 0.1
6 2 0.1

보시다시피 4번이 극단적으로 잘 등장하는 불공정한 주사위일 것으로 추정이 되는데요.

당연하겠지만 위와 같은 불공정 주사위를 가장 잘 모사하는 확률 분포는 3열과 같을 것입니다.

 

그렇다면 각 샘플링 결과에 대해 정상적인 주사위 확률(1/6)을 모두 곱한 값보다,

위 표에 나와있는 확률 분포와 대응시킨 값이 더 커야할 것입니다.

 

불공정 주사위

$0.1^{10} * 0.5^{10} = 9.765625000000005e-14$

정상 주사위

$0.166^{20} = 2.524420863406309e-16$

 

마이너스 14 승이 나온 불공정 주사위의 계산 결과가 더 크게 나왔습니다.

그래서 MLE 방법으로 모사하는 확률 분포를 찾는 방식이 타당한 것을 확인할 수 있습니다.

이러한 계산 결과를 Likelihood라고 부릅니다.

 

하지만 보시다시피 위와 같은 계산 방식은 한없이 0에 가까운 작은 숫자를 향하게 됩니다.

이번에는 샘플이 20개였으니 망정이지 더 많은 샘플에 적용했다면 컴퓨터가 처리할 수 없게 됩니다.

이를 Underflow 상태라고 합니다.

 

그래서 대안으로 Log Likelihood 방식이 등장하는데 기존 Likelihood 연산 후 최종적으로 Log를 씌웁니다.

그러면 로그 성질에 의해 곱셈(Product)에서 덧셈(SUM)으로 연산 방식을 변환할 수 있습니다.

 

$log(MN) = log(M) + log(N)$

 

이렇게 하면 Underflow 상태를 피할 수 있으며 추가적으로 연산속도로 빨라집니다.

(덧셈이 곱셈보다 연산 속도가 더 빠르다고 합니다.)

 

그래서 이제부터는 Log Likelihood 방식을 택하도록 하겠습니다.

구체적으로 어떻게 접근해야 하나요?

당장에 떠오르는 방식은 바로 랜덤으로 분포를 적용시켜 보는 방법일 것입니다.

 

가령 대한민국의 신장(키) 분포를 찾는다고 가정해 봅시다.

키는 보통 가우시안 분포를 따른다고 알고 있으므로 가우시안 분포를 우선 채택합니다.

그다음 전 국민의 신장 분포를 가장 잘 설명할 수 있는 $\mu$와 $\sigma$ 값을 찾으면 됩니다.

그러면 뮤와 시그마 값을 랜덤으로 계속 대입하면서 Likelihood가 최대값을 갖는

뮤와 시그마를 찾으면 될 것입니다.

 

하지만 그렇게 랜덤 대입을 반복해서 찾은 분포가 Best라고 하기에는 설명력이 떨어집니다.

왜냐하면 반복 횟수를 더 늘렸을 경우 더 좋은 분포를 발견할 수도 있는 노릇이기 때문이죠.

그렇다면 우리는 뮤와 시그마 값이 Likelihood가 최대값을 갖도록 하는 수치가 무엇인지

점진적으로 찾아 나가면 어떨까요?

머신러닝에서 적용하는 Gradient Descent 방법을 사용하면 됩니다.

Likelihood를 구하는 공식을 다시 한 번 정리해 보겠습니다.

 

이렇게 되면 우리가 익히 아는 머신러닝에서의 다변수함수를 그릴 수 있습니다.

$log(x_1\theta_1) + log(x_2\theta_2) … log(x_n\theta_n) = \hat{y}$

 

이렇게 보면 가우시안 분포에서 뮤와 시그마 값을 찾는 것은 세타값을 찾는 것과 별반 차이가 없게 됩니다.

그렇기 때문에 $\theta$를 미분하여 최소 또는 최대값 지점을 찾는 기울기값 0에 수렴하는 $\theta$값을 찾아 지속적으로 업데이트 하면 됩니다.

 

조금의 차이가 있다면 MLE는 maximum값을 찾는다는 점입니다. 그래서 Gradient Ascent 방식을 취해야 한다고 볼 수 있죠. 하지만 모든 $\hat{y}$ 값에 마이너스를 붙여주면 간단하게 Gradient Descent 방식으로 쉽게 전환할 수 있습니다. 최대값은 자연히 최소값이 될테니까요. 이를 Negative Log Likelihood(NLL)이라 합니다.

 

딥러닝에 적용해 봅시다.

결과적으로 MLE 공식은 아래와 같습니다.

$\hat{\theta} = argmin - \sum_{i=1}^NlogP(y_i|x_i;\theta)$

 

세타라는 확률분포함수에 $x$값(샘플들)을 넣었을 때 $y$가 등장할 확률에 로그를 씌워 SUM한 뒤

그 결과에 마이너스를 곱한 결과가 최소값을 갖게 하는 세타값이 곧 샘플을 모사하는 확률 분포가 됩니다.

 

여기서 위 문장을 되짚어보면 $P(y_i|x_i;\theta)$ 이 부분을 $f_\theta(x_i)$ 로 변경할 수 있는데 결과값은 샘플의 확률입니다.

 

결론적으로 이 공식은 softmax 결과값으로도 볼 수 있는데, 우리가 mnist 문제에서 샘플 벡터값을 특정 함수에 넣은 결과에 softmax함수를 적용하여 0~9에 대한 각각의 확률값을 얻는 것과 같은 방식이기 때문입니다.

 

이 부분에서 $f_\theta(x_i)$는 0~9 중 하나에 대한 확률값을 얻은 것과 동일하게 해석이 가능합니다.

 

이를 적용하면

$-\sum_{i=1}^NlogP(y_i|x_i;\theta) = -\sum_{i=1}^Ny_i^T · log\;\hat{y_i}$

로도 해석할 수 있습니다.

 

$y_i$는 mnist에서 $y$벡터로 만약 $y_1$이라면 숫자 1에 대한 원핫벡터 = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] 으로 볼 수 있습니다.

그래서 $y_i$와 $log\;\hat{y_i}$를 내적하면 숫자 1에 대한 확률만 남는 것이므로 위와 같이 해석이 가능합니다.

 

결론적으로 MLE를 다시 해석하면 딥러닝의 classification 문제에서 인풋 벡터를 모사하는 확률 분포함수 즉 $\theta$를 찾는 것입니다.

 

신기하게도 1/N을 앞에 붙이면 아래 공식처럼 크로스 엔트로피와 동일해 집니다.

$Cross Entropy = -\frac{1}{N}\sum\sum y_{i, j}\;log\;\hat{y}{i, j} = -\frac{1}{N}\sum{i=1}^Ny_i^T · log\;\hat{y_i}$

 

결국 분류 문제에서 크로스 엔트로피를 통해 세타값을 업데이트하며 back propagation을 진행하는 원리는 MLE 방식을 적용하는 것과 동일하다고 볼 수 있습니다.

728x90
728x90