본문 바로가기

SearchDeveloper/알고리즘

코사인 유사도 증명하기

문서 간의 유사도, 즉 벡터 간의 유사도를 구하기 위해 코사인 유사도를 많이 사용한다.

코사인 유사도가 어떻게 이 수식이 나오게 되었는지 수학적으로 증명해보도록 한다.

필자는 고등학교 이후로 거의 수학을 다시 볼 일이 없었기 때문에 왜 이런 공식이 이런 형태로 되어있는지 궁금하여 정리한 글이다.

코사인 유사도

두 개의 문서를 v, u 라는 벡터로 임베딩했을 때, 두 벡터의 코사인 값은 다음과 같다.

$$
cosθ = \frac{v⋅u}{∥v∥∥u∥}
$$

유사도 비교하기

벡터 v 를 기준으로 v 와 u 가 비슷한지, v 와 w 가 비슷한지 cosθ 으로 판단해보자.

고등학교 때 $cosθ = \frac{x}{r}$ 임을 배웠다.

  • 두 벡터는 비슷할수록 θ 가 작아진다. (점점 가까워지므로)
  • θ 가 작을수록 cosθ는 점점 커진다. (분자 값이 점점 커지므로)
  • 즉, cosθ 가 클수록 더 유사하다.

따라서 v 와 u, v 와 w 의 cosθ 를 각각 계산한 후에 값이 더 큰 쪽이 더 유사하다고 판단할 수 있다.

공식 파헤치기

이런 공식은 어떻게 나왔을까?

$$
cosθ = \frac{v⋅u}{∥v∥∥u∥}
$$

① 벡터의 길이 구하기

※ 핵심 공식: 코사인 법칙

벡터 v, u 를 이은 대각선 길이는 $∥v-u∥$ 이며, $∥v-u∥$ 는 $∥v∥, ∥u∥, cosθ$ 로 표현할 수 있다.

(코사인 법칙은 아래 ①-②에서 자세하게 살펴본다.)

$$
∥v-u∥^2 = ∥v∥^2 + ∥u∥^2 - 2∥v∥∥u∥ cosθ \quad (by. 코사인 법칙)
$$

||v|| 는 벡터 v의 길이를 나타내는 기호이다.

$∥v-u∥^2$ = $(v-u)⋅(v-u)$ 이므로 좌변을 아래처럼 다시 쓸 수 있다.

(왜 벡터 길이의 제곱자신과의 내적과 같은지는 아래 ①-①에서 자세하게 살펴본다.)

$$
(v-u)⋅(v-u) = ∥v∥^2 + ∥u∥^2 - 2∥v∥∥u∥ cosθ
$$

v⋅v 는 벡터 v의 내적을 나타내는 기호이다.

$$
∥v∥^2-2vu + ∥u∥^2 = ∥v∥^2 + ∥u∥^2 - 2∥v∥∥u∥ cosθ
$$

$$
\therefore cosθ = \frac{v⋅u}{∥v∥∥u∥}
$$

①-① $∥v-u∥^2=(v-u)⋅(v-u)$ 인 이유

※ 핵심 공식: 피타고라스의 정리, 벡터 내적

벡터 길이의 제곱은 자신과의 내적과 같다.

$$
||v||^2 = v⋅v
$$

벡터의 내적 계산 방식은 각 성분끼리 곱한 후 더한다.

$$
v⋅v = (a_1, a_2)⋅(a_1, a_2) = a_1^2+a_2^2 \quad ⋅⋅⋅⋅(1번 식)
$$

벡터 $v = (a_1, a_2)$ 일 때, (0, 0) 에서 $(a_1, a_2)$ 까지의 거리는 피타고라스의 정리를 이용하면 다음과 같다.

$$
||v|| = \sqrt{(a_1-0)^2 + (a_2-0)^2} = \sqrt{a_1^2 + a_2^2} \quad ⋅⋅⋅⋅(2번 식)
$$

1번 식과 2번 식을 합쳐보자

$$
v⋅v = a_1^2+a_2^2 = \sqrt{a_1^2+a_2^2}^2=||v||^2
$$

따라서 $||v||^2 = v⋅v$ 이고 위에서 $∥v-u∥^2=(v-u)⋅(v-u)$ 로 다시 쓸 수 있는 것이다.

①-② 코사인 법칙

① 벡터의 길이 구하기 에서 본 아래의 식, 어떻게 나온 걸까?

$$
∥v-u∥^2 = ∥v∥^2 + ∥u∥^2 - 2∥v∥∥u∥ cosθ \quad (by. 코사인 법칙)
$$

삼각형의 빗변 c는 나머지 길이 a, b 그리고 사이각 θ 로 표현할 수 있다.

점 A: $(a, 0)$

점 B: $(bcosθ, bsinθ)$

두 점 사이의 거리 c는 아래처럼 구할 수 있다.

$$
c = \sqrt{(bcosθ-a)^2+(bsinθ-0)^2}
$$

(왜 위의 공식이 두 점 사이의 거리인지는 ①-②-① 에서 살펴볼 것이다.)

$$
c = \sqrt{(bcosθ-a)^2+(bsinθ-0)^2}
\\
= \sqrt{b^2cos^2θ-2abcosθ+a^2+b^2sin^2θ}
\\
=\sqrt{b^2(cos^2θ+sin^2θ)-2abcosθ+a^2}
\\
=\sqrt{b^2-2abcosθ+a^2}
$$

$$
\therefore c^2=a^2+b^2-2abcosθ
$$

벡터 v, u 사이의 거리는 $∥v-u∥$ 이므로 위 식에 대입하면 이와 같이 나타낼 수 있는 것이다.

$$
∥v-u∥^2 = ∥v∥^2 + ∥u∥^2 - 2∥v∥∥u∥ cosθ
$$

①-②-① 두 점 사이의 거리

※ 핵심 공식: 피타고라스의 정리

두 점 $(x_1,x_2), (y_1,y_2)$ 를 삼각형으로 표현한 후 두 점 사이의 거리 d 를 구하려면 피타고라스의 정리를 사용한다.

$$
d = \sqrt{(x_2-x_1)^2+(y_2-y_1)^2}
$$

레퍼런스

[책] 수학 리부트

글 읽어주셔서 언제나 감사합니다. 좋은 피드백, 개선 피드백 너무나도 환영합니다.