베이즈 정리, ML과 MAP, 그리고 영상처리

기계학습 2013. 5. 6. 18:22

고등학교 수학에서 조건부 확률이라는 걸 배운다. 그런데 그게 나중에 가면 베이지안 확률이라는 이름으로 불리면서 사람을 엄청 햇갈리게 한다.


1. 베이즈 정리


베이즈 정리(Bayes's theorem) 또는 베이즈 룰(rule), 베이즈 법칙(law)라고 불리는 이 녀석은 결국 다음과 같은 조건부 확률 계산식이다 (x: 모델, z: 관측).



베이지언 확률은 사후확률(posterior probability)을 사전확률(prior probability)과 likelihood를 이용해서 계산할 수 있도록 해 주는 확률 변환식이다. 베이지안 확률은 영상처리에서 classification 문제, detection 문제가 나오면 거의 빠지지 않고 나오는 약방의 감초같은 존재로서, 사람들이 자신의 방법론에 대해 무언가 수학적 모델이 필요할 경우에 1차적으로 생각하는게 바로 베이지언 확률이다.


likelihood: p(z|x), 어떤 모델에서 해당 데이터(관측값)이 나올 확률

사전확률(prior probability): p(x), 관측자가 관측을 하기 전에 시스템 또는 모델에 대해 가지고 있는 선험적 확률. 예를 들어, 남여의 구성비를 나타내는 p(남자), p(여자) 등이 사전확률에 해당한다.

사후확률(posterior probability): p(x|z), 사건이 발생한 후(관측이 진행된 후) 그 사건이 특정 모델에서 발생했을 확률



2. ML와 MAP


확률을 이용해서 classification 문제를 푸는 방법은 크게 2가지가 있다.

바로 ML(Maximum Likelihood) 방법과 MAP(Maximum A Posteriori) 방법이다.


관측값을 z, 그 값이 나온 클래스(또는 모델)를 x라 하자. 예를 들어, 바닥에 떨어진 머리카락의 길이(z)를 보고 그 머리카락이 남자 것인지 여자 것인지 성별(x)을 판단하는  문제를 생각해 보자.

  • ML(Maximum Likelihood) 방법: ML 방법은 남자에게서 그러한 머리카락이 나올 확률 p(z|남)과 여자에게서 그러한 머리카락이 나올 확률 p(z|여)을 비교해서 가장 확률이 큰, 즉 likelihood가 가장 큰 클래스(성별)를 선택하는 방법이다.
  • MAP(Maximum A Posteriori) 방법: MAP 방법은 z라는 머리카락이 발견되었는데 그것이 남자것일 확률 p(남|z), 그것이 여자것일 확률 p(여|z)를 비교해서 둘 중 큰 값을 갖는 클래스(성별)를 선택하는 방법이다. 즉, 사후확률(posterior prabability)를 최대화시키는 방법으로서 MAP에서 사후확률을 계산할 때 베이즈 정리가 이용된다.


머가 다른 것인지 정말 햇갈린다 (사실 본인도 얼마 전까지는 그랬다).


그런데, ML과 MAP 차이는 남녀의 성비를 고려하면 명확해진다. 만일 인구의 90%가 남자고 여자는 10% 밖에 없다고 하자. ML은 남녀의 성비는 완전히 무시하고 순수하게 남자중에서 해당 길이의 머리카락을 가질 확률, 여자중에서 해당 길이의 머리카락을 가질 확률만을 비교하는 것이다. 반면에 MAP는 각각의 성에서 해당 머리카락이 나올 확률 뿐만 아니라 남녀의 성비까지 고려하여 최종 클래스를 결정하는 방법이다.


MAP로 머리카락이 여자것일 확률을 베이즈 정리를 이용해 구해보면 다음과 같다.



정리하면, ML보다는 MAP 방법이 보다 정확한 classification 방법임을 알 수 있다. 하지만 많은 경우, 사전확률(prior probability)인 p(남), p(여)를 모르는 경우가 대부분이기 때문에 단순하게 p(남) = p(여)로 놓고 문제를 푸는 경우가 많은데, 이 경우 MAP는 ML과 같게 된다.



3. 피부색 검출 예제


베이지안 방법이 영상처리에 사용되는 한 예로 영상에서 피부색을 검출하는 문제를 살펴보자.




영상에서 피부색을 검출하는 문제는 결국, 영상의 각 픽셀이 피부색인지 아닌지 여부를 결정하는 classification 문제로 볼 수 있다.


피부색 검출을 위해서는 먼저 샘플 영상들을 열심히 수집해서 피부색 DB와 일반 색상 DB를 구성해야 한다. DB구성이 끝나면 이제 입력 영상의 각 픽셀값이 피부색인지 여부를 베이지언 방법으로 판단해 보기로 하자. 입력 픽셀값이 z라 하면 p(z|피부색)은 피부색 DB에 있는 데이터들 중에서 z와 같은 색을 가진 데이터의 비율을 세면 된다. 또한 p(z|일반색)은 일반색 DB에 있는 데이터들 중에서 z와 같은 색을 가진 데이터의 비율이다.


만일 ML로 피부색 검출을 한다면 p(z|피부색)과 p(z|일반색)을 비교해서 확률이 큰 값을 선택하면 될 것이다.


그런데, 이 문제를 MAP로 풀면 어떻게 될까? 수집된 DB에 있는 데이터의 개수를 이용하여 p(피부색) = |피부색DB|/(|피부색DB|+|일반색DB|), p(일반색) = |일반색DB|/(|피부색DB|+|일반색DB|)라 놓고 MAP를 적용하면 되는 것일까?


대답은 NO!


p(피부색)은 세상에 존재하는 모든 이미지 색상들 중에서 피부색이 얼마나 되느냐를 나타내는 말이다. 따라서, 자신이 수집한 피부색 DB와 일반색 DB의 크기만을 가지고 이 확률을 추정하는 것은 무리가 있다. 오히려 일반색 DB에 있는 데이터들 중에서 피부색 DB에 있는 색과 같은 색을 갖는 데이터들의 비율을 p(피부색)이라 잡는 것이 보다 합리적일 것이다.


이와 같이 prior 확률 p(x)를 구하는 것은 쉬운 문제가 아니기 때문에 현실적으로는 MAP 대신 ML이 사용되는 경우도 많다.


☞ 이 글은 http://lucypark.tistory.com/59 글에 대한 엮인글(트랙백)로 작성한 글입니다.


☞ 베이지언(Bayesian) 확률에 대한 보다 기본적인 이해를 위해서는 베이지언 확률(Bayesian Probability) 글을 참고하시면 좋습니다.



by 다크 프로그래머