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

기계학습 2013.05.06 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 다크 프로그래머

  • eta 2013.07.30 18:40 신고 ADDR 수정/삭제 답글

    포스트 감사합니다~ 잘 정리가 되어있어서 쉽게 이해했습니다~^^

  • 무나 2014.07.23 14:34 신고 ADDR 수정/삭제 답글

    무슨 이론이든 간단한 예제를 보면 이해가 훨훨 쉬운것 같아요! 그런 의미에서 머리카락 길이와 성별 구분 예제 너무 좋아요 +_+ 헷갈릴때마다 저 예제를 다시 생각해야겟어요!!!! ㅋㅋㅋ

  • BlogIcon hexists 2014.10.20 12:17 신고 ADDR 수정/삭제 답글

    베이지안 정리에 대해 매번 헷갈렸는데, 설명 보면서 잘 이해할 수 있었습니다 ^^
    감사합니다. 제 블로그에 정리하는 글에 트랙백 연결해놓을께요^^

    • BlogIcon hexists 2014.10.20 12:23 신고 수정/삭제

      이 글에 트랙백이 허용되지 않았나봅니다^^; 트랙백이 연결되지 않네요^^; 글 잘 읽었습니다~

    • BlogIcon hexists 2014.10.20 12:57 신고 수정/삭제

      트랙백 주소가 따로 있는 것을 이제야 알았습니다^^;
      트랙백 연결했습니다~

    • BlogIcon 다크pgmr 2014.10.20 14:03 신고 수정/삭제

      네 댓글과 트랙백 감사합니다 ^^

  • 공돌이2 2015.05.15 22:34 신고 ADDR 수정/삭제 답글

    안녕하세요 다크님 MLE관련하여 개념이 잘 안서서요 이렇게 댓글로 다시한번 글을 적습니다 . 제가 궁금한것은 likelihood의 개념은 동전을 백번던져서 앞면이 10번 나올확률이 아니라 100번 던져서 10번 앞면이 나왔다면 10번던질 그확률?은 을 구하는게 맞나요?
    좀 헷갈려서요 그리고 MLE maximum likelihood estimation에 대해서도 좀 개념 잡기가 어려운데요 이게예를 들면 동전을 100번 던지고 앞면이 30번 나왔다면 그때 우도값? 을 구하는게 중요한건가요? 여기서 말하는 우도값이 제일크다 라는 의미와 그 큰 우도값을 찾아서 뭐를 하려는건지 뭘 알수 있다는것인지 잘 모르겠습니다. MLE가 어디에 쓰이는지 감도 안와서요 혹시 알려주시면 감사드리겠습니다.

    그리고 인터넷에보면 2000명의 표본중에서 5명의 것을 이용하여 2000명의 평균을 구할수 있다고 하는데 이게 맞는 개념인가요?. 어떻게 이해를 하여야 할까요?

    • BlogIcon 다크pgmr 2015.05.16 08:17 신고 수정/삭제

      안녕하세요. 어떤 현상이 발생했을 때 이 현상을 발생시킬 수 있는 여러 가지 가능성 중 가장 확률이 높은 가능성을 선택하는 것이 ML입니다. 그리고 어떤 모델이 존재하고 모델의 파라미터에 따라 여러 다른 현상이 나올 수 있을 때 관찰된 현상의 가능성을 가장 높일 수 있도록 모델의 파라미터를 추정하는 것이 MLE입니다. 즉, MLE는 ML을 파라미터 추정의 관점에서 표현한 것일 뿐 의미상 다르지는 않습니다. ML의 개념에 대해서는 http://darkpgmr.tistory.com/119 글도 한번 읽어보시면 이해에 도움이 되리라 생각합니다. 어디에 사용되는지는 그 의미를 알면 어렵지 않으며 공학 문제뿐만 아니라 우리 일상 생활 곳곳에 사용되고 있습니다. 예를 들어, 범죄수사에서 단서를 보고 범인을 추정할 때, 증상을 보고 환자의 병을 진단할 때, 동물원에 있던 사자가 왜 갑자기 이상행동을 하는지 등등..

      통계 방법에는 전수조사가 있고 표본조사가 있습니다. 어떤 공장에서 생산되는 제품의 불량률을 측정하고자 하는데 정확하게는 공장에서 생산되는 모든 제품을 일일히 품질검사를 해야 합니다만 현실적으로 불가능한 경우가 많습니다. 이러한 경우에, 일부 샘플만 뽑아서 샘플중 불량인 제품이 얼마나 있는지를 조사하고 이 결과를 가지고 이 공장에서 생산되는 전체 제품의 불량률이라고 간주하는 것이 표본조사입니다.

  • 곰돌이만세^^ 2015.07.28 14:05 신고 ADDR 수정/삭제 답글

    한 5번쯤 읽은 것 같은데 이제 이해가 됐네요.
    그러고 보니 ML이 좀 허접한 느낌이 나긴 합니다만, 실제로 값을 몰르거나 알기 어려워서 ML을 쓰는 경우가 많군요 ㅎㅎ
    수고하세요~

  • 곰돌이만세^^ 2015.07.28 14:09 신고 ADDR 수정/삭제 답글

    아~ 그리고 혹시 관찰하여 클래스를 파악하고자 하는 인자가 z 하나가 아니라, 여러개라면 어떻게 해야 하나요?
    즉 z1, z2, z3 가 있고, z1은 머리카락 길이, z2는 머리카락 굵기, z3는 머리카락의 색상값이라고 한다면, 각기 따로 인자별로 (여자, 여자, 남자) 이런식으로 나올 텐데,
    제가 원하는 것은 f(x) = (남자) 혹은 f(x) = (여자)로 나오기를 원하거든요~

    • BlogIcon 다크pgmr 2015.07.28 21:02 신고 수정/삭제

      http://darkpgmr.tistory.com/119 글 뒷부분에 관련된 예기가 있는데, 한번 읽어보시면 참고가 될 것 같습니다.

  • 통계학부생 2015.11.02 18:12 신고 ADDR 수정/삭제 답글

    통계 학부생인데 잘 배우고 갑니다ㅠㅠ 수리통계학 배우는데 잘 와닿지 않았었거든요... 영상에서도 이렇게 응용이 가능하다니 놀라워요!

    • BlogIcon 다크pgmr 2015.11.02 18:37 신고 수정/삭제

      네 ^^ 영상뿐만 아니라 거의 모든 분야에 사용될 것으로 생각됩니다

  • dmdkr 2016.03.17 13:03 신고 ADDR 수정/삭제 답글

    안녕하세요 블로그 보고 많은 도움을 받고 있는 사람입니다!
    다름이 아니라 위의 피부색 검출 예제를 이해하는 과정에서 좀 헷갈리는 부분이 있어서 그러는데요
    피부색과 일반색 DB를 구축한다고 할 때, 일반색이라는게 피부색이 아닌 다른 모든 색상들을 지칭하신게 맞나요?
    그 다음에 '입력 픽셀값이 z라 하면 p(z|피부색)은 피부색 DB에 있는 데이터들 중에서 z와 같은 색을 가진 데이터의 비율을 세면 된다.'는 부분에서 입력 픽셀값 z는 하나의 값을 나타내게될텐데 여기서 피부색 DB에서 z와 같은 색의 비율을 센다는 것이 어떤 의미인지 제가 잘 이해가 되지않습니다. 피부색 DB에 하나의 색이 중복되어 저장돼 있는 것인지. 아니면 하나의 색을 다양한 컬러모델의 값들로 저장해 둔 것인지. 아니면 다른 의미인지;;
    설명해주시면 감사하겠습니다!

    • BlogIcon 다크pgmr 2016.03.17 14:17 신고 수정/삭제

      DB에는 색의 값 뿐만 아니라 해당 색이 얼마나 나타났는지 개수(빈도)도 같이 저장됩니다. 일반색 DB를 구성할 때, 사람이 포함되어 있지 않은 사진 이미지들을 수집한 후, 수집된 이미지에서 추출된 픽셀들의 색상값을 저장합니다. 그러면 당연히 중복된 색들도 나타날 것입니다. DB를 색상 히스토그램으로 생각하시면 될 것 같습니다.

    • dmdkr 2016.03.17 19:16 신고 수정/삭제

      아 이해가 됐습니다 감사합니다!!

  • 칭기스킴 2017.05.01 16:31 신고 ADDR 수정/삭제 답글

    예제가 정말 좋네요!
    바로 이해가 되네요!

  • rick 2018.01.01 16:18 신고 ADDR 수정/삭제 답글

    감사합니다

  • 베이즈 2018.01.04 12:14 신고 ADDR 수정/삭제 답글

    좋은 글 감사합니다~ 이 글도 보고 http://darkpgmr.tistory.com/119 글도 보고 베이즈 정리에 대해 조금 가닥이 잡히는것 같습니다. 궁금한게 있는데, 단순 표본만으론 P(피부색)을 정확히 알 수 없으니 결국 ML을 사용한다고 되어 있는데.. p(피부색|z) = p(z|피부색) x p(피부색) 을 결국은 p(z|피부색) 으로계산..
    만약 정해진 데이터에서 내 DB에 있는 내용이 전부라면, 즉 DB 내용이 모집단이라면 p(피부색|z)는 p(피부색 ^ z)가 되는게 맞나요?
    모든 경우의 수? 모집단을 정확히 알지 못할 때 ML 방식을 쓸 수밖에 없는건가요?

    • BlogIcon 다크pgmr 2018.01.04 17:13 신고 수정/삭제

      안녕하세요. 일단 p(피부색|z) = p(z|피부색) x p(피부색)은 잘못된 수식입니다. p(피부색|z) = p(피부색 & z)/p(z) = p(z|피부색)*p(피부색)/p(z)으로 계산되어야 합니다. 모집단을 알고 있다면 알고 있는 값을 이용해서 수식을 그대로 계산하면 됩니다. 모집단을 알고 있다고 해서 p(피부색|z)가 p(피부색 & z)로 되지는 않습니다. 모집단을 모를 경우에는 추정값을 사용하면 됩니다.

  • 궁금 2018.01.22 08:07 신고 ADDR 수정/삭제 답글

    mle는 베이지언이 아니라 frequentism 계열로 알고있었는데 mle도 베이지언 확률을 사용한다는 말이 이해가 안되서 문의드립니다. mle에서 베이지언 확률을 어떻게 어디서 사용하는건가요? 베이지언 자체가 관찰된 데이터 뿐만 아니라 사전 확률을 사용해서 사후확률을 계산하는데 mle는 관찰된 데이터만을 활용해 likelihood를 최대화 시키는 파라미터를 구하는 방법이기 때문에 베이지언과 mle는 전혀 다르다고 이해하고 있었어서 혼란스럽습니다 ㅠㅠ

    • BlogIcon 다크pgmr 2018.01.24 00:02 신고 수정/삭제

      likelihood를 계산할 때 베이지언 룰이 이용된다는 것은 본문에 설명되어 있다고 생각합니다만...

    • BlogIcon 궁금 2018.01.25 20:14 신고 수정/삭제

      베이지언은 likelihood와 prior를 활용해서 posterior를 계산하기 위한것이지 likelihood를 계산하기 위한게 아니지 않나요? likelihood는 데이터와 정해진 모수와 모델만 있으면 구할 수 있지 않아요? 제가 잘 몰라서 궁금해서 질문 드리는겁니다~

    • BlogIcon 다크pgmr 2018.01.26 10:09 신고 수정/삭제

      네, 이제 말씀하신 내용을 이해했습니다. 제가 개념을 혼동하고 있었던 부분을 정확히 짚어주셔서 감사합니다. 본문 내용도 이에 맞게 다시 수정해야 할 것 같습니다(수정했습니다). 감사합니다. 좋은 하루 되세요.

  • 심도있는 학습 2018.04.10 21:31 신고 ADDR 수정/삭제 답글

    베이지안 클래시파이어가지고 인식기를 만드는데 있어서 사용되는
    단변량 가우시안 밀도 함수에서 질문드리고 싶어서 글을 썼습니다.
    N(x|μ,σ2)=1(2πσ2)1/2exp{−12σ2(x−μ)2}
    N(x|μ,σ2) 여기서 입력값에 들어가는x가 무엇인지 알고싶습니다. x가이미지인지 아니면 특징점인지,μ가 무엇의 평균인지,σ2는 무엇의 분산인지.....
    너무 헷갈리고 어렵습니다.....

    • BlogIcon 다크pgmr 2018.04.10 22:06 신고 수정/삭제

      x는 변량, μ는 x의 평균, σ2은 x의 분산입니다. x는 문제에 따라 달라질 수 있으며 예를 들어 학생들의 몸무게 분포를 분석하고자 한다면 x가 각각의 학생들의 몸무게 값을 나타내는 변수가 됩니다.

  • 갓크프로그래머 2018.08.08 14:46 신고 ADDR 수정/삭제 답글

    크... 잘보고갑니다 AI공부중에 항상 구글링하면 갓크프로그래머님 나오시네요 좋은 포스팅 정말 감사드립니다