dot product cosine similarity

벡터 내적(Dot Product)과 코사인 유사도(Cosine Similarity)의 차이점

Transformer, BERT, CLIP, RAG와 같은 AI 모델을 공부하다 보면 벡터 내적(Dot Product)코사인 유사도(Cosine Similarity) 를 자주 접하게 됩니다.

두 개념은 매우 비슷해 보이지만 실제 의미와 사용 목적은 다릅니다.

1. 벡터 내적(Dot Product)이란?

두 벡터 AB의 내적은 다음과 같이 계산합니다.

𝐚𝐛=axbx+ayby=𝐚𝐛cosθ\mathbf a\cdot\mathbf b=a_xb_x+a_yb_y=\lVert\mathbf a\rVert\lVert\mathbf b\rVert\cos\theta

그림1

그림1 내적 계산:

a⋅b=4(−1)+1(3)=−1

각이 둔각이므로 벡터는 일부 서로 벌어지는 방향을 가리키고 내적은 음수입니다

그림2

그림2 내적 계산:

a⋅b=−1(−4)+4(2)=12

각도가 예각이므로 벡터들이 부분적으로 같은 방향을 향하고 내적은 양수입니다

그림3

그림3 내적 계산:

a⋅b=4(0)+0(3)=0

a⋅b=4(3)cos(90∘)=0

벡터가 서로 수직이므로 내적은 0입니다

수식으로 표현하면 다음과 같습니다.

AB=AxBx+AyBy+A \cdot B = A_xB_x + A_yB_y + \cdots

또는

AB=ABcosθA \cdot B = |A||B|\cos\theta

여기서

  • A|A| : 벡터 A의 크기
  • B|B| : 벡터 B의 크기
  • θ\theta : 두 벡터 사이의 각도

즉,

벡터 내적은 벡터의 방향과 크기를 모두 반영하는 값입니다.

2. 코사인 유사도(Cosine Similarity)

코사인 유사도는 내적을 벡터의 크기로 정규화한 값입니다.

CosineSimilarity=ABABCosineSimilarity= \frac{A\cdot B} {|A||B|}

즉,

코사인 유사도는 벡터의 길이를 제거하고 방향만 비교합니다.

값의 범위는 다음과 같습니다.

  • 1 : 완전히 같은 방향
  • 0 : 서로 수직
  • -1 : 완전히 반대 방향

3. Python 예제

import numpy as np

A = np.array([1, 2])
B = np.array([2, 4])

# Dot Product
dot = np.dot(A, B)

# Cosine Similarity
cosine = dot / (np.linalg.norm(A) * np.linalg.norm(B))

print("Dot Product :", dot)
print("Cosine Similarity :", cosine)

실행 결과:

벡터 B는 벡터 A의 2배이지만 방향이 동일하기 때문에 코사인 유사도는 1에 근접합니다.

4. 또 다른 예제

import numpy as np

A = np.array([1, 0])
B = np.array([0, 1])

dot = np.dot(A, B)
cosine = dot / (np.linalg.norm(A) * np.linalg.norm(B))

print(dot)
print(cosine)

실행 결과:

두 벡터는 서로 직각(90°)이므로 내적과 코사인 유사도 모두 0입니다.

5. Transformer에서는 무엇을 사용할까요?

Transformer의 Self-Attention은 다음 공식을 사용합니다.

Attention(Q,K,V)=Softmax(QKTdk)VAttention(Q,K,V)= Softmax \left( \frac{QK^T}{\sqrt{d_k}} \right) V

여기서 사용하는 것은 Dot Product(내적) 입니다.

그 이유는

  • 계산 속도가 빠름
  • GPU 병렬 연산에 적합
  • 학습 과정에서 벡터 크기까지 함께 학습 가능

따라서 Transformer는 Scaled Dot-Product Attention을 사용합니다.


6. 코사인 유사도는 언제 사용할까요?

코사인 유사도는 주로 Embedding 간의 유사도 비교에 사용됩니다.

대표적인 예는 다음과 같습니다.

  • Sentence-BERT
  • CLIP
  • RAG(Vector Search)
  • FAISS
  • Milvus
  • Pinecone

이러한 시스템에서는 벡터의 길이보다 의미(방향)가 중요하기 때문에 코사인 유사도를 많이 사용합니다.


7. Dot Product와 Cosine Similarity 비교

항목Dot ProductCosine Similarity
비교 대상방향 + 크기방향
벡터 길이 영향있음없음
결과 범위제한 없음-1 ~ 1
Transformer Attention사용함사용 안 함
임베딩 유사도 검색△ 가능가장 많이 사용

마무리

Transformer 내부에서는 Dot Product를 사용하여 Query와 Key의 관련성을 계산합니다.

반면, BERT, CLIP, RAG와 같은 임베딩 기반 검색 시스템에서는 Cosine Similarity를 사용하여 두 벡터의 의미적 유사성을 측정합니다.

즉,

  • Transformer Attention → Dot Product
  • Embedding 유사도 비교 → Cosine Similarity

이처럼 두 방법은 서로 경쟁 관계가 아니라 목적에 따라 함께 사용되는 핵심 개념입니다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다