수식이 나오지 않는다면 새로고침(F5)을 해주세요
모바일은 수식이 나오지 않습니다.
<본 포스팅에서 대부분의 내용은 Brilliant, Medium의 GMM 소개글을 번역한 내용을 옮겨적은 것입니다.>
https://brilliant.org/wiki/gaussian-mixture-model/
https://towardsdatascience.com/gaussian-mixture-models-explained-6986aaf5a95
📌 가우시안 혼합 모델
가우시안 혼합 모델은 전체 모수 내에서 정규 분포를 따르는 하위 집단들을 나타내기 위한 확률 모델입니다.
일종의 비지도 학습의 한 형태로 모델이 자동으로 하위 집단을 분류해내도록 하는 알고리즘입니다.
예를 들어, 사람의 키 데이터를 모델링 할 때, 남성은 평균 키가 약 175, 여성은 평균 키가 약 165라고 가정해봅시다.
만약 우리에게 데이터가 있고, 해당 데이터가 성별 할당 없이 단지 키 데이터만 주어졌다면? 이 모든 키의 분포는 남성과 여성의 두 정규 분포의 합으로 되어 있을 것이라 가정하고, 이를 분류해내는 모델입니다.
꼭 두 분류가 아니더라도 데이터 내의 하위 정규분포를 가정하여 아래 그림과 같이 찾아내는 작업인것이죠.
정규 분포를 추출해내는 것은 곳, 정규 분포의 매개변수(평균, 분산, 가중치)를 추정하는 것과 같습니다. 이 추정하는 것이 바로 GMM을 사용하여 데이터를 모델링하는 문제에 해당합니다.
GMM은 '혼합 모델'입니다. 그렇다면 우리의 데이터가 이 '혼합' 모델을 따를 것이라는 추측은 어떻게 할 수 있을까요?? 바로 데이터가 multimodal의 특징을 보인다는 것입니다. 쉽게 설명하면 데이터 분포에 'peak'이 하나 이상 있다는 것이죠.
아래 그림을 봅시다. 우리가 혼합 모델이 아닌 unimodal 모델로 데이터를 적합하게 되면 왼쪽과 같은 결과를 얻게 될 것입니다. 시각적으로 보아도 그리 적합해보이지는 않습니다.
때문에 muiltimodal 모델을 통해 오른쪽과 같은 적합 결과를 얻어내는 것이 좋은 방향일 것입니다.
최근에 들어서는 이 발언에 대해서 동의하지 않을 수도 있겠지만, 많은 통계적 가정과 데이터들이 '정규 분포'(가우시안)를 가정하고 띄고 있습니다. 추가적으로 여러 이론적 이유를 통해 실제 unimodal 데이터를 모델링할 때 가장 흔히 사용하는 분포가 이러한 가우시안 분포입니다.
따라서 multimodal 데이터를 많은 unimodal 가우시안 분포의 혼합으로 모델링하는 것이 직관적으로 괜찮은 방법입니다.
📌 About Model
GMM은 두 가지 유형의 값, 즉 혼합 구성 요소(가우시안 분포)의 가중치, 구성 요소(가우시안 분포)의 평균 및 분산/공분산에 의해 매개변수화 됩니다.
말이 어렵지 결국 여러 하위 가우시안 분포의 가중치와 평균, 분산/공분산이라는 매개변수를 찾는 것입니다.
여기서 가중치란 하위 가우시안 분포가 전체 분포에서 차지하는 정도라고 보면 좋을 것 같습니다.
아래 그림을 예로 들면 Cluster 1의 가중치가 0.3, Cluster 2의 가중치가 0.5, Cluster 3의 가중치가 0.2 정도라고 볼 수 있겠네요.
◼️ univariate case(단변량), One-dimensional Model
데이터가 단변량인 경우를 봅시다. 하위 집단의 개수를 $K$라고 할 때, $k$ 번째 가우시안 분포는 평균인 $\mu_k$ 그리고 분산인 $\sigma^2_k$를 가질 것입니다. 여기서 앞서 보았던 가중치. 즉, 해당 분포가 전체 분포에서 차지하는 비중을 나타내는 $\phi_k$도 가지게 됩니다.
전체 분포를 아래와 같이 데이터 $x$의 발생 확률 대해 $K$개의 정규 확률밀도함수의 혼합으로 표현할 수 있습니다.
$$
p(x) = \sum^K_{i=1} \phi_i \mathcal{N} (x | \mu_i, \sigma_i)
$$
$$
\mathcal{N} (x | \mu_i, \sigma_i) = \dfrac{1}{\sigma_i \sqrt{2 \pi}} \exp \left(- \dfrac{(x- \mu_i)^2}{2 \sigma^2} \right)
$$
중요한 점은 가중치의 합이 아래와 같이 1로 제한되어야 한다는 점입니다.
$$
\sum^K_{i=1} \phi_i = 1
$$
◼️ multivariate case(다변량), Multi-diemsional Model
다변량인 경우에도 단변량의 경우와 큰 차이는 없습니다. 먼저 단변량의 분산이 아닌 다변량의 공분산($\Sigma_i$)을 사용한다는 점, 데이터 벡터와 평균의 벡터를 사용한다는 점 뿐이죠.(아래식의 $D$는 벡터 ($\vec{x}$)의 차원수. 즉, 데이터의 변수의 개수)
$$
p(\vec{x}) = \sum^K_{i=1} \phi_i \mathcal{N} (\vec{x} | \vec{\mu}_i, \Sigma_i)
$$
$$
\mathcal{N} (\vec{x} | \vec{\mu}_i, \Sigma_i) = \dfrac{1}{\sqrt{(2 \pi)^D | \Sigma_i|}} \exp \left(- \dfrac12 (\vec{x} - \vec{\mu}_i)^T \Sigma_i^{-1} (\vec{x} - \vec{\mu}_i) \right)
$$
$$
\sum^K_{i=1} \phi_i = 1
$$
📌 최대우도 추정(Maximum Likelihood Estimation, MLE)을 통한 GMM
본 블로그에서 최대우도 추정(MLE)에 대해서 다룬 적이 있습니다.
확률 모델에서 매개변수를 추정하는 가장 흔히 사용하는 방법이죠.
직관적으로 설명하면, 우리에게 주어진 데이터(분포)가 어느 매개변수를 포함한 분포에서 나왔는지 가능도가 최대인 경우를 추정하는 방법입니다.
해당방법으로 적용해봅시다.
먼저 $\mathcal{N}$에 로그를 취하면 아래와 같습니다.
$$
\log \mathcal{N} (\vec{x} | \vec{\mu}_i, \Sigma_i) = -\dfrac{D}{2} \log 2\pi - \dfrac12 \log \Sigma_i - \dfrac12 (\vec{x} - \vec{\mu}_i)^T \Sigma^{-1}_i (\vec{x} - \vec{\mu}_i) \tag{1}
$$
최대우도 추정을 위해서 로그우도를 사용하는데, 로그 우도 식을 보통 미분하고 이를 0과 대응하여 값을 추정합니다.
하지만 식 (1)을 여러 분포가 합쳐진 형태($\sum^K_{k=1}$)에 대해서는 풀기는 어렵습니다.
더 깊게 확인해보죠.
먼저 데이터 포인트 $\vec{x}_n$이 $k$ 분포에서 왔을 확률을 아래와 같이 표현해봅시다.
아래 $z_{nk}=1$은 확률로 $k$ 분포에서 왔다는 의미입니다. 0이라면 아니라면 의미겠죠.
$$
p(z_{nk} =1 |\vec{x}_n)
$$
이는 또한 아래와 같이 해당 분포의 가중치와 같습니다. 가중치의 합은 1이고 해당 분포가 전체 분포에서 차지하는 비율을 나타내기 때문에 확률과 같이 볼 수 있습니다.
$$
\phi_k = p(z_k =1)
$$
각 잠재 변수 $z$에 대해 i.i.d(같은 분포에서 독립적으로 발생)를 가정하고 했을 때 전체 $z$의 확률은 아래와 같이 표현 가능합니다.
$$
p(\vec{z}) = p(z_1 =1)^{z_1}p(z_2=1)^{z_2} ... p(z_K = 1)^{z_K} = \prod^K_{k=1}\phi_k^{z_k} \tag{2}
$$
여기서 최대우도 추정법의 목표인 $k$ 분포에서 왔다는 데이터를 관측할 확률은 어떻게 구할 수 있을까요? 재밌는 점은 이미 가우시안 분포라고 가정을 했기 때문에, 이 가우시안 함수 자체가 확률이 된다는 점입니다. 때문에, 다음과 같이 식을 쓸 수 있습니다.
$$
p(\vec{x}_n | \vec{z}) = \prod^K_{k=1} \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)^{z_k} \tag{3}
$$
이어서 우리의 원래 목표는 관측치 $\vec{x}_n$이 주어졌을 때 $z_k$의 확률. 즉, 해당 관측치가 포함된 가우시안 분포를 찾는 것입니다. 이를 위해서 베이즈 정리를 사용할 수 있습니다.아래와 같이 작성할 수 있습니다.
$$
p(\vec{x}_n, \vec{z}) = p(\vec{x}_n | \vec{z})p(\vec{z}) \tag{4}
$$
이미 우리는 식 (2)와 식 (3)을 통해 위 식 (4)에 대입할 수 있습니다.
$$
p(\vec{x}_n) = \sum^K_{k=1} p(\vec{x}_n | \vec{z}) p(\vec{z}) = \sum^K_{k=1} \phi_k \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k) \tag{5}
$$
최대우도 추정을 위해 우리의 전체 데이터에 적용해봅시다. 전체 데이터인 $X$은 아래와 같이 결합 확률로 표현할 수 있습니다.
$$
p(X) = \prod^N_{n=1}p(\vec{x}_n) = \prod^N_{n=1} \sum^K_{k=1} \phi_k \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)
$$
이에 로그를 취하면
$$
\log p(X) = \sum^N_{n=1} \log \left(\sum^K_{k=1} \phi_k \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k) \right)
$$
이미 로그를 취해봤던 식 (1)을 통해 보았을 때 전체 데이터에 대한 로그 방정식은 미분을 하여도 수식이 복잡해 해석적으로 해를 구할 수 없습니다. 즉, closed-from solution(해석적으로 풀리는 간단한 수식 형태)가 존재하지 않습니다.
그리고 애초에 $\sum^K_{k=1}$에 대해 로그가 취해져 있기 때문에 이 표현을 미분하는건 쉽지 않습니다.
이러한 이유로 GMM에서는 MLE가 아닌 EM(Expectation - Maximization) 알고리즘을 사용합니다.
📌 EM 알고리즘
EM 알고리즘을 확인하기 위해 먼저 가우시안 분포 $\gamma(z_{nk})$를 정의합니다.
베이즈 규칙에 따라서
$$
p(z_k =1 | \vec{x}_n) = \dfrac{p(\vec{x}_n | z_k =1)p(z_k = 1)}{\Sigma^K_{j=1} p(vec{x}_n | z_j = 1)p(z_j =1)}
$$
이 되고, 이전에 봤던 식들을 종합하면 아래와 같이 정의할 수 있습니다.
$$
p(z_k = 1 | \vec{x}_n) = \phi_k, \ \ p(\vec{x}_n | z_k = 1) = \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)
$$
$$
p(z_k = 1 | \vec{x}_n) = \dfrac{\phi_k \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)}{\Sigma^K_{j=1} \phi_j \mathcal{N} (\vec{x}_n | \vec{\mu}_j, \Sigma_j)} = \gamma(z_{nk}) \tag{6}
$$
1️⃣ 초기화 단계
매개변수 들을 아래와 같이 추정해야할 매개변수의 집합이라고 할 때,
$$
\theta = \{\phi, \mu, \Sigma \}
$$
먼저 $\theta$를 적절히 초기화합니다. 알고리즘의 시작점이라고 할 수 있습니다.
예를 들어, $K$를 3으로 지정하고(하위 가우시안 분포의 개수 3개), $N$이 100이라고 할 때 첫 시행 평균을 $\hat{\mu}_1 = x_{45}, \hat{\mu}_1 = x_{83}, \hat{\mu}_1 = x_{9}$ 라고 초기화하는 것입니다.
2️⃣ E 단계(Expectation)
E 단계에서는 앞서 초기화한 값에 기반하여 데이터에 대한 분포 할당 기대값을 계산합니다.
$$
\mathcal{Q}(\theta^*, \theta) = \mathbb{E}[\log p(X, Z | \theta^*)] = \sum_Z p(Z | X, \theta) \log p(X, Z | \theta^*)
$$
여기서 우리는 이미 $p(Z|X, \theta)$가 식 (6)이라는 것을 알고 있습니다. 이를 대입하면 아래와 같습니다.
$$
\mathcal{Q}(\theta^*, \theta) = \sum_Z \gamma(z_{nk}) \log p(X, Z | theta^*)
$$
이 때, $p(X, Z | \theta^*)$는 어떻게 찾느냐가 관건입니다. 이는 전체 우도로, 전체 데이터인 $X$와 전체 잠재변수 $Z$를 포함합니다. 이는 아래와 같은 식으로 나타낼 수 있습니다.
$$
p(X, Z | \theta^*) = \prod^N_{n=1} \prod^K_{k=1} \phi^{z_{nk}} \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)^{z_{nk}}
$$
$$
\log p(X, Z | \theta^*) = \sum^N_{n=1} \sum^K_{k=1} z_{nk} [\log \phi_k + \log \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)]
$$
자, 이 경우 $\sum^K_{k=1}$에 대해 로그가 취해있지 않습니다. 덕분에 매개변수에 대한 $\mathcal{Q}$를 최대화함으로써 매개변수를 추정하는 것이 쉬워지게 됩니다.
정리하면 아래와 같은 식이 되겠네요.
$$
\mathcal{Q}(\theta^*, \theta) = \sum^N_{n=1} \sum^K_{k=1} \gamma(z_{nk}) [\log \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)]
$$
3️⃣ M 단계(Maximization)
이제 $\mathcal{Q}$를 최대화 하는 매개변수 $\theta^*$를 찾기만 하면됩니다.
$$
\theta^* = \arg \max_{\theta} \mathcal{Q} (\theta^*, \theta)
$$
자 이 때 우리는 $\phi_k$의 합이 1이라는 것을 명심해야합니다. 해당 제약을 이용해서 라그랑즈 승수법을 사용합니다. 그럼 아래와 같은 식이 됩니다(라그랑즈 승수법에 대해서 검색해보시면 좋을 것 같습니다).
$$
\mathcal{Q} (\theta^*, \theta) = \sum^N_{n=1} \sum^K_{k=1} \gamma(z_{nk}) [\log \mathcal{N} (\vec{x}_n | \vec{\mu}_k, \Sigma_k)] - \lambda \left(\sum^K_{k=1} \phi_k - 1 \right)
$$
해당 식으로 우리는 최대우도 추정을 사용해서 $\phi$를 추정할 수 있게 되었습니다. 아래와 같이 각 $\phi_k$ 에 대해 $\mathcal{Q}$의 편미분을 0으로 대응합니다.
$$
\dfrac{\partial}{\partial \phi_k} \mathcal{\theta^*, \theta} = \sum^N_{n=1} \dfrac{\gamma (z_{nk})}{\phi_k} - \lambda = 0
\\ \sum^N_{n=1} \gamma (z_{nk}) = \phi_k \lambda
$$
해당 방정식의 양변에 $k$의 합을 적용하면 아래와 같습니다.
$$
\sum^K_{k=1} \sum^N_{n=1} \gamma (z_{nk}) = \sum^K_{k=1} \phi_k \lambda
$$
여기서 우리는 $\sum^K_{k=1} \phi_k$가 1이됨을 이미 알고 있습니다. 또한, 확률인 $\gamma(z_{nk})$에 대해서도 $\sum^K_{k=1} \gamma(z_{nk})$가 1이 됨도 알고 있습니다. 때문에 아래와 같이 $\lambda$를 확인할 수 있고, 이를 통해 $\phi_k$에 대한 식을 확인할 수 있습니다.
$$
\sum^N_{n=1} 1 = N = \lambda
\\ \phi_k = \dfrac{\Sigma^N_{n=1} \gamma(z_{nk})}{N}
$$
자. 다왔습니다 이렇게 분포의 가중치를 구했고, 남은 평균과 공분산을 구하기 위해서 최대우도 추정법을 사용하면됩니다. $\mathcal{Q}$를 평균과 공분산에 대해 편미분을 취한뒤 이를 0에 대응한 후, 식 (1)을 이용해서 풀기만 하면됩니다.
$$
\vec{\mu}_k^* = \dfrac{\sum^N_{n=1} \gamma(z_{nk}) \vec{x}_n}{\sum^N_{n=1} \gamma(z_{nk})}
$$
$$
\Sigma^*_k = \dfrac{\sum^N_{n=1} \gamma(z_{nk})(\vec{x}_n - \vec{\mu}_k)(\vec{x}_n - \vec{\mu}_k)^T}{\sum^N_{n=1} \gamma(z_{nk})}
$$
해당 값을 사용해서 다음 EM 알고리즘의 반복해서 $\gamma$를 결정하고, 수렴하거나 사전에 정한 조건에 맞을 때 까지 반복하여 찾게 됩니다.
쉽게 시각적으로 표현하면 아래와 같은 과정입니다.
'🌞 Statistics for AI > Machine learning' 카테고리의 다른 글
CATboost 기본 특징 (0) | 2024.04.22 |
---|---|
부분 의존성 플롯(Partial Dependence Plot, PD) 그리고 개별 조건부 평균 플롯(Individual Conditional Expectation Plot, ICE) (1) | 2024.02.27 |
Calibration Plot 과 성능 확인 (0) | 2024.02.27 |
불균형 데이터(Imbalanced Data) 처리 : SMOTE, ADASYN (1) | 2024.02.23 |
불균형 데이터(Imbalanced Data) 처리 : 오버 샘플링(over sampling), 언더 샘플링(under sampling) (0) | 2024.02.21 |