딥러닝을 위한 Norm, 노름

기계학습 자료에서 간혹 Norm과 관련된 수식이나 표기법을 나오면 당황스러울 때가 있습니다. 선형대수에 익숙하지 않다면 Norm이 이상하게 보일 수 있습니다. 본 문서에서는 인공신공망과 기계학습 일고리즘에서 사용되는 Norm을 이해하는 것을 목표로 최소한도의 Norm 개념을 정리합니다.

일반적으로 딥러닝에서 네트워크의 Overfitting(과적합) 문제를 해결하는 방법으로 다음과 같은 3가지 방법을 제시합니다.

  1. 더 많은 데이터를 사용할 것
  2. Cross Validation
  3. Regularization

더 이상 학습 데이터를 추가할 수 없거나 학습 데이터를 늘려도 과적합 문제가 해결되지 않을 때에는 3번 Regularization을 사용해야 합니다. Regularization에서는 Lose 함수를 다음과 같이 변형하여 사용합니다.

$$ cost(W, b) = \frac{1}{m}\sum_i^m{L(\hat{y^i}, y^i)} + \lambda\frac{1}{2}||w||^2 $$

위 수식은 기존 Cost 함수에 L2 Regularization을 위한 새로운 항을 추가한 변형된 형태의 Cost 함수입니다.

여기서 Weight의 Regularization을 위해서 Weight의 L2 Norm을 새로운 항으로 추가하고 있습니다. 딥러닝의 Regularization, kNN 알고리즘, kmean 알고리즘 등에서 L1 Norm/L2 Norm을 사용합니다.

Norm

Norm은 벡터의 길이 혹은 크기를 측정하는 방법(함수)입니다. Norm이 측정한 벡터의 크기는 원점에서 벡터 좌표까지의 거리 혹은 Magnitude라고 합니다.

$$ L_p = (\sum_i^n |x_i|^p)^{\frac{1}{p}} $$

  • p는 Lorm의 차수를 의미합니다. p가 1이면 L1 Norm이고 p가 2이면 L2 Norm입니다.
  • n은 대상 벡터의 요소 수입니다.

Norm은 각 요소별로 요소 절대값을 p번 곱한 값의 합을 p 제곱근한 값입니다.

주로 사용되는 Norm은 L1 Norm과 L2 Norm, Maxium norm입니다. 이 3 가지 Norm에 대하여 살펴보겠습니다.

L1 Norm

L1 Norm은 p가 1인 norm입니다. L1 Norm 공식은 다음과 같습니다.

$$ \begin{align} L_1 & = (\sum_i^n |x_i|) \\
& = |x_1| + |x_2| + |x_3| + …. + |x_n|
\end{align} $$

L1 Norm을 Taxicab Norm 혹은 맨허튼 노름(Manhattan norm) 이라고도 합니다. L1 norm은 벡터의 요소에 대한 절댓값의 합입니다. 요소의 값 변화를 정확하게 파악할 수 있습니다.

벡터 x의 L1 Norm은 다음과 같이 계산됩니다.

$$ \begin{align} x & = [1, 2, 3, 4, 5] \\
||x||_1 & = (|1| +|2| +|3| +|4| +|5|) \\
& = 15 \end{align} $$

L1 Norm은 다음과 같은 영역에서 사용됩니다.

  • L1 Regularization
  • Computer Vision

L2 Norm

L2 Norm은 p가 2인 Norm입니다. L2 Norm은 n 차원 좌표평면(유클리드 공간)에서의 벡터의 크기를 계산하기 때문에 유클리드 노름(Euclidean norm)이라고도 합니다. L2 Norm 공식은 다음과 같습니다.

$$ \begin{align} L_2 & = \sqrt {\sum_i^n x_i^2} \\
& = \sqrt {x_1^2 + x_2^2 + x_3^2 + …. + x_n^2} \end{align} $$

추가로 L2 Norm 공식은 다음과 같이 표현할 수 있습니다.

$$ \begin{align} L_2 & = \sqrt {\sum_i^n x_i^2} \\
& = \sqrt {x \cdot x} \\
& = \sqrt {x^Tx} \\
& = \sqrt {x_1*x_1 + x_2*x_2 + x_3*x_3 + …. + x_n*x_n} \end{align} $$

피타고라스 정리는 2차원 좌표 평면상의 최단 거리를 계산하는 L2 Norm입니다.

다음 벡터 x의 L2 Norm은 다음과 같이 계산됩니다.

$$ \begin{align} x & = [1, 2, 3, 4, 5] \\
||x||_2 & = \sqrt {(|1|^2+|2|^2+|3|^2+|4|^2+|5|^2) } \\
& = \sqrt {1+4+9+16+25 } \\
& = \sqrt {55} \\
& = 7.4161 \end{align} $$

L1 Norm은 다음과 같은 영역에서 사용됩니다.

  • L2 Regularization
  • kNN 알고리즘
  • kmean 알고리즘

Maxium Norm(상한 노름)

상한 노름은 p 값을 무한대로 보냈을 때의 Norm입니다. 벡터 성분의 최댓값을 구합니다.

$$ \begin{align} L_\infty & = max(|x_1|, |x_2|, |x_3|, …., |x_n|) \end{align} $$

L1 Norm은 각 요소 절댓값 크기의 합이고 L2 Norm은 해당 차원의 좌표평면에서 원점에서 벡터 좌표까지의 최단거리입니다.

좌표 공간에서 L1과 L2 Norm 시각화

$B = [\beta_0, \beta_1]$ 벡터가 있을 때, B 벡터의 L2 Norm이 1이라면 다음과 같이 표현할 수 있습니다.

$$ \begin{align} ||B||_2 & = 1 \\
& = \sqrt{\beta_0^2 + \beta_1^2} \end{align} $$

이 L2 Norm이 가능한 벡터는 다음과 같이 표현할 수 있습니다. 즉 벡터 B는 <그림 1>의 빨간색 원에 위치하게 됩니다. 이러한 원을 “Unit Circle“이라고 합니다.

유클리디안 공간(좌표 공간)에 표현한 B벡터의 $L_2 Norm$
그림 1: 유클리디안 공간(좌표 공간)에 표현한 B벡터의 $L_2 Norm$

B 벡터의 L1 Norm도 1이라면 다음과 같이 표현할 수 있습니다.

$$ \begin{align} ||B||_1 & = 1 \\
& = |\beta_0| + |\beta_1| \end{align} $$

이 L1 Norm이 가능한 벡터는 다음과 같이 표현할 수 있습니다. 즉 벡터 B는 <그림 2>의 빨간색 마름모 선 위에 위치하게 됩니다. 마름모 선은 $|\beta_0| + |\beta_1|==1$인 벡터의 모음입니다.

유클리디안 공간(좌표 공간)에 표현한 B벡터의 $L_1 Norm$
그림 2: 유클리디안 공간(좌표 공간)에 표현한 B벡터의 $L_1 Norm$

일반적으로 가장 많이 사용되는 Norm은 L2 Norm입니다. 따라서 $||B||$와 같은 차수가 생략된 표기는 L2 Norm을 의미합니다.

Python Norm 구현

numpy는 norm 기능을 제공합니다. Numpy를 이용하여 L1 Norm과 L2 Norm을 구하는 방법을 소개합니다. “numpy.linalg.norm” 함수를 이용하여 Norm을 차수에 맞게 바로 계산할 수 있습니다. 다음 예제에서는 3차원 벡터 5개를 포함하는 (5, 3) 행렬의 L1과 L2 Norm 계산 예제입니다 .

In 1:
import numpy as np
x = np.random.randint(low=1, high=10, size=(5, 3))
print(x)
[[8 6 9]
[9 4 4]
[5 6 9]
[6 7 7]
[2 9 3]]
In [2]:
L1_norm = np.linalg.norm(x, axis=1, ord=1)
print(L1_norm)
print(“shape:“,  L1_norm.shape)
[ 23.  17.  20.  20.  14.]
shape: (5,)
  • np.linalg.norm(x, ord=None, axis=None, keepdims=False)
    • x: vector
    • ord: 차수
    • axis: 연산 방향 (0, 1)
    • keepdims: 출력을 x와 동일한 차원(dim) 유지
In [3]:
L2_norm = np.linalg.norm(x, axis=1, ord=2)
print( L2_norm)
print(“shape:“, L2_norm.shape)
[ 13.45362405  10.63014581  11.91637529  11.5758369    9.69535971]
shape: (5,)

참고자료

김태완 avatar
작성자: 김태완
1999년 부터 Java, Framework, Middleware, SOA, DB Replication, Cache, CEP, NoSQL, Big Data, Cloud를 키워드로 살아왔습니다. 현재는 빅데이터와 Machine Learning을 중점에 두고 있습니다.
E-mail: taewanme@gmail.com