[개발자를 위한 실전 선형대수학] 4.3 표준 행렬 곱셈, 4.4 행렬 연산: 전치, 4.5 행렬 연산: LIVE EVIL(연산 순서), 4.6 대칭 행렬

[chapter 4] 행렬, 파트 1 : 행렬과 행렬의 기본 연산

1. 행렬 곱셈

두 행렬 M x N과 N x K가 있을 때 두 행렬의 곱셈이 유효하기 위해서는 N이 같아야 한다.

행렬 곱셈은 내부 차원의 수가 일치할 때만 유효하고, 곱셈 행렬의 크기는 외부 차원의 수로 정의된다.

따라서 AB는 유효하고 BA는 유효하지 않을 수 있기 때문에 행렬에서는 교환법칙이 성립하지 않는다.

행렬 곱셈은 $AB$와 같이 아무 기호없이 두 행렬을 나란히 적어 표기한다.

행렬 곱셈은 아래와 같이 동작한다.

$$  \begin{bmatrix}2 & 3 \\4 & 5 \\\end{bmatrix}\begin{bmatrix}a & b \\c & d \\\end{bmatrix} =\begin{bmatrix}(2a+3c) & (2b+3d)  \\(4a+5c) & (4b+5d) \\\end{bmatrix} $$

행렬 곱셈의 결과는 왼쪽 행렬의 행과 오른쪽 행렬의 열 사이의 모든 쌍에 대한 선형 관계를 저장하는 행렬이 된다.

2. 행렬-벡터 곱셈

  • 행벡터가 아닌 열벡터만 행렬의 오른쪽에 곱할 수 있다. 그리고 열벡터가 아닌 행벡터만 행렬의 왼쪽에 곱할 수 있다.
    • 즉, $Av$ 및 $v^TA$는 유효하지만 $Av^T$ 및 $vA$는 유효하지 않다.
  • 행렬-벡터 곱셈의 결과는 항상 벡터이다. 그리고 결과 벡터의 방향을 곱하는 벡터의 방향에 따라 결정된다.
    • 행렬에 행벡터를 앞에서 곱하면 다른 행벡터가 생성되고, 행렬에 열벡터를 뒤에서 곱하면 다른 열벡터가 생성된다.

선형가중결합

각 벡터를 행렬에 넣고 가중치를 벡터의 원소로 넣어 선형 가중 결합을 할 수 있다.

$$4\begin{bmatrix}3 \\0 \\6 \end{bmatrix} + 3\begin{bmatrix}1 \\2 \\5\end{bmatrix}=\begin{bmatrix}
3 & 1 \\0 & 2 \\6 & 5 \\\end{bmatrix}\begin{bmatrix}4 \\3\end{bmatrix}$$

기하학적 변환

벡터를 기하학적 선으로 생각하면 행렬-벡터 곱셈으로 해당 벡터를 회전하고 크기를 조정할 수 있다.

하지만 행렬의 고유 벡터는 행렬-벡터 곱을 해도 크기만 조정되며 방향은 유지된다.

행렬-벡터 곱셈은 해당 벡터를 회전하고 확장할 수 있는 역할을 하고, 행렬은 이러한 변환을 담는 그릇이다.

= 행렬은 어떤 벡터를 어떻게 바꿀지를 규정하는 정보가 들어있는 도구이다.

3. 전치

전치는 단순히 행과 열을 바꾸는 것으로, 벡터와 마찬가지로 위 첨자 T로 표시한다.

그리고 행렬을 이중 전치하면 원래 행렬이 된다.

파이썬에서는 아래와 같이 전치를 할 수 있다.

A = np.array([[3,4,5], [1,2,3]])
A_T1 = A.T # 메서드
A_T2 = np.transpose(A) # 함수
print(A_T1)
print(A_T2)
#[[3 1]
# [4 2]
# [5 3]]
#[[3 1]
# [4 2]
# [5 3]]

내적 표기와 전치

크기가 M x 1인 두 열벡터에서 첫 번째 벡터를 전치하면 크기가 1 x M, M x 1이 되고, 이 둘을 곱하면 1 x 1, 즉 스칼라가 된다.

따라서 내적은 $a^Tb$로 표시할 수 있다.

궁금한 점 with ChatGPT

내적은 성분끼리 곱해서 더하는 거고, 벡터 간의 방향 관계(a가 b쪽으로 얼마나 기울었는지)를 측정하는 도구이다.

그럼 왜 $a^Tb$로 나타내는지가 궁금했고, ChatGPT는 아래와 같은 내용을 알려줬다.

  • 내적은 선형대수의 기본 연산이기 때문에, '행렬' 안에서 통일해서 다루면 이해가 쉬워진다.
  • 벡터간의 방향 관계라는 기하학적 의미를 잘 나타낸다.
    • 투영은 선형 변환이고, 선형 변환은 행렬로 표현되기 때문.
  • 벡터 공간이 달라지면(예: 곡률이 있는 공간 등) 내적은 $a^TGb$로 변한다.($G$는 metric matrix) 따라서 내적을 행렬곱으로 정의해두면 이런 일반화가 쉬워진다.
  • 딥러닝/머신러닝에서 대부분의 계산이 행렬곱 형태로 통일되기 때문

즉, 내적을 행렬곱으로 쓰면 모든 벡터 연산이 일관되고 확장 가능해지기 때문에 $a^Tb$로 표현하는 걸 선호한다.

4. LIVE EVIL

LIVE EVIL은 여러 행렬의 곱셈을 전치할 때 순서가 어떻게 되는지 기억하기 위한 (귀여운?) 연상법이다.

기본적으로 여러 행렬의 곱셈을 전치하면 개별 행렬을 전치하고 곱한 것과 동일하지만 순서는 아래와 같이 뒤바뀐다.

$$ (LIVE)^T = E^TV^TI^TL^T $$

5. 대칭 행렬

행렬이 대칭이라는 것은 대응되는 행과 열이 같다, 즉 행과 열을 바꿔도 행렬에는 아무 변화가 없다는 것을 말한다.

아래처럼 나타낼 수 있다.

$$ A^T = A $$

대칭행렬은 행과 열의 수가 동일하다.(M x M)

어떤 행렬이든 자신의 전치를 곱하면 대칭 행렬이 만들어진다. 즉 $A^TA$와 $AA^T$ 모두 정방 대칭 행렬이다. (하지만 두 결과가 같은 것은 아니다)

증명은 아래처럼 할 수 있다.

$$ \left ( A^TA \right )^T = A^TA^{TT} = A^TA $$

이렇게 $A^TA$로 대칭 행렬을 만드는 것을 곱셈 기법(multiplicative method)이라고 한다.