Processing math: 0%
본문 바로가기

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}

레퍼런스

[책] 수학 리부트

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