선형대수 요소(Elements in linear algebra)

Linearity(선형성)

  • 행렬로 표현할 수 있는 것들은 기본적으로 다 선형성이라는 것을 만족해야 한다. 선형성은 아래 두 가지 조건을 만족할 때 선형성을 갖는다고 할 수 있다.

  • 1) Superposition(중첩의 원리)

  • 2) Homogeniety

예시 1)$y=mx=f(x)$; 원점을 지나는 직선 -> Linearity를 결정하는 중요한 조건으로 원점을 지나는지를 확인해야 한다. 직선이라고 해서 다 Linearity를 만족하는 것은 아니다.

예시 2) $y = mx+n = f(x), n \neq 0$

  • 위와 같으므로 선형성을 갖지 않는다는 것을 알 수 있다.

Elements of Linear Algebra

선형대수의 요소

  • 선형대수에서 다루는 데이터는 개수나 형태에 따라 크게 스칼라(scalar), 벡터(vector), 행렬(matrix), 텐서(tensor) 유형으로 나뉜다. 스칼라는 숫자 하나로 이루어진 데이터이고, 벡터는 여러 숫자로 이루어진 데이터 레코드(data record)이며, 행렬은 이러한 벡터, 즉 데이터 레코드가 여럿인 데이터 집합이라고 볼 수 있다. 텐서는 같은 크기의 행렬이 여러 개 있는 것이라고 생각하면 된다.

스칼라(Scalar)

  • 스칼라는 하나의 숫자만으로 이루어진 데이터를 말한다. 스칼라는 보통 $x$와 같이 알파벳 소문자로 표기하며 실수(real number)인 숫자 중의 하나이므로 실수 집합 $𝐑$의 원소라는 의미에서 다음처럼 표기한다.

벡터(Vector)

  • 벡터는 여러 개의 숫자가 특정한 순서대로 모여 있는 것을 말한다. 사실 대부분의 데이터 레코드는 여러 개의 숫자로 이루어진 경우가 많다. 하나의 묶음(tuple)으로 묶어놓는 것이 좋다. 이때 숫자의 순서가 바뀌면 어떤 숫자가 어떤 피처에 매핑되는 값인지알 수 없으므로 숫자의 순서를 유지하는 것이 중요하다. 이런 데이터 묶음을 선형대수에서는 벡터라고 부른다.

  • 이때 벡터는 복수의 가로줄, 즉 행(row)을 가지고 하나의 세로줄, 즉 열(column)을 가지는 형태로 위에서 아래로 내려써서 표기해야 한다. 하나의 벡터를 이루는 데이터의 개수가 $𝑛$개이면 이 벡터를 $n$-차원 벡터($n$-dimensional vector)라고 하며 다음처럼 표기한다.

  • 순서는 차원을 의미한다. 즉, 위에서 벡터 $x$는 1차원에 $x_1$ 2차원에 $x_2$, N차원에 $x_N$이라는 값을 갖는다는 의미이다. 참고로 순서가 정해져 있지 않은 배열(array)는 집합(set)이다. 또한 벡터라고 하는 것은 한방향으로만 있는 1-dimensional로 존재하는 배열 또는 하나의 숫자가 된다.

행렬(Matrix)

  • 행렬(Matrix)는 기본적으로 2-Dimensional 배열(array)를 의미한다. 행렬은 복수의 차원을 가지는 데이터 레코드가 다시 여러 개 있는 경우의 데이터를 합쳐서 표기한 것이다. 행렬은 보통 $𝑋$와 같이 알파벳 대문자로 표기한다.
  • 스칼라와 벡터도 수학적으로는 행렬에 속한다. 스칼라는 열과 행의 수가 각각 1인 행렬이고 벡터는 열의 수가 1인 행렬이다. 그래서 스칼라는 $ \begin{align} a \in \mathbf{R}^{1\times 1} \end{align}$ 벡터는 $\begin{align} x \in \mathbf{R}^{n\times 1} \end{align}$

텐서(Tensor)

  • 텐서는 같은 크기의 행렬이 여러 개 같이 묶여 있는 것을 말한다. 엄격한 수학적 정의로는 텐서는 다차원 배열로 표현되는 사상(mapping)으로 다차원 배열 자체를 뜻하지 않는다. 하지만 데이터 사이언스 분야에서는 흔히 다차원 배열을 텐서라고 부르므로 여기에서는 이러한 정의를 따르도록 한다.
  • 예를 들어 다음 컬러 이미지는 2차원의 행렬처럼 보이지만 사실 빨강, 초록, 파랑의 밝기를 나타내는 3가지의 이미지가 겹친 것이다. 컬러 이미지에서는 각각의 색을 나타내는 행렬을 채널(channel)이라고 한다. 예제 이미지는 크기가 768 x 1024이고 3개의 채널이 있으므로 768 x 1024 x 3 크기의 3차원 텐서다.
1
2
3
4
from scipy import misc  # 패키지 임포트

img_rgb = misc.face() # 컬러 이미지 로드
img_rgb.shape # 데이터의 모양
결과
1
(768, 1024, 3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
plt.subplot(221)
plt.imshow(img_rgb, cmap=plt.cm.gray) # 컬러 이미지 출력
plt.axis("off")
plt.title("RGB 컬러 이미지")

plt.subplot(222)
plt.imshow(img_rgb[:, :, 0], cmap=plt.cm.gray) # red 채널 출력
plt.axis("off")
plt.title("Red 채널")

plt.subplot(223)
plt.imshow(img_rgb[:, :, 1], cmap=plt.cm.gray) # green 채널 출력
plt.axis("off")
plt.title("Green 채널")

plt.subplot(224)
plt.imshow(img_rgb[:, :, 2], cmap=plt.cm.gray) # blue 채널 출력
plt.axis("off")
plt.title("Blue 채널")

plt.show()

tensor로 살펴보는 이미지 파일

전치

  • 전치(transpose)연산은 행렬에서 가장 기본이 되는 연산으로 행렬의 행과 열을 바꾸는 연산을 의미한다.

벡터의 표현

  • 아래 그림과 같이 기본적으로 벡터는 열벡터(column vector)를 사용하며, 행 벡터(row vector)를 표기할때는 열벡터의 전치행렬로 표기해준다. 전치 연산과 행 벡터, 열 벡터를 이용하면 다음처럼 행렬을 복수의 열 벡터 $c_{i}$, 또는 복수의 행 벡터 $r^{T}_{j}$을 합친(concatenated)형태로 표기할 수도 있다.
  • 위 식에서 행렬과 벡터의 크기는 다음과 같다.
  • 벡터의 모양을 직사각형으로 표시하면 다음과 같다.

특수한 벡터와 행렬

  • 몇 가지 특수한 벡터와 행렬은 별도의 기호나 이름이 붙는다.

행렬의 종류

영벡터

  • 모든 원소가 0인 $N$차원 벡터는 영벡터(zeros-vector)라고 하며 다음처럼 표기한다. 문맥으로 벡터의 크기를 알 수 있을 때는 크기를 나타내는 아래 첨자 $N$을 생략할 수 있다.

일벡터

  • 모든 원소가 1인 $N$차원 벡터는 일벡터(ones-vector)라고 하며 다음처럼 표기한다. 마찬가지로 문맥으로 벡터의 크기를 알 수 있을 때는 크기를 나타내는 아래 첨자 $N$을 생략할 수 있다.

정방행렬

  • 행의 개수와 열의 개수가 같은 행렬을 정방행렬(square matrix)라고 한다.

대각행렬

  • 행렬에서 행과 열이 같은 위치를 주 대각(main diagonal) 또는 간단히 대각(diagonal)이라고 한다. 대각 위치에 있지 않은 것들은 비대각(off-diagonal)이라고 한다. 모든 비대각 요소가 0인 행렬을 대각행렬(diagonal matrix)이라고 한다.
  • 대각행렬이 되려면 비대각 성분이 0이기만 하면 되고 대각성분은 0이든 아니든 상관없다. 또한 반드시 정방행렬일 필요도 없다. 예를 들어 다음 행렬도 대각행렬이라고 할 수 있다.

항등행렬

  • 대각행렬 중에서도 모든 대각성분의 값이 1인 대각행렬을 항등행렬(identity matrix)이라고 한다. 항등행렬은 보통 알파벳 대문자 $I$로 표기한다. (E로 표기하는 방식도 있다.)
  • 임의의 행렬 A에 대해 행렬곱을 해도 임의의 행렬 A가 나오도록 하는 항등원 개념과 동일하다.
  • 참고로 추후에 말하겠지만, 항등원의 개념이 있다면 역원의 개념에 대해 생각해 볼 수 있을 것이다. 역원의 정의에 맞게 임의의 행렬에 대한 곱셈에대한 역원을 찾는다면 아래와 같이 구할 수 있다. 즉 행렬에서 임의의 행렬 A에 곱셈에 대한 역원은 역행렬을 의미한다.

대칭행렬

  • 만약 전치연산을 통해서 얻은 전치행렬과 원래의 행렬이 같으면 대칭행렬(symmetric matrix)라고 한다. 정방행렬만이 대칭행렬이 될 수 있다.

벡터의 행렬과 연산

  • 벡터와 행렬도 숫자처럼 덧셈, 뺄셈, 곱셈 등의 연산을 할 수 있다. 데이터 사이언스에 있어서 선형대수를 알고있어야 하는 이유는 여러가지가 있지만 그 중 한가지로 벡터와 행렬의 연산을 이용하면 대량의 데이터에 대한 계산을 간단한 수식으로 나타낼 수 있기 때문이다. 물론 벡터와 행렬에 대한 연산은 숫자의 사칙 연산과는 몇 가지 다른 점이 있으므로 이러한 차이를 잘 알아야 한다.

벡터/행렬의 덧셈과 뺄셈

행렬의 덧셈과 곱셈

  • 같은 크기를 가진 두 개의 벡터나 행렬은 덧셈과 뺄셈을 할 수 있다. 두 벡터와 행렬에서 같은 위치에 있는 원소끼리 덧셈과 뺄셈을 하면 된다. 이러한 연산을 요소별(element-wise)연산이라고 한다.
  • 예를 들어 벡터 $x$와 $y$가 다음과 같으면,
  • 벡터 $𝑥$ 와 $𝑦$ 의 덧셈 $𝑥+𝑦$와 뺄셈 $𝑥−𝑦$는 다음처럼 계산한다.
  • 행렬도 같은 방법으로 덧셈과 뺄셈을 할 수 있다.

스칼라와 벡터/행렬의 곱셈

  • 벡터 $x$또는 행렬 $A$에 스칼라값 $c$를 곱하는 것은 벡터 $x$ 또는 행렬 $A$의 모든 원소에 스칼라값 $c$를 곱하는 것과 같다.

브로드캐스팅

  • 원래 덧셈과 뺄셈은 크기(차원)가 같은 두 벡터에 대해서만 할 수 있다. 하지만 Numpy에서 벡터와 스칼라의 경우에는 관례적으로 다음처럼 1-벡터를 사용하여 스칼라를 벡터로 연산을 허용한다. 이를 브로드캐스팅(broadcasting)이라고 한다.
  • 데이터 분석에서는 원래의 데이터 벡터 $x$가 아니라 그 데이터 벡터의 각 원소의 평균값을 뺀 평균제거(mean removed) 벡터 혹은 0-평균(zero-mean)벡터를 사용하는 경우가 많다.
  • 아래 그림에서 볼 수 있듯이, 행렬의 곱셈에 대한 교환법칙은 성립하지 않는다. 물론, $AB=BA$인 경우도 존재하지만, 항상 존재하진 않기 때문이다.

벡터와 벡터의 곱셈

  • 벡터 $x$와 벡터 $y$의 내적은 다음처럼 표기 한다.
  • 내적은 다음처럼 점(dot)으로 표기하는 경우도 있어서 닷 프로덕트(dot product)라고도 부르고 < x, y > 기호로 나타낼 수도 있다.
  • 두 벡터를 내적하려면 다음과 같은 조건이 만족되어야 한다.

      1. 우선 두 벡터의 차원(길이)이 같아야 한다.
      1. 앞의 벡터가 행 벡터이고 뒤의 벡터가 열 벡터여야 한다.
  • 이때 내적의 결과는 스칼라값이 되며 다음처럼 계산한다. 우선 같은 위치에 있는 원소들을 요소별 곱셈처럼 곱한 다음, 그 값들을 다시 모두 더해서 하나의 스칼라값으로 만든다.

행렬과 행렬의 곱셈

  • 벡터의 곱셈을 정의한 후에는 이를 이용하여 행렬의 곱셈을 정의할 수 있다. 행렬과 행렬을 곱하면 행렬이 된다. 방법은 다음과 같다.
  • $A$ 행렬과 $B$ 행렬을 곱한 결과가 $C$ 행렬이 된다고 하자. $C$의 $i$번째 행, $j$번째 열의 원소 $c_{ij}$의 값은 $A$ 행렬의 $i$번째 행 벡터 $a^{T}_{i}$와 $B$ 행렬의 $j$번째 열 벡터 $b_{j}$의 곱이다.
  • 이 정의가 성립하려면 앞의 행렬 $A$의 열의수가 뒤의 행렬 $B$의 행의 수와 일치해야만 한다.

교환 법칙과 분배법칙

  • 행렬의 곱셈은 곱하는 행렬의 순서를 바꾸는 교환 법칙이 성립하지 않는다. 그러나 덧셈에 대한 분배 법칙은 성립한다.
  • 전치 연산도 마찬가지로 마찬가지로 덧셈/뺄셈에 대해 분배 법칙이 성립한다.
  • 전치 연산 곱셈의 경우에는 분배 법칙이 성립하기는 하지만 전치 연산이 분배되면서 곱셈의 순서가 바뀐다.

행렬의 곱셈에 대한 교환법칙은 성립하지 않는다

곱셈의 연결

  • 연속된 행렬의 곱셈은 계산 순서를 임의의 순서로 해도 상관없다.

행렬의 연산