Maximum Likelihood Estimation

딥러닝을 경험하다가 보면 어떻게 이게 학습이 될까라는 생각이 문득 든다. 무작정 모델의 수식에 따라 전체를 미분해서 최적점을 찾는 것이라 생각하고있는데 그렇다면 Input과 Output이 다른 모델들도 그렇게 단정 지으면 될 것일까?

이렇듯 모델이 잘 학습되어 최적의 파라미터 구하고 있다는라는 증명을 수학적 표현이 필요하게 되는데 그것이 오늘 포스팅할 Maximum Likelihood Estimation이다.

우리가 알고 있는 단순한 확률로 표현하면 안 될까?

예를 들어 위의 동전 던지기 게임으로 설명하겠다. 지나가는 사람에게 혹시 동전 던지기 게임에서 앞면이 나올 확률이 얼마일까요?라고 물어본다면 대부분이 $\frac{1}{2}$이라고 답변할 것이다. 하지만 그것이 사실인가? 동전 던지기는 정확히 $\frac{1}{2}$일 수가 없으며 우리가 정확한 확률을 구하기 위해서는 실제로 동전을 무수히 많이 던져서 실제 확률을 구해야 하는 것이다.

그냥 단순히 생각하고 있는 확률인 $\frac{1}{2}$이라 단정 지을 수 있는 것이라면 우린 그런 모델의 파라미터를 $\frac{1}{2}$이라 정하고 만들 수 있을 것이고 학습이란 과정이 따로 필요하지 않을 것이다.

하지만 우리가 구하고자 하는 모델의 파라미터들은 어떤 확률을 가지고 있는지 정확하게 알지 못한다. 단지 우리가 알 수 있는 건 전체 모수에 비해 지극히 적은 양의 시행된 데이터들을 가지고 있을 뿐이다.

그래서 우리는 모수에 비해 지극히 적은 데이터들을 가지고 어떤 모델의 파라미터를 예측해야 하는 것이다. 그러한 모델의 특정 파라미터에서 주어진 데이터와의 관계를 수치로 표현한 것이 가능도 또는 우도라 불리오는 Likelihood이다.

Likelihood

주어진 시행이나 데이터들로 모델의 파라미터가 가지는 값이다. 이 값은 주어진 X와 특정 세터가 답이 될 가능한 정도이며 우리는 이것을 수학적으로 나타낼 수 있다.

실제 수식으로 표현해보자 100번 동전을 던져 56번의 앞면이 나온 데이터가 존재한다 이어한 시행은 이항정리로서 나타낼 수 있다.

위를 이항정리 수식에 대입해보면 총 시행 횟수를 n, 예측하는 확률을 P, 앞면이 나온 횟수 r 일 때

\[p(x) = \binom{n}{x}p^x(1-p)^{n-x}\]

수식이 성립하는데 우리가 앞면이 나올 확률을 0.5라 예측할 때 대략 0.0389값이 나온다.

동전 던지기에서 앞면이 나올 확률이 0.5가 아 닐 수도 있으니 모든 파라미터 값에 대해서 표로 정리하면 아래와 같다.

\[\begin{array}{c|lcr} \theta & \text{likelihood} \\ \hline 0.4 & 0.24 \\ 0.5 & 0.0389 \\ 0.6 & 0.0576 \end{array}\]

위 표를 “가능한 정도”라는 걸 고려하고 구하고자 하는 확률을 말로 풀어쓰자면

“동전 던지기 게임에서 앞면이 나올 확률”은 여러 파라미터 값들 중 가장 높은 값가장 가능한 정도이다.

하지만 실제로 세터 정보는 연속적이기 때문에 아래의 정규분포의 형태를 띠고 있으며

우리는 여기서 미분 값이 0이 되는 지점이나 Gradient Decent를 통해서 최적의 파라미터를 찾게 될 것이다.

이것이 MLE를 통한 최적의 모델 파라미터를 구하는 과정이다.

왜 머신러닝인가?

그럼 어떻게 딥러닝에서 사용되는 것일까?

위에도 말했다시피 결국 모델은 많은 파라미터(세타)들로 이루어져 있고 우리에게 주어진 건 실제 데이터 X와 그것이 어떻게 나왔는지에 대한 결과값 뿐이다. 그래서 모델의 파라미터를 잘 고르면 되는데 어떤 목표를 가지고 골라야 할 것인가?

그 목표라 하면 우도는 “가능한 정도” 일뿐이고 주어진 모델이 실제 데이터의 확률분포에 가까워져야 하지 않겠는가?

그래서 이렇게 예측된 확률분포와 실제 확률분포 같의 차이를 함수로서 나타낼 수 있는데 그 함수를 KLD(KL-Divergence)라고 한다.

KLD의 수식은 아래와 같다.

여기서 MLE에 따라 위 이항정리의 수식에 미분을 취해주어야 하지만 보기와 같이 미분의 어려움이 있음으로 해당 수식에 자연로그를 취해서 계산을 한다. (자연로그의 그래프상 데이터의 크기가 달라질 분 방향성에는 문제가 없다.)

로그를 아래와 같이 취해주고 파라미터 정보들이 무수히 많기에 전체 평균하기 위해 파라미터에 따른 기댓값을 추가한다.

위 식처럼 KLD를 구하게 되는데 우리는 최종적으로 실제 데이터의 결과와 모델이 예측한 결과의 차이를 최소화해야 할 필요성이 있다. (그래야 모델이 예측한 결과가 실제 데이터와의 차이가 나지 않는 것이니깐)

여기서 또한 실제 데이터의 결과는 변화지 않기 때문에 학습에서는 제거를 할 수 있다.

그럼 아래의 식으로 표현된다.

// // 식

즉 우리는

크로스 엔트로피와의 관계

모델이 잘 학습되었다라는것은 주어진 데이터 X 에 잘 학습된 모델 파라미터와의 관계 통해 우리가 찾고자 하는 클래스를 확률적으로 높게 나타내 주는것이 맞다. 그럼 그 확률적으로 높게 나오게 하려면 어떻게 학습해야할까?

그래서 최대한의 시행을 통해서 나온 결과값을 통해 확률을 예측할텐데 그것을 수치로 나타내는 정도를 Likelihood라고 부른다.