프로그래머스 인공지능 데브코스 3기 수업내용 정리 #6(인공지능 수학 - 미적분)

Clay Ryu's sound lab·2021년 12월 14일
0

Note for 2021

목록 보기
6/33

인공지능 수학 : 선형대수 - 미적분

3. LU분해

행렬분해(matrix decomposition)의 의미

숫자의 인수분해는 주어진 숫자를 여러 숫자의 곱으로 분해하여 표현하는 것이다.
행렬의 경우에서도 주어진 행렬을 행렬분해 한 생태로 가지고 있으면 계산이 편해지는 경우가 많다.
대표적인 행렬분해는 다음과 같다.

  • LU 분해(LU decomposition)
  • QR 분해(QR decomposition)
  • 특이값 분해(SVD, Singular Value Decomposition)

LU decomposition

LU 분해는 주어진 행렬을 두 행렬의 곱으로 나누는 행렬분해이다.
L : lower triangular matrix(하삼각행렬)
U : upper triangular matrix(상삼각행렬)

주어진 행렬 A가 LU 분해되어 있다면
Ax = b -> (LU)x = b -> Ly = b,(Ux = y)으로 식을 변형해서
하나의 행렬의 문제를 두개의 행렬의 문제로 나눌 수가 있다.

  • Ly = b의 식은 Forward-substitution(전방대치법)으로 y를 구하고,
  • Ux = y의 식은 Back-substitution(후방대치법)으로 x를 구할 수 있다.

LU분해는 가우스 소거법의 전방소거법forward elimination을 행렬로 코드화 한 것이다.

  • L : 행렬 A를 전방소거하는데 쓰인 replacement와 scaling에 대한 EROs를 기록해 둔 행렬
    U : 행렬 A를 전방소거한 후 남은 upper triangular matrix(상삼각행렬)
    P : 행렬 A를 전방소거하는데 쓰인 interchange에 대한 EROs를 기록해 둔 행렬(옵션)
    행렬 A에 대한 전방소거법은 PLU를 모두 포함하는 계산법이다. A = P L U

LU분해는 다음과 같은 이유로 활용된다.

  • 수치적 안정성 : 선형시스템 Ax = b의 해를 역행렬 A^-1를 이용해 직접 구하는 것보다 PLU 분해를 이용한 것이 좀 더 수치적으로 안정적이다.
  • b가 자주 업데이트되는 경우 : 선형시스템 Ax = b에서 행렬 A는 고정되어 있고 b가 자주 변하는 문제가 종종 있다. 이런 경우, 행렬 A를 미리 PLU로 분해해 둔다면, b가 업데이트될 때마다 선형시스템의 해 x를 실시간으로 구할수 있다.

4. 행렬연산과 선형조합

행렬 표기법과 관련 용어

행렬matrix은 직사각형 구조에 숫자들을 담아 놓는 구조이다. 각 숫자들은 행렬의 요소entry라 부른다. m x n 행렬은 m개의 행과 n개의 열로 이루어진 행렬이다.
하나의 행 혹은 하나의 열을 가지는 행렬은 각각 행벡터, 열벡터라 한다.
1x1행렬은 스칼라와 같다.

  • 주요 표기법

행렬 A의 각 (i, j) 요소는 aij로 나타낸다.
행렬 A를 간략히 표기할 때는 A=[aij]로 나타낸다.
행렬 A의 크기가 중요할 경우는 A=[aij]mxn으로 나타낸다.

전치행렬Transpose Matrix

m x n 행렬 A에 대한 전치행렬 A^T는 A의 행을 열로, A의 열을 행으로 가지는 n x m 행렬이다. 즉, (A^T)ij = (A)ji를 만족한다.

벡터 표기법

벡터는 볼드체 소문자로 표기한다.
벡터라고 하면 일반적으로 열벡터(column vector)를 말한다.
n벡터는 n개의 스칼라(scalar)로 구성된 벡터를 말한다.

영행렬Zero Matrices

행렬의 모든 요소가 0이면, 해당 행렬을 영행렬이라 하고 O으로 표기한다.
A + O = O + A = A
영행렬은 숫자의 0과 같은 존재로 행렬합에 대한 항등원 역할을 한다.
행렬의 합 : 두 행렬 A와 B는 행과 열의 개수가 모두 같을 때 성립하며, 각 (i,j)요소의 합으로 정의 된다.

n x n 행렬 : 정방행렬Square Matrix

행과 열의 개수가 모두 n인 정사각형 모양의 행렬을 n차 정방행렬이라 한다.
특히 aii(i=1,2,...,n)를 행렬 An의 주대각선main diagonal이라 한다.

항등행렬Identity Matrices

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

행렬의 곱

m x r 행렬 A=[aij]와 r x n 행렬 B=[bij]가 있을 때, 두 행렬의 곱 AB는 m x n 행렬 C=[cij]를 정의한다. 여기서 두 행렬의 곱 AB로 정의 된 행렬 C의 각 (i,j)요소는 다음과 같이 정의 된다.
cij = ai1b1j + ai2b2j + ... + airbrj

  • 행렬 C의 각 요소 cij는 곱의 왼쪽 행렬 A의 i번째 행벡터와 곱의 오른쪽 행렬 B의 j번째 열벡터의 내적inner product이다.
    따라서, 두 행렬의 곱 AB에 대해 A의 열 개수와 B의 행 개수는 일치해야한다.
    일반적으로 AB != BA이다.
    행렬의 곱은 병렬처리parallel processing으로 가속할 수 있다. -> 행렬 C의 각 요소는 독립적이므로

스칼라, 벡터, 행렬 그리고 텐서 : 계층적 구조 이해하기

스칼라 -> 벡터 -> 행렬

스칼라는 숫자 하나로 구성되어 있다.
스칼라 7 -> 벡터 [7] -> 행렬 [7]1x1

벡터 -> 행렬

4 vector -> 4x1 matrix

행렬 -> 벡터

2x3 matix -> 6 vector

텐서

텐서는 스칼라, 벡터, 행렬을 아우르는 개념이다. 숫자가 늘어설 수 있는 방향이 k개면 k-텐서로 부른다.
0텐서 : 스칼라, 1텐서 : 벡터, 2텐서 : 행렬
만일 행렬 T의 각 요소 Pij가 벡터라면, T는 3텐서로 볼 수 있다.
3텐서의 대표적인 예는 컬러영상이다. Pij가 3벡터이면 RGB영상을, 4벡터이면 RGBA 영상을 나타낸다고 볼 수 있다.
T = 4 x 4 pixel resolution with 3 vector

분할행렬Partitioned Matrix

추상적인 구조로 행렬/행렬연산을 파악하는 방법
행렬을 조각partition 단위로 분할하여 생각해도 무방하다. 이런 관점에서 본다면, 행렬은 부분행렬submatrix로 이루어진 직사각형 구조로 확장해서 생각할 수 있다. 이렇게 행렬을 구조적으로 보는 방법을 분할행렬partitioned matrix 또는 블록행렬block matrix라 한다.

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

두 행렬의 곱 AB = C를 아래와 같이 matrix-column vector products로 볼 수 있다.
AB = A[b1 b2 ... bn] = [Ab1 Ab2 ... Abn] = C

두 행렬의 곱 AB = C를 아래와 같이 row vector-matrix products로도 볼 수 있다.
AB = [[a1],[a2]...[am]]B = [[a1B],[a2B]...[amB]] = C

선형조합(Linear Combination): Ax는 A의 열벡터에 대한 선형 조합

A를 열벡터의 집합으로 보고 어떤 방식으로 가중치 합을 하느냐에 따라 b를 만들어 낼 수 있느냐를 알 수 있다.

행렬을 구조적으로 보기

행렬을 구조적으로 바라보는 가장 효과적인 방법은 다음과 같다.
A = [a1 a2 ... an]
여기서 ai는 행렬 A의 i번째 열벡터이다. 특히 각 열벡터는 m벡터이기 때문에, m x n 행렬은 m벡터가 n개 있다고 해석하면 된다.

행렬@벡터 연산을 구조적으로 보기

이제 Ax를 다음과 같이 구조적으로 볼 수 있다.
Ax는 행렬 A가 가지고 있는 열벡터의 선형조합이다.
Ax = [a1 a2 ... an][x1][x2] ... [xn]] = x1a1 + x2a2 + ... + xnan
첫번째 열벡터를 x1배 가중치 ...
선형대수에서는 이처럼 벡터들에 대한 가중치 합을 특히 선형조합linear combination이라 부른다. 좌항은 아무리 복잡해도 A가 가진 열벡터의 가중치 조합을 벗어날 수 없다.

  • 선형시스템 Ax = b를 선형조합 관점에서 바라보기
    행렬 A의 열벡터를 가중치합으로 선형조합할 때 벡터 b를 만들 수 있는 가중치 조합이 존재한다면, 선형 시스템 Ax = b의 해는 존재한다. 그 해는 가중치 xi들로 구성된 x이다.

열공간Column Space

행렬 A의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성할 수 있을 것이다. 이들의 집합을 column space라 하고 다음과 같이 표기한다. col(A)
Consistent Linear System
선형 시스템 Ax = b가 해를 가지면, 다음을 만족한다. b in col(A)
Inconsisten Lenear System
선형 시스템 Ax = b가 해를 가지지 않으면, 다음을 만족한다. b not in col(A)
즉 A의 열벡터에 가중치를 곱해서 만든 선형조합인 열공간으로 벡터b를 만들어 낼수 없다면(가령 열공간이 xy평면에서만 존재하는 경우) z값을 가지는 벡터b는 만들어 낼수가 없다.

5.좌표계 변환

좌표계 변환(Change of Basis):
좌표계 :: 좌표값 = 행렬 :: 벡터
선형시스템을 보는 새로운 관점

벡터의 표현

벡터는 크기와 방향을 가진 물리량으로 다음과 같이 표현될 수 있다.

  • 벡터의 물리적 표현(좌표계가 없는)
    벡터 v를 화살표로 표현한다.
    v의 크기 : 화살표의 길이
    v의 방향 : 화살표의 방향

  • 벡터의 수학적 표현(좌표계가 있는)
    벡터 v를 화살표로 표현한다.
    좌표계를 도입한후, 벡터의 시작점을 원점에 맞추고 끝점의 위치를 벡터 v의 수학적 표현으로 정의한다.
    v의 크기 : 화살표의 길이를 계산
    v의 방향 : 화살표의 방향을 벡터로 표현

좌표계Coordinate System

다음과 같이 2벡터 v가 주어졌다고 하자. 이 벡터는 xy평면 상에서는 원점 (0,0)에서 시작하여 (a,b)에서 끝나는 벡터를 의미한다. v는 다음과 같이 해석될 수 있다.
v = [[a][b]] = x[[a][b]] = a[[1][0]] + b[[0][1]]
수식의 각 요소는 다음과 같다.
a[[1][0]] = x축으로 내린 수선의 발
b[[0][1]] = y축으로 내린 수선의 발
x = xy좌표계

좌표값은 좌표계를 수반해야한다.
만약 두 벡터 v1과 v2를 이용해 새롭게 좌표계를 만든다면 v의 좌표값은 무엇일까? 새로운 좌표계를 만든다는 말은 어떤 벡터 v에 도착하기까지의 과정을 오롯이 v1과 v2를 몇번 사용하여 도착했는지로 표현한다는 의미이다.
즉, v1과 v2를 이용해 만든 새로운 좌표계에서 v의 좌표값은 (4,3)이라 해야한다. 왜냐하면 4v1 + 3v2 = v이기 때문이다.

우항 : e1([[1][0]])과 e2([[0][1]])를 기저basis로 가지는 표준좌표계standard coordinate system에서 벡터 v의 좌표값은 (a,b)이다.
좌항 : v1과 v2를 기저basis로 가지는 좌표계coordinate system에서는 동일한 벡터v의 좌표값은 (4,3)이다.

좌표계 변환Change of basis

선형시스템 문제를 좌표계 변환으로 바라보는 새로운 시선을 배웠다.
A는 v1과 v2의 열벡터로 이루어진 행렬이다.
x는 v1과 v2가 몇번을 사용해야 하는 지를 알려주는 좌표값이다.
b는 좌표값인데 표준 좌표계가 숨어 있는 x의 또다른 좌표값이다.
따라서 x와 b는 서로 다른 좌표계를 사용해서 동일한 좌표를 표현하는 2가지 방식이다.

역행렬을 이용해 선형시스템의 해를 구하는 문제 역시 좌표계변환으로 바라볼 수 있다.

  • A^-1b = x
    표준좌표계에서 어떤 벡터의 좌표값은 x이다.
    A^-1의 열벡터들을 기저로 가지는 좌표계에서는 동일 벡터의 좌표값은 b이다.
  • Ax = b
    표준좌표계에서 어떤 벡터의 좌표값은 b이다.
    A의 열벡터들을 기저로 가지는 좌표계에서는 동일 벡터의 좌표값은 x이다.

행렬은 좌표계이고, 벡터는 좌표값이다.
임의의 v는 다양한 좌표계에서 표현될 수 있다.
표준좌표계에서 표현된 (I)v = A [V]a(좌표계A에서 표현된 v) = B [V]b(좌표계B에서 표현된 v)

6. 선형 변환Linear Transformation

행렬은 선형 함수다

함수 복습

함수는 두 집합 간의 맵핑룰mapping rule이다.
입력이 정의되는 집합을 정의역domain이라 한다. 출력이 정의 되는 집합을 공역codomain이라 하며, 공역 중 실제 함수의 출력이 나오는 부분 집합을 치역range이라고 한다. 함수 f는 정의역의 각 원소 x가 공역의 한원소 y에 대응되는 매핑룰이다.
f(x) = x^2 + 2x + 3
float f(floatx) {return xx + 2x + 3;}

선형 함수linear function

만일 함수 f가 아래 두가지 조건을 만족하면 함수 f를 선형함수이라고 한다.
f(x + y) = f(x) + f(y),
f(cx) = cf(x) (단, c는 임의의 스칼라)
위 식은 언뜻 보면 당연하게 보이지만, 실은 함수 f에 대해 전혀 당연하지 않은 성질을 설명하고 있다.

선형변환linear transformation : 행렬은 선형변환의 구현체

함수의 입력이 n벡터이고 출력이 m벡터인 함수 T가 있다면 이와 같이 함수의 입출력이 벡터인 함수를 변환transformation이라고 한다.
특별히 n = m인 경우, 해당 변환을 연산자operator라고 한다.

  • 변환의 예 : MNIST 손글씨 인식 문제
    예를 들어, 28 x 28 해상동의 손글씨 숫자영상을 그레이 스케일로 받아, 0부터 9까지의 어떤 숫자가 적혀있는지 알아내는 MNIST 손글씨 인식문제는 다음과 같은 (비선형) 변환이다.
    T : R^(28x28) -> R^10

행렬변환Matrix Transformation

m x n행렬 A에 대해 Ax는 n벡터를 입력으로 받아 m벡터를 출력으로 내는 변환 T(x) = Ax으로 볼 수 있다. 이 변환은 행렬이 정의하기 때문에 행렬변환이라고 한다. Ta : R^n -> R^m
그런데 행렬변환은 다음의 선형함수 성질을 모두 만족하기 때문에 선형변환이다.
A(x + y) = A(x) + A(y),
A(cx) = cA(x) (단, x, y in R^n이고, c는 임의의 스칼라)

  • 임의의 선형변환은 행렬로 표현가능하다. 즉, 행렬은 선형변환의 구현체이다.

표준행렬standard matrix : 선형변환 코딩하기

행렬변환이 입출력이 벡터로 정의된 선형함수라면, 해당함수를 어떻게 코딩할 수 있을까?
1. 구현하고자 하는 기능의 입력과 출력이 벡터로 정의되는지 확인한다.
2. 구현하고자 하는 기능이 선형인지 확인한다.(function을 그리면 선형으로 나오는지)
3. 입력이 n벡터이고, 출력이 m벡터이면 m x n 표준행렬을 구성한다.

표준행렬을 이용한 선형변환 코딩

A = [T(e1) T(e2) ... T(en)]
n차원 표준기저벡터 {e1, e2, ..., en}를 생각한다.
각 n차원 표준기저벡터 ei에 대해, 우리가 원하는 기능을 동작시켜 얻은 결과인 m차원 벡터 T(ei)를 표준행렬의 각 열에 적는다.

  • 2차원 벡터를 입력으로 받아, 해당 벡터를 x축에 프로젝션하는 기능을 구현해보자
    (3, 2) -> (3, 0)
    e1 = [[1][0]], e2 = [[0][1]]
    T(e1) = [[1][0]], T(e2) = [[0][0]]

  • 2차원 벡터를 입력으로 받아, 해당 벡터를 반시계 방향으로 x 회전하는 기능을 구현해보자
    우선 벡터를 입출력으로 쓰기 때문에 변환이다.
    직선을 넣었을 때 출력이 마찬가지로 직선으로 나오기 때문에 선형이다.
    e1 = [[1][0]], e2 = [[0][1]]
    T(e1) = [[cosx][sinx]], T(e2) = [[cos(x+90)][sin(x+90)]]

profile
chords & code // harmony with structure

0개의 댓글