27.15 벡터 간 거리와 각도: 코사인 유사도(Cosine Similarity)의 정의
1. 벡터 간 거리의 정의
노름 공간 (\mathbb{R}^n, \|\cdot\|)에서 두 벡터 \mathbf{u}, \mathbf{v} \in \mathbb{R}^n 사이의 거리(distance)는 노름으로부터 자연스럽게 유도된다.
d(\mathbf{u}, \mathbf{v}) = \|\mathbf{u} - \mathbf{v}\|
이 거리 함수는 거리 공간(metric space)의 공리를 만족한다.
- 비음성: d(\mathbf{u}, \mathbf{v}) \geq 0이고, d(\mathbf{u}, \mathbf{v}) = 0 \iff \mathbf{u} = \mathbf{v}
- 대칭성: d(\mathbf{u}, \mathbf{v}) = d(\mathbf{v}, \mathbf{u})
- 삼각 부등식: d(\mathbf{u}, \mathbf{w}) \leq d(\mathbf{u}, \mathbf{v}) + d(\mathbf{v}, \mathbf{w})
L^p 노름에 의한 거리를 L^p 거리라 하며, 가장 대표적인 것은 유클리드 거리(L^2 거리)이다.
d_2(\mathbf{u}, \mathbf{v}) = \|\mathbf{u} - \mathbf{v}\|_2 = \sqrt{\sum_{i=1}^{n}(u_i - v_i)^2}
유클리드 거리의 제곱 d_2^2(\mathbf{u}, \mathbf{v}) = \|\mathbf{u} - \mathbf{v}\|_2^2은 내적으로 다음과 같이 전개된다.
\|\mathbf{u} - \mathbf{v}\|_2^2 = \|\mathbf{u}\|_2^2 - 2\mathbf{u}^\top\mathbf{v} + \|\mathbf{v}\|_2^2
이 전개식은 거리와 내적 사이의 관계를 명확히 보여주며, 커널 기법(kernel method)에서 특성 공간의 거리를 내적으로 계산하는 핵심 원리이다.
2. 벡터 간 각도의 정의
내적 공간에서 영벡터가 아닌 두 벡터 \mathbf{u}, \mathbf{v}의 사잇각(angle) \theta \in [0, \pi]은 다음과 같이 정의된다.
\cos\theta = \frac{\langle\mathbf{u}, \mathbf{v}\rangle}{\|\mathbf{u}\| \cdot \|\mathbf{v}\|}
코시-슈바르츠 부등식에 의하여 우변이 [-1, 1] 범위에 있으므로 \theta = \arccos\left(\frac{\langle\mathbf{u},\mathbf{v}\rangle}{\|\mathbf{u}\|\|\mathbf{v}\|}\right)가 유일하게 결정된다.
- \theta = 0: 두 벡터가 같은 방향 (\mathbf{u} = c\mathbf{v}, c > 0)
- 0 < \theta < \pi/2: 예각, 양의 내적
- \theta = \pi/2: 직교 (\langle\mathbf{u},\mathbf{v}\rangle = 0)
- \pi/2 < \theta < \pi: 둔각, 음의 내적
- \theta = \pi: 반대 방향 (\mathbf{u} = c\mathbf{v}, c < 0)
3. 코사인 유사도의 정의
코사인 유사도(cosine similarity)는 두 벡터 사이의 각도의 코사인 값으로 정의되는 유사도 측도이다.
\text{sim}_{\cos}(\mathbf{u}, \mathbf{v}) = \frac{\mathbf{u}^\top\mathbf{v}}{\|\mathbf{u}\|_2 \cdot \|\mathbf{v}\|_2} = \frac{\sum_{i=1}^{n} u_i v_i}{\sqrt{\sum_{i=1}^{n} u_i^2} \cdot \sqrt{\sum_{i=1}^{n} v_i^2}}
코사인 유사도의 값은 [-1, 1] 범위를 가지며, 다음과 같이 해석된다.
| 값 범위 | 의미 |
|---|---|
| \text{sim} = 1 | 완전히 같은 방향 |
| \text{sim} > 0 | 유사한 방향 |
| \text{sim} = 0 | 직교 (무관) |
| \text{sim} < 0 | 반대 방향 |
| \text{sim} = -1 | 완전히 반대 방향 |
코사인 유사도의 핵심적 특성은 벡터의 크기(노름)에 무관하고 방향만을 비교한다는 점이다. 즉 \text{sim}_{\cos}(\alpha\mathbf{u}, \beta\mathbf{v}) = \text{sim}_{\cos}(\mathbf{u}, \mathbf{v}) (\alpha, \beta > 0)이다. 이 성질은 문서의 길이에 무관하게 주제의 유사도를 측정하거나, 벡터의 스케일이 서로 다른 경우에 특히 유용하다.
4. 코사인 거리와 관련 측도
코사인 유사도로부터 **코사인 거리(cosine distance)**를 다음과 같이 정의한다.
d_{\cos}(\mathbf{u}, \mathbf{v}) = 1 - \text{sim}_{\cos}(\mathbf{u}, \mathbf{v})
코사인 거리는 [0, 2] 범위를 가지며, 0이면 같은 방향, 1이면 직교, 2이면 반대 방향이다. 그러나 코사인 거리는 엄밀한 의미에서 거리 함수(metric)가 아니다. 삼각 부등식을 만족하지 않을 수 있기 때문이다.
삼각 부등식을 만족하는 각도 기반 거리로는 **각도 거리(angular distance)**가 있다.
d_{\text{ang}}(\mathbf{u}, \mathbf{v}) = \frac{1}{\pi}\arccos\left(\text{sim}_{\cos}(\mathbf{u}, \mathbf{v})\right)
이 거리는 [0, 1] 범위를 가지며 실제 거리 함수의 공리를 만족한다.
5. 유클리드 거리와 코사인 유사도의 관계
벡터가 정규화되어 단위 구 위에 놓여 있으면, 즉 \|\mathbf{u}\|_2 = \|\mathbf{v}\|_2 = 1이면 유클리드 거리와 코사인 유사도 사이에 다음 관계가 성립한다.
\|\mathbf{u} - \mathbf{v}\|_2^2 = 2(1 - \text{sim}_{\cos}(\mathbf{u}, \mathbf{v})) = 2 d_{\cos}(\mathbf{u}, \mathbf{v})
따라서 단위 구 위에서는 유클리드 거리의 최소화와 코사인 유사도의 최대화가 동치이다. 이 관계는 정규화된 임베딩을 사용하는 대조 학습과 검색 시스템에서 핵심적인 의미를 갖는다.
6. 딥러닝에서의 활용
문장 및 문서 임베딩의 유사도: 자연어 처리에서 문장을 고정 차원 벡터로 변환한 후, 문장 간의 의미적 유사도를 코사인 유사도로 측정한다. Sentence-BERT (Reimers & Gurevych, 2019)는 시아미즈 네트워크(Siamese network)를 사용하여 코사인 유사도가 의미적 유사도와 높은 상관을 갖도록 문장 임베딩을 학습한다.
검색 및 추천 시스템: 질의 벡터 \mathbf{q}와 문서 벡터 \mathbf{d}_1, \ldots, \mathbf{d}_N 사이의 코사인 유사도를 계산하여 가장 유사한 문서를 검색한다. 벡터 검색 인덱스(FAISS, Annoy 등)는 이 계산을 효율적으로 수행하기 위한 근사 최근접 이웃(ANN) 알고리즘을 사용한다.
대조 학습(contrastive learning): CLIP (Radford et al., 2021)과 같은 다중 모달(multimodal) 모델에서, 이미지 임베딩과 텍스트 임베딩의 코사인 유사도를 대조 손실을 통하여 학습한다. 양성 쌍(matched image-text pair)의 코사인 유사도를 최대화하고, 음성 쌍의 코사인 유사도를 최소화한다.
정규화된 임베딩과 온도 매개변수: 실무에서는 임베딩 벡터를 L^2 정규화한 후 코사인 유사도를 계산하며, 온도 매개변수 \tau를 도입하여 유사도 분포의 날카로움을 조절한다.
\text{logit}_{ij} = \frac{\text{sim}_{\cos}(\mathbf{z}_i, \mathbf{z}_j)}{\tau}
\tau가 작으면 유사도 차이가 증폭되어 소프트맥스 출력이 날카로워지고, \tau가 크면 유사도 차이가 완화되어 출력이 균등해진다. 이 스케일링은 코시-슈바르츠 부등식에 의하여 보장된 [-1, 1] 범위 내에서 이루어진다.
마할라노비스 거리(Mahalanobis distance): 공분산 구조를 고려한 거리 측도로, 양의 정부호 행렬 \Sigma^{-1}을 이용하여
d_M(\mathbf{u}, \mathbf{v}) = \sqrt{(\mathbf{u} - \mathbf{v})^\top \Sigma^{-1} (\mathbf{u} - \mathbf{v})}
로 정의된다. 이는 가중 내적 \langle\mathbf{x},\mathbf{y}\rangle_{\Sigma^{-1}} = \mathbf{x}^\top\Sigma^{-1}\mathbf{y}로부터 유도되는 거리이며, 이상치 탐지(anomaly detection) 등에서 사용된다.