디리클레 분포

오류 제보
통계 마지막 수정: 2026-10-25 04:41:26

○ 공개 검수 대기 AI 보조 작성 표시 기준 보기

1. 개요

디리클레 분포
Dirichlet Distribution
지지집합확률 단체 xi≥0x_i \ge 0, ∑i=1Kxi=1\sum_{i=1}^K x_i = 1
밀도∏ixiαi−1/B(α)\prod_i x_i^{\alpha_i - 1} / B(\boldsymbol\alpha)
모수α1,…,αK>0\alpha_1, \dots, \alpha_K > 0, 집중도 α0=∑αi\alpha_0 = \sum\alpha_i
평균αi/α0\alpha_i/\alpha_0
주변분포Xi∼Beta(αi,α0−αi)X_i \sim \mathrm{Beta}(\alpha_i, \alpha_0 - \alpha_i)
구성독립 감마 Gi∼Γ(αi)G_i \sim \Gamma(\alpha_i) 를 합으로 나눈다
켤레 관계범주형·다항 분포의 켤레사전분포
쓰임토픽 모형, 혼합 가중치 사전, 조성 데이터

「확률들의 확률분포」. 주사위 하나가 아니라 주사위 공장을 모형화한다.

디리클레 분포(Dirichlet distribution)는 KK 개 성분이 음수가 아니고 합이 1 인 벡터 x=(x1,…,xK)\mathbf x = (x_1, \dots, x_K), 즉 확률 단체 위의 점에 대한 분포로, 밀도가

f(x;α)=1B(α)∏i=1Kxiαi−1,B(α)=∏iΓ(αi)Γ(α0),α0=∑iαif(\mathbf x;\boldsymbol\alpha) = \frac{1}{B(\boldsymbol\alpha)}\prod_{i=1}^{K} x_i^{\alpha_i - 1},\qquad B(\boldsymbol\alpha) = \frac{\prod_i\Gamma(\alpha_i)}{\Gamma(\alpha_0)},\quad \alpha_0 = \sum_i\alpha_i

이다. K=2K = 2 이면 베타 분포다. 정규화 상수 B(α)B(\boldsymbol\alpha) 는 베타 함수의 다변수판이고, 이름은 그 적분(디리클레 적분)을 계산한 디리클레에게서 왔다.

샘플 하나가 그 자체로 확률 벡터라는 점이 핵심이다. 그래서 「범주형 분포의 모수가 얼마인지 모를 때 그 모수에 대한 믿음」, 곧 베이즈 사전분포로 쓰인다. 켤레사전분포 문서가 다항-디리클레 켤레 갱신 αk→αk+nk\alpha_k \to \alpha_k + n_k 를 표로 정리했으니, 이 문서는 감마 구성과 그 결과(집약·막대 분할), 집중도 모수가 만드는 희소성, 모수 추정의 수치 계산, 그리고 작은 α\alpha 에서 배정밀도 난수가 0 으로 무너지는 문제를 다룬다.

2. 감마 구성 — 모든 성질의 출발점

독립인 Gi∼Gamma(αi,1)G_i \sim \mathrm{Gamma}(\alpha_i, 1) 를 뽑아

Xi=Gi∑jGjX_i = \frac{G_i}{\sum_{j} G_j}

로 두면 X∼Dir(α)\mathbf X \sim \mathrm{Dir}(\boldsymbol\alpha) 이고, 게다가 X\mathbf X 는 합 ∑Gj∼Gamma(α0)\sum G_j \sim \mathrm{Gamma}(\alpha_0) 와 독립이다. 이 한 줄이 디리클레의 거의 모든 성질을 낳는다.

  • 집약(aggregation). 성분 몇 개를 합치면 다시 디리클레다. (X1+X2,X3,… )∼Dir(α1+α2,α3,… )(X_1 + X_2, X_3, \dots) \sim \mathrm{Dir}(\alpha_1 + \alpha_2, \alpha_3, \dots). 감마의 합이 감마라서다. 범주를 묶거나 쪼개도 모형이 일관되게 유지된다는 뜻이고, 이 일관성이 무한 차원 극한인 디리클레 과정(퍼거슨 1973)을 정의할 수 있게 해 준다.
  • 주변분포. 위에서 나머지 전부를 하나로 합치면 Xi∼Beta(αi,α0−αi)X_i \sim \mathrm{Beta}(\alpha_i, \alpha_0 - \alpha_i).
  • 적률. 평균 αi/α0\alpha_i/\alpha_0, 분산 αi(α0−αi)/(α02(α0+1))\alpha_i(\alpha_0 - \alpha_i)/(\alpha_0^2(\alpha_0+1)), 공분산
Cov(Xi,Xj)=−αiαjα02(α0+1)(i≠j).\mathrm{Cov}(X_i, X_j) = -\frac{\alpha_i\alpha_j}{\alpha_0^2(\alpha_0 + 1)} \quad (i \ne j).

α=(2,3,5)\boldsymbol\alpha = (2, 3, 5) 로 40만 표본을 뽑으면 Cov(X1,X2)\mathrm{Cov}(X_1, X_2) 가 −0.005440-0.005440, 이론값 −0.005455-0.005455 다. 합이 1 로 묶여 있으니 공분산은 항상 음수다. 양의 상관을 표현할 수 없다는 것이 디리클레의 구조적 한계이고, 토픽끼리 함께 나타나는 경향을 모형화하려면 로지스틱-정규 쪽으로 가야 한다.

  • 막대 분할(stick-breaking). V1∼Beta(α1,α0−α1)V_1 \sim \mathrm{Beta}(\alpha_1, \alpha_0 - \alpha_1) 로 막대의 첫 조각을 떼고, 남은 길이 1−V11 - V_1 에서 V2∼Beta(α2,α0−α1−α2)V_2 \sim \mathrm{Beta}(\alpha_2, \alpha_0 - \alpha_1 - \alpha_2) 비율을 떼고… 를 반복해도 같은 분포가 나온다. 「중립성」이라 부르는 이 성질을 K→∞K \to \infty 로 보낸 것이 디리클레 과정의 세투라만 표현이다.

3. 집중도와 희소성

평균 m=α/α0\boldsymbol m = \boldsymbol\alpha/\alpha_0 를 고정하고 집중도 α0\alpha_0 만 바꾸면 분포의 성격이 바뀐다. 대칭 디리클레(αi=c\alpha_i = c 모두 같음)로 보면:

  • c=1c = 1 : 단체 위의 균등분포. 「어떤 확률 벡터든 똑같이 그럴듯하다」.
  • c>1c > 1 : 중심 (1/K,…,1/K)(1/K, \dots, 1/K) 근처로 모인다. c→∞c \to \infty 면 고정된 균등 확률.
  • c<1c < 1 : 꼭짓점과 모서리로 몰린다. 표본 대부분이 성분 몇 개에 질량이 몰린 희소 벡터다.

K=10K = 10 에서 2만 표본으로 재면

cc0.1110
가장 큰 성분의 평균0.6630.2920.154
0.01 미만인 성분 비율62%8.6%0%

다. c=0.1c = 0.1 이면 성분 10 개 중 평균 6 개가 1% 미만이고, 가장 큰 성분 하나가 2/3 를 가져간다. 잠재 디리클레 할당(LDA, 블라이-응-조던 2003)에서 문서-토픽 사전의 α\alpha 를 1 보다 작게 두는 이유가 이것이다. 「문서 하나는 토픽 몇 개만 다룬다」는 가정을 사전분포 한 줄로 넣는 셈이다.1

디리클레-다항(폴리아) 분포. 확률 벡터 p∼Dir(α)\mathbf p \sim \mathrm{Dir}(\boldsymbol\alpha) 를 먼저 뽑고 nn 번 범주를 뽑으면, 범주별 개수는 다항 분포보다 분산이 크다. 성분 분산이 다항 분산의 정확히 (n+α0)/(1+α0)(n + \alpha_0)/(1 + \alpha_0) 배다. α=(2,3,5)\boldsymbol\alpha = (2,3,5), n=50n = 50 이면 5.45 배. 감마-포아송 혼합이 음이항으로 과대산포를 만드는 것(감마 분포)과 똑같은 구조이고, 단어 빈도처럼 「한 번 나온 범주가 또 나오는」 데이터에 잘 맞는다. 폴리아 항아리(뽑은 색의 공을 하나 더 넣는다)가 이 분포를 순차적으로 생성한다.

4. 모수 추정 — 디감마 함수의 고정점

확률 벡터 표본 x(1),…,x(N)\mathbf x^{(1)}, \dots, \mathbf x^{(N)} 이 있을 때 최대우도 조건은

ψ(αk)−ψ(α0)=ln⁡xk‾≡1N∑nln⁡xk(n),k=1,…,K\psi(\alpha_k) - \psi(\alpha_0) = \overline{\ln x_k} \equiv \frac1N\sum_{n}\ln x_k^{(n)},\qquad k = 1, \dots, K

이다(ψ\psi 는 디감마 함수). 충분통계량이 로그 평균뿐인 지수족이라 우도가 오목하고 해가 유일하다. 민카(2000)가 정리한 두 가지 풀이를 직접 돌려 보면 차이가 선명하다. 참값 (0.5,2,4)(0.5, 2, 4) 에서 500 개 표본:

  • 고정점 반복 αk←ψ−1(ψ(α0)+ln⁡xk‾)\alpha_k \leftarrow \psi^{-1}\bigl(\psi(\alpha_0) + \overline{\ln x_k}\bigr). 매 반복 우도가 줄지 않음이 보장되고 코드가 짧다. 그러나 선형 수렴이라 α=1\boldsymbol\alpha = \mathbf 1 에서 출발해 10−1010^{-10} 까지 166 번, 적률 일치로 초기값을 잡아도 152 번 걸린다.
  • 뉴턴법. 헤세 행렬이 「대각 + 계수 1」 꼴(−diag ψ′(αk)+ψ′(α0)11T-\mathrm{diag}\,\psi'(\alpha_k) + \psi'(\alpha_0)\mathbf 1\mathbf 1^T)이라 셔먼-모리슨 공식으로 O(K)O(K) 에 역을 구한다. 같은 출발점에서 8 번 만에 같은 답 (0.4647,1.9556,3.9304)(0.4647, 1.9556, 3.9304) 에 닿는다. 단 단계가 αk≤0\alpha_k \le 0 으로 넘어가지 않게 반으로 줄이는 안전장치가 필요하다.

역디감마 ψ−1\psi^{-1} 은 닫힌꼴이 없어 뉴턴 몇 번으로 구한다. 표본에 정확히 0 인 성분이 있으면 ln⁡0\ln 0 때문에 최대우도가 정의되지 않는다 — 조성 데이터(지질 성분비, 미생물 군집 비율)에서 흔한 골칫거리이고, 0 을 작은 값으로 바꾸는 처리 자체가 결과를 좌우한다.

5. 난수 생성 — 작은 α\alpha 의 함정

교과서 알고리즘은 감마 구성을 그대로 쓴다. 감마 난수는 마르살리아-창(2000) 방법이 표준이고, 형상모수가 1 보다 작을 때는 Gα=Gα+1 U1/αG_\alpha = G_{\alpha+1}\,U^{1/\alpha} 로 우회한다. 여기서 문제가 생긴다. α\alpha 가 작으면 U1/αU^{1/\alpha} 가 배정밀도 최솟값 아래로 떨어진다. P(Gα<t)≈tα/Γ(α+1)P(G_\alpha < t) \approx t^\alpha/\Gamma(\alpha+1) 이므로

α\alpha0.10.010.001
GαG_\alpha 가 0 으로 언더플로한 비율 (20만 표본)00.059%47.4%

다. α=0.001\alpha = 0.001 이면 감마 난수의 절반이 정확히 0 이 된다. K=3K = 3 성분이 모두 0 인 행은 10.9% (≈0.4743\approx 0.474^3) 이고, 그 행을 합으로 나누면 0/0=NaN0/0 = \mathrm{NaN} 이다. 희소 사전을 쓰는 토픽 모형·혼합 모형에서 원인 모를 NaN 이 튀어나오는 고전적인 경로다.

해법은 로그 공간이다. ln⁡Gα=ln⁡Gα+1+(ln⁡U)/α\ln G_\alpha = \ln G_{\alpha+1} + (\ln U)/\alpha 를 직접 계산하고, 최댓값을 빼서 지수를 취한 뒤 정규화한다(로그-합-지수 요령). 같은 α=0.001\alpha = 0.001 에서 10만 행을 뽑으면 NaN 이 하나도 없고 성분 평균이 (0.332,0.333,0.335)(0.332, 0.333, 0.335) 로 이론값 1/3 에 맞는다. 이 환경의 NumPy 2.x Generator.dirichlet 은 작은 α\alpha 에서 막대 분할 방식으로 우회해 NaN 을 내지 않았지만, 모든 라이브러리·모든 버전이 그렇다는 보장은 없으니 자작 코드라면 로그 공간이 국룰이다.2

6. 시뮬레이션에서 만나는 자리

  • 혼합 모형의 가중치 사전. 가우스 혼합의 성분 가중치에 디리클레 사전을 두면 깁스 샘플링의 가중치 갱신이 디리클레 난수 한 번으로 끝난다. α<1\alpha < 1 이면 쓸모없는 성분의 가중치가 0 으로 줄어 성분 수를 자동으로 가지치기한다.3
  • 라플라스 평활. 범주 빈도 추정에 「모든 칸에 1 을 더한다」는 요령은 Dir(1,…,1)\mathrm{Dir}(1, \dots, 1) 사전의 사후 평균이다. 0.5 를 더하면 제프리스 사전이다(제프리스 사전분포).
  • 불확실성 정량화의 입력. 조성(혼합 기체 몰분율, 합금 성분비)처럼 합이 1 로 묶인 입력을 몬테카를로 방법으로 흔들 때 각 성분을 독립으로 흔들고 다시 정규화하면 의도와 다른 분포가 나온다. 디리클레로 직접 뽑으면 합 제약과 평균을 동시에 지킨다. 단 음의 공분산만 허용된다는 위의 한계를 기억할 것.
  • 베이지안 부트스트랩. 데이터 점 nn 개의 가중치를 Dir(1,…,1)\mathrm{Dir}(1, \dots, 1) 에서 뽑아 가중 통계량을 반복 계산하면 루빈(1981)의 베이지안 부트스트랩이다. 보통 부트스트랩의 다항 가중치를 연속 디리클레 가중치로 바꾼 것이다.

7. 관련 문서

8. Footnotes

  1. 토픽 모형 논문에서 α=0.1\alpha = 0.1, β=0.01\beta = 0.01 같은 숫자가 국룰처럼 보이는데, 이게 「문서는 토픽 몇 개, 토픽은 단어 몇 개만 쓴다」는 희소성 가정을 숫자로 박은 것이다. 근거를 물으면 대개 「원 논문이 그렇게 했다」가 답이다. ↩

  2. 디버거를 켜면 문제가 안 생기고 끄면 생기는 NaN 의 상당수가 이 부류다. 0.1% 확률이라도 표본을 수백만 개 뽑으면 반드시 맞는다. 확률이 작다고 0 은 아니다. ↩

  3. 범주가 수만 개(어휘)인 토픽 모형에서 디리클레를 매번 뽑는 대신 해석적으로 적분해 없애는 「붕괴 깁스」가 표준이 된 것도, 이 언더플로 문제와 계산량을 한꺼번에 피할 수 있어서다. ↩

검증 자료

이 문서의 주요 출처

  1. T. S. Ferguson (1973), A Bayesian analysis of some nonparametric problems, The Annals of Statistics 1(2), 209-230
  2. D. M. Blei, A. Y. Ng & M. I. Jordan (2003), Latent Dirichlet allocation, Journal of Machine Learning Research 3, 993-1022
  3. T. P. Minka (2000), Estimating a Dirichlet distribution, technical report
  4. G. Marsaglia & W. W. Tsang (2000), A simple method for generating gamma variables, ACM Transactions on Mathematical Software 26(3), 363-372
이 문서가 문제를 푸는 데 도움이 됐나요? 한 번의 클릭이 다음 검수 순서를 정합니다.

의견을 반영할게요. 감사합니다.

다음으로 읽기 감마 분포 약 5분 더 탐색 →