차원의 저주: 거리가 집중되고, 부피는 껍질로 도망치며, kNN은 조용히 작동을 멈춘다
요약
고차원 공간에서 발생하는 '차원의 저주' 현상을 기하학적 관점에서 분석합니다. 차원이 높아짐에 따라 거리의 대비가 사라지고, 부피가 외곽 껍질로 집중되며, 데이터가 급격히 희소해지는 현상을 수학적으로 설명합니다.
핵심 포인트
- 차원이 증가하면 가장 가까운 거리와 먼 거리의 비율이 1로 수렴하여 kNN 등의 모델이 무력화됨
- 고차원 구(ball)의 부피 대부분은 내부가 아닌 얇은 외곽 껍질(shell)에 집중됨
- 데이터가 기하급수적으로 희소해져 국소적(local)인 영역을 정의하기가 매우 어려워짐
저는 예전에 "특징(feature)을 더 추가하기만 하면 된다"는 것을 공짜 승리처럼 여겼습니다. 하지만 그렇지 않습니다. 특정 지점을 넘어서면 이는 거리(distance)를 기반으로 구축된 모든 모델을 조용히 파괴하며, 그 이유는 민간 전설이 아닌 순수한 기하학(geometry)에 있습니다. 차원의 저주(curse of dimensionality)는 고차원 공간이 여러분의 머릿속에 있는 평면처럼 행동하기를 거부하는 여러 방식의 집합입니다. 그래서 저는 실제 무작위 점들을 샘플링하고 실제 유클리드 거리(Euclidean distances)와 부피 적분(volume integrals)을 실시간으로 계산하는 데모를 만들었습니다. 차원을 1에서 100까지 드래그하며 숫자들이 무너지는 것을 지켜보세요. 조작된 곡선은 없습니다. 세 가지 문제가 동시에 발생하며, 각각은 측정 가능한 한 줄의 사실입니다.
거리가 집중된다 — "가장 가까운" 것이 아무런 의미를 갖지 못함
d-차원 단위 입방체(unit cube)에 N개의 무작위 점을 떨어뜨리고 모든 쌍의 거리를 측정합니다. 2차원(2-D)에서는 가장 가까운 쌍이 가장 먼 쌍보다 훨씬 더 가깝습니다. 즉, 엄청난 대비를 이룹니다. d를 높이면 모든 거리가 동일한 값으로 쌓입니다:
def pairwise_dists(n, d):
X = np.random.random((n, d))
diff = X[:, None, :] - X[None, :, :]
...
Beyer et al. (1999)은 이를 증명했습니다. 광범위한 조건 하에서 d→∞일 때 가장 먼 거리/가장 가까운 거리의 비율은 1로 수렴하며, 상대적 대비 (Dmax−Dmin)/Dmin은 0으로 수렴합니다. "가장 가까운 이웃(nearest neighbor)"이 가장 먼 이웃보다 간신히 더 가까울 뿐이라면, kNN, k-means, DBSCAN은 그 근간을 완전히 잃게 됩니다. 모든 점이 등거리(equidistant)로 보이기 때문에, 이들이 판별할 수 있는 것이 아무것도 없게 됩니다. 데모에서 거리의 히스토그램은 넓게 시작하여 좁은 스파이크(spike)로 조여집니다. 그 스파이크가 바로 차원의 저주이며, 이는 단언된 것이 아니라 실제 좌표로부터 계산된 것입니다.
부피는 얇은 외곽 껍질로 도망친다
d-ball의 부피는 R^d에 따라 스케일링되므로, 반지름이 1−ε인 내부 구(inner ball)는 전체 부피의 (1−ε)^d만을 차지합니다. 그 외의 모든 것은 외곽 테두리(outer rim)에 존재합니다:
def shell_fraction(d, eps): return 1 - (1 - eps)**d # exact
def shell_fraction_mc(d, eps, m=100_000):
r = np.random.random(m) ** (1/d) # true radial law
...
데모는 정확한 공식을 시각화하고 실시간 몬테카를로 (Monte-Carlo) 계산을 통해 이를 확인하며, 두 수치는 일치합니다. 수십 차원 정도만 되어도 구(ball) 부피의 거의 대부분이 종잇장처럼 얇은 껍질 (shell)에 존재하게 되며, 내부 공간은 비어 있게 됩니다. 또한 정육면체(cube)에 내접하는 구의 부피는 0을 향해 수축하는 반면, 모서리 (corners) 부분이 공간을 점유하게 됩니다. 고차원 (high-D) 데이터에 대해 "중심 경향성 (Central tendency)"이라는 표현은 거의 적절하지 않습니다.
공간은 기하급수적으로 희소해진다 — "국소적"인 것은 더 이상 국소적이지 않다
상자 이웃 (box neighborhood)을 사용하여 균일하게 퍼져 있는 데이터의 일부 $r$을 포착하려면, 상자는 모든 축에 대해 $r^{1/d}$의 가장자리 길이를 가져야 합니다:
neighborhood_edge = r ** (1/d) # r=0.01, d=100 → 0.955
samples_for_grid = k ** d # 축당 k개의 빈 (bins)
100차원에서의 "1% 이웃"은 각 축의 95%에 달하는 범위를 차지합니다. 즉, 더 이상 국소적인(local) 것은 아무것도 없습니다. 그리고 축당 $k$개라는 완만한 격자 (grid)를 채우는 데조차 $k^d$개의 포인트가 필요한데, 이는 수십 차원만 되어도 우주의 원자 수를 훌쩍 뛰어넘습니다. 데이터는 결코 충분할 수 없습니다.
탈출구: 실제 데이터는 매니폴드 (manifold) 위에 존재한다
머신러닝 (ML)이 작동하는 이유는 실제 고차원 데이터가 차원을 가득 채우는 경우가 드물기 때문입니다. 예를 들어 1,000개의 픽셀 특징 (features)을 가진 페이지는 실제로는 훨씬 작은 표면, 즉 저차원 매니폴드 (low-dimensional manifold) 근처에 군집되어 존재합니다. 따라서 해결책은 다시 그 작은 공간으로 돌아가는 것입니다. PCA 또는 UMAP을 사용하여 투영 (project)하거나, 특징 선택 (feature selection)을 통해 정보가 있는 열 (columns)만 유지하고, 불필요한 차원이 무시되도록 규제 (regularize)하며, $d$가 클 때는 유클리드 (Euclidean) 거리 대신 코사인 (cosine) 또는 맨해튼 (Manhattan) 거리를 선호하는 것입니다. 그렇게 하면 거리 비율 (distance ratio)이 회복되고, 껍질이 모든 것을 삼키는 현상이 멈추며, kNN이 다시 작동합니다. 데모에서 두 곡선은 다시 저차원 (low-D) 형태를 향해 되돌아옵니다.
제가 모든 모델에 적용하는 교훈은 다음과 같습니다: 고차원에서 기하학은 당신의 편이 아닙니다. 더 적고 더 나은 차원이 대개 승리합니다. 모델에 500개의 특징을 던져넣기 전에, 비율과 껍질이 어떤 일을 벌이고 있는지 기억하십시오.
차원 슬라이더를 드래그하여 거리 비율이 1로 기어가고 껍질이 100%에 도달하는 것을 확인해 보세요:
https://dev48v.infy.uk/ml/day46-curse-of-dimensionality.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기