🔗 관련 문서: Wikipedia - Maximum Mean Discrepancy
MMD는 두 확률 분포(P, Q) 간의 차이를 측정하는 커널 기반 통계량이다. 생성 모델의 평가, 도메인 적응, 통계적 검정 등에 활용된다.
Maximum Mean Discrepancy (MMD)는 두 분포가 동일한지를 평가하기 위해 샘플 평균 임베딩을 비교하는 기법이다.
MMD는 두 분포 \( P \)와 \( Q \)의 평균 임베딩 차이로 정의된다:
\[ \text{MMD}^2(P, Q) = \left\| \mathbb{E}_{x \sim P}[\phi(x)] - \mathbb{E}_{y \sim Q}[\phi(y)] \right\|^2 \]
샘플 집합 \( X, Y \)에서 MMD를 커널 함수로 근사:
\[ \text{MMD}^2(X, Y) = \frac{1}{m^2} \sum_{i,j} k(x_i, x_j) + \frac{1}{n^2} \sum_{i,j} k(y_i, y_j) - \frac{2}{mn} \sum_{i,j} k(x_i, y_j) \]
일반적으로 사용되는 커널: \[ k(x, y) = \exp\left(-\frac{\|x - y\|^2}{2\sigma^2}\right) \]
특징 | 설명 |
---|---|
목적 | 두 분포의 차이 측정 |
방식 | 평균 임베딩 비교 |
활용 | GAN 평가, 도메인 적응 등 |
장점 | 비모수적, 샘플 기반 |
요소 | 커널 함수, 기대값 추정 |
import numpy as np
from scipy.spatial.distance import cdist
def gaussian_kernel(x, y, sigma=1.0):
return np.exp(-cdist(x, y, 'sqeuclidean') / (2 * sigma ** 2))
def compute_mmd(X, Y, sigma=1.0):
K_xx = gaussian_kernel(X, X, sigma)
K_yy = gaussian_kernel(Y, Y, sigma)
K_xy = gaussian_kernel(X, Y, sigma)
return np.mean(K_xx) - 2 * np.mean(K_xy) + np.mean(K_yy)
장점 | 단점 |
---|---|
샘플 기반, 비모수적 | 커널 선택에 민감 |
분포 가정 불필요 | 고차원에서 계산량 증가 |
다양한 커널과 조합 가능 | 하이퍼파라미터 튜닝 필요 |
MMD는 분포 간 차이를 정량적으로 측정할 수 있는 강력한 도구로, 생성 모델 평가, 도메인 적응, 통계 검정 등에서 널리 활용된다.