[잠재 디리클레 할당 파헤치기] 2.5. 디리클레-다항분포와 마법의 폴리아 항아리

Posted by 적분 ∫2tdt=t²+c
2018.02.13 03:31 그냥 공부

앞서 LDA 토픽 모델링의 수학적 기초를 다루는 시리즈를 포스팅했었는데요


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

[그냥 공부] - [잠재 디리클레 할당 파헤치기] 2. 디리클레 분포와 LDA

[그냥 공부] - [잠재 디리클레 할당 파헤치기] 3. 깁스 샘플링으로 파라미터 추정


디리클레 분포에서 LDA로 건너뛰는 지점의 설명이 조금 부족한듯 싶어서, 공부를 좀더 진행하다가 LDA 토픽 모델링을 더욱 쉽게 설명할 수 있는 비유를 알아냈습니다. 그래서 번외편으로 추가 포스팅을 올리게 되었습니다! 

(글의 앞부분에는 수학적인 설명이 조금 첨부되어있습니다. 이게 이해하기 어려우신 경우 뒷부분에 폴리아 항아리가 나오는 부분부터 보시면 되겠습니다.)



디리클레 분포는 이항 분포를 일반화한 것이라고 앞서 설명하였습니다. 이 분포는 적절한 하이퍼 파라미터를 주면, 이 파라미터에 따라 특정한 확률 simplex (x1, x2, ..., x_n)이 등장할 확률을 계산해준다고 했습니다. 앞선 포스팅(2. 디리클레 분포와 LDA)에서 친구와 가위바위보를 하는 상황에서 친구가 가위, 바위, 보를 각각 낼 확률을 알 수 없는 경우 디리클레 분포로 그 확률을 추정할 수 있다고 했던것 기억하시면 되겠습니다.


디리클레-다항분포(Dirichlet-Multinomial Distribution)

LDA를 설명할때 빠뜨린 것이 있는데, 사실 LDA는 정확하게 말하자면 디리클레-다항 분포를 이용하는 확률 모델입니다. 디리클레-다항 분포는 말 그대로 디리클레 분포와 다항 분포를 합친 것이죠. 디리클레 분포에서 특정 확률 분포를 뽑아내고, 이 확률 분포를 여러 번 시행하여 최종적인 분포를 뽑는 과정이라고 이해하시면 되겠습니다. 가위바위보 비유를 다시 들어보도록 하죠.


도무지 생각을 알수 없는 친구가 있습니다. 이 친구와 가위바위보를 하게 되었는데, 3판 가위바위보를 한다고 할 때 친구가 2번 가위, 1번 바위를 낼 확률을 알고 싶습니다. (단, 이 친구와 가위바위보를 5판 한 다른 사람의 얘기를 들어보니 가위 2번, 바위 2번, 보 1번을 냈다고 합니다.)


자, 먼저 친구에 대한 가위바위보 확률 분포는 디리클레 분포로 설명할 수 있습니다. 아무런 정보가 없을 경우 기본 파라미터는 Dir(1, 1, 1)이겠지만, 5판을 해본 다른 사람의 얘기에 따르면, (가위, 바위, 보) = (2, 2, 1)번을 냈다고 하므로, 파라미터 값을 해당하는 만큼 증가시켜서 Dir(3, 3, 2)라고 할 수 있겠습니다.

(... 디리클레 분포)

이 친구의 가위바위보 확률 분포 X는 Dir(3, 3, 2)를 따릅니다. ( X는 Dir(3, 3, 2)에서 추출됩니다. )

이 때 X는 가위, 바위, 보 셋 중 하나를 내는 categorical 분포가 됩니다. (여러 번 반복 시행하면 다항분포가 되겠죠)


X를 위와 같이 풀어서 써볼 수 있습니다. x1, x2, x3 각각은 가위, 바위, 보를 낼 확률을 의미하며 당연히 x1, x2, x3을 더한 값은 1이 되겠죠.

따라서 친구가 가위 2번, 바위 1번을 낼 확률은

 (... 다항 분포)

로 계산할 수가 있겠죠. 문제는 실제 x1, x2, x3 값은 전혀 알 수가 없다는 것입니다. 다른 사람의 얘기를 따라 이 친구가 이전에 5판 중에 가위 2번, 바위 2번, 보 1번을 낸 것은 알았지만, 그렇다고 이 친구가 (가위, 바위, 보)를 낼 확률이 정확히 (2/5, 2/5, 1/5)이라고 할 수는 없기 때문이죠. (그 확률이 (0.8, 0.1, 0.1)이었더라도 5판을 하면서 우연히 가위 2번, 바위 2번, 보 1번이 나올 가능성은 언제나 열려 있거든요)

따라서 우리는 임의의 x1, x2, x3 값 전부를 고려하여, 가위 2번 바위 1번이 나올 확률을 따져야하겠습니다. 어렵군요!


비유는 여기까지이구요, 비유에서 나왔던 확률 분포가 총 2개입니다.

  1. 하이퍼 파라미터 (3, 3, 2)로부터 친구가 (가위, 바위, 보)를 낼 확률을 계산하는 과정 : 디리클레 분포
  2. 친구가 (가위, 바위, 보)를 낼 확률로부터 가위 2번, 바위 1번이 나올 확률을 계산하는 과정 : 다항 분포

이 둘이 결합된 문제를 디리클레-다항 분포라고 하는 것이고, 이 경우 친구가 (가위, 바위, 보)를 낼 확률이 정확히 무엇이 될지 모르므로, 모든 확률 값에 대해서 고려하여 계산을 해야한다는 게 디리클레-다항 분포의 포인트입니다. 이를 어떻게 계산하냐구요? 힌트는 적분입니다. 가능한 모든 X의 경로에 대해서 정적분을 실시하면 변수 X는 사라지게 되거든요(Integrate Out). 이 적분을 계산하고 나면 팩토리얼 함수의 업그레이드 버전인 감마 함수가 잔뜩 등장하는데, 이에 대한 복잡한 계산식은 생략하도록 하겠습니다.


마법의 폴리아 항아리

위에서 굉장히 복잡하게 설명했지만, 이 과정은 사실 초등학생때도 자주 했던 주머니(or 항아리)에서 구슬 뽑기 과정으로 설명할 수 있습니다. 간단한 예시를 위해 주황 구슬 2개, 파랑 구슬 3개가 들어간 주머니를 가져와 봤어요. 여기서 구슬 3개를 뽑을 때 주황 구슬 1개, 파랑 구슬 2개가 나올 확률을 구해봅시다.

(파랑, 파랑, 주황) 순서로 나온다고 가정하고 차근차근 초심(초등학생의 마음)으로 돌아가 계산을 해보자면

  1. 전체 5개 중에서 파랑 3개 중의 하나가 나와야하므로 3/5
  2. 그 다음에 구슬이 1개가 줄어서, 전체 4개 중에서 파랑 2개 중의 하나가 나와야하므로 2/4
  3. 구슬이 1개 또 줄고, 전체 3개 중에서 주황 2개 중의 1개가 나와야하므로 2/3

위 셋을 곱하면 원하는 값이 나올겁니다. 그리고 (파랑, 주황, 파랑), (주황, 파랑, 파랑)의 순서로 나오는 경우에도 마찬가지로 계산하면 최종적으로 다음과 같은 확률 값을 얻을 수 있겠죠?


구슬 뽑는 놀이를 더 하고 싶지만, 아쉽게도 위의 항아리에는 총 5개의 구슬 밖에 없어서 더 길게 구슬 뽑기를 할수는 없을것 같네요. 그래서 그 대신 마법의 폴리아 항아리를 소개합니다!! (사실 정확한 명칭은 Pólya urn model(폴리아 항아리 모형)입니다. 명칭이 너무 밋밋해서 재밌게 바꿔봤어요) 마법의 폴리아 항아리 속은 신비한 장치로 이뤄져있어서, 뽑아도 뽑아도 구슬이 줄어들지 않습니다. 따라서 구슬 뽑기 놀이를 무한히 진행할 수가 있습니다. 위의 일반 항아리에서는 파란 구슬을 뽑으면 파란 구슬의 개수가 1개 줄어들었지만, 마법의 폴리아 항아리에서는 파란 구슬을 뽑으면 오히려 파란 구슬의 수가 1개 늘어납니다!! 우와 이런 창조경제가 따로 없죠? 현실적으로 말도 안되는 일이지만, 마법의 폴리아 항아리니깐 이게 가능하다고 믿고, 구슬 뽑기 놀이를 진행해봅시다.


마법의 폴리아 항아리에 처음에는 주황, 파랑 구슬 1개씩만을 넣고 시작해보겠습니다.

  1. 전체 2개 중에서 구슬을 뽑아봤더니, 파랑 구슬이었다. (확률: 1/2) 뽑고나니 파랑 구슬이 1개 늘어남
  2. 전체 3개 중에서 구슬을 뽑아봤더니, 또 파랑 구슬이었다. (확률: 2/3) 뽑고나니 파랑 구슬이 또 1개 늘어남
  3. 전체 4개 중에서 구슬을 뽑아봤더니, 주황 구슬이었다. (확률: 1/4) 뽑고나니 주황 구슬이 1개 늘어남

따라서 이 마법의 폴리아 항아리에서 차례로 (파랑, 파랑, 주황)이 뽑힐 확률은 세 확률을 곱해주면 되겠습니다. 그리고 (파랑, 파랑, 주황)이 순서를 뒤섞는 경우는 총 3가지에 대해서도 마찬가지로 계산해보면 이 항아리에서 파랑 2개, 주황 1개가 뽑힐 확률은

가 됩니다. 하나도 안 어렵죠? 간단해보이지만, 마법의 폴리아 항아리는 디리클레-다항 분포의 수식과 일치합니다. 즉, 디리클레-다항 분포의 확률식을 풀어서 전개할 경우 방금 위에서 설명한 확률 계산과 같아진다는 것이에요! 이 때 처음에 항아리 안에 넣었던 구슬의 개수가 디리클레 분포의 하이퍼 파라미터입니다. 즉, 위 과정은 Dir(1, 1)에서 파랑 2개, 주황 1개를 뽑을 확률을 계산한 것과 정확히 일치합니다.


이렇게 보면 디리클레 분퍼의 하이퍼 파라미터의 역할에 대해 명확하게 감을 잡으실수 있으실겁니다. 만약 Dir(10, 1)이라면, 처음에 마법의 폴리아 항아리 안에 파랑 구슬이 10개, 주황 구슬이 1개가 들어가 있는것이고, 따라서 왠만하게는 뽑을 때마다 파랑 구슬이 나올 확률이 높을 것입니다. 주황 구슬이 뽑히는 확률은 낮게 될것이구요. 

또 만약에 Dir(1000, 1000)이라면, 파랑 구슬 1000개, 주황 구슬 1000개를 가지고 시작하는 것이죠. 이 경우 파랑 구슬이 수십개 뽑힌 후에도 다음 구슬이 파랑일 확률과 주황일 확률은 거의 반반일 겁니다. 기본적으로 파랑, 주황 구슬이 많았으니까요. 반면 Dir(1, 1)의 경우 파랑 1개, 주황 1개로 시작했으므로, 처음에 우연히 파랑 구슬이 여러 개 뽑힐 경우, 파랑 구슬의 개수가 금세 많아져, 그 다음에 뽑힐 구슬도 파랑 구슬이 될 확률이 높아집니다. 즉 하이퍼 파라미터가 전반적으로 작으면, 구슬의 색이 한 쪽으로 치우치게 될 가능성이 높고, 하이퍼 파라미터가 전반적으로 크면, 구슬의 색이 고르게 나올 가능성이 높다는 거죠.


조금만 더 어렵게 가봅시다. 마법의 폴리아 항아리에는 처음에 심지어 소수점 개수의 구슬도 들어가 있을수가 있습니다. 처음에 주황, 파랑 구슬이 각각 0.1개씩 들어가 있다고 생각해봅시다..! (당황하지 마시고, 위에서 했던것을 일반화해서 똑같이 생각해보아요)


  1. 전체 0.2개 중에서 구슬을 뽑아봤더니, 파랑 구슬이었다. (확률: 0.1/0.2) 뽑고나니 파랑 구슬이 1개 늘어남
  2. 전체 1.2개 중에서 구슬을 뽑아봤더니, 또 파랑 구슬이었다. (확률: 1.1/1.2) 뽑고나니 파랑 구슬이 또 1개 늘어남
  3. 전체 2.2개 중에서 구슬을 뽑아봤더니, 주황 구슬이었다. (확률: 0.1/2.2) 뽑고나니 주황 구슬이 1개 늘어남

이 경우의 확률은

조금 이상하죠..? 그치만 수학적으로 말이 되는 이야기입니다. (구슬 대신에 섞이지 않는 서로 다른 색깔의 물감이라고 생각하시는게 나을수도 있겠네요. )


이 확률은 Dir(0.1, 0.1)에서 파랑 2개, 주황 1개를 뽑을 확률을 계산한 것과 같습니다. 앞에서 설명했다시피 하이퍼 파라미터가 더 작으므로, 색깔이 한쪽으로 쏠리기 매우매우 쉽습니다. 특히 3번에서 주황이 뽑힐 확률이 0.1/2.2로 굉장히 작죠?


(여기서 제시된 폴리아 항아리 비유와 유사하게 중국집 식당(Chinese Restaurant) 비유를 드는 경우도 있습니다. 사실 그 둘은 동치입니다. )


폴리아 항아리를 이용해서 글을 써보자

LDA 모델은 이 폴리아 항아리를 이용해서 문헌을 생성하는 것을 묘사한 모델이라고 볼수 있겠습니다. 문헌을 생성하기 위해서 크게 2종류의 폴리아 항아리가 쓰입니다. 하나는 문헌별 주제 항아리이고, 다른 하나는 주제별 단어 항아리입니다. 문헌별 주제 항아리는 쓰고 싶은 글의 개수만큼있고, 여기에는 서로 다른 K개 색의 구슬이 들어있습니다. 주제별 단어 항아리는 총 K개가 있고, 각각에는 단어가 적힌 구슬이 들어있구요.

이 항아리들을 이용해서 다음과 같이 글을 쓰는 것이 LDA 토픽 모델링의 핵심입니다.


먼저 쓰려는 글에 해당하는 문헌별 주제 항아리를 가져옵니다.

  1. 문헌별 주제 항아리에서 구슬 하나를 뽑습니다. 이 구슬의 색상은 쓸 단어의 주제를 의미합니다.
  2. 이제 이 색상에 맞는 주제별 단어 항아리를 가져와서, 여기에서 단어 구슬 하나를 뽑습니다. 구슬에 적힌 단어를 문헌에 씁니다.
  3. 원하는 개수만큼 1번으로 돌아가 단어를 계속해서 씁니다.

그리고 이 전체를 원하는 문헌 개수만큼 반복하면 여러 개의 글이 나오겠구요!


이게 그럴싸한 결과를 가져오는 이유는 두 항아리의 하이퍼 파라미터 때문입니다. 앞서 설명했다시피 하이퍼 파라미터가 작을수록 뽑히는 구슬이 한쪽으로 치우치기 쉽습니다. 즉, 처음 문헌별 주제 항아리에서 주제 구슬을 뽑을 때에는 어떤 주제 구슬도 고르게 뽑혀나올 수 있습니다. 하지만, 일단 어떤 주제 구슬이 뽑혀나오고 난 이상 그 문헌별 주제 항아리에서는 그 주제 구슬이 뽑혀 나올 확률이 굉장히 높아집니다. 이는 문헌별 주제 분포의 하이퍼 파라미터로 대게 1보다 작은 값을 쓰기 때문입니다. 그렇기 때문에 같은 문헌 안의 단어들은 가능한 같은 주제에 포함될 확률이 높아집니다. 주제별 단어 항아리도 마찬가지입니다.



링크

https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation

https://en.wikipedia.org/wiki/Dirichlet-multinomial_distribution

https://en.wikipedia.org/wiki/P%C3%B3lya_urn_model


이 댓글을 비밀 댓글로