본문 바로가기
ML & DL/Study

[선형대수] Norm (노름)

by 별준 2022. 5. 13.

References

Contents

  • \(L^1, L^2\) Norm
  • Frobenius Norm

Norm

벡터의 크기를 측정해야 할 때가 종종 있습니다. 일반적으로 머신러닝에서 벡터의 크기는 노름(norm)이라고 부르는 함수를 이용하여 측정합니다. \(L^p\)로 표기하는 노름의 정의는 다음과 같습니다.

\[\left \| \boldsymbol{x} \right \|_p = (\sum_{i} |x_i|^p)^{\frac{1}{p}}\]

여기서 \(p \in \mathbb{R}, p \geq 1\)입니다.

 

일반적으로 노름은 벡터를 음이 아닌 값으로 사상(mapping)하는 함수입니다. 직관적으로 살펴보면, 벡터 \(\boldsymbol{x}\)의 노름은 원점에서 점 \(\boldsymbol{x}\)까지의 거리입니다. 좀 더 엄밀하게 정의하면, 노름은 아래의 성질들을 만족하는 임의의 함수 \(f\)입니다.

  • \(f(\boldsymbol{x}) = 0 \Rightarrow \boldsymbol{x} = 0\)
  • \(f(\boldsymbol{x + y}) \leq f(\boldsymbol{x}) + f(\boldsymbol{y})\) (triangle inequality; 삼각부등식)
  • \(\forall \alpha \in \mathbb{R}, f(\alpha \boldsymbol{x}) = |\alpha|f(\boldsymbol{x})\)

p=2인 \(L^2\) 노름을 유클리드 노름(Euclidean norm)이라고 합니다. 유클리드 노름은 그냥 원점에서 \(\boldsymbol{x}\)에 해당하는 점까지의 유클리드 거리입니다. \(L^2\) 노름은 머신러닝에서 아주 자주 쓰이기 때문에 보통 위 첨자 2를 생략하고 이중 수직선을 사용하여 간단하게 \(\left \| x \right \|\)로 표기하는 경우가 많습니다. 또한, 주어진 벡터의 크기를 제곱한 제곱(squared) \(L^2\) 노름으로 측정하는 경우도 흔합니다. 제곱 \(L^2\) 노름은 간단히 \(\boldsymbol{x}^{\top} \boldsymbol{x}\)로 계산할 수 있습니다.

 

\(L^2\) 노름보다 제곱 \(L^2\) 노름이 수학적으로나 계산에서나 다루기 편합니다. 예를 들어 \(\boldsymbol{x}\)의 각 성분에 대한 제곱 \(L^2\) 노름의 각 미분(도함수, derivative)은 오직 \(\boldsymbol{x}\)의 해당 성분에만 의존하지만, \(L^2\) 노름의 모든 미분은 벡터 전체에 의존합니다.

 

많은 경우에 제곱 \(L^2\) 노름은 원점 부근에서 아주 느리게 증가하기 때문에 바람직하지 않습니다. 여러 머신러닝 어플리케이션에서는 정확히 0인 요소와 0은 아니지만 작은 요소를 구분하는 것이 중요합니다. 이러한 경우에는 수학적인 단순함을 유지하면서도 모든 공간(location)에서 같은 비율로 증가하는 또 다른 노름 함수를 사용합니다. 바로 \(L^1\) 노름인데, 이를 간단히 정의하면 다음과 같습니다.

\[\left \| x \right \|_1 = \sum_{i}|x_i|\]

\(L^1\) 노름은 0과 0이 아닌 요소의 차이가 아주 중요한 머신러닝 어플리케이션에서 흔히 사용됩니다. \(\boldsymbol{x}\)의 한 성분이 0에서 \(\epsilon\)만큼 멀어질 때마다 \(L^1\) 노름은 \(\epsilon\)만큼 증가합니다.

 

0이 아닌 성분의 개수를 벡터의 크기로 사용할 때도 있습니다. 그런 함수는 \(L^0\) 노름이라고 부르기도 하는데 이는 정확하지 않은 이름입니다. 벡터를 \(\alpha\)를 곱해도 0이 아닌 성분의 개수는 변하지 않는다는 점을 생각하면, 벡터에서 0이 아닌 성분의 개수를 노름이라고 할 수 없습니다. 따라서 0이 아닌 성분들의 개수 대신 \(L^1\) 노름을 벡터의 크기로 사용하는 경우가 많습니다.

 

머신러닝에서 흔히 사용되는 또 다른 노름은 \(L^\infty\) 노름이 있습니다. 이를 최대 노름(max norm)이라고 부르기도 합니다. 이는 벡터에서 크기가 가장 큰 성분의 절댓값입니다.

\[\left \| x \right \| _\infty = \underset{i}{\text{max}} |x_i|\]

 

또한, 행렬의 크기를 구해야할 때도 있는데, 딥러닝에서 행렬 크기를 구할 때 자주 사용되는 노름은 프로베니우스 노름(Frobenius norm)입니다.

\[\left \| A \right \|_F = \sqrt{\sum_{i, j} A^{2}_{i, j}}\]

이 노름은 벡터의 \(L^2\) 노름과 유사합니다.

 

 

두 벡터의 내적을 노름으로 다음과 같이 표현할 수도 있습니다.

\[\boldsymbol{x}^\top \boldsymbol{y} = \left \| x \right \|_2 \left \| y \right \|_2 cos \theta\]

여기서 \(\theta\)는 두 벡터 사이의 각도입니다.

댓글