티스토리 뷰

1. 벡터와 행렬

: 기계학습에서는 입력된 샘플을 특징 벡터로 표현한다. 벡터는 다음과 같이 로마자 소문자로 표기한다. 

$$x_1=\begin{bmatrix}5.1\\3.5\\1.4\\0.2\end{bmatrix}
x_2=\begin{bmatrix}4.9\\3.0\\1.4\\0.2\end{bmatrix}
... where \ x_1, x_2  \in R^4$$

이 벡터를 4차원의 벡터라고 이야기하며 다시말해 4차원 실수 공간상의 한 점이 된다.

 

행렬은 이런 벡터를 여러개 담을 수 있고, 굵은 글씨의 대문자로 표현한다.

$$X = \begin{bmatrix}5.1 & 3.5 & 1.4 & 0.2\\ 4.9 & 3.0 & 1.4 & 0.2\\  \vdots & \vdots & \vdots & \vdots \\ 5.9&3.0&5.4&2.3\end{bmatrix} , where \ X  \in R^{150*4}$$

가로를 행(row) 세로를 열(column)이라고 한다. i번째 행 j번째 열의 데이터를 이야기하려면 다음과 같이 표기한다.

$$x_{ij}$$

 

기계 학습에서 훈련집합을 담은 행렬을 설계행렬(design matrix)이라고 한다.

 

전치(transpose)를 통해 위에서 나타낸 X를 다음과 같이 나타낼 수 있다.

$$ X =  \begin{bmatrix}x_1^T \\x_2^T\\ \vdots \\x_{150}^T \end{bmatrix} $$

 

알아둬야 할 행렬들의 특수 구조는 정사각행렬, 대각행렬, 단위행렬, 대칭행렬, 상삼각행렬, 하삼각행렬 등이 있다.

 

행렬 연산

행렬간 덧셈 , 뺄셈 : 두 행렬의 크기가 완전히 동일한 경우에만 덧셈, 뺄셈이 가능

행렬과 스칼라 곱셈 : 행렬의 각 요소에 스칼라값을 곱하면 된다.

행렬과 행렬의 곱셈 : n*m 행렬은 반드시 m*p 크기의 행렬과 곱해야 한다. 이때 결과 행렬은 n*p 행렬이 된다.

행렬은 결합법칙과 분배법칙은 성립하지만 교환법칙은 성립하지 않는다.

벡터와 벡터의 곱을 벡터간 내적(dot product)라고 하며 scalar 값 하나가 나온다. 이때 두 벡터가 가까울수록 내적값은 커지며 두 벡터가 수직이면 내적값은 0이된다.

 

텐서

벡터를 여러개 담을수있는 구조가 행렬이라면 행렬을 여러개 담을 수 있는 3차원 구조부터는 n차원 텐서라고 부른다.

순서대로 스칼라, 벡터, 행렬, 3차원 텐서

 

 

2. 놈과 유사도

유사도 측정은 기계학습에서 상당히 중요한 연산들중 하나이다. 유사도를 사용하면 비슷한 성질의 샘플끼리 묶어 하나의 군집을 이루거나 분류 작업을 할 수 있다.

 

놈(norm)

스칼라값은 크기를 갖는다. 32는 20보다 크고, 12만큼 크다.

그러면 벡터도 크기를 갖는가? 벡터의 크기를 정의할 때 사용하는게 놈(norm)이다.

벡터의 크기를 나타내는 놈은 2차놈부터 무한차원의 놈으로 나타낼 수 있으며, 이를 p차놈이라 이야기하며 Lp놈이라한다.

예를들어 x = (3, -4, 1)일때 x의 L2놈은 다음과 같다.

$$\| x \| _2 = \sqrt{3^2 +(-4)^2 + 1^2} = 5.099$$

이를 일반화하면 다음과 같고

$$p차 \ norm: \|x\|_p =  \sum_{i=1,d} (|x|_i^p)^{\frac{1}{p}} $$

최대놈은 따로 다음으로 정의한다.

$$최대\ norm: \| x \| _ \infty  = max(|x_1|,|x_2|,...|x_d|)$$

 

길이가 1인 벡터를 단위벡터(unit vector)라고 한다.

단위벡터는 기계학습에서 종종사용된다. 어떤 임의 벡터 x를 단위벡터로 만들고싶으면 2차놈(벡터의 길이=크기)로 각 요소를 나눠주면된다.

예를들어 x = (3, -4, 1)일때 해당 벡터의 길이는 5.099라고 하였으므로, 각 요소를 5.099로 나눠주면 x의 단위벡터는 (0.588, -784, 0.196)이 된다.

이를 일반화 하면 단위벡터는 다음과 같다.

$$단위벡터:\frac{x}{ \| x \| _2}$$

 

행렬의 놈(프로베니우스 놈)

행렬 역시 놈으로 나타낼 수 있으나, 기계학습에서는 주로 프로베니우스 놈만을 이야기한다.

프로베니우스 놈은 모든 행렬 요소들의 제곱합의 제곱근이다. 예를들어 다음과 같고

$$A = \begin{bmatrix}2 & 1 \\6 & 4 \end{bmatrix} ,\   \| A \| _F = \sqrt{2^2 +1^2 +6^2 + 4^2} = 7.550$$

일반화하여 식으로 나타내면

$$프로베니우스\ 놈: \| A \| _F=(\sum_{i=1,n}\sum_{j=1,m}a_{ij}^2)^\frac{1}{2}$$

 

유사도

일반적으로, 두 벡터의 유사도 비교를 위해 벡터의 내적을 이용할수도 있다. 그러나 단순 내적만으로는 두 벡터의 유사도 비교에 충분하지 못하다. 따라서 방금 이야기한 단위벡터를 이용하여 두 벡터간의 유사도를 비교하면 더 정확한 유사도를 확인할 수 있는데 이것을 코사인 유사도(cosine similiarity)라고 한다.

$$cosine\ similarity(a,b) = \frac{a}{ \| a \|} . \frac{b}{ \| b \| }=cos( \theta )$$

이것을 코사인 유사도라 부르는 이유는 두 벡터가 이루는 각 θ의 코사인 값으로 두 벡터의 유사도가 정의되기 때문이다.

x와 x1, x2의 코사인 유사도를 직접 구해보자.

 

댓글