제1원리 질문. 두 데이터의 ‘닮음’을 거리 말고 다른 방법으로 잴 수는 없는가. 크기는 달라도 같은 방향을 가리키는 두 벡터가 있다. 예를 들어 영화를 적게 본 사람과 많이 본 사람의 취향이 같을 수 있다. 크기를 지우고 방향만 비교하는 도구가 내적과 코사인 유사도다.

핵심 — 곱해서 더하기
로드맵은 20주차 내적을 “곱해서 더하기 — AI에서 가장 많이 쓰는 연산”, 21주차 코사인 유사도를 “방향이 비슷하면 취향도 비슷하다”로 요약한다. 내적은 같은 칸끼리 곱해서 모두 더한 값이다.
| 칸 | a | b | ai × bi |
|---|---|---|---|
| 1 | 1 | 4 | 4 |
| 2 | 2 | 5 | 10 |
| 3 | 3 | 6 | 18 |
| 합 (내적) | 32 |
코사인 유사도는 내적을 두 벡터의 길이(노름)로 나눈 값이다. cos θ = (a · b) / (|a| |b|). 길이로 나누면 크기 정보가 사라지고 방향의 차이(사이각 θ)만 남는다. 값의 범위는 −1부터 1까지다.
아래 코드의 세 결과(0.9746, 1.0, 0.0)가 각각 ‘거의 같은 방향’, ‘같은 방향’, ‘직각’에 해당한다.
코드로 번역하기
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 내적: 같은 칸끼리 곱해서 모두 더한다
print(1*4 + 2*5 + 3*6) # 32
print(np.dot(a, b)) # 32
# 코사인 유사도 = 내적 / (a의 길이 * b의 길이)
def cos_sim(u, v):
return np.dot(u, v) / (np.linalg.norm(u) * np.linalg.norm(v))
print(round(cos_sim(a, b), 4)) # 0.9746 (방향이 거의 같음)
print(round(cos_sim(a, 2 * a), 4)) # 1.0 (길이만 다르고 방향 같음)
print(round(cos_sim(np.array([1, 0]), np.array([0, 1])), 4)) # 0.0 (직각)
실행 결과
32
32
0.9746
1.0
0.0
사례 적용 — 길이는 달라도 방향이 같으면 1
두 번째 결과가 핵심이다. a와 2a는 길이가 두 배 차이 나지만 코사인 유사도는 1.0이다. 영화 평점 벡터에 비유하면, 같은 장르 비율로 영화를 보는 두 사람은 본 편수가 달라도 취향이 같다고 판정된다. 거리(노름)로 비교했다면 두 사람은 멀리 떨어져 있다고 나왔을 것이다.
로드맵이 32주차 미니 프로젝트를 ‘영화 취향 벡터 + 코사인 유사도 추천 시스템’으로 잡은 이유가 여기 있다. 또 내적은 다음 편의 행렬곱과 신경망에서 ‘행 × 열’ 계산 하나하나가 모두 내적이라는 점에서, 로드맵 전체에서 가장 자주 반복되는 연산이 된다.
1분 개념 체크
로드맵 교재 템플릿의 ‘1분 개념 체크’ 형식을 빌려 스스로 확인할 문제 두 개를 만들었다.
| 질문 | 답 | 근거 |
|---|---|---|
| (1, 0, 2)와 (3, 5, 1)의 내적은? | 5 | 1×3 + 0×5 + 2×1 |
| (2, 2)와 (5, 5)의 코사인 유사도는? | 1 | 길이만 다르고 방향이 같음 |
내 해석 — Rhymbro가 읽은 것
내적을 ‘가중 합’으로 읽으니 익숙한 계산이 떠올랐다. 부품별 수량 벡터와 단가 벡터의 내적은 총 원가이고, 성분별 비율 벡터와 물성 벡터의 내적은 혼합물의 추정 물성이다. AI에서 가장 많이 쓴다는 연산이 BOM 원가 계산과 같은 구조라는 게 이번 정리의 발견이었다.
반대로 코사인 유사도는 ‘규모를 무시한다’는 점이 장점이자 약점이다. 규모 자체가 중요한 비교(예: 생산량이 큰 라인과 작은 라인)라면 거리와 함께 봐야 한다고 생각한다.
한계로, 코사인 유사도는 영벡터(모든 칸이 0)에서 길이가 0이 되어 나눗셈이 정의되지 않으므로, 실제 코드에서는 이 경우를 따로 처리해야 한다.
요약
| 항목 | 정리 |
|---|---|
| 내적 | 같은 칸끼리 곱해서 더함, np.dot(a, b) |
| 코사인 유사도 | 내적 / (|a| |b|) |
| 값 범위 | −1 ~ 1, 1이면 같은 방향 |
| 특징 | 길이를 지우고 방향만 비교 |
그래서 나는 무엇을 하기로 했나
이번 주는 좋아하는 책 장르 비율을 벡터 세 개로 만들어 서로의 코사인 유사도를 계산하고, 거리(노름)로 비교했을 때와 순위가 어떻게 달라지는지 확인하기로 했다.
주제와 순서는 개인 학습용으로 정리한 104주 AI 수학 로드맵 목차를 따랐고, 설명과 예제는 그 목차를 바탕으로 내 언어로 다시 썼다. 코드는 Python 3 + NumPy 2.x에서 실행해 출력을 확인했으며, 예시 수치는 설명용 가정 값이다.
AI 수학 로드맵 노트 · 전체 10편
- AI 수학 로드맵 노트 1 — y = wx + b, 가중치와 편향의 정체
- AI 수학 로드맵 노트 2 — 지수와 로그, 폭발과 압축의 언어
- AI 수학 로드맵 노트 3 — Σ(시그마)는 그냥 for문이다
- AI 수학 로드맵 노트 4 — 벡터의 크기와 거리, 노름
- AI 수학 로드맵 노트 5 — 내적과 코사인 유사도, 방향이 비슷하면 취향도 비슷하다
- AI 수학 로드맵 노트 6 — 행렬곱, 신경망 한 층의 정체
- AI 수학 로드맵 노트 7 — 미분과 체인룰, 변화가 전달되는 법
- AI 수학 로드맵 노트 8 — 경사하강법과 학습률, 산을 내려가는 보폭
- AI 수학 로드맵 노트 9 — 손실함수 MSE, 얼마나 틀렸나를 숫자 하나로
- AI 수학 로드맵 노트 10 — 베이즈 정리, 검사 결과를 뒤집어 읽기
같은 카테고리에서 함께 읽기
강의자료 121편독일어 문법 노트 10 — 관계절, Die Maschine, die wir kauften
관계대명사의 성·수는 선행사를 따르고, 격은 관계절 안에서의 역할로 정해진다. 전치사 + 관계대명사, wo와 was·wer까지 설비·부품 예문으로 정리했다.
독일어 문법 노트 9 — 종속절과 동사 후치, weil·dass·wenn·als
weil·dass·wenn·obwohl·ob가 이끄는 절에서는 활용된 동사가 맨 끝으로 간다. 종속절이 앞에 오면 쉼표를 사이에 두고 동사가 마주 보는 구조, als…
독일어 문법 노트 8 — 형용사 어미변화, 다섯 칸의 -e와 나머지 -en
정관사가 성·격을 표시하면 형용사는 -e나 -en만 붙는다. -e가 오는 자리는 다섯 칸뿐이고 나머지는 전부 -en. 서술 용법에는 어미가 없다는 점까지 정리했다.



[…] AI 수학 로드맵 노트 5 — 내적과 코사인 유사도, 방향이 비슷하면 취향도… […]
[…] AI 수학 로드맵 노트 5 — 내적과 코사인 유사도, 방향이 비슷하면 취향도… […]
[…] AI 수학 로드맵 노트 5 — 내적과 코사인 유사도, 방향이 비슷하면 취향도… […]
[…] AI 수학 로드맵 노트 5 — 내적과 코사인 유사도, 방향이 비슷하면 취향도… […]