두 벡터는 얼마나 닮았을까 (Dot product, Cosine Similarity)

도룩·2023년 4월 9일
2

벡터의 내적(Dot product)은 벡터끼리의 연산으로 스칼라가 출력되는 연산이다.
\quad
ab=[a1a2][b1b2]=a1b1+a2b2=aTb\vec a \cdot \vec b=\begin{bmatrix} a_1 \\\\ a_2 \\ \end{bmatrix} \bullet \begin{bmatrix} b_1 \\\\ b_2 \\ \end{bmatrix} \quad = \quad a_1b_1 + a_2b_2 \quad = \quad \vec {a}^T \vec b \quad 이다.

\quad
벡터의 내적의 결과값(스칼라)은 두 벡터의 닮은 정도를 나타낸 값이라고 하는데 왜 그럴까?

\quad
먼저 제 2코사인 법칙을 알아야 한다.

  • 제 2 코사인 법칙 (증명)

    AB=c,AC=b,BC=a\overline{AB} = c, \quad \overline{AC} = b, \quad\overline{BC} = a \quad 라면,
    \quad
    AD=bsinC,CD=bcosC\overline{AD} = b\sin C, \quad \overline{CD} = b\cos C \quad이다.
    \quad
    그리고 BD=BCCD\quad\overline{BD} = \overline{BC}-\overline{CD} \quad 이므로 BD=abcosC\quad\overline{BD} = a-b\cos C\quad 이다.
    \quad
    피타고라스 정리로 AB2\quad\overline{AB}^2 \quad를 나타내보면 다음과 같다.
    \quad
    AB2=c2=BD2+AD2\overline{AB}^2 = c^2 = \overline{BD}^2+ \overline{AD}^2
    \quad
    =(abcosC)2+(bsinC)2\quad\quad\,= (a-b\cos C)^2 + (b\sin C)^2
    \quad
    =a22abcosC+b2cosC2+b2sinC2\quad\quad\,= a^2-2ab\cos C + b^2{\cos C}^2 + b^2{\sin C}^2
    \quad
    =a2+b22abcosC\quad\quad\,= a^2 + b^2 -2ab\cos C
    \quad
    \quad
    c2=a2+b22abcosC\therefore\,c^2 = a^2 + b^2 -2ab\cos{C}
    \quad

이를 벡터에 적용해보자.

벡터의 내적

(1)ab2=a2+b22abcosθ\quad(1)\quad |\vec{a}-\vec{b}|^2=|\vec{a}|^2+|\vec{b}|^2-2|\vec{a}||\vec{b}|\cos{\theta}\quad (제 2 코사인 법칙)
\quad
(2)ab2=a22ab+b2\quad(2)\quad|\vec{a}-\vec{b}|^2 = |\vec{a}|^2 -2\vec{a}\cdot\vec{b} + |\vec{b}|^2 \quad (분배법칙)
\quad
  ab=abcosθ\quad \therefore \;\vec{a}\cdot\vec{b}=|\vec{a}||\vec{b}|\cos{\theta}
\quad
\quad

  • 두 벡터를 내적한 값은 θ\theta 값이 0일 때 값이 가장 클 것이고 (두 벡터의 방향이 같음.) θ\theta 값이 90  90^\circ\; 일 때는 값이 0이 된다.
    \rightarrow 즉, 내적한 값이 크다는 것은 두 벡터가 서로 닮았다는 것을 의미하며, 0에 가깝다는 것은 닮지 않았다는 것을 의미한다.

\quad
코사인 유사도
이를 이용해 코사인 유사도를 정의할 수 있다.
\quad
cosθ=abab\quad \cos\theta = \displaystyle\frac{\vec{a}\cdot\vec{b}}{|\vec{a}||\vec{b}|}
\quad
두 벡터의 방향이 완전히 같을 경우에는 1, 9090^\circ의 각을 이룰 경우 0, 완전히 반대방향일 경우에는 -1의 값을 갖는다.

  \;
  \;
  \;

  • 참고

    • x|\vec{x}|L2L_2 norm을 의미한다. (=x12+x22=\displaystyle\sqrt{{x_1}^2 + {x_2}^2})
      \quad
    • x1|\vec{x}|_1L1L_1 norm을 의미한다. (=x1+x2= \displaystyle\left| {x_1} \right| + \left| {x_2} \right|)

0개의 댓글