통계학 6강. 최대우도추정
딥러닝의 손실함수가 왜 하필 그 모양인지 묻는다면, 답은 1922년의 한 논문에 있습니다.
풀고 시작
확률과 우도는 방향이 반대입니다
동전을 열 번 던져 앞면이 일곱 번 나왔다고 해 봅시다. 이 동전의 앞면 확률 p는 얼마일까요.
직관은 0.7이라고 말합니다. 그런데 왜 0.7인지 설명하려면 생각의 방향을 뒤집어야 합니다.
확률은 모수를 알 때 데이터를 예측합니다. "p가 0.5라면 열 번 중 일곱 번 앞면이 나올 확률은 얼마인가"를 묻죠. 우도(likelihood) 는 정반대입니다. 데이터를 이미 봤을 때, 어떤 모수가 이 데이터를 가장 그럴듯하게 만드는가를 묻습니다.
같은 수식을 쓰지만 무엇을 고정하고 무엇을 움직이는지가 반대입니다. 확률은 모수를 고정하고 데이터를 움직이며, 우도는 데이터를 고정하고 모수를 움직입니다.
p를 0.1부터 0.9까지 넣어 보면 앞면 일곱 번이 나올 그럴듯함이 p=0.7에서 가장 커집니다. 이 지점을 고르는 것이 최대우도추정(MLE, maximum likelihood estimation) 입니다. 1922년 피셔가 정식화했고, 오늘날 통계 모형과 기계학습 모형의 학습 절차 대부분이 이것입니다.
우도를 그대로 다루지 않고 로그를 씌워 다루는 것이 관행입니다. 곱셈이 덧셈으로 바뀌어 미분이 쉬워지고, 아주 작은 확률을 여러 번 곱할 때 생기는 수치적 밑넘침도 피할 수 있습니다. 로그는 증가함수라 최대가 되는 지점은 바뀌지 않습니다.
손실함수의 정체
여기서 기계학습과 만납니다. 모형을 학습시킨다는 것은 손실을 최소화하는 일이고, 최대우도추정은 로그우도를 최대화하는 일입니다. 부호만 뒤집으면 같은 문제입니다. 그래서 음의 로그우도(negative log-likelihood) 가 손실함수가 됩니다.
이 관점으로 보면 익숙한 손실함수들이 전부 설명됩니다.
| 가정한 분포 | 최대우도추정이 낳는 손실 |
|---|---|
| 정규분포(오차가 정규) | 평균제곱오차(MSE) |
| 베르누이(예/아니오) | 이진 교차엔트로피 |
| 범주분포(여러 갈래) | 교차엔트로피 |
| 포아송(횟수) | 포아송 손실 |
회귀에서 왜 제곱오차를 쓰는가라는 물음의 답이 여기 있습니다. 오차가 정규분포를 따른다고 가정하면 로그우도에서 제곱항이 튀어나오기 때문입니다. 임의로 고른 것이 아니라 가정에서 유도된 것이죠. 그래서 오차가 정규분포와 거리가 멀면(이상값이 많으면) 제곱오차를 고집할 이유도 사라집니다.
분류에서 교차엔트로피를 쓰는 이유도 같습니다. 정답 클래스에 모형이 부여한 확률의 로그를 최대화하는 것이 곧 교차엔트로피 최소화입니다. 로지스틱 회귀가 최적화하는 것도 정확히 이것입니다.
좋은 성질과 그 대가
최대우도추정이 널리 쓰이는 데는 이유가 있습니다. 표본이 커지면 참값으로 수렴하고(일치성), 정규분포에 가까워지며, 일정 조건에서 가장 작은 분산을 갖습니다. 이론적 보증이 두텁습니다.
그런데 대가도 분명합니다.
표본이 작으면 편향될 수 있습니다. 정규분포의 분산을 최대우도로 추정하면 n으로 나누는데, 이는 참값보다 작게 나오는 편향추정량입니다. 표본분산에서 n-1로 나누는 관행이 이 편향을 고치려는 것이죠.
데이터를 지나치게 믿습니다. 동전을 세 번 던져 세 번 다 앞면이면 최대우도추정은 p=1이라고 답합니다. 뒷면이 절대 안 나온다는 뜻인데, 세 번 던져 놓고 할 말은 아닙니다. 이 과신을 누르는 것이 정규화이고, 베이즈 관점에서 정규화는 사전분포를 넣는 일과 같습니다. L2 정규화는 계수에 정규분포 사전을, L1 정규화는 라플라스 사전을 둔 것과 수학적으로 일치합니다.
모형이 틀리면 답도 틀립니다. 최대우도추정은 가정한 분포 안에서 최선을 찾을 뿐, 그 분포가 현실과 다르면 최선을 다해 틀립니다.