Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기
ML/ML-수학, 확률과 통계

선형대수(Linear algebra)-행렬, 행렬의 곱, 성질(2)

by lucian 2021. 6. 3.

* 이 공부노트는 프로그래머스 인공지능 데브코스 강창성 교수님의 강의를 바탕으로 제작되었습니다.

* 이번엔 진짜 이해하기 힘들 것을 알아가면서 정리해보자(지친다ㅜㅜ).

 


치역(Range), 영공간(Nullspace)

 

벡터의 집합({x1,x2,,xn})에 대한 생성(span)
span({x1,x2,,xn})={v:v=ni=1αixi,αiR}

 

행렬의 치역 (range)
행렬 ARm×n의 치역 R(A)는 A의 모든 열들에 대한 생성(span)이다.
R(A)={vRm:v=Ax,xRn}

 

이 부분을 해석하기 어려웠다. 그러나 나름 간단하다.

A라는 행렬이 있을 때, 행렬의 열 벡터가 치역(결과가 되는). 그 모든 결과값이 열공간이라 하고 치역이라 한다.

[1224][ac]=[a+2c2a+4c]

 

여기서 결과 벡터가 치역이 된다. 이는 a와 c에 어떤 값을 넣어도 y=2x값의 선형값으로 바뀌기에 치역이라고 하며, 열공간이라 한다.(rank가 1이라 하나의 선으로 나왔을 뿐, rank가 2이상이면 공간이 될 것이라 생각한다.) 

 

영공간 (nullspace)
행렬 ARm×n의 영공간(nullspace) N(A)는 A와 곱해졌을 때 0이 되는 모든 벡터들의 집합이다.
N(A)={xRn:Ax=0}

중요한 성질: {w:w=u+v,uR(AT),vN(A)}=Rn and R(AT)N(A)={0}

R(AT)와 N(A)를 직교여공간(orthogonal complements)라고 부르고 R(AT)=N(A)라고 표시한다.

 

출처 : 공돌이의 수학정리노트

A행렬의 열벡터의 공간과 행백터의 공간을 그려준다.

A의 열벡터 [2,4] [1,2]

      행벡터 [2,1] [4,2]

위의 공식처럼 Ax=0 와 같은 공간을 만들면, 예로 [-1,2]와 [1,-2]는 각각 0이 된다. 이를 기준으로 그려주면 행공간과 영공간이 서로 직교함을 볼 수 있다. 

 

위의 개념을 이해하는데 공돌이의 수학정리노트가 짱이였다.... 나중에 보기 위해 링크를 걸어놓는다.

https://angeloyeo.github.io/2020/09/09/row_vector_and_inner_product.html

 

행벡터의 의미와 벡터의 내적 - 공돌이의 수학정리노트

 

angeloyeo.github.io

 

 


행렬식 - LA.det(A)

정방행렬 ARn×n의 행렬식(determinant) |A| (또는 detA)는 다음과 같이 계산할 수 있다.
|A|=A1,1×|A(1,1)|A1,2×|A(1,2)|+A1,3×|A(1,3)|A1,4×|A(1,4)|+±A1,n×|A(1,n)|

where A(i,j) is the matrix A without row i and column j.

A=[123456780]
위 식을 사용하면 아래와 같이 전개된다.

|A|=1×|[5680]|2×|[4670]|+3×|[4578]|

이제 위의 2×2 행렬들의 행렬식을 계산하면 된다.
|[5680]|=5×06×8=48
|[4670]|=4×06×7=42
|[4578]|=4×85×7=3
최종결과는 다음과 같다.

|A|=1×(48)2×(42)+3×(3)=27

 

 

행렬식의 기하학적 해석

 

행렬의 행벡터가 이루는 행벡터의 공간(집합 S라 치면) = 행렬식의 절대값과 부피가 일치함을 보인다. 

(단 계수는 0~1사이)
다시 말해 행렬식의 절대값이 이 S의 부피(volume)과 일치함.
예를 들어, 행렬
A=[1332]
의 행벡터들은
a1=[13]a2=[32]
이다. S에 속한 점들을 2차원평면에 나타내면 다음과 같다.

평행사변형 S의 넓이는 7인데 이 값은 A의 행렬식 |A|=7의 절대값과 일치함을 알 수 있다.

 


 

이차형식(Quadratic Forms)

정방행렬 ARn×n와 벡터 xRn가 주어졌을 때, scalar값 xTAx를 이차형식(quadratic form)이라고 부른다. ((1×n)(n×n)(n×1)=scalar)

 

식으로 표현하면,

xTAx=ni=1xi(Ax)i=ni=1xi(nj=1Aijxj)=ni=1nj=1Aijxixj

 

다음이 성립됨을 확인할 수 있다.

xTAx=(xTAx)T=xTATx=xT(12A+12AT)x

 

xTAx+xTATx=2(xTAx)

12(xTAx+xTATx)=xTAx

xT(12A+12AT)x=xTAx

따라서 이차형식에 나타나는 행렬은 대칭행렬로 가정하는 경우가 만다.

( (12A+12AT\)=대칭행렬)

 

- 대칭행렬 A가 0이 아닌 모든 벡터 x에 대해서 xTAx>0을 만족할 때, 양의 정부호(positive definite)라고 부르고 A0(또는 단순히 A>0)로 표시한다. 모든 양의 정부호 행렬들의 집합을 Sn++으로 표시한다.
- 대칭행렬 A가 0이 아닌 모든 벡터 x에 대해서 xTAx0을 만족할 때, 양의 준정부호(positive sesmi-definite)라고 부르고 A0(또는 단순히 A0)로 표시한다. 모든 양의 준정부호 행렬들의 집합을 Sn+으로 표시한다.
- 대칭행렬 A가 0이 아닌 모든 벡터 x에 대해서 xTAx<0을 만족할 때, 음의 정부호(negative definite)라고 부르고 A0(또는 단순히 A<0)로 표시한다.
- 대칭행렬 A이 0이 아닌 모든 벡터 x에 대해서 xTAx0을 만족할 때, 음의 준정부호(negative sesmi-definite)라고 부르고 A0(또는 단순히 A0)로 표시한다.
- 대칭행렬 A가 양의 준정부호 또는 음의 준정부호도 아닌 경우, 부정부호(indefinite)라고 부른다. 이것은 xT1Ax1>0,xT2Ax2<0을 만족하는 x1,x2Rn이 존재한다는 것을 의미한다.

Positive definite 그리고 negative definite 행렬은 full rank이며 따라서 invertible이다.

 

Gram matrix - ML을 하게되면 자주나오는 특별한 행렬

임의의 행렬 ARm×n이 주어졌을 때 행렬 G=ATA를 Gram matrix(transpose한 것과 곱해서 늘 대칭행렬)라고 부르고 항상 positive semi-definite이다. 만약 mn이고 A가 full rank이면, G는 positive definite이다.

 


고유값 (Eigenvalues), 고유벡터 (Eigenvectors) - eigenvalues, eigenvectors = LA.eig(A)

정방행렬 ARn×n이 주어졌을 때, Ax=λx,x0
을 만족하는 λC를 A의 고유값(eigenvalue) 그리고 xCn을 연관된 고유벡터(eigenvector)라고 부른다.
C : 실수값이 아닌 complex num. 복소수(i2=1)

A=np.array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 0]])
       
코드 : eigenvalues, eigenvectors = LA.eig(A)
	   eigenvalues, eigenvectors
결과 : (array([12.12289378, -0.38838384, -5.73450994]),
 	   array([[-0.29982463, -0.74706733, -0.27625411],
              [-0.70747178,  0.65820192, -0.38842554],
              [-0.63999131, -0.09306254,  0.87909571]]))
              
코드 : np.matmul(A, eigenvectors[:, 0])
결과 : array([-3.63474211, -8.57660525, -7.75854663])

코드 : eigenvalues[0] * eigenvectors[:, 0]
결과 : array([-3.63474211, -8.57660525, -7.75854663])

 


행렬미분 (Matrix Calculus)

The Gradient

행렬 ARm×n를 입력으로 받으면 미분한 행렬의 형태로 반환하는 함수이다.

Af(A)Rm×n=[f(A)A11f(A)A12f(A)A1nf(A)A21f(A)A22f(A)A2nf(A)Am1f(A)Am2f(A)Amn]

다시 말해 이 gradient(Af(A))에 행렬A가 들어오면 결과로 행렬이 나온다.

 

(Af(A))ij=f(A)Aij

 

그럼 벡터로 들어오면 어떻게 될까??

xf(x)=[f(x)x1f(x)x2f(x)xn]

이처럼 gradient(xf(x))에 벡터x가 들어오면 결과로 벡터가 나온다.

 

 

중요한 공식들

x,bRnASn일 때 다음이 성립한다.  
A는 대칭행렬이라 가정한다.

(굉장히 자주 쓰일 공식들이라고 막 알고 있어야 된다고 하셨음...)
1. xbTx=b                              : 대충 bxf(x)x=b 이런 느낌??
2. xxTAx=2Ax                          : 이건 이건가? Ax2f(x)x=2Ax
3. 2xxTAx=2A                        : Ax2f(x)x2=2A
4. Alog|A|=A1 (ASn++인 경우)

 

댓글