-
머신러닝 수업 2주차 - Overview & Basic MathsSW개발/머신러닝 2018. 9. 12. 22:04
2018.09.12
Overview
오늘부터 Chapter 하나씩 나갈 것이고, 오늘 다룰 내용은 Introduction 챕터이다.
머신러닝 나가기 전에 hierarchy를 먼저 설명하면 다음과 같다.
위에 있는 위키피디아 설명을 먼저 보면, 머신이나 컴퓨터가 intelligence 갖고 있고, 환경을 인식하고 액션을 한다.
그 아래에 있는 hierarchy를 보면, AI는 이것을 다 다룬다. 우리는 맨 위에 머신 러닝 부분만 다룰 것이다.
다른 필드도 언급을 할 것이다. 머신 러닝은 단순히 알고리즘이나 모델 이기 때문에 그것만으로는 아무것도 못한다. 머신 러닝 왼쪽에 있는 딥러닝은 머신 러닝의 많은 다른 알고리즘 중 하나이다.
첫번째로 머신러닝 컨셉과 전통적인 프로그래밍을 비교해서 볼것이다.
1. 전통적인 프로그래밍
"Sequence of instruction that should be carried out to transform the input to output"
- sequence of instruction은 컴퓨터 인스트럭션을 말한다.
- that should be carried out to transform the input to output
어쨌든 시스템이 인풋과 아웃풋을 가지고 있고, output을 input에 따라 매핑한다.
이 알고리즘은 데이터 주면, 이 프로그램은 기본적으로 이 데이터를 적절히 다루도록 디자인 되어있다.
그리고 그 프로그램은 인간에 의해 작성된다.
2. 머신러닝
input과 output은 클리어한데, program이 데이터를 어떻게 다루는지는 알려지지 않는다.
이 시스템을 kind of preprocessing이나 learning processing이라고 할 것이다.
우리는 task에 따른 desired output이 있다. 그리고 아까 프로그램이라는 알고리즘과 달리 learning 알고리즘이라고 불리는 또 하나의 알고리즘이 있다. 이것은 직접 짠 프로그램과 달리 특정 task나 application을 위한 게 아니라 general한 모델이다.
이 learning 알고리즘이 또 다른 형태의 알고리즘이나 프로그램을 만들어낸다.
이 알고리즘이 data와 desired output 사이 규칙을 찾아내고 mapping을 찾아낸다.
프로그램이나 알고리즘을 사람이 만드는 대신 프로그램이 머신러닝 알고리즘을 만들어낸다는게 머신 러닝의 key concept이다.
머신러닝은 항상 데이터가 필요하다. 데이터가 없으면 아무것도 학습할 수 없다. 데이터가 많으면 더 많이 학습가능하다. (big data)
왼쪽에 워드 클라우드 그림보면 Computer vision이 중요하게 크게 보이는데, 이게 왜 AI 테크와 관련이 있는가 하면? 돈을 내지 않아도 얻을 수 있는 많은 데이터가 존재하기 때문이다. 또한 메디컬이나 브레인 이미지에도 access 가능해서 머신 러닝을 적용할 수 있다. 머신 러닝을 내 리서치에 적용하고자 할 때 어떤 데이터에서 변수들 사이 관계를 찾고 정보를 얻을 수 있는지 생각해봐야 한다. 또한 베이직 컨셉은 Listen to data and let them speak mostly!!! 이다. 애초에 garbage data를 넣으면 아무것도 학습하지 못한다.
왜 사람들이 머신 러닝에 mad해있는가를 보면 위와 같다.
1) 사람이 clearly define하기 어려운 task가 있다. how do you understand? 하면 설명할 방법이 없다. 그래서 그냥 데이터를 모으고 컴퓨터한테 줘서 알아서 학습하도록 시키는 것이라서 굉장히 lazy한 접근이라고 볼 수 있다.
2) 우주 탐사 등의 상황 같은 건 우리가 가본적이 없으니 어떻게 instruction줄지 모른다.
3) stock market prediction 달라지면 ... 계속 변화가 생기니까 상황을 따라가기 어렵다.
4) 때때로 ..face recognition 같은 건 자라면서 사람의 얼굴이 변한다 대학에 입학할 때 제출한 학적부 사진이랑 지금 수업 듣는 우리의 얼굴은 달라졌을 것이다. 이런 것도 한 사람이라고 인지할 수 있어야 한다.
머신러닝에서 러닝은 무엇을 의미하는가? => induction problem (추론) 을 의미한다.
각각의 specific rule이 아니라 process of describing general rule을 찾고 싶어한다.
Example, kind of data 로부터 제너럴 룰 찾고 싶은 것이다.
learning은 "to build computer model, algorithm", 컴퓨터 모델을 짓는건데 그 컴퓨터 모델이 데이터를 분석할 수 있고 정보를 추출할 수 있게 한다. 이것이 learning problem이다. 많은 경우, data는 싸고 abundant한데, knowledge는 sparse하다.
cf) 여러분은 data, information, knowledge를 다 구별할 수 있는가?
한국의 subway line은 10개 이상이 있다.
- 그것 자체, station map nothing but the data이다.
- from the Korea university how to get to city hall이라고 질문 했을 때,
from 6 to 신설동 city hall get off 이 있고, go to the 인천 come back to city hall
another possible path들이 있는데, 이것들은 information이다.
- 아무도 돌아오는 길을 선택하진 않고 shortage path 선택할 것이다. 이건 knowledge다.
=> data로부터, 머신 러닝은 knowledge를 끌어내는 걸 원한다. 하지만 이 detailed knowledge를 얻기는 어렵고,
우리는 최소한의 information을 찾아내고자 한다.
그리고 모델로 good and general approximation을 할 것이다. (나중에 overfit도 설명할 것이다)
Categorization
3가지 메소드가 있는데, supervised, unsupervised, reinforcement learning이다.
1) Supervised Learning: 관찰결과, output이 있다. 특정 사진이 subject B라든지 분류되어있으면 face recognition system으로 supervised learning을 시키는 것이다. literally superviser가 있다고 생각하면 된다. input에 따라서 superviser가 target이나 desired output을 준다.
2) Unsupervised learning: 수퍼바이저 필요없고 output이 어떤 값인지 모른다.
3) reinforcement learning: 위의 둘 사이에 combination이다. reinforcement learning은 environment를 사용하는데 위의 둘은 사용하지 않는다. 나머지들은 그냥 agent 컴퓨터가 있고 do care about the environment이지만, 이건 action을 depending state of the environment한다.
에를 들어, game에 적용될 수 있다. 알파고가 go game (바둑)을 했던 걸 다들 알텐데, 2명의 플레이어가 있고 한 번에 한 명씩 둔다. 매번 내 턴에서 반드시 한 stone을 둬야 한다. 그런데 지금 게임할 때 이미 보드 위에 다른 돌들이 있는데 그것이 state of environment이다. 내 position/location은 환경에 따라 달라진다. putting stone action을 environment를 고려해서 한다. 이 action이 게임이 끝난 후 내가 잘 한 건지 아닌 건지 win or lose에 준 영향으로 알 수 있다. 게임이 끝나기 전 특정 time point에서는 이 액션이 맞는지 모른다. 그 게임 포인트에서는 unsupervised learning이다. 게임이 끝난 후에는 이겼다면 모든 패스, 모든 시퀀스가 맞는 것이고 게임에서 졌다면 그 시퀀스는 틀린 것이므로 supervised learning이 된다.
=> 이 수업에선 위 두개만 다룰 것이다.
Q) 질문 RNN은 reinforcement learning 인가요? RNN(Recurrent Neutral Network)는 time series 데이터에 사용하는 모델입니다. 어떤 action을 할지 decision을 내립니다. 하지만 reinforcement learning은 아닙니다. RL이 되기 위해서는 state들을 더 고려해야하고 주어진 환경에 따라 action이 계속 달라져야 하는데 RNN은 그렇지 않습니다.
Supervised Learning
supervised learning을 더 카테고리로 나누면 output type에 따라서 2개로 나눌 수 있다.
discrete value면 classification을 해서 가능한 분류 중 하나를 고르게 되어있다.
continuous value면 regression problem이다.
위는 credit scoring 예시이다. bank에서 customer를 데리고 있는데, 그가 돈을 빌리고 싶어한다. 주어진 task는 그 customer가 high risk에 속하는 사람인지 low risk에 속하는 사람인지를 결정해야 한다. x축에 있는 정보는 annual income이고, y축은 현재의 saving을 나타낸다. annual income과 saving 이 두 value로 low risk인지 high risk인지를 decision을 해야한다. low risk라는 것은 그 customer가 돈을 갚을 것이라는 거고 high risk라는 건 아마 파산할 것이라는 거다... 위의 그림대로 그 사이를 긋는 line을 찾아낸다면 이 알고리즘은 이렇게 정의 가능하다.
income이 어떤 value보다 높고, saving이 어떤 value보다 높을 때 (이 두 condition이 동시에 만족될 때) space를 이렇게 쪼갠다. 그러면 그 영역 안을 다 low risk라고 분류할 것이다. 우리는 분류를 위해 optimal한 theta 1과 theta 2를 찾아야한다.
Classification의 다른 영역은 pattern recognition이다. textbook에 detail이 있으니 자세한 설명은 안 할 것이다.
Face recognition은 똑같은 얼굴이라도 lighting condition이나 포즈, glass를 끼고 안 끼고, makeup이나 hair style에 따라 이미지가 달라진다.
Biometric은 face, iris... 등을 인식한다. 이 외에도 speech, symptom, kind of spam filtering이 있다.
다른 종류는 Regression으로 위에서 본 classification과는 output type이 다르다. output type이 continuous하다.
예를 들어 위에서 used car의 가격을 예측할 것인데, x축은 마일리지이다. 나는 7개의 example을 가지고 있고, 데이터 위에 그어진 line은 마일리지에 따른 predicted price이다. 이 function은 매우 심플한 모델로 y = xTw+w0이다.
응용 분야는 car navigation (얼마나 많은 steering angle을 움직이는지), 물건을 잡기 위한 optimal angle, 추천 시스템 등이 있는데 자세히는 나중에 볼 것이다.
unsupervised learning은 regularity를 찾는 것이다. density function은 probabilistic point of view에서 나온 것이다. (how sample distributed를 의미한다) 아까와 다른 케이스인 Clustering에는 customer segmentation 예시 등등이 있다.
그러면 reinforcement가 있다. (설명은 패스)
왼쪽은 모든 textbook 챕터이다. 현재까지 chapter 1을 봤고, 다음 시간에는 chapter 2 supervised learning을 볼 것이다. 그 이후에는 probability model로 넘어가서 bayesian, parametric 등을 쭉 나갈 것이다. 책에는 전체 18챕터가 있는데, 우리는 시간이 없어서 오른쪽에 있는 topic들만 다룰 것이다.
Basic Maths (Linear Algebra)
머신 러닝 강의를 하면 학생들이 얼마나 많은 Math Knowledge가 필요한가요?하는 질문을 많이 받는다. 그러면 Linear Algebra 등을 공부하세요 라고 답해주는데, 아래는 Standford University AI Lab에서 Ph.D를 받은 Vincent Chen의 글이다. (필요한 내용들 소개)
Getting Started
As soft prerequisites, we assume basic comfortability with linear algebra/matrix calculus (so you don’t get stuck on notation) and introductory probability. We also encourage basic programming competency, which we support as a tool to learn math in context. Afterwards, you can fine-tune your focus based on the kind of work you’re excited about.
그리고 아래에는 implement by yourself를 추천한다. (나의 코드로 직접 돌려보는 것)
I encourage you to embrace code as a way to solidify your learning. Both math and code depend on precision in understanding and notation. For instance, practicing the manual implementation of loss functions or optimization algorithms can be a great way to truly understanding the underlying concepts.
코드를 직접 써보지 않고 라이브러리 사용에 익숙해지면 insight를 얻지 못하게 된다.
위의 내용 출처 (https://blog.ycombinator.com/learning-math-for-machine-learning/)
Basic Maths로서 커버할 것들의 목록이다. 1과 2를 중점적으로 다룰 것이고, 3은 나중에 필요할 때 조금씩 알려줄 것이다. 4는 Big Topic이기 때문에 필요하다면 커버할 것이다. 추가적인 insight를 위해 내 웹사이트에 튜토리얼 슬라이드가 있다.
https://www.ku-milab.org/tutorials 어떻게 solution을 얻는지 등을 확인하기 위해 웹사이트를 방문할 것.
Linear Algebra를 시작해보면 "A branch of mathematics concerned with the study of vectors/matrices, vector/linear spaces, linear transformation" 이라고 정의가 되어있다. 그런데 우리가 vector와 matrix 개념이 없다면 큰 문제가 생길 것이다. 이 컨셉들을 매우 빠르게 소개할 것이다.
vector부터 시작해보면, n-ordered pair of number이다. vector는 n number of element를 가지고 있다. 여기서 order가 매우 중요하다. order를 바꾸면 같은 수의 element를 가지고 있더라도 완전히 다른 벡터가 된다. vector는 small/lower case(소문자)로 표시한다.
x는 이렇게하면 denote하면 스칼라가 되고, /x (x 작대기가 하나 더 합쳐진 모양) 으로 표현하면 벡터가 된다.
Transpose를 하면 column vector가 row vector가 된다. 그래서 Transpose의 Transpose를 하면 original vector가 된다.
(/x^T)^T = /x
scalar는 real number에 속해있다. a ∈ |R
real number는 |R (R 왼쪽에 작대기가 하나 더 들어간 모양)으로 표현할 것이다.
오직 positive value만 해당한다면 |R+이렇게 표현한다.
/x ∈ |Rn+ 이렇게 벡터가 n차원의 positive real number를 가지고 있다고 표현할 수 있다.
|Rn말고 |R_1 x n 으로 표시하기도 한다.
2개의 벡터를 더하고 뺄 수 있다. Associativity (결합법칙), Commutativity (교환법칙), Distributivity (분배법칙)이 성립하기 때문이다. 아까 본 a는 스칼라라는 걸 기억하고 지금 나오는 u, v는 같은 dimension의 벡터이다. dimension이 달라지면 더하고 빼기를 못한다.
이제 inner product이야기할 것인데, 두 벡터가 dimension이 같으면 곱 (multiply) 할 수 있다.
수학적 definition에 따르면.... 때때로 x · y 라고 표현하기 때문에 dot product라고 부른다.
그런데 때때로는 x T y로 표시하기도 한다. x와 y는 column vector라서 곱할 수 없기 때문에 (/x ∈ |Rn, /y ∈ |Rn)
원래 [ ] [ ] 이런 형태였다면
[ ] [ ]
이 둘을 [ ] [ ] 이렇게 곱해주기 위해서는 xTy를 해줘야 하는 것이다.
[ ]
그리고 Norm은 kind of function인데, positive length나 size를 vector space에 할당해주는 function이다. 벡터를 define하기 위해 사용된다.
cf) point와 vector를 구별하시기를 바란다. point는 (2,3)이고 vector는 [2,3]이다. 이들은 어떻게 다를까? point는 location 정보밖에 없다. 반면에 벡터는 direction과 magnitude를 가지고 있다. magnitude는 norm으로 표현한다. 그냥 일반적으로 norm이라고 하면 euclidean norm을 의미하고 위의 슬라이드에 있는 것 같이 define을 한다. square root of xTx이다. 그리고 그 아래에 p-norm 식도 있는데, 여기에 다른 value가 들어갈 수 있고, p=2이면 유클리디언이 되는 것이다.
inner product
Dot product는 vector끼리 얼마나 비슷한지 (how similar)를 의미한다. vector x와 vector y 사이 angle을 의미하기도 한다. dot product는 vertical projection을 했을 때의 그 length와의 곱을 의미한다. (글쓴이 - 밑에 표시한 projection 길이를 구하려면 코사인 공식인 밑면 길이 = cosθ x 빗변 길이를 활용해서 ||y|| x cosθ 로 나타낼 수 있다. 그래서 같은 차원으로 projection한 후의 두 벡터 사이 곱은 ||x|| 곱하기 ||y|| cosθ가 되는 것이다. 두 벡터가 반대 방향을 향하게 되면 cos값이 -1이 나오므로 제일 큰 음수가 나오고, 두 벡터가 같은 방향을 향할 수록 1에 가까운 값이 나오고 그러면 제일 큰 양수에 가까워진다.)
x · y = ||x|| ||Y|| cosθ 이다. 때때로 cos θ 로 similarity를 계산할 수 있는데, 각 vector가 unit vector로 바뀌면 length는 1이 되고 그 때 두 벡터 사이의 코사인 angle만 신경쓰면 된다. 그게 cos θ (코사인 세타) similarity이다. 코사인을 그려보면,
코사인 그리면 다음과 같은 값이 나올 것이다.
x가 2pi일 때는 두 vector가 같은 방향에 있다는 것을 의미한다. (maximum similarity) 그런데 두 vector가 수직이라면 3pi/2 지점에 해당할 것이다. 그리고 둘이 완전히 반대방향일 때도 있을 것이다. (pi)
슬라이드에 있는 Cauchy-Schwartz inequality라는 property가 있다.||x · y|| <= ||x|| ||y|| 라는 것이다. (inner product가 항상 이것보다 작다)
여기까지가 inner product 내용이었는데, 두 벡터의 inner product를 하게 되면 scalar value를 얻게 된다.
outer product
다른 흥미로운 operation은 outer product이다. 첫 번째꺼를 transpose하지 않고 두번째 vector를 transpose해준다.
x는 |R _ n x 1 (엔 바이 원)이고
y는 |R _ 1 x n이다. 이 두 개를 곱하면 |R _ n x n을 얻는다. 이건 matrix라고 부른다. 이게 outer product이다.
그리고 이제 vector에 대해 더 이야기할 것이다. linear combination이라는 concept에 대해 소개할 것이다. m 개수의 벡터가 d dimension에 있을 때, 이들을 더하고 빼는 것이 가능하다. 그리고 linear combination도 가능하다. 어떤 스칼라 값을 곱하고 더하고 하는 것도 가능한데, 그러면 그 output은 또 다른 vector가 된다. a는 아무 real value든 다 들어갈 수 있다. 이런 set of all linear combination의 결과 위의 그림 같은 space가 만들어진다. 가능한 combination들로 이루어진 공간을 span이라고 한다. 2 vector를 linear combination을 한다면 그 벡터들의 방향으로 나오는 건 뭐든지 define할 수 있다. (왼쪽에 벡터 2개를 더해서 평면에 어디든 다 갈 수 있다는 것을 그림으로 나타내었다) 그리고 벡터를 하나 더 더하면 더 높은 디멘션도 만들 수 있다.
a_i가 negative값이 될 수 없고 sum 이 equal to one일 때 span의 영역이 위 슬라이드의 분홍색 부분으로 제한이 된다. 이걸 convex라고 부른다. 2 dimension에서는 저 빨간 선이 convex였고, 3 dimension의 경우 오른쪽 그림에서 빨간 삼각형 부분이 convex가 된다.
두 벡터가 linearly independent가 되려면 sum of vector equal to zero를 만드는 모든 a_i가 (a1부터 an까지) 0이어야 한다. 두 벡터가 완전히 linearly independent 라면 더해서 0을 만들 수 없기 때문이다. 우리가 /x1, /x2, /x3 벡터를 가지고 있을 때 이들이 linearly dependent하다는 것은 예를 들어 /x2를 다른 두 벡터들의 linear combination으로 표현 가능하다는 것이다. /x2 = a1 /x1 + a3 /x3 이게 존재하면 linearly dependent인 것이다. x3를 a1 /x1 + a2 / x2 로 표현, x1을 a1 /x2 + a2 /x3 이렇게 표현할 수 있고, 아무거나 이걸 만들 수 있는 상태를 말한다.
그리고 때때로 basis라고 부르는데, linearly independent vector이다. 우리가 가지고 있는 span 안에 있는 2 vector나 3 vector들이 linearly independent하다면 이들은 basis가 된다. (글쓴이 - basis 2개가 있으면 평면 하나를 벡터끼리 숫자 곱해서 더하고 빼고 해서 꽉 채울 수 있음) orthogonal basis는 dot product를 하면 0이 나온다. orthonormal basis를 dot product하면 length가 1이 된다. 여기서 ortho-는 orthogonal을 의미하고 normal은 normalized를 의미한다. vector가 normalized to 1 되었다는 것이다.
이제 벡터 스페이스를 정의할 수 있다. 필드 F를 채우는 n벡터의 집합이다. 스페이스는 closed under addition and scalar product라고 되어있는데, 어떤 벡터가 weight sum of linear combination of the other vector라면 closed라고 부른다.
subspace 또한 closed under addition and scalar multiplication이다. 여기까지가 벡터에 관한 모든 것이었다.
Matrix
매트릭스까지, 이제 x (스칼라), /x (벡터), X (매트릭스)를 모두 다 구별할 수 있어야 한다. matrix는 set of element들이 2차원으로 있다. row vector가 있고 vertical로 column이 있다. matrix는 n-ordered vector가 여러개 합쳐진 것이다.
3 different matrix가 위와 같이 있다고 한다. R_m x n, R_n x r, R_r x s 에 속하는 매트릭스 X, Y, Z이다. 이들을 곱할 때는 조심해야 한다. column of x 의 개수와 row of y의 개수가 똑같아야만 계산이 가능하다. 결합법칙 (Associativity)는 성립하지만 둘의 자리를 스위치할 수는 없다. identity matrix는 diagonal matrix의 특별한 형태이다. (대각선이 1인 경우니까) identity matrix를 곱하면 original matrix가 나온다. 그리고 original matrix에 inverse matrix를 곱하면 identity matrix가 나온다. inverse matrix가 존재하면 non-singular하다고 부르고, 아니면 singluar라고 부른다. 그리고 matrix의 norm 또한 위와 같은 방식으로 정의 가능하다. square root of size of matrix이다.
Transpose operation이 가능하다. column과 row를 switch시킨다. 그리고 2 matrix를 Transpose했을 때는 둘의 자리를 바꾸고 각각 transpose한 것과 같다. 이것은 dimension을 고려해보면 이해가 갈 것이다.
때때로 Diagonal matrix를 언급할 것인데, 어떤 meaningful value를 대각선에만 가지고 있고 나머지 값은 0인 것이다. Diagonal matrix의 inverse는 매우 straight forward하다. 그냥 inverse를 해주면 된다. 일반 보통의 (normal) matrix들은 inverse할 때 매우 expensive computation 과정이 필요한데 Diagonal은 매우 쉽다.
그리고 square matrix는 row와 column 의 수가 같은 것을 의미한다. square matrix가 orthogonal하다면 Transpose한 값과 inverse한 값이 동일하다. 그래서 square matrix가 orthogonal하다면 UTU가 Identity matrix가 된다. 여기까지가 basic property of matrix였다.
Linear Transform은 곱하는 것인데 space를 생각해 볼 것이다. vector는 한 column만 있는 special matrix이다. (matrix with 1 column = vector) 어떤 vector가 n dimensional space에 있다. m x n인 X 매트릭스와 n x 1인 w 매트릭스 (벡터) 를 곱하면 결과가 m x 1 으로 나오게 된다. (곱할 때 첫 번째 matrix의 column 수와 두 번째 matrix의 row 수가 같아야 한다!!)
이것이 무얼 의미하는가하면, w 벡터가 X matrix를 곱함으로써 transformed 된 것이다. n dimensional space에서 m dimensional space로 넘어가게 된 것이다. 이게 linear transform이다.
위의 예시에 있는 matrix가 익숙한가? cos(π/2) 로 시작하는 이 매트릭스는 2 x 2 인데, 이것의 역할은 matrix for rotation이다. 곱해진 vector가 π/2 (pi over two degree in gradient) 로 회전하게 된다. 아까 벡터의 곱을 볼 때 두 벡터의 inner product는 projection of 1 vector to the other vector였다. 이처럼 지금도 w 벡터를 이런 스페이스에 projection을 한 것이고, 그 새 스페이스에서 새 벡터 y를 얻은 것이다.
[ 2 0 0 ] [ w1 ]
[ 0 1 0 ] | w2 |
[ 0 0 2 ] [ w3 ]
이런 3 x 3 matrix를 예로 들면 벡터와 곱했을 때
[ 2w1 ]
| w1 |
[ 2w3 ]
이런 결과가 얻어진다. 방금 위에서 곱한 matrix X는 Diagonal matrix였다. 대각선에만 다른 value를 가지고 있는 것이었는데, 이것의 역할은 vector의 element를 scaling하는 것이다. scale matrix의 하나이다. 벡터의 길이 (length of vector)를 변화시켜 준다.
다시 rotation matrix R로 넘어가서 곱해주면
[cos θ -sin θ] [w1]
[sin θ cos θ] [w2]
다음과 같은 벡터를 얻을 수 있다.
[w1cosθ - w2sinθ]
[w1sinθ + w2cosθ]
rotation matrix를 곱해주고 scaling matrix 를 곱해주고 ... 이런식으로 하다보면 rotate를 먼저 하고 그 다음 그 방향으로 scaling을 해주고... 할 수 있다. 물론 더 많은 변형도 가능하다. neural image related paper들을 보면 transformation 할 때 이런 식으로 하는 것을 알 수 있다. (매트릭스의 곱)
선형대수에서 Linear system을 잘 이해했다면 좋은 basic knowledge가 될 수 있을 것이다. 하지만 이것으로는 충분하지 않다. 아이젠벡터와 아이젠밸류 개념이 필요하다. 이것은 기본적으로 Ax 처럼 x에 matrix A를 곱해준 것이 x를 그냥 scaling 해준 것과 같은 결과가 나온다. direction을 바꾸지 않는 것이다. resulting vector가 같은 direction에 있다. opposite 방향으로는 가능하나 (scaling을 음수로 해주면 되니까) rotate는 안 되는 것이다. 이걸 아이젠벡터라고 하고 그때의 스케일은 아이젠밸류라고 부른다.
이걸 어떻게 찾는가? 하는 식은 그 아래에 적혀있는데 대학교 1학년 때 배우는 내용이다. (위키백과 증명 - https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors) matrix가 positive definite라면 방향을 바꾸지 않고 length만 바꾸는 것이고, (람다가 양수라서 positive이다) 반대 방향으로 가면 negative definite이 된다. (람다가 minus값이다)
eigenvector는 linearly independent하다. 그리고 두 번째 property를 보면, singular if and only if it has zero eigenvalue라고 적혀있다. 람다가 0이라면 어떤 x를 곱하든 0 벡터가 되어야하므로 matrix A의 역할이 벡터를 없애버리는 것이 되어버린다. 벡터가 zero vector가 되면 아무데도 포인팅을 하지 않는 상태가 되는데 그렇게 만드는 matrix는 singular matrix이다. 그 다음 property는 upper와 lower triangular matrix의 eigenvalue가 대각선에 있는 element와 같다는 것이다. 대각선을 기준으로 그 위 삼각형이 upper triangular이고 대각선 아래가 lower triangular이다.
x x
x 이렇게 뭔가가 채워지면 upper
x
x x 이렇게 뭔가가 채워지면 lower인 것이다.
이것들은 nice property이다. 여기까지 아이젠벡터에 관한 내용을 보았다.
1) 이제 matrix decomposition으로 이동할 것이다. 이 set of matrix들을 가지고 있으면 원래의 matrix를 얻을 수 있다. 그게 decomposition이다. 다른 종류의 decomposition들이 가능하다. 이런 method들이 있다. 두 개의 triangular matrix로 lower랑 upper로 LU decompose를 해보면
[ 0 ] meaningful value가 밑에 있거나 [ βij] 위에 있다.
[xij ... ] meaningful value가 밑에 있거나[0 ]
2) 다른 타입으로 QR decomposition이 있다. Q에서 orthogonal (직교행렬)이라고 말하면 column vector들이 직교하기 때문에 내적 (inner product)이 0이 되는 것을 의미한다. R은 upper triangular matrix이다.
3) 그 다음 eigen decomposition (고유값 분해) 은 각 벡터가 eigenvector와 eigenvalue로 이루어져있다. A = [eigenvector가 들어간 어떤 matrix][eigenvalue들어간 matrix][eigenvector 들어간 matrix의 transpose] 이런 식이다. (글쓴이 - square root of eigen value라고 하셨으나 공식을 찾지 못하였음)
4) Singular Value Decomposition (특이값 분해) 는 generalization of eigen decomposition이다. 이것처럼 행렬을 대각화하는 한 방법이다.
+ 머신러닝에서 principal component analysis를 할 때 이런 composition 방법을 이용한다.
Eigen decomposition 을 볼 것인데, matrix를 set of eigenvector와 eigenvalue로 나누는 방법이다. V에는 one eigenvector per column이 들어있고, Λ 는 eigenvalue가 들어있는 diagonal matrix이다. V T는 transpose of V이다. eigenvector들은 서로 orthogonal하다.
=> 왜 eigen decomposition이 useful한가하면 computation이 매우 expensive한데 이렇게 decompose하게 되면 inverse할 때 덜 힘들기 때문이다. 그냥 곱해주기만 하면 되기 때문에 상당히 나이스한 방식이다.
singular value decomposition은 one matrix를 another matrix로 factorizing하는 것이다.
이런 타입의 오퍼레이션을 거치게 된다. rotate해주고 여기서 Σ는 D랑 똑같다. rotating을 해준 후에 vector를 곱해주면 (D) 찌그러진 그림이 된다. 이걸 다시 rotate시켜준다. decomposition은 이 matrix들이 나오는데, SVD 개념은 나중에 더 얘기할 것이다.
set of application들인데, 이것들은 머신 러닝 알고리즘과 관련이 있다.
rank는 non-zero eigen value와 관련이 있다. 기본적으로 dimension of the vector space spanned by its columns/ rows를 의미한다. The number of linearly independent columns or rows도 의미한다.
만약 우리가 매트릭스 A를 가지고 있고 A ∈ |R _ 100 x 3 인데 rank (A) = 2 라면 칼럼 벡터와 로우 벡터가 다 linearly independent하지 않다는 것이다. 100개의 column vector와 3개의 row vector 중에 2개만 linearly independent하고 나머지는 다 linear combination of 2 vector들로 얻어진다는 것이다.
그리고 Property들을 보면 zero matrix만 zero rank를 가지고 있다. 그래서 적어도 rank는 1이어야 한다. rank(A)는 minimum값이다. 또한 A가 rank n을 가지고 있어서 column과 row가 모두 linearly independent하다면 inverse가 가능할 것이고, 안되면 안 된다. 그리고 n x k matrix일 때 rank(AB) = rank(A)라는 것 또한 기어해야할 property이다. rank는 이정도 property를 알면 충분하다.
determinant는 single vertical bar로 |X| 이런식으로 쓰거나 또는 det(X)라고 쓴다. 그리고 determinant는 product of eigen value와 똑같다. det(X)가 nonzero라면 unique solution이 존재한다.
linear transformation을 하는 matrix라면 머신러닝에서 이런 리니어 시스템을 가지고 있을 때, 오른쪽에 input을 두고 왼쪽에 desired output을 두면 된다. set of sample x를 오른쪽 matrix로 만들면 된다. [/x1 /x2 ... /xn]이 n number of sample이 될 것이다. 그리고 supervised learning method에서는 desired output이 필요하기 때문에 [/y1 /y2 ... /yn] 또한 필요하다. 이 두 벡터를 다 transpose해줘야 하는데, matrix를 곱하면 나오는 결과가 vertical이기 때문이다. vertical하게 concatenate하기 위해서 ; 로 연결해주면 된다.
det에서 machine learning property로서 나오는 것은 다음과 같다. 내 input을 transfer to the output으로 매핑하는데 이것이 linear system이고 이때의 transformation matrix A를 찾고자 한다. 아까 연결한 형태는 y = A x 이런 모양이다. 그런데 det(A) (determinant of matrix A) 가 0이라면 solution을 찾지 못한다. 그러면 우리는 이걸 approximate해야 한다. 정확한 correct value, correct matrix A를 찾지 못할 때 결과를 approximate하려고 다른 operation들을 사용한다.
기억하면 좋을 것들은 두 개의 determinant의 곱은 곱해서 determinant를 구한 것과 같다. det(X)는 X transpose의 determinant와도 동일하다. multiply c를 했을 때, cX는 c의 n승 (c to n)을 따로 곱해준 것과 같다. 그리고 matrix A의 number of column vector와 row vector가 같을 때 square matrix라고 한다.
그리고 trace는 tr(X)라고 denote한다. 그리고 이것은 sum of the diagonal element 혹은 sum of eigen value들이 된다. Geometrically 보면volume에서 매우 작은 변화이다. Trace의! (대각선 합의!) nice property는 바로 cyclic하다는 것이다. X, Y, Z matrix를 가지고 있을 때 이들의 trace를 비교해보면 곱했을 때 X를 Z뒤로 shift하고 계산해도 똑같다. Z를 front로 옮기든 X를 뒤로 옮기든 하는 건 되지만 Y를 뒤로 옮기는 건 안 된다! front나 back만 가능하다.
tr(ABCDE)
=tr(BCDEA)
=tr(EABCD)
=tr(DEABC) ... 이렇게만 되는게 trace의 property이다.
calculus를 계산할 수가 있는데, 이 내용을 다 기억할 필요는 없다. XTA가 있을 때 X를 derivative하면 A가 나올 것이다. 이건 straight forward하다. 나머지는 straight forward하지 않고 final solution을 drive하기 어려운데, 굳이 할 필요는 없다. 아래에 적어놓은 좋은 reference가 있으니 The matrix cookbook이라는 pdf 다운받고 보면 유용하다.
machine learning algorithm을 배우는데 필요한 것은 linear에 대해서는 이게 다이다.
'SW개발 > 머신러닝' 카테고리의 다른 글
머신러닝 수업 6주차 - Multivariate Methods (0) 2018.11.01 머신러닝 수업 5주차 - Parametric Methods (0) 2018.10.12 머신러닝 수업 4주차 - Bayesian Decision Theory & Parametric Methods (0) 2018.10.05 머신러닝 수업 3주차 - Supervised Learning (0) 2018.09.19 머신러닝 수업 1주차 - Introduction (0) 2018.09.12 댓글