[Linear Algebra] 머신러닝을 위한 선형대수 총정리 (上 )

2023. 10. 1. 18:30Developer Basis

⚠ 이 글은 머신러닝 공부용으로 보기 위해 작성한 Linear Algebra(선형대수) 정리글입니다. ⚠
머신러닝에 필요한 선형대수 개념들 위주로 정리되어 있어, 선형대수의 전반적인 지식을 배우고 싶다면 이 시리즈의 내용으로는 부족할 가능성이 매우 높습니다. 권장하지 않습니다.

또한 제가 알아볼 수 있도록 쉽게 정리한 글이니, 오개념이나 수학적으로 잘못된 내용이 있을 수도 있습니다. 저를 너무 믿지 마세요.
댓글로 지적해주시면 빠르게 수정하겠습니다:)

 

1️⃣ 스칼라(Scalar), 벡터(Vector), 매트릭스(Matrix)


  • 스칼라(Scalar)는 어떤 하나의 수다. 소문자로 표기한다. (ex, 1, 2, 3 ....) 
  • 벡터(Vector)는 스칼라들의 모음(array)이다. 더 정확하게는 벡터 공간의원소라고 말할 수 있다. 소문자 볼드체로 표기한다.
    세로로 기둥처럼 되어있는 벡터(n x 1)를 Column Vector, 가로로 눕혀져 있는 벡터(1 x n)를 Row Vector라고 부른다.

왼쪽이 Column Vector, 오른쪽이 Row Vector다.

  • 매트릭스는(Matrix)는 벡터의 모음이다. 대문자로 표기한다.
    Matrix의 size는 m x n이며, m은 row의 개수 n은 column의 개수를 의미한다.
    벡터를 모아두었으니 2차원 Array의 형태이다. 매트릭스를 Column Vector들의 집합으로 볼 수도, Row Vector들의 집합으로 볼 수도 있다.

 

2️⃣ 알아두면 좋을만한 특별한 Matrix


  1. Square Matrix (정방행렬) : 행과 열의 길이가 같은 n x n 행렬이다.
  2. Rectangular Matrix : 우리가 아는 일반 형태의 기본 행렬이다. (m x n 형태)
  3. Transpose of Matrix (전치행렬) : 행과 열을 교환한 행렬이다. m x n 형태를 transpose하면 n x m 형태의 행렬이 되는 형태
    = 즉, A의 (i, j)번째 요소와 AT의 (j, i)번째 요소는 같다. 
    *Vector는 기본적으로 Column Vector를 의미하는데, Row Vector가 표기상 용이해 Column Vector의 transpose를 취한 형태로 많이 사용한다.
    **A transpose를 transpose하면, 다시 자기 자신 A가 된다.
  4. Zero Matrix (영행렬) : 모든 성분이 0인 행렬이다.
  5. Identity Matrix (단위행렬, 항등행렬) : 주대각선의 원소는 모두 1이고, 나머지 원소는 모두 0인 "Square Matrix"이다. I로 표기.
  6. Diagonal Matrix (대각행렬) : 주대각선의 원소를 제외한 나머지 원소는 모두 0인 Square Matrix이다. diag(d)로 표기.
    * 단위행렬 I는 diag(1)이라고 표기할 수 있겠다.

1번부터 6번까지 matrix의 형태를 예시로 나타낸 이미지다.

조금 중요한 Inverse Matrix (역행렬)의 개념은 따로 빼서 정리하고자 한다.
어떤 matrix A와 곱했을 때 Identity Matrix가 나오게끔 하는 행렬을 A의 Ineverse Matrix라고 부른다.

역행렬의 개념, 2x2 size에 대해 역행렬을 구하는 방법, 역행렬의 특성을 순서대로 보여준다.

 

3️⃣ Basic Operations & Properties


[Scalar Multiple of vector = ca / Matrix = cA]
벡터나 매트릭스에 대해 스칼라 곱을 구하고 싶으면, 그저 모든 (벡터의 혹은 매트릭스의) 원소들을 각각 스칼라만큼 곱하면 된다.

[Matrix Addition = A+B]
두 매트릭스의 크기가 같은 경우에만 성립가능하며, 역시 각각 원소에 대해 합을 구해주면 된다.

[Matrix-matrix Multiplication = AB]
m x n 행렬과 n x r인 행렬의 곱을 하면, m x r size의 matrix가 결과값이 된다. (앞 행렬의 column 수와 뒤 행렬의 row 수가 같아야 함.)
C = AB일 때, C의 i, j번째 요소는 A의 i행과 B의 j열의 선형결합으로 나타내게 된다.
*행렬곱을 바라보는 선형결합(Linear Combinatrion)의 내용은 밑에서 조금 더 자세하게 다뤄보겠다. 지금은 아래 예시 이미지로 아 이렇게 곱을 하는구나 정도만 이해하고 넘어가자.

Matrix-matrix Multip


[Properties]

  • A(B + C) = AB + AC -> 분배(Distribute) 법칙이 성립한다.
  • A(BC) = (AB)C -> 결합(Associative) 법칙이 성립한다.
  • (AB)T = BT AT -> Transpose를 걸게 되면, 위와 같은 규칙이 존재한다.
  • AB != BA -> 교환 법칙(Commutative)은 성립하지 않는다!!!

 

4️⃣ 내적(Inner Product)과 외적(Outer Product)


내적과 외적은 두 벡터의 곱을 표현하기 위한 두 가지 방식이다. 어려운 건 집어치우고 딱 이 정도만 알아가자.

내적(Inner Product)은 두 백터를 곱했을 때, 스칼라값(Scalar)이 나온다. (a • b로 표현)
외적(Outer Product)은 두 벡터를 곱했을 때, 매트릭스(Matrix)가 나온다.

왼쪽은 내적(Inner Product), 오른쪽은 외적(Outer Product)이라 부른다

 

5️⃣ Linear Combination으로 바라보는 Multiplication 연산


선형 결합(Linear Combination)을 쉽게 설명하면, 벡터(vector)를 스칼라(scalar)배한 값들이 합으로 연결된 형태라고 말할 수 있다.
이를 수학적 식으로는, "a1v1 + a2v2 + ... + anvn"과 같이 표현하는 것이 선형 결합이다.

1) Matrix-Vector Multiplication : Ax
A를 Row Vector들의 집합으로 바라보면, row 벡터 ax의 내적(Inner Combination)으로 바라볼 수 있다.

만약, A를 Column Vector들의 집합으로 바라보면 Column Vector a를 각각의 요소 x만큼 스칼라배 해준 값들의 합 = 즉, A Columns의 선형결합(Linear Combination)이라고 볼 수 있게 된다.

2) Vector-Matrix Multiplication : xTA
이번엔 반대로 A를 먼저 Column Vector들의 집합으로 바라보면, x transpose vector와 Column Vector a의 내적(Inner Combination)으로 바라볼 수 있게 된다.
하지만, A를 Row Vector들의 집합으로 다르게 보면, Row Vector a를 각각의 요소 x만큼 스칼라배 해준 값들의 합 = 즉, A Rows의 선형결합(Linear Combination)이라고 볼 수 있게 된다.

Matrix-Vector 곱과 Vector-Matrix 곱을 Linear Combination으로 바라볼 수 있게 된다.

 

3) Matrix Multiplication : C = AB
그럼 이제 위에서 바라본 것처럼 C = AB라는 곱 연산을 다양한 관점에서 살펴볼 수도 있게 된다.
(기본) Matrix 간의 곱연산은 기본적으로 A matrix의 column vector와 B matrix의 Row vector 간의 내적(Inner Product)을 계산해서 구해줬었다.
하지만 이제는 위의 선형결합(Linear Combination) 개념을 바탕으로도 행렬곱을 바라볼 수 있게 되었다.
(1) 뒤 matrix를 column vector로 바라봐서 A와 b columns의 선형결합으로 바라보는 방법,
(2) 앞 matrix를 row vector로 바라봐서 a rows와 B와의 선형결합으로 바라보는 방법이 이제는 이해가 될 거라 믿는다. 
(3) 또한, A와 B를 각각 row vector와 column vector로 바라봐서 나온 두 값들의 외적(Outer Product)을 계산해서 나온 matrix의 누적합을 구하더라도 마찬가지 행렬곱의 계산이 될 것이다.

Matrix-Matrix 곱을 네 가지 시선으로 바라볼 수 있게 된다. (기본, 1, 2, 3의 방식)

 

6️⃣ 선형 독립(Linear Independent)과 선형 종속(Linear dependent)


벡터 방정식(c1v1 + c2v2 + ... + cnvn = 0)을 만족시키는 솔루션이 오직 c1 = c2 = ... = cn = 0이어야만 하는 경우에 위 벡터 (v1, v2 ... vn)들을 선형 독립(Linear Independent)이라고 부른다. 선형 독립의 반대말은 선형 종속(Linear dependent)이 쓰인다.

정의가 너무 어렵게 쓰여 있어서 나름 풀어써도 이해하기가 어려운데, 한번 예시를 들어보겠다.
x1T = [1, 2, 3], x2T = [4, 1, 5], x3T = [2, -3, -1]이라는 3개의 벡터가 있을 때, 위 벡터들은 -2x1 + x2 - x3 = 0의 방정식을 만족한다.
방정식을 만족하는 0이 아닌 c1, c2, c3(weight) 값이 존재하기 때문에 Linear dependent 하다고 판단할 수 있다

 

벡터가 두 개일 때 기준으로 그래프로 그려보면 더 이해하기가 쉬워진다.

Linearly dependent일 때는 두 벡터가 하나의 직선 위에 위치할 수 있는 모습으로 보이게 되는데, 이를 "두 vector의 집합에서 하나의 vector가 다른 vector의 scalar multiplication으로 표현된다"라고 해석할 수 있다.
그럼 반대로, "두 vector의 집합에서 하나의 vector가 다른 vector의 scalar multiplication으로 표현되지 않는 경우"에는 linearly independent 하다고 해석할 수 있는 것이다.

 

7️⃣ 공간의 개념 Span과 Subspace, Columnspace, rank, Basis of subspace 개념까지 쏟아집니다.


[Span]

선형 독립과 종속의 개념을 더 잘 이해할 수 있으려면, Span의 개념을 알아야 한다.
벡터 {x1, x2, x3, x4...., xn}의 Span{x1, x2, x3, x4...., xn}들의 선형 결합(Linear Combination)으로 만들 수 있는 모든 경우가 된다.

Span을 수학적 수식으로 설명하게 되면, 위 그림과 같다.

 

여기서 위에서 배운 Linear independent의 개념과 함께 생각해 보면,
벡터가 2개일 때 이 두 벡터가 Linearly independent 한다고 정한다. 그때 이 두 벡터가 그릴 수 있는 Span은 두 벡터 사이의 "평면"이 될 것이고, 만약 두 벡터가 Linearly dependent 하다고 한다면, (즉 두 벡터가 같은 직선 위에 위치하는 벡터라면) Span 역시 "직선"의 형태로 이루어지게 될 것이다.

그럼 3차원으로 확장해 보면 어떨까?
만약, 3개의 벡터가 서로 Linearly independent(선형 독립)하다? 그럼 이 벡터들의 span은 3차원 "공간"의 전부가 되는 셈이다.

여기서 한번 더 확장.
만약 3차원 공간에서 4개의 벡터가 주어진다고 하면, 이 벡터들은 Linearly dependent할까? Linearly independent할까?
span의 개념상 3차원 공간을 채우기 위해서는 3개의 Linearly independent한 벡터들을 사용하면 가능한데, 이미 꽉 채워져 있는 공간에 다른 벡터 하나가 더 추가가 된다면, 이 벡터는 기존 span에 포함될 수 밖에 없을 것이다. -> 즉, 이런 경우에는 Linearly dependent 할 수 밖에 없어진다.

즉 여기서 결론.
n차원의 공간에서 벡터들의 집합 {v1, v2..., vp}이 있을 경우, p가 n보다 크다면 (각각의 벡터의 요소 개수보다 벡터의 개수가 더 많다면 = 방정식의 개수보다 변수의 개수가 더 많다면), 위 벡터들은 반드시 linearly dependent하다.

 

[subspace, Column space]

n차원 공간에서의 부분공간(subspace)n차원에서의 부분집합들의 선형결합에 대해 닫혀있는 공간을 의미한다.

"닫혀있는 공간"이라는 뜻이 뭔지 이해해보자.
2차원 공간에서 1사분면만큼의 부분 공간만 다룬다고 가정하고, 이 공간 내의 벡터 간 덧셈 연산을 살펴보자. 
1사분면 공간 안에 있는 어떤 벡터끼리 덧셈을 하더라도 그 결과는 1사분면 공간 안에 위치하게 될 것이고, 이 경우 "1사분면의 벡터 공간은 덧셈 연산에 대해 닫혀있다(Closure)"라고 표현할 수 있는 것이다. (아래 좌측 그림)
하지만 곱셈 연산의 경우, 반대 부호인 -2를 곱하게 되면 1사분면의 공간을 벗어나게 되고, 이 경우 "1사분면의 벡터 공간은 곱셈 연산에 대해 열려있다(not closure)"라고 표현할 수 있게 된다. (아래 우측 그림)

즉, 아래 1사분면의 공간은 선형결합에 대해 닫혀있는 공간이 아니므로, 부분공간(subspace)가 될 수 없다는 것을 알 수 있다.


조금 더 생각해보면, 임의의 n차원의 부분 공간(subspace)은 반드시 영벡터가 포함되야한다는 것도 이해가 되는가?
어떠한 벡터도 0을 곱하면 반드시 영벡터(zero vector)가 될테니까. 

그렇다면, 차원별로 가능한 부분공간은 어떤식으로 나오게 될까.
2차원 공간에서 가능한 subspace는 2차원 공간 전체가 될 수도, 원점을 지나는 임의의 직선이 될 수도, 아니면 zero vector가 될 수도 있을 것이고,
3차원 공간에서는 3차원 공간 전체, 원점을 지나는 평면, 원점을 지나는 임의의 직선, zero vector 자체가 subspace가 될 수 있을 것이다.

자. 이제 위에서 배운 subspace의 개념을 행렬(matrix)에 적용해보자.

행렬 A가 존재할 때 우리는 행렬로부터 부분 공간, Column Space를 추출할 수 있다. 더 정확하게는 행렬 A의 Column Vector로 인해 Span되는 부분공간. 그것이 Column space다. Col A라고 표기한다.

이해를 돕기 위해 예시를 살펴보자.
[1 2 4]가 v1, [3 3 1] v2 Column vector라고 했을 때, 선형 결합은 임의의 상수를 곱한 c1v1 + c1v2와 같은 형태로 진행할 수 있겠다.
닫혀있는 공간을 확인하기 위해 파란색 벡터로 선형결합한 벡터들을 그렸을 때, 결국은 하나의 (원점을 지나는) 평면이 행렬 A의 column space가 될 것이다. = 다른 말로 range(R(A))라고 부른다.

그리고 행렬 A의 column vector들의 차원을 rank A라고 부른다. (이 예제에서 rank A는 2라고 볼 수 있다.)

 

[Basis of subspace - 기저벡터]

추가로 벡터 공간에서 각각의 축 방향을 나타내는 단위 벡터를 우리는 부분공간의 기저벡터(Basis of subspace)라고 부를 것이다.

기저(Basis)는 축 방향을 나타내기에 부분공간의 차원의 개수와 기저의 개수는 동일할 수밖에 없다.
또한, 기저벡터 간은 서로 선형독립(Linearly independent)일 것이고, 부분공간을 모두 span할 수 있다는 특성을 가지고 있을 것이다.
그리고 [1 0 0], [0 1 0],  [0 0 1]과 같이 아래 그림에서 보이는 기저 벡터를 특별히, 표준 기저 벡터(Standard Basis Vector)라 부르게 된다.

3차원 공간에서의 표준 기저 벡터(Standard Basis Vector)

 

8️⃣ Linear Transform: v = Ax


n차원 벡터 x를 m x n size의 matrix A에 linear하게 mapping하여 m차원의 벡터 v로 변환(transformation)하는 것은 Matrix Transform이라고 부른다.