[선형대수] 07. 내적과 norm
내적, norm, 코사인 유사도
1. 내적¶
내적의 개념¶
벡터 공간의 설명에서 언급했듯이 내적(inner product)이 주어진 벡터 공간을 내적 공간(inner product space)이라고 부르는데, 벡터의 내적(inner product)은 벡터를 방향이 일치하는 만큼만 곱한다는 뜻으로 아래와 같이 표기한다.
벡터의 내적을 Python으로 구현하면 아래와 같다. 하우스홀더 행렬 공식에서 이미 구현한 바 있다.
내적의 성질¶
내적을 사용하면 벡터 사이의 각도를 추정할 수 있다. 벡터의 내적과 벡터 사이의 각도의 관계는 아래와 같다.
- 내적 > 0 이면, 두 벡터 사이의 각도는 90°보다 작다.
- 내적 < 0 이면, 두 벡터 사이의 각도는 90°보다 크다.
- 내적 = 0 이면, 두 벡터 사이의 각도는 90°와 같다.
2. 노름(norm)¶
노름(norm)은 벡터의 크기 또는 길이를 말하며 \(\Vert \textbf{v} \Vert\)로 표기한다. 내적이 정의되면 노름(norm)은 자기 자신의 내적(inner product)의 제곱근으로 정의할 수 있다.
Warning
그러나 노름(norm)이 있다고 해서 그에 자연스럽게 대응되는 내적이 항상 존재하는 것은 아니다.
벡터 \(\textbf{v}\)의 \(p\)차 노름(norm)은 아래와 같이 정의된다.
Euclidean norm¶
노름(norm)의 정의에서 \(p = 2\)이면 \(l_{2}\) 노름(norm), 또는 유클리드 노름(Euclidean norm)이라고 부른다. 유클리드 노름(Euclidean norm)은 거리 개념에서 일반적으로 많이 사용하는 점과 점 사이의 직선거리를 말하며 구하는 방법은 아래와 같다.
유클리드 노름(Euclidean norm)은 머신러닝/통계학에서는 \(l_{2}\) 정규화(L2 Regularization)에 사용되며, 유클리드 노름(Euclidean norm)을 구하는 함수를 Python으로 구현하면 아래와 같다.
\(l_{2}\) 노름(norm)과 두 벡터 사이의 각도 \(\theta\)를 사용해 내적을 다음과 같이 표현할 수 있다.
Manhattan norm¶
노름(norm)의 정의에서 \(p = 1\)이면 \(l_{1}\) 노름(norm), 또는 맨해튼 노름(Manhattan norm)이라고 부른다. 택시 노름(Taxicab norm)이라고 부르기도 한다. 맨해튼 노름(Manhattan norm)을 구하는 방법은 아래와 같다.
맨해튼 노름(Manhattan norm)은 머신러닝/통계학에서는 \(l_{1}\) 정규화(L1 Regularization)에 사용되며, 맨해튼 노름(Manhattan norm)을 구하는 함수를 Python으로 구현하면 아래와 같다.
Maximum norm¶
\(p\)차 노름(norm)의 정의에서 p가 무한대로 가면, 그 값이 해당 벡터의 원소 중 가장 큰 값에 수렴하며 이를 최대값 노름(Maximum norm), 또는 상한 노름이라고 부른다.
3. 코사인 유사도¶
코사인 유사도(cosine similarity)는 내적 공간의 두 벡터 간의 유사한 정도를 벡터 간 각도의 코사인 값을 이용하여 측정한 것을 의미하는데, 노름(norm)을 통해 정리하면 코사인 유사도(cosine similarity)를 다음과 같이 유도할 수 있다.
코사인 유사도는 벡터의 크기를 제외한 방향의 유사도를 판단하는 목적으로 사용된다. 코사인 유사도와 각도의 관계는 아래와 같다.
- \(S_{c}(\textbf{u}, \textbf{v}) = 1\) 일 때, 두 벡터의 방향이 같다.
- \(S_{c}(\textbf{u}, \textbf{v}) = 0\) 일 때, 두 벡터의 각은 90°
- \(S_{c}(\textbf{u}, \textbf{v}) = -1\) 일 때, 두 벡터의 각은 180°
코사인 유사도를 구하는 함수를 Python으로 구현하면 아래와 같다.