[잠재 디리클레 할당 파헤치기] 1. 베이즈 추론

Posted by 적분 ∫2tdt=t²+c
2017.04.20 16:07 그냥 공부

작년에 토픽 모델링이라는 개념을 접하고 깜짝 놀랐어요. 그냥 적당한 크기의 문헌들을 넣어주면 거기에서 적절하게 컴퓨터가 연관된 단어들을 묶어서 주제 분포를 만들어주고, 문헌별로 주제가 얼만큼 포함되었는지 계산해주는게 너무 신기했기 때문이었습니다. 그래서 도대체 어떻게 이런걸 해내는지 궁금해서 LDA(Latent Dirichlet Allocation, 잠재 디리클레 할당)와 관련된 논문을 찾아봤는데 수학 실력이 부족해서 제대로 이해하지 못했다는 슬픈 소식이...

그래서 LDA 이론을 이해하기 위해 작년부터 먼길을 돌고돌아 이러저러한 수학/통계적 기초를 찾아다녔는데, 마침내 드디어 빛을 찾은듯합니다. 그래서 간신히 찾은 빛을 오래오래 간직하고자 이렇게 블로그에 정리하게 되었습니다!


LDA를 이루는 이론적 기초에는 베이즈 추론이 있습니다. 그리고 베이즈 추론에 사용되는 분포 중 하나로 디리클레 분포가 있는것이구요, 그리고 복잡한 확률 식을 추정하기 위해 깁스 샘플링라는 방법을 사용합니다. 이 3가지 키워드를 기억하며 LDA의 원리를 찾아 떠나봅시다.


베이즈 추론

조건부 확률을 다룰때 자주 나오는 베이즈 정리라는 게 있습니다. 쉽게 말해서 A가 일어났을때 B가 일어날 확률을 어떻게 계산할 수 있는지 정리한 공식이라고 볼수 있는데요, 증명은 간단하니 생략하고 모양은 아래와 같이 생겼습니다.

말로 풀어서 설명하자면 (X가 일어났을때 θ가 일어날 확률)은 (X와 θ가 동시에 일어날 확률)을 (X가 일어날 확률)로 나누면 얻을 수 있다는 겁니다. 그런데 (X와 θ가 동시에 일어날 확률)은 (θ가 일어났을때 X가 일어날 확률)에 (θ가 일어날 확률)을 곱한것과 같으니 위와 같이 식이 나오는거죠.

이걸 아이디어를 바탕으로 추론하는 사고 방식을 베이즈 추론이라고 합니다. 잘 모르는 사건이 일어날 확률을 가정하고, 실제로 그 사건에 대해 관측함으로써, 더 정확한 확률을 계산하는 건데요, 이 베이즈 추론은 다음과 같은 순서로 이뤄집니다.


  1. 어떤 사건이 발생할 확률을 가정한다.
  2. 그리고 추가적인 관측이 발생하면
  3. 관측된 사건을 통해 그 사건이 발생할 확률을 더 정확하게 추론한다.

여기에는 사전 확률, 관측, 사후 확률이라는 3가지 개념이 있습니다.

  • 사전 확률(prior probability, 선험적 확률): 관측에 의거하지 않고 가정하는 특정 사건이 일어날 확률. '왠지 이 사건은 이런 분포를 따를 것 같다'는 느낌적인 느낌이라고 생각할 수 있어요
  • 관측: 사건이 실제로 발생한것. 느낌적인 느낌으로 예상하고 있던게 실제로 일어난 것을 말합니다.
  • 사후 확률(posterior probability): 실제 관측된 사건을 가지고 해당 사건이 일어날 확률을 더 정확하게 계산한것. 즉 이 추론 과정에서 사전 확률은 관측을 통해 사후 확률로 바뀌게 됩니다.

사전 확률과 사후 확률은 어떤 관계가 있을까요? 그것은 위의 베이즈 정리가 말해주고 있습니다. θ가 우리가 관심있는 사건이라고 하고, X가 실제로 관측된 사건이라고 하면 P(θ)는 그냥 사건θ가 일어날 확률이므로 사전 확률이 되겠죠. 그리고 P(θ|X)는 X가 일어났을때 θ가 일어날 확률이므로 사후 확률이 됩니다. 
P(X|θ)는 θ가 일어났을때 X가 일어날 확률이므로, 관심있는 사건에 대해 실제 사건 X가 얼마나 일어날 수있는지를 보여주는 값이 됩니다. 그래서 이를 가능도(우도, likelihood)라고 합니다. 즉
사후 확률 ∝ 가능도 × 사전 확률

이라는 것을 알 수 있죠.


이론만 늘어놓으면 이해가 잘 안되니, 예제를 통해 익혀봅시다. 


찌그러진 동전 던지기

어딘가 찌그러진 동전이 있다고 합시다. 찌그러졌기에 던저서 앞뒤가 얼만큼 나올지 전혀 모르겠습니다. 이 동전을 던졌을때 앞이 나올확률이 어느정도 될지 베이즈 추론을 통해 계산해봅시다. 동전을 3번 던져봤는데 2번 앞이 나왔다고 해볼게요.

추론에 앞서 각각의 요소를 정리해봅시다.

  • 사전 확률: 동전을 던져서 앞이 나올 확률 (사실 정확한 값을 모르므로 0 <= p <= 1 범위의 모든 p가 될수 있을거라고 가정합시다)
  • 추가적인 관측: 동전을 3번 던져서 앞이 2번 나옴.
  • 사후 확률: 사전 확률에다가 3번 던져서 2번 앞이 나왔다는 사실을 반영하여, 더 정확히 추론한 동전이 앞이 나올 확률


우리는 사전 확률을 알지 못합니다. 그러면 앞이 나올 확률이 0.5라고 생각하는게 옳을까요? 아닙니다. 앞이 나올 확률은 0.5일수도... 아닐수도 있습니다...! 앞이 전혀 안 나올수도 있고, 앞만 나올수도 있고, 정확한 값을 모르죠. 즉 앞이 나올 확률을 p라고 했을때, 0<=p<=1 범위에서 그 가능성이 모두 같아야합니다.

사전 확률 분포

즉 앞이 나올 확률 p가 x일 확률을 생각해보면 0~1 구간에서 모두 동일하다고 볼수 있는거죠. (앞이 나올 확률이 x일 확률을 생각해보자는 겁니다.) 이것이 우리의 사전 확률 분포입니다.



3번 던져서 앞이 2번 나올 확률의 가능도를 구해보죠. 동전을 3번 던져서 앞이 2번 나오는 경우는 앞/앞/뒤, 앞/뒤/앞, 뒤/앞/앞 입니다. 앞이 나올 확률을 p라고 하면 뒤가 나올 확률은 (1-p)이므로 3번 던져서 2번 앞이 나올 확률은 다음과 같습니다.

이걸 그래프로 그리면

3번 중 2번 앞이 나올 가능도 분포

이런 모양입니다. 사후 확률은 사전 확률과 가능도의 곱에 비례하므로

사후 확률 분포


사후 확률의 그래프도 위와 같이 나오겠죠. 즉 우리는 찌그러진 동전을 3번 던져서 앞이 2번 나왔다는 사실을 통해서 이 동전을 던져서 앞이 나올 확률이 어떤 분포를 따르는지 계산해낸것입니다. 실제로 이 그래프의 극대값은 2/3 =0.66...에 존재하지요. 3번 던져서 2번 앞이 나왔을 경우 대략 그 확률이 2/3라고 추정하는 우리의 믿음과도 같은 결과입니다.


동전을 좀 더 던져보지요. 아까에 이어 2번을 추가로 던졌는데 1번만 앞이 나왔다고 합시다. 또 다시 베이즈 추론을 해볼까요? 앞서 계산했던 사후 확률이 이번에는 사전 확률이 될 겁니다. 2번 중 1번 앞이 나올 확률은 2p(1-p)겠죠.

2번 중 1번 앞이 나올 가능도 분포

새로운 사후 확률 분포는 다시 사전 확률 분포와 가능도 분포를 곱해서 구할 수 있습니다. 곱하면 다음과 같은 모양이 나와요.

새로운 사후 분포

이제 우리의 추론은 더 정확해졌겠죠. 이렇게 관측을 통해서 확률 분포를 개선해나가면서 더 정밀한 추론을 하기 위해 베이즈 추론이 쓰입니다.


동전을 던져서
앞이 나올 확률

사전 확률 분포

X~Beta(1,1)

3번 던져서
2번 앞이 나옴

↓↓↓

(+2, +1)

동전을 던져서
앞이 나올 확률

사후 확률 분포

X~Beta(3,2)

2번 던져서
1번 앞이 나옴

↓↓↓

(+1, +1)

동전을 던져서
앞이 나올 확률

새로운 사후 분포

X~Beta(4,3)

(베이즈 추론은 위 표에서 볼수있듯이 관측을 통해서 추론 결과가 개선되어가는 과정을 잘 보여줍니다. 더 관측을 많이 할수록 그래프는 뾰족해지고, 특정 확률부분으로 집중하겠죠.)


켤레 사전 분포

지금까지 계산한 직접 곱셈을 하고 확률식을 계산하는 방식으로 베이즈 추론을 해서 해당 사건이 일어날 확률 p의 분포가 어떻게 변하는지 살펴보았어요. 단순한 사례를 들었기 때문에 앞에서는 매우 간단하게 곱셈(그리고 알게 모르게 적분)을 통해 사전 확률과 추가적 관측을 가지고 쉽게 사후 확률을 구할 수 있었지만, 이게 좀만 복잡해져도 계산하기 귀찮고 어려워집니다.
다행히도 수학자들이 특정 관측 사건에 대해서 어떤 사전 확률 분포를 쓰면 계산이 매우 간편해진다는 사실을 발견해서 잘 정리해두었습니다. 이 특정 사건과 짝을 이루는 사전 확률 분포를 켤레 사전 분포(Conjugate Prior)라고 합니다.

가능도

켤레 사전 분포

가짓수 = 2

Bernoulli

A, B 둘 중 하나만 일어나는 사건

Binomial

A, B가 여러 번 일어나는 사건

Beta

가짓수 > 2

Categorical

A, B, … Z 중 하나만 일어나는 사건

Multinomial

A, B, … Z가 여러 번 일어나는 사건

Dirichlet

새로운 개념들이 잔뜩 등장했는데 차근차근 짚어봅시다.

  • 이항분포(Binomial Dist.): 두 가지 중에 하나가 발생하는 사건. 여러번 반복될 경우 이항분포, 한 번만 일어날 경우 베르누이 분포(Bernoulli Dist.)라고 합니다. 동전을 한 번 던지는 사건은 베르누이 분포, 여러 번 던지는 사건은 이항분포라고 할 수 있겠죠.
  • 다항분포(Multinomial Dist.): 여러 개 중에 하나가 발생하는 사건. 마찬가지로 여러번 반복될 경우 다항분포, 한 번만 일어날 경우 카테고리 분포(Categorical Dist.)라고 합니다. 주사위를 한 번 던지는 사건은 카테고리 분포, 여러 번 던지는 사건은 다항분포라고 할 수 있겠죠.


이항분포의 켤레 사전분포는 베타분포라고 하네요. 다른 말로 하면 관측되는 사건이 이항분포를 따르는 경우, 사전 확률을 베타분포로 두면 매우 편하게 사후 확률을 계산할 수 있다는 것입니다. 베타분포는 하이퍼 파라미터로 2개의 값을 받습니다. 보통 다음과 같이 쓰지요.

여기서 α = (A사건이 일어난 횟수 + 1), β = (B사건이 일어난 횟수 + 1)이라는 의미를 가집니다. 이제 위의 표에서 그래프 오른쪽에 있는 X~Beta(a,b)의 의미를 이해할 수 있을 겁니다. Beta(1, 1)은 제일 기본상태입니다. 모든 확률이 편평하죠. 여기에서 2번 앞, 1번 뒤가 나오면 이 그래프는 Beta(3,2)로 바뀝니다. 그리고 여기서 또 앞 1번, 뒤 1번이 나오면 Beta(4, 3)이 되구요. 복잡한 수식 변화 대신 베타분포의 하이퍼 파라미터를 증감시킴으로써 사후 확률 분포를 쉽게 계산할 수 있는거에요.



다음 글에서는 베타분포를 확장한 버전인 디리클레 분포를 다루고, LDA가 어떻게 디리클레 분포를 이용해서 주제를 찾아내는지 그 이론을 살펴보도록 하지요.


참고링크

http://egloos.zum.com/aistory/v/4493798 A.I. story : 베이지안 확률(Bayesian Probability)

http://egloos.zum.com/nullmodel/v/3790240 확률분포 이야기 (01) 빌어먹을 애플!


저작자 표시 비영리 동일 조건 변경 허락
신고
이 댓글을 비밀 댓글로
    • miner
    • 2017.09.05 09:54 신고
    정말 훌륭한 글입니다.
    LDA를 공부하며 항상 수리적인 이해가 안되었는데 조금씩 이해가 되네요.
    다른 글들도 잘 보고 있습니다.
    • wls800
    • 2017.09.06 13:54 신고
    정말 감사합니다.
    저도 LDA 공부를 하면서 이해가 안되는 부분이 참 많았는데...
    올려주신 글들이 정말 도움이 되었어요~
    감사합니니다!!!
    • rupert
    • 2017.10.23 18:25 신고
    안녕하세요.
    LDA관련하여 공부에 도움을 많이 받았습니다.
    몇번 탐독하다 이해가 안가는 부분이 있는데요. 가능도 계산 관점에서 3번 동전을 던져 2번 앞이 나올 가능도가 왜 3p^2(1-p) 인지 잘 모르겠네요.
    제 머릿속으로는 3없이 p^2(1-p) 이라고 생각이 되는데요.
    위키피디아의 https://ko.wikipedia.org/wiki/%EA%B0%80%EB%8A%A5%EB%8F%84 를 확인하여도 제 말과 비슷한것 같은데, 제가 빼먹은 것이 있거나 이유를 설명해주실 수 있을까요?
    • 먼저 부족한 블로그에 들러주셔서 감사합니다! 설명이 부족한 부분이 있었나봅니다. 3번을 던져서 2번이 앞이 나오는 경우가 (앞,앞,뒤), (앞,뒤,앞), (뒤,앞,앞)로 총 3가지 경우가 있기 때문에 3을 곱해준 거에요!
    • rupert
    • 2017.10.24 02:42 신고
    대댓글이 안되는군요
    조금 더 생각해보면 떠올릴 수 있었던 내용이었네요. 너무 어려운 내용들에 멘붕하다보니 이런 이해 부족이 발생해 버렸군요 감사합니다 ㅠ