닷 프로덕트 이해하기

2019-07-18
Jun Sok Huhh | 🏠lostineconomics.com

tl;dr

닷 프로덕트

dot product는 내적이라고도 번역하지만 여기서는 닷 프로덕트로 쓰기로 하겠다. 먼저 정의부터 살펴보자.

u=[u1,u2,,un]Rn \mathbf{u}=\left[u_{1}, {u}_{2}, \ldots, {u}_{n}\right] \in {\mathbb R}^n

v=[v1,v2,,vn]Rn \mathbf{v}=\left[{v}_{1}, {v}_{2}, \ldots, {v}_{n}\right] \in {\mathbb R}^n

uv=nuivi \mathbf{u} \cdot \mathbf{v} = \sum_{n} u_i v_i

쉽게 말해서 닷 프로덕트는 차원이 같은 두 개의 인풋 벡터를 하나의 스칼라로 바꿔주는 일종의 함수로 이해할 수 있다. 두 개의 벡터를 서로 연관 짓는데 이를 해당 벡터의 길이라는 정보로 압축한다고 보면 얼추 맞을 듯 싶다. 하나의 숫자로 요약된다는 뜻에서 스칼라 프로덕트라고도 불린다. 그림으로 나타내면 아래와 같다.

u\mathbf{u} 벡터를 v\mathbf v 벡터 위에 직각으로 쏜 프로젝션 벡터(Projvu\mathrm{Proj}_{\mathbf v}{\mathbf u})의 길이와 v\mathbf v 길이를 곱하면 그것이 u\mathbf uv\mathbf v의 닷 프로덕트가 된다. 어느 벡터로 프로젝션 하는지는 관계가 없다.1 즉,

vu=vProjvu {\mathbf v} \cdot {\mathbf u} = \Vert \mathbf v \Vert \Vert {\rm Proj}_{\mathbf v} {\mathbf u} \Vert

닷 프로덕트는 어떻게 도출하는가? 그 기하학적인 구조는 무엇인가?

코사인 법칙 활용하기

우선 정석부터 가보자. 코사인 법칙을 활용해서 닷 프로덕트를 도출할 수 있다. 2

우선 코사인의 법칙부터 살펴보자.

uv2=u2+v22uvcosθ \lVert \mathbf u - \mathbf v \rVert^2 = \lVert \mathbf u \rVert^2 + \lVert \mathbf v \rVert^2 - 2\lVert \mathbf u \rVert \lVert \mathbf v \rVert \cos \theta

uv2=(uv)(uv)=u2+v22(uv) \lVert \mathbf u - \mathbf v \rVert^2 = ( \mathbf u - \mathbf v) \cdot ( \mathbf u - \mathbf v ) = \lVert \mathbf u \rVert^2 + \lVert \mathbf v \rVert^2 - 2 (\mathbf u \cdot \mathbf v)

Thus,

uv=uvcosθ=v(ucosθ)=vProjvu \mathbf u \cdot \mathbf v = \lVert \mathbf u \rVert \lVert \mathbf v \rVert \cos \theta = \lVert \mathbf v \rVert ( \lVert \mathbf u \rVert \cos \theta) = \lVert \mathbf v \rVert \rVert \text{Proj}_{\mathbf v} \mathbf u \lVert

기하적 이해

기하적으로 도출하는 흥미로운 방법도 있다.3 이해를 돕기 위해서 2차원 벡터공간으로 한정해서 논의하겠다. nn 차원으로 확대하는 것이 수학적으로 어렵지는 않다. 주의할 것은 여기서는 위의 예에서 v\mathbf v가 여기서는 u\mathbf u이다.

일단 u\mathbf u가 길이 1로 표준화된 벡터라고 정의를 살짝 바꾸겠다. 즉, 새로운 u\mathbf uu\rVert \mathbf u \lVertu\mathbf u를 나눈 벡터다. 아래 그림처럼 이 벡터를 향해서 2차원 평면의 기저를 구성하는 (1,0)(i)(1,0)(\equiv i)(0,1)(j)(0,1)(\equiv j)에서 벡터로 프로젝션을 해보자.

이렇게 프로젝션을 하면 프로젝션된 지점의 xx 좌표는 공교롭게도 원점에서부터 해당 프로젝션된 지점까지의 벡터의 길이가 된다. yy에 대해서도 마찬가지다.

이제 (1,1)에서 벡터 u\mathbf u로 프로젝션을 해보자. (1,1)은 각각 두 개의 기저를 1의 가중치로 선형결합한 벡터다. 이 벡터의 프로젝션의 길이는 어떻게 구성될까? 그림에서 보듯이 ux+uyu_x + u_y가 된다. 이를 일반적인 논리로 확장해보자. 어떤 임의의 벡터 v(=(x,y))\mathbf v(=(x,y))가 존재할 때 해당 벡터는 각각 두 개의 기저의 선형 결합으로 이해할 수 있다.

따라서 v\mathbf v 벡터를 u\mathbf u로 프로젝션한 길이는 다음과 같다.

[uxuy]u[xy]=uxx+uyy=uv \underset{\mathbf u 프로젝션}{\left[\begin{array}{ll}{u_{x}} & { u_{y}}\end{array}\right]}\left[\begin{array}{l}{x} \\ {y}\end{array}\right]= u_{x} \cdot x + u_{y} \cdot y = \mathbf u \cdot \mathbf v

벡터를 기저의 선형결합을 통해 나타낼 수 있듯이, 벡터의 프로젝션의 길이 역시 비슷한 방식의 선형결합을 동원해서 나타낼 수 있다. 앞서 u\mathbf u가 표준화된 벡터라고 했다. 따라서 원래대로 돌려 놓으면 닷 프로덕트는 프로젝션된 지점까지의 벡터의 거리와 해당 벡터의 길이의 곱이 된다. 즉,

uv=uProjuv \mathbf u \cdot \mathbf v = \rVert \mathbf u \lVert \rVert \text{Proj}_{\mathbf u} \mathbf v \lVert

정의를 바꿔 약간 헷갈릴 수 있겠지만, 취지를 이해하는 데에는 큰 문제가 없을 것이다.

응용

Cosine 유사도

두 개의 벡터가 얼마나 유사한지를 나타내는 지표로 코사인 유사도라는 게 있다. 위에서 보듯이 두 개의 벡터(v,u\mathbf v, \mathbf u)가 이루는 각 θ\theta의 코사인 값은 다음과 같다.

cosθ=uvuv \cos \theta = \dfrac{\mathbf u \cdot \mathbf v}{\lVert \mathbf u \rVert \lVert \mathbf v \rVert}

두 벡터가 가까울수록 코사인 값이 1에 가깝게 될 것이고, 멀수록 -1에 가깝게 될 것이다.

초평면(hyperplane)

닷 프로덕트를 이해하고 있으면 기하학 문제를 쉽게 풀 수 있는 게 많다. 가장 좋은 예가 초평면이다. 예를 들어 3차원 공간에서 점 x0=(x10,x20,x30)\mathbf{x}^0 = (x_1^0, x_2^0, x_3^0)를 지나면서 벡터 p=(p1,p2,p3)\mathbf{p} = (p_1, p_2, p_3)에 수직인 평면을 찾고 있다고 하자. 복잡해보이지만 닷 프로덕트를 활용하면 쉽게 풀린다. 즉,

p(xx0)=0 \mathbf{p} \cdot (\mathbf{x} - \mathbf{x}^0) = 0

평면 x\mathbf xx0\mathbf{x}^0를 지나는 것은 분명하다. 이 평면이 p\mathbf{p}에 수직이라는 것은 두 벡터의 닷 프로덕트가 0이 되면 된다.

Jun Sok Huhh | 🏠lostineconomics.com


  1. 조금만 생각해보시라!
    vu=vProjvu=v(ucosθ) {\mathbf v} \cdot {\mathbf u} = \Vert \mathbf v \Vert \Vert {\rm Proj}_{\mathbf v} {\mathbf u} \Vert = \Vert \mathbf v \Vert (\Vert \mathbf u \Vert \cos\theta)
    그런데, v\mathbf vu\mathbf u로 프로젝션하면,
    uProjuv=u(vcosθ)=uv \Vert \mathbf u \Vert \Vert {\rm Proj}_{\mathbf u} {\mathbf v} \Vert = \Vert \mathbf u \Vert (\Vert \mathbf v \Vert \cos\theta) = {\mathbf u} \cdot {\mathbf v}
    간단히 말해서 닷프로덕트의 정의상 vu=uv{\mathbf v} \cdot {\mathbf u} = {\mathbf u} \cdot {\mathbf v}. ↩︎

  2. 여기를 참고 했다. ↩︎

  3. 보다 상세한 내용은 여기를 참고하라. ↩︎