Featured image of post 기초 선형대수 - 스칼라, 벡터, 행렬

기초 선형대수 - 스칼라, 벡터, 행렬

스칼라와 벡터의 차이점, 행렬의 정의와 연산 방법

본 포스팅은 ‘밑바닥부터 시작하는 딥러닝 2’ 교재를 참고했습니다.

기초 선형대수

스칼라와 벡터

스칼라와 벡터는 선형 대수에서 가장 기본적인 개념이다. 스칼라는 크기, 벡터는 크기와 방향을 가지고 있다.

스칼라

크기만으로 나타낼 수 있는 물리량이다.

길이, 부피, 거리 등과 같이 숫자 하나로 표현되는 값이다.

변수에 저장 할때는 일반적으로 소문자를 이용하여 표기한다.

벡터

벡터는 스칼라의 집합이며, 행렬을 구성하는 기본 단위이다.

크기와 방향을 모두 나타내는 개념이다.

일반적으로 영어 볼드체로 표기하고, 파이썬에선 1차원 리스트로 취급할 수 있다.

행벡터와 열벡터

열벡터(열 행렬) $m × 1$ 행렬은 $m$ 원소들의 단일 열벡터이다.

$$ \mathbf{x}=\begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_m \end{bmatrix} \tag{1} $$

행벡터(행 행렬) 1 × m 행렬은 그 원소들 m의 단일 행벡터이다.

행렬

행렬은 숫자가 2차원 형태로 숫자를 나열하는 것이다.

행렬은 행과 열로 구성되어 있다. 행은 가로 방향을 나타내고, 열을 세로 방향을 나타낸다.

아래와 같이 소괄호를 사용하기도 하고, 대괄호를 사용하기도 한다.

$$ \mathbf{A} = \begin{pmatrix} 2 & 4 \\ 7 & 3 \end{pmatrix} = \begin{bmatrix} 2 & 4 \\ 7 & 3 \end{bmatrix} \tag{2} $$

전치 행렬

$$ \mathbf{x} = \begin{bmatrix} x_1 & x_2 & \dots & x_m \end{bmatrix} \tag{3} $$

행벡터의 전치행렬(윗첨자 T로 표기)은 열벡터이고, 마찬가지로 열벡터의 전치 행렬은 행 벡터이다.

$$ \begin{bmatrix} x_1 & x_2 & \dots & x_m \end{bmatrix}^\intercal = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_m \end{bmatrix} \tag{4} $$

행렬의 덧셈과 뺄셈

각 위치에 대응하는 원소끼리 더하거나 빼는 것이다.

$$ \mathbf{A} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} , \space \mathbf{B} = \begin{pmatrix} 5 & 6 \\ 7 & 8 \end{pmatrix} , \space \mathbf{A + B} = \begin{pmatrix} 6 & 8 \\ 10 & 12 \end{pmatrix} \tag{5} $$

행렬의 내적

벡터의 내적은 두 벡터에서 대응하는 원소들의 곱을 모두 더한 것이다.

$$ \mathbf{x} \cdot \mathbf{y} = x_1y_1 + x_2y_2 + \dots + x_ny_n \tag{6} $$

행렬의 곱셈

행렬의 곱셈은 일반적인 곱셈과 다르다. 일종의 함수로 이해하는 것이 좋다.

행렬곱은 앞 행렬의 열의 수와 뒷 행렬의 행의 수가 같을 때만 정의된다.

두 행렬 $A, B$가 각각 $m\times n, n\times r$ 행렬일 때,

$$ A=\begin{pmatrix}a_{11} & a_{12} & \cdots & a_{1n} \\ {\color{blue}a_{21}} & {\color{blue}a_{22}} & {\color{blue}\cdots} & {\color{blue}a_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn}\end{pmatrix}, B=\begin{pmatrix}{\color{red}b_{11}} & b_{12} & \cdots & b_{1r} \\ {\color{red}b_{21}} & b_{22} & \cdots & b_{2r} \\ {\color{red}\vdots} & \vdots & \ddots & \vdots \\ {\color{red}b_{n1}} & b_{n2} & \cdots & b_{nr}\end{pmatrix} \tag{7} $$

이라고 하면 행렬의 곱 $AB$는 $m\times r$ 행렬이며,

$$ AB=\begin{pmatrix}\sum_k a_{1k}b_{k1} & \sum_k a_{1k}b_{k2} & \cdots & \sum_k a_{1k}b_{kr} \\ {\color{#C0C}\sum_k a_{2k}b_{k1}} & \sum_k a_{2k}b_{k2} & \cdots & \sum_k a_{2k}b_{kr} \\ \vdots & \vdots & \ddots & \vdots \\ \sum_k a_{mk}b_{k1} & \sum_k a_{mk}b_{k2} & \cdots & \sum_k a_{mk}b_{kr}\end{pmatrix} \tag{8} $$

이다. (단, $k=1,2,…,n$)

항상 행렬을 다룰땐 형상에 주의해야 한다.

파이썬에서의 벡터와 행렬

파이썬에서는 numpy 라이브러리를 통해 쉽게 벡터와 행렬을 표현할 수 있다.

1
2
3
4
5
>>> x = np.array([1, 2, 3]) 
>>> x.shape
(3,) 
>>> x.ndim
1
1
2
3
4
5
>>> W = np.array([1, 2, 3], [4, 5, 6])
>>> W.shape
(2, 3)
>>> W.ndim
2

행렬의 원소별 연산

서로 대응하는 원소들끼리 독립적인 연산이 이루어진다.

1
2
3
4
5
6
>>> x + W
array([1, 3, 5],
      [7, 9, 11]) 
>>> x * W
array([0, 2, 6],
      [12, 20, 30]) 

브로드캐스트

넘파이의 다차원 배열은 형상이 다른 배열끼리 연산을 하는 브로드캐스트가 가능하다.

1
2
3
4
>>> A = np.array([[1, 2], [3, 4]])
>>> A * 10
array([[10, 20],
       [30, 40]])
1
2
3
4
>>> A = np.array([[1, 2], [3, 4]])
>>> b = np.array([10, 20])
array([[10, 40],
       [30, 80]])