TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 23 READS

술자리 내기에서 이기는 고차원 통계: 임베딩을 다룬다면 꼭 알아야 할 반직관적 성질들

술자리 내기에서 이기는 고차원 통계: 임베딩을 다룬다면 꼭 알아야 할 반직관적 성질들
SOURCE IMAGE · HACKER NEWS
술자리 내기에서 이기는 고차원 통계: 임베딩을 다룬다면 꼭 알아야 할 반직관적 성질들

왜 이 이야기를 해야 하냐면요

Jamie Simon의 블로그 글 제목이 재밌어요. '고차원 통계로 맥주 내기에서 이기는 법'이에요. 요점은 이거예요. 우리 직관은 2차원, 3차원 세계에서 길러졌어요. 그래서 차원이 수백, 수천으로 늘어나면 직관이 체계적으로 틀려요. 그 틀린 직관을 노리고 내기를 걸면 이길 수 있다는 거죠.

웃자고 하는 얘기 같지만, 요즘 개발자한테는 꽤 실용적인 주제예요. 우리가 매일 쓰는 임베딩 벡터가 768차원, 1536차원, 3072차원 같은 고차원 공간에 있거든요. 벡터 DB, RAG, 추천 시스템을 만든다면 이미 고차원 세계에서 일하고 있는 셈이에요. 그래서 여기서는 이런 내기를 가능하게 만드는 대표적인 반직관적 성질들을 차근차근 풀어볼게요.

성질 1: 가우시안 샘플은 '가운데'에 없어요

표준정규분포는 원점(0)에서 확률 밀도가 가장 높아요. 그러면 1000차원 표준정규분포에서 점을 하나 뽑았을 때, 그 점은 원점 근처에 있을 것 같죠? 아니에요. 거의 확실하게 원점에서 약 √1000 ≈ 31.6 떨어진 곳에 있어요.

이유는 이래요. 벡터 길이의 제곱은 각 좌표 제곱의 합이에요. 좌표 하나의 제곱은 평균이 1이니까 1000개를 더하면 평균이 1000이 되고, 길이는 √1000 근처가 돼요. 게다가 큰 수의 법칙 때문에 이 값은 거의 흔들리지 않아요. 결국 점들은 반지름 √d인 얇은 껍질(shell) 위에 몰려 있어요.

비유하자면 이래요. 밀도가 가장 높은 곳은 한가운데가 맞아요. 하지만 한가운데는 '부피'가 너무 작아요. 반면 바깥 껍질은 밀도는 조금 낮아도 부피가 압도적으로 커요. 그래서 전체 확률은 껍질 쪽이 이기는 거예요.

성질 2: 부피는 전부 표면에 몰려 있어요

같은 원리로, d차원 공 안에서 반지름 99% 안쪽이 차지하는 부피 비율은 0.99^d예요. 3차원이면 약 97%지만, 1000차원이면 약 0.004%예요. 부피의 거의 전부가 바깥쪽 1% 두께의 껍질에 들어 있다는 뜻이에요. 오렌지로 치면 과육은 없고 껍질만 있는 셈이죠.

성질 3: 무작위 벡터 두 개는 거의 항상 직각이에요

고차원에서 무작위 방향 벡터 두 개를 뽑아 코사인 유사도를 재면, 거의 항상 0 근처가 나와요. 그 값은 대략 ±1/√d 범위에서 움직여요. 1536차원이면 ±0.025 정도예요. 다시 말해 서로 관련 없는 벡터들은 거의 다 서로 직교해요.

그래서 내기 거리가 생겨요. '1000차원에서 무작위 벡터 두 쌍을 뽑으면 각도가 89~91도 사이에 들어갈까?'라고 물으면 대부분은 설마 싶어 하겠지만, 확률은 압도적으로 높아요.

이게 실무랑 무슨 상관이냐면요

임베딩 유사도를 해석할 때 바로 쓰여요. 코사인 유사도 0.3이 높은 걸까요, 낮은 걸까요? 무작위 기준선이 ±0.025 수준이라는 걸 알면, 0.3은 우연으로 보기 어려운 값이라는 판단이 서요. 다만 실제 임베딩 모델은 벡터들이 특정 방향으로 쏠리는 이방성(anisotropy)이 있어서, 관련 없는 문장끼리도 유사도가 0.7 넘게 나오는 경우가 흔해요. 그래서 절대값보다는 상대 순위나 모델별 분포를 보는 게 중요해요.

kNN과 '차원의 저주'도 같은 얘기예요. 모든 점이 껍질 위에 비슷한 거리로 몰려 있으면, 가장 가까운 이웃과 가장 먼 이웃의 거리 차이가 줄어들어요. 무작위 데이터에서는 '가깝다'는 개념 자체가 흐려지는 거죠. 실제 데이터는 저차원 구조를 품고 있어서 그나마 검색이 되는 거고요.

차원 축소가 생각보다 잘 되는 이유이기도 해요. 존슨-린덴스트라우스(JL) 보조정리에 따르면, 점 N개를 무작위 투영으로 약 log N에 비례하는 차원까지 줄여도 점들 사이의 거리가 거의 보존돼요. 벡터 DB의 양자화나 랜덤 프로젝션, 그리고 OpenAI 임베딩의 차원 축소 옵션 같은 기능이 잘 동작하는 배경에도 이런 성질이 깔려 있어요.

신경망 초기화도 마찬가지예요. 가중치 초기화 때 분산을 1/d 비율로 맞추는 Xavier나 He 초기화는, 고차원에서 벡터 길이가 √d 비율로 커지는 성질을 상쇄하려고 나온 거예요.

한국 개발자에게 주는 시사점

RAG나 검색 시스템을 만들 때 '유사도 임계값 0.8'처럼 숫자를 감으로 정하는 경우가 많아요. 그 전에 내 임베딩 모델에서 무관한 문서 쌍의 유사도 분포를 한 번 찍어보세요. 기준선을 알면 임계값을 정하는 근거가 생겨요. 그리고 NumPy 몇 줄이면 위의 성질들을 직접 확인해 볼 수 있어요. np.random.randn(1000)의 노름을 여러 번 찍어보면 거의 31.6 근처에 몰리는 걸 보고 꽤 놀라실 거예요.

마무리

한 줄 정리: 고차원에서는 점들이 가운데가 아니라 껍질에 몰리고, 무작위 벡터끼리는 거의 직교해요. 임베딩을 다룬다면 이 반직관적 성질이 곧 실무 감각이에요.

여러분은 임베딩 유사도 임계값을 어떻게 정하고 계세요? 고차원 직관 때문에 삽질했던 경험이 있다면 공유해 주세요!


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://jamiesimon.io/blog/how-to-win-a-beer-with-high-dimen...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...