Fundamentals/Linear Algebra

[Linear Algebra] Lecture 10 네 개의 주요 부분 공간(Fundamental subspaces)

츠벤 2017. 2. 6. 23:05

1. 네 개의 주요 부분 공간(Four fundamental subspaces)

 

이번 포스팅에선 행렬 A에 대한 네 개의 주요 부분 공간(Fundamental subspaces)에 대해 다뤄보겠다. 이들 주요부분공간 각각에 대해 알아보고 이들이 서로 어떻게 연결되는지 살펴보도록 하자. 부분 공간(subspace)에 대한 개념은 Lecture 5-(2)를 참고하길 바란다. 

임의의 행렬 A에 대한 네 개의 주요부분공간은 아래와 같다. 

  • Column space 
  • Null space 
  • Row space 
  • Left null space

 

- Column space and Null space:

 

맨 처음 언급된 column space는 임의의 행렬 A에 대해 C(A)로 표기하며 지금까지 많이 다뤄왔기 때문에 익숙할 것이다. 행렬 A의 column vector들의 선형 조합(Linear combination)을 통해 형성하는 공간을 의미한다. 

두 번째인 Null space역시 많이 다뤄왔다. 이는 Ax=0를 만족시키는 해(x)들의 선형 조합으로 형성되는 공간을 의미한다. 자세한 내용은 Lecture 6를 참고하기 바란다. 

 

 

- Row space:

 

세 번째 부분 공간인 row space는 처음 언급되는 것이다. 이름에서 알 수 있듯이 행렬 A의 row vector들의 선형 조합을 통해 형성하는 공간이다. 따라서 row vector들은 row space를 "span"한다. 만약 행렬 A의 row vector들이 독립(Independent)이면 row space의 기저(basis)가 되고, 종속(Dependent)일 경우, 기저가 아니다.

 

결국 row space는 row vector들의 가능한 모든 선형 조합(Linear combination)으로 정의할 수 있다. 하지만 row vector는 뭔가 익숙하지가 않다. 일반적으로 벡터라 함은 column vector가 더 자연스럽다. 그렇다면 row space를 column vector로 표현하려면 어떻게 해야 할까? 바로 A의 전치(Transpose)행렬에 대한 column space를 구하면 된다. 즉

 

 

행렬 A를 전치를 하게 되면 가로로 누워있던 row vector들이 세로로 서있게 되고, 이 상태에서 column vector들의 선형 조합을 통해 column space를 정의하게되면 결국 원래의 row space들에 대한 공간이 정의되는 것이다. 식 (1)의 표기법을 통해 Row space를 식으로 간단하게 정의할 수 있다. 

 

 

- Left null space:

 

마지막 네 번째에 정의된 Left null space는 행렬 A의 전치에 대한 Null space를 의미한다. 사실 이 공간을 행렬 A와 연결 짓는 정확한 이름은 없지만 종종 Left null space of A라 부르는데, 이렇게 부르는 이유를 추후에 설명하도록 하겠다. 식은 아래와 같이 표기한다. 

 

 

 

 

2. 주요 부분 공간들의 예시(Examples of 4 fundamental subspaces)

 

위에서 정리한 4개의 주요부분공간은 임의의 행렬 A에 관한 부분 공간들이다. 행렬 A가 m x n의 크기(m=row수, n=column 수)라고 했을 때, 각 공간들이 이루는 공간은 몇 개의 component를 가질까? 즉 각 부분공간들은 어떠한 전체 공간에 놓여있을 까?(이것은 차원(Dimension)과는 다르다)

 

Column space의 경우 $\boldsymbol{R}^m$의 공간에 존재한다. 여기서 m은 A의 row의 수이다. 

Null space는 $\boldsymbol{R}^n$에 존재하며 n은 column의 수이다. Ax=0를 만족시키는 해(=x)들의 집합이므로 column vector 형태인 x의 component의 수와 같다. 

Row space는 A의 전치(Transpose) 행렬에 대한 column space이므로 $\boldsymbol{R}^m$에 존재하게 된다. C(A)의 경우와 반대라고 생각하면 된다. 

Left null space역시 A의 전치에 대한 Null space이므로 N(A)의 경우와 반대이고 $\boldsymbol{R}^m$에 존재하게 된다. 

 

 

이들을 다시 한 번에 정리하면 아래와 같다. 식(3)에 나타낸 행렬식을 보고 각 부분공간이 놓여 있는 공간에 대해서 잘 생각해보자. 

 

 

 

 

 

 

위에서 나타낸 주요부분공간들을 그림으로 표현해보자. 정리해서 일반적으로 표현하면 아래 그림과 같다. 

 

 

 

 

이번 강의에서 우리의 목적은 위 그림을 이해하는 것이다. 위 그림의 내용을 이해하는 것은 선형대수의 절반을 이해한 것과 같다고 표현할 정도로(by Gilbert strang) 굉장히 중요하다. 예제를 들어서 차근차근 알아보도록 하자. 

 

위의 부분 공간들은 모두 어떤 임의의 행렬 A에 관한 부분 공간을 이야기 한다. 여기서 행렬 A를 아래와 같다고 생각해보자. 

 

 

행렬 A는 2개의 row와 3개의 column으로 구성되어 있다. 즉 2개의 방정식(equation)과 3개의 미지수(unknown)가 존재하는 것이다. 먼저 A의 row space를 보자. row space는 A의 row vector들의 선형조합으로 형성하는 공간이다. n=3이므로 3차원 공간상에 존재한다. A의 두 개의 row vector들이 3차원 공간에 아래와 같이 표현되었다고 가정해보자. 

 

 

 

 

실제 각도나 모양이 위와 같지 않더라도 가정을 해보자. 보라색 점은 원점을 나타낸다. 위 두 개의 row vector들은 선형 조합(Linear combination)을 통해 3차원 공간상에서 무한대로 2차원 평면을 채울 수 있다. 하지만 2차원 평면을 채울 수는 있지만 3차원 공간을 채울 수는 없다. 두 벡터를 직교하는 또 하나의 벡터가 존재하지 않기 때문이다. 이때 두 row vector를 직교하여 3차원 공간을 형성할 수 있도록 하는 것이 바로 Null space다 즉 row space와 null space는 직교(orthogonal)한다. 과연 그럴까? 실제로 A의 Null space를 계산해보자. 

 

 

첫 번째와 세 번째 column vector를 더한 값을 두 번째 벡터에 2를 곱해서 빼주면 0이 된다. 따라서 A의 null space는 x=[-1 2 -1]T이 된다. 이 null space가 정말로 두 벡터(row space)를 직교(orthogonal)하는지는 어떻게 확인할까? 바로 내적(dot product)를 통해 알 수 있다. 내적했을 때 0이 되면 두 벡터사이의 각도는 90도가 되기 때문에 직교하게 된다. 식 (6)이 사실상 두 벡터 row1, row2와 null space vector와 각각 내적을 한 것과 같다. 내적했을 때 둘 다 0이 되므로 null space vector는 row1, row2에 동시에 직교하는 벡터가 된다. 이를 그림으로 나타내면 아래와 같다. 

 

 

 

파란색과 빨간색 벡터가 row space를 정의하는 두 개의 벡터이고 평면을 정의한다. 이 두 벡터를 동시에 직교(orthogonal)하는 것이 바로 하늘색 벡터인 null space이다. 이 null space vector [-1 2 -1]에 어떠한 상수를 곱해도 성립하기 때문에 식 (6)의 행렬 A에 대한 Null space는 Line이다. 물론 row space와 null space는 보라색 점으로 표시된 원점에서 만난다. 이것이 식(6)의 행렬 A에 대한 Rn공간에서 정의되는 row space와 null space이다.

 

여기서 A의 row space의 차원(dimension)은 어떻게 알 수 있을까? 바로 A의 rank=r가 row space의 차원이다. A의 rank는 2이고 따라서 A가 정의할 수 있는 차원은 2차원 평면인 것이다. 비록 3차원 공간상에 존재하지만 말이다. 

그렇다면 null space의 차원은 어떻게 정의될 까? 일단 위 그림상으론 line이기 때문에 1차원인 것을 알 수 있는데 행렬만 가지고 어떻게 판단을 할 수 있을까? null space의 차원은 n-r, 즉 column의 수에서 rank를 뺀 것이 null space의 차원이 된다. 위 그림은 null space가 1차원일때의 그림을 나타낸 것이다. 

정리하자면 row space의 차원은 pivot variable의 개수인 rank가 되고, null space의 차원은 free variable의 개수인 n-r이 된다. 만약 A가 3x3 행렬에 full rank인 경우(r=3)위 그림은 어떻게 표현될까? 그때는 Null space가 단지 보라색 점으로만 표현이 되고 row space는 3차원 cubic으로 표현될 것이다. 즉 위 그림에서 row space의 사각형이 화면 방향으로 튀어나온다고 생각하면 된다. 

 

 

이제 처음 그림에서 우측에 있는 column space를 살펴보자. A의 column space는 $\boldsymbol{R}^m$에 존재한다. 이때 A에 대한 m은 2이고 결국 column space가 존재하고 있는 전체 공간이 2차원이라는 뜻이다. 여기서 column vector들을 살펴보면 component가 2개로 이루어져 있으므로(col1=[1 4]T, col2=[2 5]T, col3=[3 6]T) column space는 자연스럽게 2차원 공간에 존재함을 알 수 있다. A의 row space가 3차원 공간에 존재했지만 2차원 공간밖에 정의할 수 없었던 것과는 달리 column space는 2차원 공간에 존재하고 그 공간 전체를 채울 수 있다. 

 

그렇다면 column space의 차원을 판가름하는 rank는 어떨까? row space와 마찬가지로 2이다. 여기서 중요한 사실 한가지를 알 수 있다. 바로 row space와 column space의 차원은 항상 같다이다. 즉 rank가 같다는 이야기이다. 따라서 column space의 차원이자 rank는 2가 된다. 

마지막 Left null space는 어떨까? 일단 식을 세워보면 아래와 같다. 

 

 

식 (7)을 성립하도록 만드는 x값은 무엇이 있을까? 오직 영벡터(x1=0, x2=0)만이 위의 식을 성립시킬 수 있다. 따라서 Left null space는 오직 영벡터(zero vector)로 정의 된다. 즉

 

 

이를 그림으로 표현하면 아래와 같이 나타낼 수 있다. 

 

 

 

column space는 Rm의 공간에 존재하는데, A의 m은 2다. 즉 R2공간에 존재하며 rank=2이기 때문에 R2공간 전체를 표현할 수 있는 것이다. 또한 행렬 A의 Left null space의 경우 오직 영벡터(zero vector)로 정의 되기 때문에 그림상에서 보라색 점으로 표현된다. Left null space의 차원은 m-r로 계산하는데, 2-2이므로 결과적으로 0차원이 된다. 

 

 

 

 

3. 주요 부분 공간들의 기저와 차원(Basis and Dimension of 4 fundamental subspaces)

 

- Column space and Null space:

 

네 개의 주요부분공간(fundamental subspaces)을 이해하기 위해선 각 부분공간의 기저(basis)차원(dimension)을 알아야 한다. 

Column space경우 기저를 알기 위해선 각 공간을 형성하기 위한 최소한의 필수 벡터가 몇 개인지를 알아야한다. 이 개수가 바로 차원(dimension)이 되고, 차원은 곧 rank를 의미한다. Rank는 행렬 A의 소거 과정에서 드러나는 pivot들의 개수를 의미하고 pivot들이 존재하는 column이 바로 pivot column이 된다. 이 pivot column들이 결국 행렬 A의 기저(basis)가 되는 것이다.  (소거에 관해서는 Lecture 2 참고)

 

Null space의 경우엔 이와 반대인데 pivot이 없는 column들, 즉 free column들과 관계가 있다. 즉 행렬 A의 각각의 free variable에 0과 1을 번갈아 설정하여 Ax=0의 해 x를 구한 special solution이 null space의 기저(basis)가 된다. 또한 이들의 차원은 free column의 개수이므로 column의 수에서 rank를 뺀 n-r차원이 된다. 이들을 표로 정리하면 아래와 같다. 

 

C(A): Column space  N(A): Null space
 basis: pivot columns
 dimension: r
 basis: special solutions 
 dimension: n-r 

 

 

- Row space:

 

Row space의 기저(basis)는 어떻게 구할 수 있을까? A를 전치(Transpose)시킨 후 소거(elimination)를 통해 reduced row echelon form의 형태로 만든다. 여기서 pivot이 있는 column을 기저로 생각할수도 있다. 그러나 보다 정확한 row space의 기저를 구하는 방법은 원시 행렬 A에서 소거를 통해 row reduction(소거를 통해 row를 줄여나가는 행위)을 통해 pivot row를 취하는 방법이다. 지난 강의(Lecture 9)에서 다루었던 행렬을 다시 예를 들어보자. 

 

 

 

 

위의 식 (9)의 행렬 A를 소거해서 reduced row echelon form을 만들어보자. 아래와 같은 순서로 만들어질 것이다. 

 

 

행렬 A에서 첫 번째 pivot을 기준으로 아래의 원소들을  소거해준다. 두 번째 pivot이 음수인데 이 row에 -1을 곱해서 양수로 만들어준다. 두 번째 pivot을 기준으로 위쪽 원소를 제거하여 reduced row echelon form을 만들어준다. 식 (10)의 마지막 행렬이 R행렬이다. 

여기서 한 가지 중요한 사실이 있다. 바로 원시 행렬 A의 column space와 (Reduced row echelon form)R의 column space는 같지 않다는 것이다. 즉 아래 식과 같다. 

 

 

왜냐하면 행렬 A에는 벡터 [1 1 1]T이 존재하지만, R에는 [1 1 1]T이 존재할 수 없기 때문이다. row3이 영벡터이기 때문에 R의 column vector들로 어떠한 선형조합을 해도 [1 1 1]T을 만들 수 없다. 여기서 알 수 있는 중요한 사실은 다음과 같다. 

 

  • 소거와 row operation:
어떤 행렬 A에 대해 소거(Elimination)를 통해 우리가 한 연산은 row에 관한 연산, 즉 row reduction을 한 것이다. row reduction은 row에 대해 일정한 상수를 곱하고 row끼리 더하고 빼는 선형 조합(Linear combination) 연산을 했으므로 row space는 변하지 않는다. 
즉 row끼리 선형조합을 했기 때문에 결과적으로 소거된 행렬인 R의 row들은 여전히 row space상에 존재하게 된다. 
반면 column space는 원시행렬 A에 대해서 row operation을 통해 변하게 된다. 


  • 행렬 A를 소거하여 Reduced row reduction form인 R을 만들었을 때 A와 R은:
- A와 R의 Column space는 다르다. 
- A와 R의 Row space는 같다.

 

결론적으로 행렬 A의 row space의 기저(basis)는 R행렬의 처음 r개의 row vector들이다. 즉 pivot의 개수인 rank만큼의 기저 벡터가 존재하며, pivot이 위치한 R의 row벡터들이 행렬 A의 기저가 되는 것이다. 식 (11)과 같이 R의 첫 번째와 두 번째 row vector들은 독립(independence)이며 A의 subspace인 2차원 평면을 "span"한다. 따라서 R의 row1과 row2가 행렬 A의 기저(basis)가 된다. 

 

 

 

그렇다면 식 (11)에서 R의 row1과 row2가 A의 기저인지를 어떻게 확인할 수 있을까? R의 row1, row2의 선형 조합으로 A의 row space를 만들어낼 수 있다는 것을 어떻게 알 수 있을까? 이를 확인하기 위해선 바로 A->R을 만드는 순서를 거꾸로 수행해보면 된다. 아래 식 (12)는 식 (10)의 연산을 거꾸로 수행한 것이다. 식 (10)과 비교해보기 바란다.  

 

 

 

- Left null space:

 

마지막으로 Left null space에 대한 기저(basis)를 구하는 법을 알아보자. 그 전에 먼저 왜 "Left null space"라 부르는지 알아보도록 하자. Left null space는 아래와 같이 표기한다. 

 

 

그런데 식(13)에서 x를 왼쪽에 놓고 싶을땐 어떻게 할까? 바로 식의 양변을 전치(Transpose)해주면 된다. 

 

 

이렇게 하면 null space의 해가 되는 x가 식의 왼쪽에 위치하게 된다. 이러한 식의 형태에 따라서 Left null space라 부르는 것이다. 그러나 이러한 형태의 식은 보통 잘 사용하지 않는다. 일반적으로는 식 (13)에 나타나있는 형태를 많이 사용한다. 

 

이제 Left null space의 기저(basis)를 어떻게 구하는지를 알아보자. 직관적으로 생각해보면 Left null space라는 것은 행렬 A의 row vector들에 대한 null space이다. 즉 식(11)의 A의 row의 선형 조합을 통해 그 결과가 영벡터가 되는 해 x를 찾으면 되는 것이다. 식(11)의 행렬 A의 경우 1*row1 + 0*row2 - 1*row3=0이 된다. 즉 Left null space는 x=[1 0 -1] 인 것이다. 하지만 우리는 항상 이렇게 직관적으로 계산할 수는 없다. 어떻게 systematic하게 계산할 수 있을까?

 

식(11)의 행렬 A는 pivot variable이 2개이고 free variable이 2개이다. 이때의 special solution들은 Null space를 형성한다. 그러나 우리는 Left null space를 구해야 하므로 아래 식(15)와같이 A의 전치 행렬에 대한 null space를 구해야 하는 것이다. 

 

 

기저(basis)를 구하기 전에 Left null space의 차원(dimension)부터 정의해보자. 이는 행렬 A의 row수에서 rank를 뺀 m-r로 정의되는데, m=3, r=2 이므로 Left null space의 차원은 dim=3-2=1이다. 결국 free variable이 한개 라는 것이고 식 (15)에서보면 column3이 free column인 것을 소거를 통해 알 수 있다(직접 소거해보자). 결국 x3에 임의의 값을 설정하여 나머지를 풀면 Left null space를 구할 수 있다. 

 

그러나 왠지 식 (11)의 A에서 R로 만드는 과정을 간소화 시켜서 정의하면 Left null space를 구하는 실마리를 얻을 수 있을 것 같다. 이 간소화 과정을 Gauss-Jordan소거법(Lecture 3참고)을 활용하는 것이다. 간략하게 설명하자면 소거를 할 때 원래 행렬 뒤에 단위 행렬(Identity matrix)를 붙여 소거하여 E행렬(Elementary or Elimination matrix)을 만드는 것이다. 이때 A가 역행렬이 존재하면 E행렬이 A의 역행렬이 된다. 

 

어쨋든 Gauss-Jordan소거법을 이용하여 식(11)의 과정을 만들어보자. 

 

 

식 (16)과 같이 행렬 A의 뒤에 mxm크기의 단위 행렬을 붙여서 증강 행렬(Augmented matrix)을 만든 다음 reduced row echelon form을 만들어준다. 이 과정을 통해 A->R이 되고, I->E가 된다. 이 과정을 하나의 행렬을 곱해서 만들 수 있음을 Lecture 3에서 배웠다. 따라서 식 (16)을 하나의 행렬을 곱하여 rref를 만드는 과정으로 다시 써보면

 

 

식 (17)에서의 E행렬이 바로 rref를 만드는 역할을 하는 것이다. A가 정방행렬이며 역행렬이 존재하면 E가 바로 역행렬이 된다. 

그렇다면 여기서 E는 어떻게 계산할까? 그저 단위 행렬을 붙인 식 (16)을 똑같이 계산해주면 된다. 식 (16)을 좀 더 풀어서 써보면 아래와 같다. 

 

 

위의 식(18)은 증강 행렬(Augmented matrix)에 식 (10)에서 했던 소거 과정을 그대로 적용한 것이다. 이를 통해 A->R이 되고, I->E가 되었다. 이렇게 R과 E행렬을 각각 만들었는데, E행렬이 정말 A를 R로 만들어주는 행렬인지 확인해보도록 하자. A의 앞에 곱한 결과가 R이 되는지를 확인하면 될 것이다. 계산해보면 E를 통해 A를 R로 만들 수 있음을 확인할 수 있다. 

 

 

식 (19)를 통해 우리는 무엇을 읽을 수 있을까? 우선 행렬 A의 rank는 2임을 알고 있다. Left null space의 차원은 m-r=3-2=1이고 1차원임을 알 수 있다. 이때 R행렬을 보니 모든 원소가 0인 row3가 보인다. 이것이 의미하는 것은 무엇일까? 

 

Left null space는 A의 row vector의 선형 조합(Linear combination)으로 영벡터를 만들 수 있어야 한다. 마침 R행렬의 row3가 영벡터이고, 이 영벡터가 존재한다는 것은 A벡터의 선형조합을 통해 영벡터를 만들 수 있다는 의미다. 즉 1차원의 Null space가 존재한다는 의미다. R의 row3에 대응되는 E의 행렬은 E의 row3가 되고 결국 이것이 행렬 A의 Left null space가 된다. 

 

 

 

4. 마치며

 

이번 강의에선 임의의 행렬 A에 대한 4개의 주요부분공간(Four fundamental matrix)에 대해서 알아보았다. 이들은 각각 column space, null space, row space, left null space이다. 이번 강의를 통해 column space와 row space의 관계를 알 수 있었고 둘의 차원은 항상 같음(rank, number of pivots)을 알 수 있었다. 

또한 각 부분공간의 기저(basis)와 차원(Dimension)을 구하는 방법을 공부하였고 서로의 관계에 대해 알 수 있었다. 부분 공간을 이해하는 것은 선형 대수에서 행렬을 이해하는데에 중요한 역할을 하므로 잘 이해해두도록 하자. 

 

C(A): Column space  N(A): Null space C(A^T): Row space  N(A^T): Left Null space 
 basis: pivot columns of A
 dimension: r
 basis: special solutions of Ax=0
 dimension: n-r 
 basis: pivot columns of A^T
 dimension: r
 basis: special solutions of A^Tx=0
 dimension: m-r