[TIL] Day 7 - 인공지능 수학(2)

기역의궁전·2021년 4월 27일
0

dev2_TIL

목록 보기
6/18

행렬표기법 & 용어

  • 하나의 행 또는 열을 가지는 행렬을 각각 행백터(row vector), 열벡터(column vector)라고 부른다.
    (단, 기본적으로 행렬에서 그냥 '벡터'라고 하면 열벡터를 기존으로 한다.)

  • 1 x 1 행렬은 숫자, 즉 '스칼라(scalar)'라고 한다. ex) [8]

Transpose Matrix(전치행렬)

행과 열을 교환한 행렬 (A^T)ij = (A)ji

ex)
A = [ [1,2],[3,4],[5,6] ] / A^T = [ [1,3,5],[2,4,5] ]

Zero Matrix(영행렬)

모든 행렬의 요소가 0이면 'O'라고 표기하는 영행렬.

n*n Square Matrix(정방행렬)

행과 열 모두 n인 행렬을 n차 square matrix 라고 한다.

※ An = [ [a11 a12, a13],[a21, a22, a23],[a31, a32, a33] ]
a11,a22,a33과 같이 aii 를 An의 main diagonal(주대각선)이라 한다.

Identity Matrices 항등행렬

주대각선이 1이고 나머지 요소가 모두 0인 n차 정방행렬.
따라서, 숫자 1과 같은 존재로 행렬 곱에 대한 항등원 역할을 한다.

ex)
1 0 0
0 1 0
0 0 1

행렬의 곱

A mxr * B rxn = Cmxn
Cij = ai1 x b1j + ai2 x b2j .... air x brj

행렬 C의 각요소 Cij는 곱의 왼쪽 행렬 A의 i번째 행벡터와 B의 j번째 열벡터의 내적(inner product)이다.

  • 행렬 곱 AB에 대해 A의 열갯수(r)과 B의 행갯수(r)가 같아야 함.
  • 일반적으로 AB != BA

행렬의 곱은 병렬처리(parallel processing)로 가속할 수 있다.

: Cij를 알고 싶은 것과 C23은 완전히 독립적으로 계산되기 때문에 병렬적이다.

스칼라-벡터-행렬의 계층적 구조 & 텐서

i) 7 scalar = [7] 1-vector = [7]1x1 1x1 matrix

ii) 벡터는 여러 숫자가 일열로 늘어선 구조
ex)
[1,2,3,4] 1-vector = [1,2,3,4]1x4 matrix = [[1,2],[3,4]]2x2 matrix
-> 응용문제에 따라 결정되는 행렬의 모양.

iii) 행렬은 사각형 구조에 여러 숫자가 행과 열로 늘어선 구조

1 2 3
4 5 6
= [1,2,3,4,5,6] 1-vector = [1,4,2,5,3,6] 1-vector

텐서(tensor)

스칼라, 벡터, 행렬을 아우르는 개념으로 숫자가 늘어설 수 있는 방향이 k개면,
k-tensor 라고 부른다.

  • 0-tensor : scalar
  • 1-tensor : vector
  • 2-tensor : matrix
  • 3-tensor : 각 요소가 vector인 matrix ex) 컬러영상 RGB,RGBA
  • 4-tensor : 시간이 있는 동영상

분할행렬(Partitioned Matrix)

행렬을 조각(partition) 단위로 부분행렬(submatrix) 구조로 확장해서 생각할 수 있다.
이러한 구조방법을 분할행렬 or 블록행렬이라 부른다.

분할행렬로 행렬의 곱 이해하기

1. AB = C를 matrix-column vector product로 표현

AB = A[b1, b2, ... bn] = [Ab1, Ab2, ... Abn] = C

2. AB = C를 matrix-row vector product로 표현

AB = [a1,a2,an]B =
a1B
a2B
... = C
anB

좌표계(Coordinate system)

2-vector v는 xy평면 상에서 원점(0,0)부터 (a,b)에서 끝나는 벡터를 의미.
v = [a,b] = I[a,b] = [[1,0],[0,1]][a,b] = a[1,0] + b[0,1]

이때 [1,0]를 곱한다는 건 X축으로 한발씩, [0,1]를 곱한다는 건 Y축으로 한발씩을 의미하기 때문에 xy평면에서 표현 가능하다.

선형 시스템 문제를 좌표계로 변환하여 보는 시선

Ax = Ib

  • 우항 : 표준좌표계(I)에서 어떤 벡터의 좌표값은 'b'이다.
  • 좌항 : A의 열벡터를 기저(basis)로 가지는 좌표계에서 동일 벡터의 좌표값은 'x'이다.

따라서 행렬은 좌표계이고, 벡터는 좌표값이다. 임의의 v는 다양한 좌표계에서 표현이 가능하다.

선형조합(Linear combination)

  • Ax = B, Ax는 A의 열벡터에 대한 선형조합이다.
  • 행렬은 열벡터의 리스트다 -> Amxn는 m개의 벡터가 n개 있다.

    벡터들에 대한 가중치 합을 선형조합(linear combination)이라고 한다.

선형변환(Linear transformation)

선형함수(linear function)

f(x+y) = f(x)+f(y) and f(cx) = cf(x) 인 함수 f를 선형함수라고 한다.

※ 선형 함수란 선형태가 직선형태의 올곧은 평평한 형태라 그려 봐야알지만,
위의 2가지 모두 조건에 해당하면 그릴 필요이 선형함수 인 것이다.

변환(transformation)

함수의 입력이 n-vector이고 출력이 m-vector인 함수T 를 변환이라 한다.
T : R^n -> R^m (R은 실수)

단, n=m일 경우, 해당변환을 '연산자(operator)'라고 한다.

행렬변환(Matrix transformation)

Amn * x = b ( x : n-vector, b : m-vector )
m x n인 행렬 A에 대해 Ax는 x라는 n-vector를 입력받아 b라는 m-vector를 출력하는 변환이라 표현할 수 있고 이를 행렬 변환이라 한다.

A(x+y) = A(x) + A(y) and A(cx) = cA(x) (단, x,y는 실수 이고 c는 임의의 scalar)

따라서 m x n 행렬은 n-vector를 입력받아 m-벡터를 출력하는 선형변환이며 이러한 선형변환은 행렬로 구현 가능하다.

표준행렬(Standard matrix) : 선형변환 코딩

  1. 구현하고자 하는 기능의 입력, 출력이 vector인지 확인.
  2. 구현하고자 하는 기능이 선형인지 확인.(직선을 함수에 넣으면 직선이 나오는지)
  3. 입력이 n-vector, 출력이 m-vector이면, m x n 표준행렬을 구성한다.

표준행렬 프로그래밍(요소 채우기)

  • n-차원 표준기저벡터 {e1,e2, ... , en } 이 있으면, 각 ei에 대해, 원하는 기능을 동작시켜 얻은 결과인 m-vector인 T(ei)를 표준행렬의 각 열에 넣는다.

  • A = [ TA(e1), TA(e2), ... , T(en) ] m x n

np.reshape

reshape함수는
np.reshape(변경할 배열, 차원) 또는 배열.reshape(차원)으로 사용 할 수 있으며,
현재의 배열의 차원(1차원,2차원,3차원)을 변경하여 행렬을 반환하거나 하는 경우에 많이 이용되는 함수이다.

ex)

import numpy as np
s = 3
a = np.reshape(s, (1,))
print(a) # [3]
print(a.shape) #(1,)

0개의 댓글