* 이 공부노트는 프로그래머스 인공지능 데브코스 강창성 교수님의 강의를 바탕으로 제작되었습니다.
이제 배울 Deep learning을 이해할려면 반드시 선형대수, 행렬미분, 확률의 탄탄한 기초가 필요하다 하셨다.
Transformer의 attention matrix :
(뭔소리야)
처럼 핵심 아이디어가 행렬에 관한 식으로 표현되는 경우가 많다.
그래서 선형대수와 행렬미분의 기초를 배운다음 PCA를 유도해보고자 한다.
기본 표기법(Basic Notation)
- A∈Rm×n mxn의 행렬이란 의미. 행렬은 주로 대문자를 사용
- x∈Rn : n개의 벡터는 주로 소문자로 표시한다. 또한 n차원 벡터는 n개의 행과 1개의 열을 가진 행렬로 생각하고 이것을 열벡터(column vector)라 부르기도 함. xT(T는 transpose를 의미)는 행벡터를 표현
- 벡터 x의 i번째 원소는 xi로 표시한다.
x=[x1x2⋮xn] - aij(또는 Aij,Ai,j) : 행렬 A의 i번째 행, j번째 열에 있는 원소
A=[a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮am1am2⋯amn] - A의 j번째 열을 aj or A:,j로 표시
A=[|||a1a2⋯an|||] - A의 i번째 행을 aTi or Ai,:로 표시(여기서 이건 첨봤음 신기하네)
A=[aT1aT2⋮aTm]
행렬의 곱셈(Matrix Multiplication)
두 개의 행렬 A∈Rm×n, B∈Rn×p의 곱 C=AB∈Rm×p는 다음과 같이 정의된다.
행렬의 곱셈을 이해하는 몇 가지 방식들
- 벡터 × 벡터
- 행렬 × 벡터
- 행렬 × 행렬
내적 - x.dot(y)
두 개의 벡터 x,y∈Rn이 주어졌을 때 내적(inner product 또는 dot product) xTy는 다음과 같이 정의된다.
*내적은 두 벡터의 차원이 같아야 할 수 있다. - 왜? 스칼라 값을 만드니깐
외적일 경우에는 두 벡터의 차원이 달라도 가능하다! - 외적의 결과는 벡터니깐! 대신 mxn X nxk로 처럼 앞 행렬의 열과 뒤 행렬의 행이 같아야 쓸 수 있어! 결과값이 mxk로 나오니깐!
외적 - np.matmul(x,y)
두 개의 벡터 x∈Rm,y∈Rn이 주어졌을 때 외적(outer product) xyT∈Rm×n는 다음과 같이 정의된다.
자 여기서 수학적으로 궁금한 점이 내적(inner product)과 외적(outer product)의 차이가 뭔가?
- 내적 : 마치수처럼 곱하는 개념이라 한다. 벡터는 방향이 있으니깐 방향이 맞는 만큼만 곱한다는 뜻이다. 즉 a와 b란 벡터를 곱하는데, a의 방향과 b의 방향이 일치하면 기냥 곱해주면 되고, 만약 90도라면 0이 된다.

- 외적 : 외적의 결과값은 또 벡터란다. 방향은 곱하는 두 벡터의 cross이고 두 크기는 두벡터가 이루는 사각형의 넓이이다. 외적의 연산 기호는 cross (→u×→v). 외적의 크기만 보면

다시 한번 말하지만, 내적의 결과값은 스칼라이고, 외적의 결과값은 벡터란 소리!
중요 연산과 성질들 (Operations and Properties)
정방행렬(Square matrix)
: 행과 열의 개수가 동일한 행렬
상삼각행렬(Upper triangular matrix)
: 정방행렬이지만 주 대각선 아래 원소들이 모두 0인 행렬
하삼각행렬(Lower triangular matrix)
: 정방행렬이지만 주 대각선 위 원소들이 모두 0인 행렬
대각행렬(Diagonal matrix) - np.diag([4, 5, 6])
: 정방행렬이며 주 대각선 제외 모든 원소가 0인 행렬
코드 : np.diag([4, 5, 6])
결과 : array([[4, 0, 0],
[0, 5, 0],
[0, 0, 6]])
코드 : np.diag(D) #D는 [[1,2,3],[4,5,6],[7,8,9],] 행렬
결과 : array([1,5,9]) #대각선의 값들만 추출
단위행렬(identity matrix) - np.eye(3)
: 대각행렬이며 주대각선 원소들이 모두 1인 행렬. I로 표시한다.
전치(Transpose) - 행렬.T
행렬을 전치하는 것은 행렬을 뒤집는 것이다. 행렬 A∈Rm×n 일 때, 이것의 전치행렬은 AT∈Rn×m 표시한다.
또한 다음의 성질들을 성립한다.
- (AT)T=A : 뒤집었다가 다시 뒤집으니 원상태로 돌아옴.
- (AB)T=BTAT : 곱의 Transpose를 씌우게 되면, 순서가 바뀐다.
- (A+B)T=AT+BT : 더하기는 그대로~
$ A^T =
위의 공식과 동일한지 예제를 통해 확인.
A= np.array([[1,2,3],[4,5,6]])
코드 : A.T
결과 : array([[1, 4],
[2, 5],
[3, 6]])
B = np.array([[1,2], [4, 5], [6, 7]])
코드 : np.matmul(A, B).T
결과 : array([[27, 60],
[33, 75]])
코드 : np.matmul(B.T, A.T)
결과 : array([[27, 60],
[33, 75]])
대칭행렬 (Symmetic Matrices)
주대각선을 기준으로 해서 양방향에 있는 값들이 같으면 대칭행렬이다.
그러면 전치를 해도 똑같다.
정방행렬 A가 AT와 동일할 때 대칭행렬이라고 부른다. A=−AT일 때는 반대칭(anti-symmetric)행렬이라고 부른다.
BBT는 항상 대칭행렬 : (BBT)T=(BT)TBT=BBT 이므로 BBT란 행렬 또한 대칭행렬이다. (여기서 B는 대칭행렬, 정방행렬일 필요는 없다.)
C+CT는 대칭, C−CT는 반대칭이다. (여기서 C는 대칭행렬일 필욘없지만 정방행렬이여야한다.)
A = np.array([[1,2,3],[4,5,6]])
B = np.array([[1, 2], [4, 5], [6, 7]])
C = np.array([[1,4,6],[3,5,7],[6,9,2]])
코드 : np.matmul(A, A.T)
결과 : array([[14, 32],
[32, 77]])
코드 : np.matmul(B, B.T)
결과 : array([[17, 22, 27],
[22, 29, 36],
[27, 36, 45]])
코드 : C+C.T
결과 : array([[ 2, 7, 12],
[ 7, 10, 16],
[12, 16, 4]])
코드 : C-C.T
결과 : array([[ 0, 1, 0],
[-1, 0, -2],
[ 0, 2, 0]])
대각합 (Trace) - np.trace(A)
정방행렬 A∈Rn×n의 대각합은 tr(A)로 표시(또는 trA)하고 그 값은 ∑ni=1Aii이다. 대각합은 다음과 같은 성질을 가진다.
- For A∈Rn×n, trA=trAT : 행렬 A와 전치 A행렬의 대각합은 같다. 당연한것.
- For A,B∈Rn×n, tr(A+B)=trA+trB : 두개의 같은 차원의 행렬이 있을 때, 합한 행렬의 대각합은 각각의 대각합의 더한 것과 같다. 당연하지.
- For A∈Rn×n,t∈R, tr(tA)=ttrA : 실수값 t를 곱했을때.
- For A,B such that AB is square, trAB=trBA : A,B두개를 곱한 행렬이 정방행렬이 되는 경우에 AB의 대각합과 BA의 대각합이 같다.
- For A,B,C such that ABC is square, trABC=trBCA=trCAB, and so on for the product of more matrices : 여러개의 행렬이 있을 때, 그 전체 곱이 정방행렬인 경우에 ABC의 대각합=BCA의 대각합=CAB의 대각합은 같다.
A = np.array([
[100, 200, 300],
[ 10, 20, 30],
[ 1, 2, 3],
])
코드 : np.trace(A)
결과 : 123
Norms - LA.norm(np.array([3,4])
import numpy.linalg as LA
벡터의 norm은 **벡터의 길이**로 이해할 수 있다. l2 norm (Euclidean norm)은 다음과 같이 정의된다.
‖x‖22=xTx임을 기억하라.
lp norm
Frobenius norm (행렬에 대해서) :행렬에 대한 norm
A = np.array([
[100, 200, 300],
[ 10, 20, 30],
[ 1, 2, 3],
])
코드 : LA.norm(A)
결과 : 376.0505285197722
코드 : np.trace(A.T.dot(A))**0.5
결과 : 376.0505285197722
뭔소린지 몰라서 한번 해봤다.
결국 대각합을 하면 a12+b12+c12+a22+b22+c22+a32+b32+c32 가 된다.
'ML > ML-수학, 확률과 통계' 카테고리의 다른 글
정규화(Normalization)와 표준화(Standardization)를 하는 이유 (0) | 2022.01.05 |
---|---|
평균, 분산, 표준편차의 이야기 (0) | 2022.01.04 |
확률분포(Probability Disstributions)- 이산확률분표(이항분포만) (0) | 2021.06.07 |
선형대수(Linear algebra)-행렬, 행렬의 곱, 성질(2) (0) | 2021.06.03 |
확률과 통계 - 베이즈 정리 (0) | 2021.06.02 |
댓글