선형대수 기초 개념과 선형 결합
업데이트:
인공지능을 위한 선형대수 강의노트
- 챕터 1 ~ 챕터 2. 선형결합
선형방정식과 선형시스템
- 내가 잊고있었던.. 기본 용어
- Squre: 정사각 행렬
- Transpose: 전치행렬 (1, 1) 기준으로 대각선 긋고 180도 회전
- 행렬곱
- Size (a * b) * (b * c) = Size (a * c)
- A * B ≠ B * A
- A(BC) ≠ (AB)C
- (AB)t = Bt * At
- (AB)역행렬 = B역 * A역
선형방정식과 선형시스템
- 선형방정식?
- ax = b 형태의 여러 식을, 행렬로 Ax = b 로 표현한 것
- 여기서 x를 어떻게 구해야할까?
- 역행렬과 항등행렬
- Ax = b 에서 A의 역행렬을 구해 x = (A-1)b 로 구할 수 있다.
- 역행렬이란?
- 행렬 A와 곱하여 항등행렬 I가 나오도록 하는 행렬이다.
- 정사각행렬(square)에만 존재한다.
- 역행렬이 없는 경우
- (2, 2) 행렬일 때, ad - bc = 0 이면 역행렬이 존재하지 않으며,
- ad - bc = 0 을 판별식이라 부른다.
- (ad - bc = 0 → ad = bc → a:b = c:d)
- 판별식은 det. A 와 같이 표현한다.
- ad - bc = 0 을 판별식이라 부른다.
- 역행렬이 없는 경우, 선형방정식의 해가 무수히 많거나 없다.
- (2, 2) 행렬일 때, ad - bc = 0 이면 역행렬이 존재하지 않으며,
- 만약, A가 정사각 행렬이 아니라면? (= 역행렬이 존재할 수 없다면?)
- A가 (m x n)행렬일 때,
- if n > m (피처가 레코드보다 많을 때)
- 해가 무수히 많다. (under determined)
- if m > n
- 보통 해가 없다. (over determined)
- if n > m (피처가 레코드보다 많을 때)
- A가 (m x n)행렬일 때,
선형결합
행렬을 벡터로 분해하고, Span의 개념을 적용하기
- 행렬A와 벡터x가 있을 때, (Ax = b)
- a₁x₁ + a₂x₂ + a₃x₃ = b로 표현 가능
- Span
- 주어진 벡터로 만들 수 있는 모든 조합
- n개의 벡터로 n-1차원의 Span을 만들 수 있다
- 다시 돌아와서, a₁x₁ + a₂b₂ + a₃x₃ = b는,
- 결국 b는 a라는 벡터에 x라는 가중치를 곱하여 만들어진 조합
- a로 만들어진 Span 내에 b가 존재하면 해가 존재한다.(x가 존재)
행렬벡터, 행렬행렬
- 위에서 보았던 것처럼, 행렬A * 벡터x는
- a₁x₁ + a₂x₂ + a₃x₃로 표현 가능
- 그럼 행렬끼리의 곱은 어떻게 나타낼 수 있을까?
- R(3,3)과, R(3,2)의 곱은,
- a₁x₁ + a₂x₂ + a₃x₃와 a₁y₁ + a₂y₂ + a₃y₃로 표현 가능
- 결국, a의 Span내에 서 x와 y는 가중치의 역할
row벡터*행렬
- (Ax)T = xT*AT
- [[1,2,3], [1,0,-1]] * [[1,1,0], [1,0,1], [1,-1,1]] = [[x₁,x₂,x₃], [y₁,y₂,y₃]] = [[xT],[yT]]로 표현 가능
- xT = [x₁,x₂,x₃] = 1[1,1,0] + 2[1,0,1] + 3[1,-1,1]
- yT = [y₁,y₂,y₃] = 1[1,1,0] + 0[1,0,1] + (-1)[1,-1,1]
- 위와 같이 표현 가능
Sum of (Rank-1) Outer Product (외적)
- (Rank-1) outer product?
- 두 벡터의 곱으로 행렬을 만들어냄
- [[1], [1], [1]] * [1,2,3] = [[1,2,3], [1,2,3], [1,2,3]]
- Sum of (Rank-1) outer products
- 두 매트리스의 곱을, 두 outer product의 합으로 표현할 수 있음
- 이 개념은 머신러닝에서 자주 등장하는데,
- (100,50) 행렬은, 100로우벡터 * 50컬럼벡터 10개로 근사값을 구할 수 있음
- 다만, 100*50 = 5000개의 수
- outer product되는 벡터들으 ㅣ수는, (100 + 50)*10 으로, 1500개의 수
- 결국 1500개의 수로 5000개의 수를 나타내야하니 근사값으로 수렴할 수 밖에는 없긴 함
- (100,50) 행렬은, 100로우벡터 * 50컬럼벡터 10개로 근사값을 구할 수 있음
댓글남기기