[Home] AI로 돌아가기

🔗 관련 문서: Wikipedia - Maximum Mean Discrepancy

MMD (Maximum Mean Discrepancy) - 최대 평균 불일치

MMD두 확률 분포(P, Q) 간의 차이를 측정하는 커널 기반 통계량이다. 생성 모델의 평가, 도메인 적응, 통계적 검정 등에 활용된다.

1. 개요

Maximum Mean Discrepancy (MMD)는 두 분포가 동일한지를 평가하기 위해 샘플 평균 임베딩을 비교하는 기법이다.

MMD 개념도
그림 1. 최대 평균 불일치(MMD, 출처: Scientific Reports)

2. MMD의 정의

2.1 핵심 아이디어

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 \]

2.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) \]

2.3 요약

특징설명
목적두 분포의 차이 측정
방식평균 임베딩 비교
활용GAN 평가, 도메인 적응 등
장점비모수적, 샘플 기반
요소커널 함수, 기대값 추정

3. 활용

4. 파이썬 코드


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)
  

5. 장점과 단점

장점단점
샘플 기반, 비모수적커널 선택에 민감
분포 가정 불필요고차원에서 계산량 증가
다양한 커널과 조합 가능하이퍼파라미터 튜닝 필요

6. 결론

MMD는 분포 간 차이를 정량적으로 측정할 수 있는 강력한 도구로, 생성 모델 평가, 도메인 적응, 통계 검정 등에서 널리 활용된다.