더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

AI/AI 수학

[빠르게 정리하는 선형대수] 벡터(Vector)의 정의와 Inner Product(내적) 정리

  • -

 

AI에서 주로 사용하는 기본적인 자료구조인 vector에 관해 알아보고, vector를 이해하는 데 필요한 norm, inner product, orthogonal 등 여러 개념을 살펴보고자 한다.

 

 

벡터(Vector)의 정의

 

Vector_example.svg

 

벡터는 다음과 같이 다양하게 정의할 수 있다.

 

  • 크기(길이)와 방향을 가지는 직선
  • 벡터 공간(Vector Space)을 이루는 원소
  • 공간에서의 한 점
  • 원점으로부터의 상대적 위치
  • 수를 원소로 가지는 리스트 또는 배열

 

종합하면 벡터는 수를 원소로 가지는 list 또는 array를 의미하며, $n$차원 공간에서의 한 점을 의미한다. 이 때 점은 원점으로부터의 상대적 위치를 의미한다.

 

numpy에서는 보통 행벡터로 값을 처리한다. Vector의 element는 $[x_1, x_2, ..., x_d]$로 표현된다.

 

벡터는 표현 방식에 따라 두 가지로 분류할 수 있다.

  • 행벡터(횡벡터): 벡터의 원소를 가로로 나열하여 표현
  • 열벡터(종벡터): 벡터의 원소를 세로로 나열하여 표현

 

 

 

벡터의 연산(Vector Operation)

 

벡터의 덧셈과 뺄셈

 

같은 차원을 지닌 둘 이상의 벡터에서 서로 대응하는 성분끼리 덧셈 또는 뺄셈이 가능하다. 즉, Shape이 같은 Vector간에는 동일한 위치의 element간의 연산이 일어난다. 다른 벡터로부터의 상대적인 이동으로 나타낼 수도 있다. 또한 더하는 벡터의 방향을 반대로 하면 뺄셈으로 연산할 수 있다.

 

 

벡터의 scalar 배

 

벡터의 모든 성분에 scalar 성분의 같은 수를 곱하는 것이다. 벡터에 수를 곱하면 후술할 벡터의 길이가 변한다. 즉, 벡터(Vector)와 스칼라(Scalar) 연산을 하면 원점으로부터의 이동에 길이 변화가 생긴다.

 

 

응용 예시

 

NLP에서 언어를 처리하기 위해 단어를 벡터로 취급할 수도 있다. 벡터 연산처럼 단어도 덧셈과 뺄셈 연산을 가능하도록 한다.

예) '수도' + '미국' = '워싱턴 D.C.'

 

 

 

Norm

 

Norm의 정의

 

벡터를 어떠한 좌표계에서의 좌표로 해석하면 원점으로부터의 거리를 의미한다고 볼 수 있지만, 일반적으로는 벡터의 길이를 나타내는 개념이다. 기호로는 $\|x\|$로 표시하며, 수학적으로 정의하면 다음과 같다.

 

Vector space $V$의 norm은 $V \mapsto \mathbb{R}$인 함수이며, $\lambda \in \mathbb{R}$에 관해 다음과 같은 조건을 만족한다.

(1) Absolutely homogeneous: $\| \lambda x \| = |\lambda| \| x \|$

(2) Triangle inequality: $\| x + y \| \leq \| x \| + \| y \|$

(3) Positive definite: $\| x \| \geq 0$ and $\| x \| = 0 \Longleftrightarrow x = 0$

 

(1)번의 absolutely homogeneous는 어떤 vector $x$에 scalar를 곱해서 norm을 구하든 norm을 먼저 구하고 scalar를 곱하든 결과가 같음을 의미한다.

(2)번의 triangle inequality는 고등학교 수학에서 등장하는 삼각부등식이다. 삼각형의 가장 긴 변의 길이는 다른 두 변의 길이의 합보다는 클 수 없다는 성질과 유사하다.

(3)번의 positive definite는 norm은 음수가 될 수 없으며, norm이 0인 경우는 영벡터인 경우 밖에 없다는 것이다.

 

위의 정의를 만족한다면 vector에 관한 어떠한 식이든 norm이 될 수 있다. 개인적으로 norm은 후술할 L1 norm과 L2 norm 정도만 되는 줄 알았는데, 이것들 말고도 위의 정의만 만족한다면 무엇이든 norm이 될 수 있는 것이다. 일반적으로 많이 사용하는 norm이 L1 norm과 L2 norm인 것일 뿐이다. 단, 그 norm의 식을 어떻게 정의하는지에 따라서 기하학적 성질이나 표현이 달라진다.

 

[출처] https://commons.wikimedia.org/wiki/File:L1_and_L2_balls.svg, Nicoguaro

 

 

Norm의 종류

 

L1 Norm (Manhattan Norm)

 

$\|\mathbf{x}\|_1 = \sum_{i=1}^{d}{|x_i|}$

 

  • 각 성분의 변화량의 절댓값을 모두 더한다.
  • 맨해튼의 직사각형의 블록 단위로 나누어진 구획의 이동 거리를 계산하는 것과 유사하여 맨해튼 거리라고도 불린다.
  • Robust 학습과 Lasso 회귀(Lasso Regression)에 사용된다.

 

 

L2 Norm (Euclidean Norm)

 

$ ||\mathbf{x}||_2 = \sqrt{\sum_{i=1}^{d}{x_{i}^2}}  = \sqrt{x^{\intercal} x}$

 

  • 피타고라스 정리로 유클리드 거리를 계산한다.
  • 시작점에서 끝점까지 직선으로 움직인 거리를 의미한다.
  • Laplace 근사와 Ridge 회귀(Ridge Regression)에 사용된다.
  • 정규화항을 더하여 계수의 절댓값이나 제곱한 값이 커지지 않도록 만들어줄 때 유용하다.

 

 

 

내적(Inner Product)

 

앞서 살펴본 vector의 길이에 관한 개념은 정의했지만, 어떤 abstract vector space에 존재하는 두 벡터 사이의 각도와 거리를 정의하기 위한 개념이 필요하다. 이를 해결하기 위해 inner product라는 개념을 정의하고자 한다. 개인적으로 'inner product = dot product'라고만 알고 있었는데, 실제로 dot product는 단지 자주 쓰이는 inner product의 한 종류일 뿐, 엄밀히는 두 개념을 같다고 볼 수 없다. 즉, dot product는 inner product에 포함되는 개념이다. 그러나 일반적으로는 이에 관한 별도의 설명이 없으면 dot product를 inner product와 같다고 취급하기도 한다.

Inner product에서 유의해야 할 점은 inner product의 두 input은 vector이지만 그 결과값은 scalar라는 것이다.

 

 

Dot Product

 

Dot product는 우리가 익히 알고 있는 식이며, $\mathbb{R}^n$에서 정의되는 dot product는 다음과 같이 쓸 수 있다.

$x^{\intercal} y = \sum_{i=1}^n x_i y_i$

 

 

Inner Product

 

그러면 이제 inner product가 무엇인지를 알아보자. Inner product의 엄밀한 정의는 bilinear mapping으로 표현되는데, 이 bilinear mapping이 무엇인지에 관한 정의를 알아야 한다.

 

Bilinear Mapping

 

Vector space $V$와 $\Omega: V \times V \rightarrow \mathbb{R}$인 bilinear mapping가 존재한다고 가정하자. 여기서 bilinear mapping은 두 개의 argument를 받으면서 각각의 argument에 관해 linear한 mapping을 뜻한다. 즉, 두 개의 vector를 받아서 이를 real number로 mapping 한다. 수학적으로는 다음과 같이 정의한다.

 

$\forall x, y, z \in V$에 관하여, $\lambda \in \mathbb{R}$일 때,

(1) $\Omega(\lambda x + \psi y, z) = \lambda \Omega(x, z) + \psi \Omega(y, z)$

(2) $\Omega(x, \lambda y + \psi z) = \lambda \Omega(x, y) + \psi \Omega(x, z)$

 

 

Inner Product의 정의

 

그러면 이러한 bilinear mapping인 $\Omega$가 다음과 같은 조건을 만족할 때 $\Omega$를 inner product라고 한다.

 

(1) $\forall x, y \in V$에 관해, $\Omega(x, y) = \Omega(y, x)$를 만족한다. 이를 symmetric하다고 한다.

(2) $\forall x \in V \setminus {0}$에 관해, $\Omega(x, x) \ge 0$을 만족하고, 영벡터에 관해서는 $\Omega(0, 0) = 0$를 만족한다. 이를 positive definite이라고 한다.

 

 

그런데 bilinear mapping의 관점에서 해석하면 이해하기가 어려울 수 있다. 그래서 bilinear mapping인 $\Omega$를 $\langle \cdot, \cdot \rangle$으로 다시 써서 표현하면 다음과 같이 정리할 수 있다.

 

$\forall x, y, z \in V$에 관하여, $\lambda \in \mathbb{R}$일 때,

(1) $\langle u + v, w \rangle = \langle u, w \rangle + \langle v, w \rangle$

(2) $\langle \lambda v, w \rangle = \lambda \langle v, w \rangle$

(3) $\langle v, w \rangle = \langle w, v \rangle$

(4) $\langle v, v \rangle \ge 0$인데, $v = 0$일 때만 등호가 성립한다.

 

(1)번과 (2)번은 bilinear mapping을 풀어 쓴 것이고, (3)번과 (4)번은 각각 앞서 확인했던 symmetric과 positive definite 성질을 그대로 적은 것이다.

그러면 pair인 $(V, \langle \cdot, \cdot \rangle)$은 inner product space(vector space with inner product)이며, 만약 inner product인 $\langle \cdot, \cdot \rangle$이 dot product이면  $(V, \langle \cdot, \cdot \rangle)$를 Euclidean vector space라고 한다.

 

앞서 말한 바처럼 dot product만이 inner product인 것은 아니다. $V = \mathbb{R}^2$에 관하여 정의되는 $\langle x, y \rangle = x_1 y_1 - (x_1 y_2 + x_2 y_1) + 2 x_2 y_2$도 inner product이다. 왜 inner product인지는 과연 inner product의 정의에서 나오는 네 가지 조건을 모두 만족하는지를 확인하면 알 수 있다.

 

 

Inner Product와 길이의 관계

 

$\| x \| = \sqrt{\langle x , x \rangle}$

 

본질적으로 inner product는 위와 같이 정의함으로써 norm을 유도하게 된다. 이는 기본적으로 norm과 inner product의 정의에서 positive definite 조건을 지니고 있다는 사실을 파악하면 직관적으로 이해 가능하다. 그러나 모든 norm이 inner product로부터 유도되는 것은 아닌데, 대표적인 예로 앞서 살펴본 L1 Norm이 해당된다. 

 

 

$| \langle x, y \rangle | \le \| x \| \| y \|$

 

더 나아가 inner product로부터 유도된 norm은 위의 Cauchy-Schwarz inequality를 만족한다. 그렇지만 inner product로부터 유도된 norm이 아니면 성립하지 않을 수도 있다.

 

다음은 서로 다른 inner product에 의해 유도된 norm이 어떻게 달라질 수 있는지를 확인하는 예제이다.

 

 

 

 

Inner Product와 두 벡터의 유사도

 

Inner Product와 정사영(Projection)

 

 

 

정사영(orthogonal projection)된 Vector의 길이와도 관련이 있는데, 벡터 $\mathbf{x}$를 $\mathbf{y}$에 정사영된 $Proj(\mathbf{x})$는 코사인 법칙에 의해 $||\mathbf{x}||\cos\theta$와 동일하게 된다. $Proj(\mathbf{x})$를 $||\mathbf{y}||$만큼 조정한 값을 의미한다. 이를 통해 유사도를 측정하는데 사용할 수도 있다.

 

 

Inner Product와 코사인 유사도(Cosine Similarity)

 

벡터의 inner product를 사용한 코사인 유사도를 통해 두 벡터의 유사도를 구할 수 있다.

 

 

$$ \cos{(a, b)} = \frac{\langle a, b\rangle} {\|a\| \|b\|} $$

 

코사인 유사도는 항상 -1 이상 1 이하의 값을 지니며, 두 벡터의 코사인 유사도가 높다는 건 두 벡터의 서로 유사하다는 의미이다. 그래서 NLP에서는 텍스트 분석 시 벡터 기반의 단어 또는 문장 간의 관계성을 파악하는 데 활용할 수 있다.

 

 

Inner Product와 Numpy

 

numpy 패키지에서 inner product 중 dot product는 np.inner함수로 구현할 수 있으며, 이를 코드로 옮기면 다음과 같다.

 

def angle(x, y) :
  v = np.inner(x, y) / (l2_norm(x) * l2_norm(y))
  theta = np.arccos(v)
  return theta

 

 

 

 

벡터 사이의 거리(Distance)

 

두 벡터 사이의 거리는 norm을 사용하여 다음과 같이 유도할 수 있다.

 

$d(x,y) = \| x - y ||  = \sqrt{\langle x - y, x - y \rangle}$

 

만약에 dot product가 $\mathbb{R}^n$ 공간에서 norm을 유도하는 inner product로 사용되었으면 이를 Euclidean distance 또는 L2 distnace라고 한다.

그러나 앞서 norm처럼 distance도 반드시 inner product에서 유도되어야 하는 것만은 아니다. 즉, distance를 유도한 norm이 L1 norm처럼 inner product에서 유도되지 않았을 수도 있다. 

일반적으로 다음과 같은 조건을 만족할 때 distance의 개념으로 적합하다고 할 수 있으며, 이를 metric이라고 부른다.

 

(1) Positive definite: $\forall x, y$에 관하여 $d(x, y) \ge 0$이고 $d(x, y) = 0 \longleftrightarrow x = y$이다.

(2) Symmetric: $d(x, y) = d(y ,x)$

(3) Triangle inequality: $d(x, z) \le d(x, y) + d(y, z)$

 

조건들을 살펴볼 때 symmetric을 제외하면 norm의 정의에서의 조건과 유사하다는 걸 눈치챌 수 있다.

첫 번째 성질은 distance가 음수일 수 없음을 의미한다.

두 번째 성질은 두 벡터의 차의 순서가 그 두 벡터의 거리를 계산하는 데 영향을 끼치지 않는다는 것이며, 수식으로 표현하면 다음과 같다.

 

$$ \|x - y\| = \|y - x\| $$

 

세 번쨰 성질은 norm의 triangle inequality와 유사하다고 볼 수 있다.

참고로 L1 norm 또는 L2 norm을 이용하여 백터의 뺄셈을 사용해 두 벡터 사이의 거리를 계산할 수 있다. 그리고 두 Vector $x$와 $y$의 거리는 $\text{Zero Vector}$와 $x−y$의 거리와 동일하다.

 

 

 

 

벡터 사이의 각도(Angle)

 

 

각도의 정의

 

앞서 inner product로부터 길이(norm)와 두 벡터 사이의 거리(distance)를 유도할 수 있다고 했는데, 이뿐만이 아니라 두 벡터 사이의 각도(angle)도 inner product로부터 유도할 수 있다. 위에서 inner product와 norm 간의 관계를 설명할 때, Cauchy-Schwarz inequality를 설명했다. 그 식을 풀어서 쓰면 다음과 같이 정리할 수 있다.

 

$$-1 \le \frac{\langle x, y \rangle}{\| x \| \| y \|} \le 1$$

 

그러면 아래의 식을 만족하는 $\omega \in [0, \phi]$가 존재한다.

 

$$\cos \omega = \frac{\langle x, y \rangle}{\| x \| \| y \|}$$

 

이때 우리는 이 $\omega$를 $x$와 $y$ 벡터 사이의 각도로 정의할 수 있다.

 

 

Orthogonal과 Orthonormal

 

앞서 정의한 각도의 정의에서 분자에 inner product $\langle x, y \rangle$이 존재하는 걸 확인했다. 만약에 $\langle x, y \rangle = 0$이면, 다시 말해 두 벡터 $x, y$의 각도가 $\phi / 2$이면, 우리는 이 두 벡터가 orthogonal하다고 정의한다. 게다가, 만약 두 벡터 $x, y$의 크기가 1이라면 ,다시 말해 $\| x \| = \| y \| = 1$이면, 그들은 orthonormal하다고 말한다.

 

여기서 주목해야 할 사실은 orthogonality가 inner product에 의해 결정된다는 사실이다. 그러므로 만약에 dot product처럼 어떤 한 inner product에서는 orthogonal한 두 벡터가 다른 inner product를 통해 각도를 정의하면 두 벡터가 orthogonal하지 않을 수 있다.

 

 

 

 

각도와 코사인 법칙

 

 

제2 코사인 법칙을 통해 각도도 구할 수 있는데, 각도는 오직 L2 Norm을 통해서만 구할 수 있다. 수식은 다음과 같다.

 

 

$$ cosθ=\frac{\|x\|_2^2+\|y\|_2^2−\|x−y\|_2^2}{2\|x\|_2\|y\|_2} $$

 

 

위 수식으로부터 분자를 쉽게 계산하는 방법은 내적이다. 이를 이용하면 다음과 같이 정리할 수 있다.

 

$$ cosθ=\frac{\langle x,y\rangle}{\|x\|_2\|y\|_2} $$

 

$\langle x,y\rangle$는 각 Vector의 내적의 표현으로 $∑^d_{i=1}x^iy^i$와 동일하다.

즉, 코사인 법칙의 분자를 쉽게 구할 수 있는 방법이 바로 벡터의 inner product이다.

 

 

 

출처
1. 네이버 부스트캠프 AI Tech Stage 1 수학 기초 강의
2. Mathematics for Machine Learning, Cambridge University Press, Marc Peter Deisenroth
Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.