Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Math Tutorial I
Linear Algebra & Matrix Calculus
임성빈
Linear Algebra
이튜토리얼은Python NumPy 라이브러리를사용합니다
import numpy as np
import numpy.linalg as linalg
벡터(Vector)
x = (x , x , … , x )
벡터는기하적인공간의단위원소를표현합니다
벡터는각 성분의데이터타입이같아야합니다
벡터는행벡터(row vector)와열벡터(column vector)로구분합니다
Note...
배열(array)
x = (x , x , … , x )
벡터를표현하는가장간단한방법
수학자들은이걸 d 차원튜플(tuple)이라부릅니다
파이썬커뮤니티에선1차원배열이라부릅니다
x = np.array([x1, ... ,xd])...
행벡터(row vector)
x =
x = np.array([[x1, ... , xd]]) # 2차원 배열
x = np.matrix([[x1, ... ,xd]]) # (1,d) 행렬
x.shape
[x , x , ⋯ ,...
열벡터(column vector)
x =
x = np.array([[x1], ... ,[xd]]) # 2차원 배열
x = np.matrix([[x1], ... ,[xd]]) # (d,1) 행렬
x.shape
⎣
⎢
⎢
...
Note : NumPy 에서배열에np.matrix 를적용하면행벡터로변환합니다
u = np.array([x1, ... , xd]) # (d, ) 배열
v = np.matrix(u) # (d,1) 행렬
v == np.arr...
벡터연산(Operation of vectors)
덧셈& 뺄셈
v + u = (v + u , ⋯ , v + u )
v − u = (v − u , ⋯ , v − u )
v+u, v-u
1 1 d d
1 1 d d
곱셈
스칼라곱 (Scalar product)
αv = (αv , ⋯ , αv )
alpha * v 또는 np.multiply(alpha,v)
성분곱 Elementwise multiplication (Hadamard pr...
내적(Inner product)
v ⋅ u = v u
np.inner(v,u)
i=1
∑
d
i i
행렬(Matrix)
X = = (x )
X 를(n × m) 행렬이라부릅니다
파이썬에선행렬을2차원배열로정의합니다
X = np.array([[x11,...,x1m],...,[xn1,...,xnm]])
X = np.matri...
행렬은각 성분이배열로이루어진배열로나타낼수있습니다
X = (x , ⋯ ,x ) =
x_i = np.array([x_i1, ... , x_im]) # i = 1,...,n
X = np.array([x_1, ... , x_n...
텐서(Tensor)
X = (x )
텐서는수학에서벡터, 행렬을3차원이상으로일반화시킨개념
벡터는1차원텐서, 행렬은2차원텐서
텐서는각 성분이행렬로이루어진배열로나타낼수있습니다
XX = np.array([[[x111, .. ,...
왜텐서를쓰죠?
대부분의시공간 데이터는3차원이상구조로표현됩니다
영상은2차원행렬× RGB
시계열데이터는시간축포함
d ≥ 3 이상인공간에서미적분학을기술할때유용합니다
텐서에익숙해지면Back propagation 계산이쉬워집니다...
텐서연산의예
행렬연산
행렬의덧셈뺄셈은벡터와같습니다
X + Y = (x + y )ij ij (n×m
행렬의곱셈은한가지를제외하고 벡터연산과 같습니다
스칼라곱
성분곱
내적
행렬의곱셈은한가지를제외하고 벡터연산과 같습니다
스칼라곱
성분곱
행렬곱
행렬곱 (Matrix multiplication)
X : (n × m ) 행렬, Y : (m × m) 행렬
XY = x y = (x ⋅y )
X = np.random.normal(0,1,(n,p)) # (n,p)행렬 생...
Transpose
행렬의각 성분들의행과 열을바꾸는걸 전치(Transpose)라합니다.
X = (x ) →  X = (x )
벡터도전치가 가능합니다
v = (v ) →  v = (v )
X = np.array([[x11,...
몇가지알아둬야할것들
1. v, u 가 벡터인경우
v u =u v
2. X, Y 가 행렬인경우
(X ) = X
(XY) =Y X
(X + Y) =X +Y
T T
T T
T T T
T T T
NumPy 에서행렬연산시주의할점
u = np.array([[1,2,3],[4,5,6]]) # (2,3) 행렬
v = np.array([[1,0,0],[0,1,0]])
u*v # 성분곱 (2,3) 행렬
np.matmul(...
단위행렬과 역행렬
1. 단위행렬(Identity matrix)
I =
np.identity(n) # (n,n) 단위행렬
n
⎣
⎢
⎢
⎡1
0
⋮
0
0
1
⋮
0
⋯
⋯
⋮
⋯
0
0
⋮
1⎦
⎥
⎥
⎤
2. 역행렬(Inverse matrix)
XY =I = YX
이때Y =X 이라쓴다. 역행렬은유일하게 존재한다.
linalg.inv(X) # (n,n) 행렬
n
−1
역행렬의(잘알려진) 활용
선형연립방정식:
a x = b , i ∈ {1, ⋯ , n}
Ax = b
A 가 존재한다면위방정식의해는
x =A b
j=1
∑
n
ij j i
−1
−1
몇가지알아둬야할것들
1. X, Y 의역행렬이모두존재하는경우
(X ) = X
(X ) = (X )
(XY) =Y X
−1 −1
T −1 −1 T
−1 −1 −1
행렬식(Determinant)
X = (x , ⋯ ,x ) : (n × n) 행렬
det(X) = ∣X∣ = ∣x ∣
행렬식은모서리가 벡터x , ⋯ ,x 로이루어진n‑차원큐브의부피입니다
linalg.det(X)
1 n
...
X = (x ,x ,x ) =1 2 3
⎣
⎡x11
x21
x31
x12
x22
x32
x13
x23
x33
⎦
⎤
det(X) ≠ 0 이면역행렬X 이존재합니다
det(X) = 0 이면역행렬X 이존재하지않습니다
그러나유사역행렬(Pseudo inverse matrix)은구할수있습니다
−1
−1
예제) 다음행렬의역행렬을구해보세요
A =
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
linalg.det(A)
linalg.inv(A)
⎣
⎡1
4
7
2
5
8
3
6
9⎦
⎤
역행렬이존재하지않는데가끔 linalg.inv 가 동작할때가 있습니다
그때는행렬식의값이너무작지않은지또는역행렬이너무크지않은지
조건상수(condition number)를확인해야합니다
Norm
∥X∥ (1 ≤ p ≤ ∞)
Norm 은벡터, 행렬의크기 (≠ 부피)를나타내는양입니다
수치해석학에선Norm 의크기를통해오차를제어할수있습니다
p
∥X∥ = ∣x ∣
linalg.norm(X,1)
∥X∥ =
linalg.norm(X,2)
linalg.norm(X, 'fro')
∥X∥ = ∣x ∣
linalg.norm(X, np.inf)
1
1≤j≤m
max
i=1...
Ax = b
K(A) = ∥A∥∥A ∥ : 조건상수
x : 참값,   : 추정값
≤ ≤ K(A)
−1
x^
K(A)
1
∥b∥
∥A − b∥x^
∥ ∥x^
∥x − ∥x^
∥b∥
∥A − b∥x^
몇가지알아둬야할용어들
대각행렬(Diagonal matrix)
D = (d )
대칭행렬(Symmetric matrix)
a = a
ii (n×n)
ij ji
단위벡터(Unit vector)
∥v∥ = (v ⋅ v) = 1
직교행렬(Orthogonal matrix)
A =A
정규직교행렬(Orthonormal matrix) : 직교행렬& 각 성분이단위벡터
∥A ∥ = 1, 1 ...
행렬분해(Matrix Decomposition)
대각분해(Diagonal Decomposition)
A = UDU
특이벡터분해(SVD, Singular Vector Decomposition)
A = UDV
LU분해, C...
X = np.array([[x11,..,x1m],..,[xn1,..,xnm]]) # (n,m) 행렬
SVD = linalg.svd(X) # [(n,n)행렬, (n,m)행렬, (m,m)행렬]
SVD[0] # 정규직교행렬
...
유사역행렬(Moore‑Penrose Pseudoinverse)
SVD 를이용한다
A = UDV
이때A의유사역행렬은
A = VD U
linalg.pinv(A)
T
+ + T
Linear algebra
Nächste SlideShare
Wird geladen in …5
×

Linear algebra

4.993 Aufrufe

Veröffentlicht am

기초적인 Linear Algebra 와 Matrix Calculus 부터 Back-propagation 까지 유도하는 슬라이드입니다. 본 슬라이드에서는 NumPy 와 선형대수를 다룹니다.

Veröffentlicht in: Daten & Analysen

Linear algebra

  1. 1. Math Tutorial I Linear Algebra & Matrix Calculus 임성빈
  2. 2. Linear Algebra
  3. 3. 이튜토리얼은Python NumPy 라이브러리를사용합니다 import numpy as np import numpy.linalg as linalg
  4. 4. 벡터(Vector) x = (x , x , … , x ) 벡터는기하적인공간의단위원소를표현합니다 벡터는각 성분의데이터타입이같아야합니다 벡터는행벡터(row vector)와열벡터(column vector)로구분합니다 Note : 성분x 자리에벡터나행렬또는함수가 들어와도된다 1 2 d i
  5. 5. 배열(array) x = (x , x , … , x ) 벡터를표현하는가장간단한방법 수학자들은이걸 d 차원튜플(tuple)이라부릅니다 파이썬커뮤니티에선1차원배열이라부릅니다 x = np.array([x1, ... ,xd]) # 배열 x.shape # (d, ) 1 2 d
  6. 6. 행벡터(row vector) x = x = np.array([[x1, ... , xd]]) # 2차원 배열 x = np.matrix([[x1, ... ,xd]]) # (1,d) 행렬 x.shape [x , x , ⋯ , x1 2 d]
  7. 7. 열벡터(column vector) x = x = np.array([[x1], ... ,[xd]]) # 2차원 배열 x = np.matrix([[x1], ... ,[xd]]) # (d,1) 행렬 x.shape ⎣ ⎢ ⎢ ⎡x1 x2 ⋮ xd ⎦ ⎥ ⎥ ⎤
  8. 8. Note : NumPy 에서배열에np.matrix 를적용하면행벡터로변환합니다 u = np.array([x1, ... , xd]) # (d, ) 배열 v = np.matrix(u) # (d,1) 행렬 v == np.array([[x1, ... , xd]]) # True
  9. 9. 벡터연산(Operation of vectors) 덧셈& 뺄셈 v + u = (v + u , ⋯ , v + u ) v − u = (v − u , ⋯ , v − u ) v+u, v-u 1 1 d d 1 1 d d
  10. 10. 곱셈 스칼라곱 (Scalar product) αv = (αv , ⋯ , αv ) alpha * v 또는 np.multiply(alpha,v) 성분곱 Elementwise multiplication (Hadamard product) v ⊙ u = (v u , ⋯ , v u ) v * u 또는 np.multiply(v,u) 1 d 1 1 d d
  11. 11. 내적(Inner product) v ⋅ u = v u np.inner(v,u) i=1 ∑ d i i
  12. 12. 행렬(Matrix) X = = (x ) X 를(n × m) 행렬이라부릅니다 파이썬에선행렬을2차원배열로정의합니다 X = np.array([[x11,...,x1m],...,[xn1,...,xnm]]) X = np.matrix([[x11,...,x1m],...,[xn1,...,xnm]]) X.shape # (n,m) 행렬 ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎡x11 x21 ⋮ xn1 ⋯ ⋯ xij ⋯ x1m x2m ⋮ xnm ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎤ ij n×m
  13. 13. 행렬은각 성분이배열로이루어진배열로나타낼수있습니다 X = (x , ⋯ ,x ) = x_i = np.array([x_i1, ... , x_im]) # i = 1,...,n X = np.array([x_1, ... , x_n]) # (n,m) 행렬 Quiz : 각 성분이행렬로이루어진배열은무엇일까요? 1 n ⎣ ⎢ ⎢ ⎡x1 x2 ⋮ xn ⎦ ⎥ ⎥ ⎤
  14. 14. 텐서(Tensor) X = (x ) 텐서는수학에서벡터, 행렬을3차원이상으로일반화시킨개념 벡터는1차원텐서, 행렬은2차원텐서 텐서는각 성분이행렬로이루어진배열로나타낼수있습니다 XX = np.array([[[x111, .. , x11p], .. ,[x1m1, .. ,x1mp]], ... [[xn11, .. , xn1p], .. ,[xnm1, .. ,xnmp]]]) ijk (n×m×p)
  15. 15. 왜텐서를쓰죠? 대부분의시공간 데이터는3차원이상구조로표현됩니다 영상은2차원행렬× RGB 시계열데이터는시간축포함 d ≥ 3 이상인공간에서미적분학을기술할때유용합니다 텐서에익숙해지면Back propagation 계산이쉬워집니다! 유사품으로행렬미적분학(Matrix calculus) 을많이씁니다.
  16. 16. 텐서연산의예
  17. 17. 행렬연산 행렬의덧셈뺄셈은벡터와같습니다 X + Y = (x + y )ij ij (n×m
  18. 18. 행렬의곱셈은한가지를제외하고 벡터연산과 같습니다 스칼라곱 성분곱 내적
  19. 19. 행렬의곱셈은한가지를제외하고 벡터연산과 같습니다 스칼라곱 성분곱 행렬곱
  20. 20. 행렬곱 (Matrix multiplication) X : (n × m ) 행렬, Y : (m × m) 행렬 XY = x y = (x ⋅y ) X = np.random.normal(0,1,(n,p)) # (n,p)행렬 생성 Y = np.random.normal(0,1,(p,m)) # (p,m)행렬 생성 np.matmul(X,Y) # (n,m)행렬 np.matmul(Y,X) # 에러 ′ ′ ( k=1 ∑ m′ ik kj) (n×m) i j T
  21. 21. Transpose 행렬의각 성분들의행과 열을바꾸는걸 전치(Transpose)라합니다. X = (x ) →  X = (x ) 벡터도전치가 가능합니다 v = (v ) →  v = (v ) X = np.array([[x11,..,x1m],..,[xn1,..,xnm]]) # (n,m) 행렬 X_transpose = np.transpose(X) # (m,n) 행렬 X.T ij (n×m) T ji (m×n) i (d×1) T i 1×d
  22. 22. 몇가지알아둬야할것들 1. v, u 가 벡터인경우 v u =u v 2. X, Y 가 행렬인경우 (X ) = X (XY) =Y X (X + Y) =X +Y T T T T T T T T T T
  23. 23. NumPy 에서행렬연산시주의할점 u = np.array([[1,2,3],[4,5,6]]) # (2,3) 행렬 v = np.array([[1,0,0],[0,1,0]]) u*v # 성분곱 (2,3) 행렬 np.matmul(u.T, v) # 행렬곱 (3,3) 행렬 np.matmul(u, v.T) # 행렬곱 (2,2) 행렬 u = np.matrix([[1,2,3],[4,5,6]]) v = np.matrix([[1,0,0],[4,5,6]]) np.multiply(u,v) # 성분곱 (2,3) 행렬 u.T * v # 행렬곱 (3,3) 행렬 u * v.T # 행렬곱 (2,2) 행렬 u*v # 에러
  24. 24. 단위행렬과 역행렬 1. 단위행렬(Identity matrix) I = np.identity(n) # (n,n) 단위행렬 n ⎣ ⎢ ⎢ ⎡1 0 ⋮ 0 0 1 ⋮ 0 ⋯ ⋯ ⋮ ⋯ 0 0 ⋮ 1⎦ ⎥ ⎥ ⎤
  25. 25. 2. 역행렬(Inverse matrix) XY =I = YX 이때Y =X 이라쓴다. 역행렬은유일하게 존재한다. linalg.inv(X) # (n,n) 행렬 n −1
  26. 26. 역행렬의(잘알려진) 활용 선형연립방정식: a x = b , i ∈ {1, ⋯ , n} Ax = b A 가 존재한다면위방정식의해는 x =A b j=1 ∑ n ij j i −1 −1
  27. 27. 몇가지알아둬야할것들 1. X, Y 의역행렬이모두존재하는경우 (X ) = X (X ) = (X ) (XY) =Y X −1 −1 T −1 −1 T −1 −1 −1
  28. 28. 행렬식(Determinant) X = (x , ⋯ ,x ) : (n × n) 행렬 det(X) = ∣X∣ = ∣x ∣ 행렬식은모서리가 벡터x , ⋯ ,x 로이루어진n‑차원큐브의부피입니다 linalg.det(X) 1 n ij 1 n
  29. 29. X = (x ,x ,x ) =1 2 3 ⎣ ⎡x11 x21 x31 x12 x22 x32 x13 x23 x33 ⎦ ⎤
  30. 30. det(X) ≠ 0 이면역행렬X 이존재합니다 det(X) = 0 이면역행렬X 이존재하지않습니다 그러나유사역행렬(Pseudo inverse matrix)은구할수있습니다 −1 −1
  31. 31. 예제) 다음행렬의역행렬을구해보세요 A = A = np.array([[1,2,3],[4,5,6],[7,8,9]]) linalg.det(A) linalg.inv(A) ⎣ ⎡1 4 7 2 5 8 3 6 9⎦ ⎤
  32. 32. 역행렬이존재하지않는데가끔 linalg.inv 가 동작할때가 있습니다 그때는행렬식의값이너무작지않은지또는역행렬이너무크지않은지 조건상수(condition number)를확인해야합니다
  33. 33. Norm ∥X∥ (1 ≤ p ≤ ∞) Norm 은벡터, 행렬의크기 (≠ 부피)를나타내는양입니다 수치해석학에선Norm 의크기를통해오차를제어할수있습니다 p
  34. 34. ∥X∥ = ∣x ∣ linalg.norm(X,1) ∥X∥ = linalg.norm(X,2) linalg.norm(X, 'fro') ∥X∥ = ∣x ∣ linalg.norm(X, np.inf) 1 1≤j≤m max i=1 ∑ n ij H ⎷    x i=1 ∑ n j=1 ∑ m ij 2 ∞ 1≤i≤n max j=1 ∑ m ij
  35. 35. Ax = b K(A) = ∥A∥∥A ∥ : 조건상수 x : 참값,   : 추정값 ≤ ≤ K(A) −1 x^ K(A) 1 ∥b∥ ∥A − b∥x^ ∥ ∥x^ ∥x − ∥x^ ∥b∥ ∥A − b∥x^
  36. 36. 몇가지알아둬야할용어들 대각행렬(Diagonal matrix) D = (d ) 대칭행렬(Symmetric matrix) a = a ii (n×n) ij ji
  37. 37. 단위벡터(Unit vector) ∥v∥ = (v ⋅ v) = 1 직교행렬(Orthogonal matrix) A =A 정규직교행렬(Orthonormal matrix) : 직교행렬& 각 성분이단위벡터 ∥A ∥ = 1, 1 ≤ i ≤ n 1/2 T −1 i
  38. 38. 행렬분해(Matrix Decomposition) 대각분해(Diagonal Decomposition) A = UDU 특이벡터분해(SVD, Singular Vector Decomposition) A = UDV LU분해, Cholesky분해, QR분해, Polar분해, + 13 T T
  39. 39. X = np.array([[x11,..,x1m],..,[xn1,..,xnm]]) # (n,m) 행렬 SVD = linalg.svd(X) # [(n,n)행렬, (n,m)행렬, (m,m)행렬] SVD[0] # 정규직교행렬 np.matmul(SVD[0],SVD[0].T) SVD[1] # 대각행렬 : array 로 출력 SVD[2] # 정규직교행렬
  40. 40. 유사역행렬(Moore‑Penrose Pseudoinverse) SVD 를이용한다 A = UDV 이때A의유사역행렬은 A = VD U linalg.pinv(A) T + + T

×