[개발자를 위한 실전 선형대수학] 5.1 행렬 노름, 5.2 행렬 공간

[chapter5] 행렬, 파트 2 : 행렬의 확장 개념

1. 행렬 노름

단 하나의 행렬 노름은 없으며, 행렬은 여러 개의 서로 다른 노름을 가진다.

각 행렬 노름은 행렬을 특징짓는 하나의 숫자라는 점에서 벡터 노름과 유사하다.

행렬 노름은 크게 원소별(또는 항목별) 계열과 유도(induced) 계열로 나뉜다.

  • 원소별 노름 : 행렬의 개별 원소를 기반으로 계산되므로 행렬의 원소의 크기를 반영해서 해석된다.
  • 유도별 노름 : 행렬은 벡터를 변환하는 기능이 있는데, 이 변환으로 인해 벡터의 크기(노름)가 얼마나 조정되는지에 대한 측정치

유클리드 노름(프로베니우스 노름)

벡터 노름을 그대로 행렬에 확장한 것으로, 모든 행렬 원소의 제곱합의 제곱근으로 계산된다.

$$\left\| A\right\|_F = \sqrt{\sum_{i=1}^{M}\sum_{j=1}^{N} a_{ij}^2}$$

여기서 인덱스 i, j는 각각 M행과 N열에 해당된다.(아래첨자 F = 프로베니우스 노름)

프로베니우스 노름은 l2 노름이라고도 하는데, l2 노름은 원소별 p-노름에 대한 일반 공식(p=2일 때 프로베니우스 노름)에서 이름을 딴 것이다.

😓 p-노름 with ChatGPT

여기서 p-노름이 이해가 잘 안가서, ChatGPT랑 열심히 공부했다.

p-노름은 벡터 길이를 재는 일반 공식으로, 식은 아래와 같다.

$$  \left\| x\right\|_p = (\left | x_1\right |^p + \left | x_2\right |^p + \cdots + \left | x_n\right |^p)^{1/p} $$

그동안 알던 유클리드 거리(피타고라스 거리) 기반 노름은 p=2일때에 해당한다.

  • p=1
    • 맨해튼 거리 기반 노름
    • 단위 원이 마름모
  • p=2
    • 유클리드 거리 기반 노름
    • 유클리드 기하학에서는 이게 기본 거리.
    • 단위 원이 원(circle)
  • p=무한
    • 최대 성분 기반 노름
    • 단위 원이 정사각형(square)
    • 좌표 중 가장 큰 움직임 하나로 결정되는 노름

여기서 p는 단위 원의 모양을 조절하는 파라미터로, p에 따라 거리 측정 방식이 달라진다.

각각 머신러닝 등 문제의 성격에 따라 가장 잘맞는 노름을 선택해서 사용한다.

위에서 공부했던 프로베니우스 노름은 행렬에 있는 모든 원소를 하나의 큰 벡터처럼 만들어서 L2 노름을 구한 것이다.

예를 들면 아래 식과 같다.

$$ A = \begin{pmatrix}1 & 2 \\3 & 4 \\\end{pmatrix} $$

$$ \left\| A\right\|_F = \sqrt{1^2 + 2^2 + 3^2 + 4^2} $$

행렬의 대각합

행렬의 대각합(trace)은 대각 원소의 합이며 $tr(A)$로 나타낸다. 그리고 정방 행렬에 대해서만 존재한다.

행렬의 대각합은 행렬의 고윳값의 합과 같고, 결국 행렬의 고유공간(eigenspace)의 '부피'에 대한 측정치가 된다.

프로베니우스 노름은 어떤 행렬의 전치와 그 행렬을 곱한 결과의 대각합의 제곱근으로 계산할 수 있다.

왜냐하면 행렬 $A^TA$의 각 대각 원소는 동일한 행에 대한 내적이기 때문이다.

$$ \left\| A\right\|_F = \sqrt{\sum_{i=1}^{M}\sum_{j=1}^{N} a_{ij}^2} = \sqrt{tr(A^TA)} $$

즉, 정리하자면 아래와 같다.(내가 헷갈려서 정리)

  • $A^TA$는 행렬 A의 전치와 A의 곱이다. 
    • A의 i번째 행이 A의 전치의 i번째 열이 된다.
    • 따라서 행렬 A의 전치와 A를 곱하면 A의 i번째 행이 자기 자신과 내적을 구하는 것이 된다.
    • 즉 $A^TA$의 대각선 원소들은 A의 i번째 행의 모든 원소 제곱의 합이 된다.
    • 이 대각선 원소를 모두 더하는 것 = 모든 원소를 제곱해서 합하는 것 = 프로베니우스 노름

2. 행렬 공간

열공간

먼저 행렬을 열벡터의 집합으로 간주한다. 그리고 무한한 실수 스칼라를 적용한다.

이렇게 무한 개의 스칼라로 벡터 집합을 무한히 결합하여 생성된 무한 벡터 집합을 행렬의 열공간이라고 한다.

$$  C\left ( \begin{bmatrix}1 \\3 \end{bmatrix} \right ) = \lambda \begin{bmatrix}1 \\3 \end{bmatrix}, \lambda \in R$$

이 수식을 풀어 말하자면, 열공간은 열벡터 [1 3]의 크기를 변경해서 만들 수 있는 모든 벡터들의 집합을 뜻한다.

하나의 열을 가진 행렬의 열공간은 아래 그림과 같이 열벡터 방향으로 원점을 통과하는 선으로 표현될 수 있다.

p.111

두 개의 열이 있을 때를 보면,

$$C(\begin{bmatrix}1 & 2 \\3 & 6 \\\end{bmatrix})= \lambda _1\begin{bmatrix}1 \\3\end{bmatrix} + \lambda _2 \begin{bmatrix}2 \\6\end{bmatrix}, \lambda \in R$$

여기서 두 열 벡터의 선형 결합으로 생성할 수 있는 모든 벡터들의 집합은 $R^2$의 모든 벡터이다.

즉 행렬의 열공간은 축 전체로, 2차원이다.

이 때 행렬에 N개의 열이 있다고 해서 열공간이 무조건 N차원은 것은 아니고, 열공간의 차원 수는 열들이 선형 독립 집합을 형성하는 경우에만 열 수와 같다.

다음 3차원일 때를 살펴보면,

$$ C(\begin{bmatrix}3 & 0 \\5 & 2 \\1 & 2 \\
\end{bmatrix})= \lambda _1\begin{bmatrix}3 \\5 \\1\end{bmatrix} + \lambda _2\begin{bmatrix}0 \\2 \\2\end{bmatrix} , \lambda \in R $$

두 열은 선형적으로 독립이기 때문에 열공간은 2차원이다. 

그리고 열벡터가 3차원이기 때문에 3차원에 아래 그림처럼 표시된다.

벡터가 행렬의 열공간에 있는지 여부를 확인하기 위해서는 행렬 계수 개념을 사용한다.(뒤에서 설명한다고 함)

행공간

행렬의 행공간은 열공간과 완전히 동일한 개념이고, 단지 열 대신 행으로 모든 가중 결합을 다룬다.

$R(A)$로 나타내며, 전치된 행렬의 열공간으로 쓸 수도 있다.

$$ R(A) = C(A^T)$$

행공간이 전치된 행렬의 열공간과 같기 때문에 이 두 행렬 공간은 대칭 행렬일 때 동일하다.

영공간

영공간은 아래 식으로 표현할 수 있다.

$$ Ax = 0$$

이 식에서 A의 열의 가중 결합이 영벡터가 되는 어떤 가중치의 집합 x가 바로 영공간이다. 

이때 $x=0$이라는 자명한 답은 제외한다.

영공간은 $N(A)$로 나타낸다.

$$ \begin{bmatrix}1 & -1 \\2 & 3 \\\end{bmatrix} $$

이 행렬의 경우 두 열벡터가 선형 독립 집합이기 때문에 영공간이 비어있다.

파이썬으로는 scipy 라이브러리를 사용해 아래처럼 구할 수 있다.

A = np.array([[1, -1], [-2, 2]])
B = np.array([[1, -1], [-2, 3]])

print(scipy.linalg.null_space(A))
print(scipy.linalg.null_space(B))
# [[0.70710678] - 단위벡터 반환
# [0.70710678]]
# []

 

🤔 영공간은 언제 필요한걸까

이게 궁금해서 ChatGPT랑 공부했다.

$$ Ax = 0$$

위 수식은 풀어서 설명하면 벡터 x를 A 행렬로 선형변환시켰더니 0차원의 점으로 붕괴되었다, 즉 벡터 x가 가리키는 방향에 대한 정보가 소멸된다는 말이 된다.

머신러닝에서는 영공간은 ‘파라미터를 움직여도 출력이 변하지 않는 방향'이라는 의미를 가진다.(변화량 0)