Transformer, BERT, CLIP, RAG와 같은 AI 모델을 공부하다 보면 벡터 내적(Dot Product) 과 코사인 유사도(Cosine Similarity) 를 자주 접하게 됩니다.
두 개념은 매우 비슷해 보이지만 실제 의미와 사용 목적은 다릅니다.
1. 벡터 내적(Dot Product)이란?
두 벡터 A와 B의 내적은 다음과 같이 계산합니다.

그림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입니다
수식으로 표현하면 다음과 같습니다.
또는
여기서
- : 벡터 A의 크기
- : 벡터 B의 크기
- : 두 벡터 사이의 각도
즉,
벡터 내적은 벡터의 방향과 크기를 모두 반영하는 값입니다.
2. 코사인 유사도(Cosine Similarity)
코사인 유사도는 내적을 벡터의 크기로 정규화한 값입니다.
즉,
코사인 유사도는 벡터의 길이를 제거하고 방향만 비교합니다.
값의 범위는 다음과 같습니다.
- 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은 다음 공식을 사용합니다.
여기서 사용하는 것은 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 Product | Cosine Similarity |
|---|---|---|
| 비교 대상 | 방향 + 크기 | 방향 |
| 벡터 길이 영향 | 있음 | 없음 |
| 결과 범위 | 제한 없음 | -1 ~ 1 |
| Transformer Attention | 사용함 | 사용 안 함 |
| 임베딩 유사도 검색 | △ 가능 | 가장 많이 사용 |
마무리
Transformer 내부에서는 Dot Product를 사용하여 Query와 Key의 관련성을 계산합니다.
반면, BERT, CLIP, RAG와 같은 임베딩 기반 검색 시스템에서는 Cosine Similarity를 사용하여 두 벡터의 의미적 유사성을 측정합니다.
즉,
- Transformer Attention → Dot Product
- Embedding 유사도 비교 → Cosine Similarity
이처럼 두 방법은 서로 경쟁 관계가 아니라 목적에 따라 함께 사용되는 핵심 개념입니다.

