이번 포스팅에서는 크게 세 가지 주제를 다룰 것이다. 매우 중요한 개념들이니 잘 숙지하도록 하자. 

먼저 선형 독립(Linear independence)에 대하여 이야기하고, Span기저(Basis), 그리고 차원(Dimension)에 대하여 다루도록 하겠다. 이 용어들의 정확한 의미를 파악해 보도록 하자. 

 

 

 

1. 선형 독립(Linear independence)

 

- background:

 

선형 독립을 설명하기 위해서 먼저 지난 Lecture 7에서 배웠던 내용을 잠깐 복습해보자. 

 

어떤 행렬 A의 크기가 m by n이라고 가정하자. 이때 column의 수 n이 row의 수 m보다 더 크다고 가정해보자. 즉 m < n이다. 이는 다시 말하면 미지수(unknown)의 개수가 방정식(equation)의 개수보다 더 많다는 이야기이다. 

이 경우 행렬 A에 대해서 Ax=0에 대한 0이 아닌 해가 존재한다. 즉 Null space가 존재한다는 것이다. 어째서 해가 존재할까? 

 

우리는 이를 알아낼 수 있는 확실한 알고리즘을 이미 공부했다. 소거(elimination)를 통해 행렬을 echelon form으로 만드는 과정에서 pivot이 존재하게 되는데, pivot은 row의 개수보다 많을 수 없다. 여기서의 행렬 A는 column의 수 n이 row의 수 m보다 많기 때문에 반드시 pivot이 없는 column이 존재하게 되는데, 이 column이 바로 free column이고 free column에 대응되는 미지수가 바로 free variable이다. 

 

결국 행렬 A가 m < n인 경우, 반드시 1개 이상의 free variable이 존재하기 때문에 Ax=0에 대한 0이 아닌 해, Null space가 존재하게 된다. 정확히는 n-r(rank)개의 free variable이 존재하게 된다. 우리는 이 free variable에 0이 아닌 어떤 임의의 값을 설정한 뒤 pivot variable에 대해서 방정식을 풀게 되면 그 해가 Ax=0을 만족하는 0이 아닌 값들이 되어 Null space를 형성한다. 

(자세한 사항은 lecture 7 참조)

 

 

- linear independence:

 

지금까지 위에서 설명한 내용은 선형 독립을 설명하기 위한 배경 지식이다. 이제 선형 독립(Linear independence)에 대해 알아보도록 하자. 

 

벡터가 독립(Independence)이라는 것은 어떤 의미일까? 함축된 정의를 내리기전에 직접적인 의미를 생각해보자. 

 

 



독립(Independence)의 의미: 


벡터 x1, x2, ... xn이 있을 때, 만약 모든 계수(coefficient)가 0인 경우를 제외하고 어떠한 선형 조합(Linear combination)으로도 0을 만들 수 없다면 이 벡터들은 독립(Independent)이다. 즉



 

 

위의 말을 다시 풀어서 써보자면 어떤 벡터 x1, x2가 있다고 했을 때, 이들의 선형 조합을 c1x1 + c2x2 라고 하자. 이때 c1=0, c2=0인 경우를 제외하고 c1, c2에 어떠한 임의의 값을 넣어서 선형 조합 연산을 했을 때 그 어떠한 값을 넣어도 결과 값이 0이 나오지 않는다면 x1과 x2는 독립이다. 

반대로 임의의 c1, c2값으로 선형 독립 연산을 했을 때 결과 값이 0인 경우가 발생한다면 x1과 x2는 종속(dependent)관계이다. 

 

 

말로만 설명하면 이해가 잘 가지 않을 수 있으니 그림을 예로 들어 이해해보자. 아래 그림의 2차원 평면상의 두 벡터를 보자. 

 

 

 

위 그림에서 두 개의 벡터 v1, v2가 있다. v2는 v1의 두 배에 달하는 길이를 가지고 있고 방향도 같다. 이들은 독립(Independent)일까 종속(dependent)일까? 당연히 종속(dependent)이다. 위의 정의에 따르면 v1의 두배에서 v2를 빼면 0이 되기 때문이다. 즉

 

 

위의 정의에 의해 c1=2, c2=1일때의 선형 조합을 통해 0이 만들어지기 때문에 v1과 v2는 종속관계이다. 

 

이번엔 직관적인 관점으로 보자. v1과 v2는 2차원 평면상에 존재하지만, 방향이 같다. 이는 같은 직선 상에 위치한 것을 의미하며 2차원 평면상에 존재하지만 이 두 벡터로는 1차원밖에 정의할 수 없다는 의미다. 이 말을 위의 독립에 대한 정의와 연결지어 생각해보자.

 

여기에서의 선형 조합(linear combination)이라는 것(일반적인 경우는 아님)은 사실 벡터는 변함없이 그대로이고 상수값 c만 바뀌게 된다. 이것이 의미하는 것은 벡터의 방향은 변함이 없고 크기만 바뀌게 되는데, 선형 조합에 이용되는 벡터들의 크기만을 조절하여 0을 만들기 위해선(모든 c가 0인 경우는 제외함) 반드시 벡터들의 방향이 같아야만 한다. 

 

결국 모든 계수가 0인 경우를 제외하고 선형 조합을 통해 결과가 0이 된다는 것은 두 벡터의 방향이 같아야만 성립되기 때문에 그림으로 판단하는 독립에 대한 우리의 직관과 위의 조건이 일치하는 것을 알 수 있다. 

 

 

이번엔 약간 특이한 경우를 살펴보자. 

 

위 그림처럼 v1벡터가 있고, v2가 0인 경우에 이들은 독립일까? 이들 역시 종속(dependent)이다. 계수 c가 모두 0인 경우를 제외한다고 해보자. v1에 0을 곱하고 v2에 어떠한 수를 곱해도 결과는 0이 될 수밖에 없다. 

 

 

결국 n개의 벡터 중 하나라도 0벡터일 경우엔 종속(dependent)이다.  

 

 

이번엔 독립(Independence)인 경우를 살펴보자. 2차원 평면에서 두 개의 벡터가 아래와 같이 있으면 독립이다. 

 

 

위 그림에서 두 벡터 v1과 v2를 이용하여 어떠한 선형 조합을 한다해도 0을 만들 수는 없다(c1, c2가 모두 0인 경우는 제외). 이를 직관적으로 봤을 때도 v1과 v2를 이용하여 2차원 공간상의 어떤 벡터도 만들어낼 수 있기 때문에 이 둘은 독립이다. 

 

 

그렇다면 아래 그림과 같이 여기에 v3가 추가되면 어떨까? 이 경우에도 이들은 독립일까? 

 

 

 

이들은 독립일까 종속일까? 이들은 종속(dependent)이다. 이를 어떻게 알 수 있을까? 우리가 이번 포스팅의 맨 처음에서 공부했던 background를 통해서 알 수 있다. 즉 background에서 공부했던 m<n인 경우에 관한 내용을 통해 2차원 평면에 3개의 벡터가 있을 경우, 종속임을 확인할 수 있다. 3개의 벡터의 Dependence와 background의 내용을 어떻게 연결지을 수 있을까? 다음을 보자. 

 

3개의 벡터를 아래와 같이 행렬 A의 column으로 표현해보자. 

 

 

 

column picture로 생각해봤을 때 이들은 2차원 공간상에 존재하며 3개의 벡터를 가지고 있다. 따라서 row의 수 m은 2, column의 수 n은 3이다. 이 경우 행렬 A는 2x3의 행렬로써 2개의 방정식(equation)과 3개의 미지수(unknown)을 가지고 있으며 맨 처음 background에서 봤던 m<n의 경우이다. 따라서 free variable이 존재하는 경우이다. 

 

선형 결합을 보이기 위해 x대신 c를 넣어서 Ac=0를 만들어보면 아래와 같다. 

 

 

위 식(4)에서 c벡터가 Null space에 존재할 때, 즉 어떤 c1, c2, c3값을 통해 선형 결합(Linear combination)을 수행한 결과 값이 영벡터가 될 경우 A의 column은 종속(dependent)이다. 같은 말을 다르게 써보자.

 
 
  • 어떤 행렬 A의 column vector가 선형 독립(Linear independence)이기 위해선 A에 대한 Null space가 오직 모든 변수가 0인 경우에 대해서만 존재해야 한다(x1=0, x2=0, ... xn=0).
  • 어떤 행렬 A에 대해서 Ax=0식에 대한 Null space가 x1=0, x2=0, ... xn=0와 같이 모든 x가 0일 때를 제외한 다른 경우가 존재한다면, 그 행렬 A의 column vector는 종속(dependent)이다.  

 

좀 더 쉽게 설명하자면 식 (4)가 만족하기 위해선 c1=0, c2=0, c3=0이면 당연히 결과도 0이 되므로 식이 만족할 것이다. 그런데 이렇게 모든 c값이 0인 경우를 제외하고 c벡터가 어떤 값을 가졌을 때 그에 대한 선형 결합 결과값이 0이 만들어진다면, 그 행렬 A의 column은 종속(dependent)관계가 된다는 것이다. 

 

식 (4)의 경우엔 c1=-0.7428, c2=0.5571, c3=0.3714일 경우 그에 대한 선형 결합 결과 값이 0이 되기 때문에 종속이 된다. 아래 그림은 식 (4)를 MATLAB을 통해 검증을 해본 결과이다. 위의 c값을 통해 세 개의 column vector를 더한 결과가 0이 되는 것을 그래프로 확인할 수 있었다. 

 

 

 

 

정리해보면...

어떤 벡터 v1, v2, ... vn이 있을 때, 이 벡터들이 독립(Independence)인지, 혹은 종속(Dependence)인지 판별하기 위한 기준은 다음과 같다. 

 

  • 독립(Independence)일때
- 벡터들을 행렬 A의 column으로 넣고 행렬 A의 Null space를 체크.
- 만약 이 행렬 A의 Null space(Ax=0)가 오직 zero vector만 존재할 경우, 이 벡터(행렬)들은 독립이다. 
- 이때의 행렬 A의 Rank는 column의 수 n과 같다. (Rank=n)
- 따라서 free variable이 존재하지 않는다
 
  • 종속(Dependence)일때
- 벡터들을 행렬 A의 column으로 넣고 행렬 A의 Null space를 체크.
- 만약 이 행렬 A의 Null space(Ax=0)가 zero vector이외의 다른 값이 존재할 경우, 이 벡터(행렬)들은 종속이다. 
- 이때의 행렬 A의 Rank는 column의 수 n보다 작다. (Rank<n)
- 따라서 free variable이 존재한다. 

 

 

아래는 MATLAB 코드

 

 

 

 

2. Span

 

이번에 알아볼 개념은 Span이다. Span의 사전적 의미는 동사로써 "(많은, 넓은 것을)포괄하다, 걸치다, 가로지르다" 등이 있다. 선형대수에서 span은 어떤 의미일까? 

 

선형대수(Linear algebra)에서 span은 보통 "span a space"라고 표현하곤 한다. 이를 굳이 해석해보면 "어떤 공간을 포괄하다"정도로 해석할 수 있겠다. 한글로 표현하기 약간 난해한 감이 없지 않아 있으나 대충 어떤 의미인지는 감이 올 것이다. 

 

이렇게 한 번 생각해보자. 예를 들어 두 개의 벡터 v1=[2, 3], v2=[3, 2]가 있다고 가정해보자. 이 두 벡터 v1, v2가 어떤 공간을 "span(포괄하다)한다" 라고 했을 때, 이것이 의미하는 것이 무엇일까? 벌써 감이 오는 사람도 있겠지만 정답을 이야기 하자면 span이라는 것은 이 벡터들로 형성할 수 있는 공간이다. 즉 v1과 v2의 선형 조합(Linear combination)을 통해 만들어지는 공간을 의미한다. 

 

사실 이 span에 대해서 우리는 이미 공부한적이 있다. 어떤 행렬 A의 column vector들을 가지고 가능한 모든 선형 조합을 하고 이를 통해 column space를 얻을(형성할) 수 있다. 다시말하면 column vector들이 column space를 "span"한 것이다. 

결국 "span a space"의 의미는 다음과 같이 정리할 수 있다. 

 



 벡터 v1, v2, ... vn이 어떤 공간(space)을 span한다의 의미:
  • 벡터 v1, v2, ... vn들의 가능한 모든 선형 조합(Linear combination)으로 공간을 형성하는 것을 의미한다. 이때 형성되는 공간은 조합되는 벡터에 따라 Rn이 될 수도, 혹은 부분 공간(subspace)이 될 수도 있다. 
  • 결국 "span"이라는 것은 벡터들의 모든 가능한 선형 결합(Linear combination)에 대한 결과벡터들을 하나의 공간에 몰아 넣은 것을 의미한다. 사용하는 벡터에 따라서는 모든 공간을 채울 수도 있고, 혹은 2차원에선 Line, 3차원 공간에선 평면(Plane)과 같이 부분적인 공간(subspace)만을 채울 수도 있는 것이다. 이러한 개념을 "span"이라 한다.



**우리는 이전 강의에서 실제로 MATLAB을 이용해 행렬의 column vector들의 선형 결합으로 부분 공간(subspace)를 만들어 본 적이 있다. 지난 강의 Lecture 5 - (2) 벡터 공간(Vector Spaces), 부분 공간(Sub Spaces)편에서 3. 행렬의 부분 공간편을 보면 "span a space"에 관한 구현 부분이 나온다. 여기서 3차원 공간의 부분 공간인 어떤 평면을 "span"을 통해 구현하였다. 

 

 

 

3. 기저(basis)

 

어떤 행렬 A의 column space를 생각해보자. column vector들을 선형 조합하여 column space를 얻는다.  column vector들이 column space를 "span"한 것이다. 이때의 column vector들은 독립(Independent)인가? 아니면 종속(Dependent)인가? 아마 독립일 수도, 종속일 수도 있을 것이다. 이는 column vector에 달려있다. 

 

이번에 우리가 관심을 가져야하는 벡터들은 바로 어떤 공간을 "span"하면서 그들이 독립(Independent)인 벡터들이다. 이것을 우리는 기저(basis)라 한다. 

 



기저(basis)는 다음의 두 가지 속성을 가지고 있다.  
  • 기저벡터들은 독립(Independent)이다. 
  • 기저벡터들은 공간(space)을 "span"한다.  

 

 

기저(basis)는 굉장히 중요한 개념이다. 기저에 대한 설명을 하기 위해 지금까지 독립과 span에 대해 설명했다고 해도 과언이 아니다. 전체 공간과 그 안에 있는 부분 공간(subspace)을 설명할 때에도 기저를 이해하는 것이 중요하다. 

기저(basis)에 대한 예를 들어 보자. 

 

3차원 공간(space) $R^3$를 생각해보자. R3에 대한 기저는 무엇일까? 독립이면서 3차원 공간 R3를 "span"하는 벡터가 무엇일까? 가장 먼저 떠올릴 수 있는 기저벡터는 아래 식 (5)와 같다. 

 

 

 

이들 벡터는 독립(Independent)이다. v1, v2, v3에 어떤 상수들(c1, c2, c3)을 곱해서 더해도 영벡터를 만들 수 없다(c1=0, c2=0, c3=0인 경우는 제외). 식 (5)를 잘 보면 우리에게 익숙한 행렬이 보인다. 바로 단위 행렬(Identity)인데, v1, v2, v3를 합쳐 행렬로 만들면 바로 단위행렬이 된다. 이 단위 행렬의 Null space는 무엇일까? 오직 [0, 0, 0]T 인 zero vector이다

 

또한 세 벡터 v1, v2, v3를 이용해 3차원 공간 전체를 "span"할 수 있다. 즉 세 벡터의 선형조합을 통해 3차원 공간상의 어떠한 벡터도 만들어낼 수 있다. 

 

따라서 위의 두 가지 사실로부터 식 (5)의 v1, v2, v3는 기저(basis)이다. 이는 실제로 x축, y축, z축을 나타낸다. 특히 이러한 형태를 표준 기저(standard basis)라 한다. 

 

 

여기서 한 가지 중요한 사실은 식 (5)의 벡터가 3차원 공간의 유일한 기저(basis)가 아니라는 것이다. 사실 3차원 공간의 기저는 무수히 많다. 한 가지 예를 더 들어보자. 

 

 

 

 

우리는 3차원 공간 R3의 또 다른 기저를 찾고 있다. 각 사례를 살펴보도록 하자. 

 

만약 식(6)에서 멈췄다고 가정해보자. 식(6)은 독립인가? 두 벡터를 이용해 영벡터를 만드는 상수는 오직 zero vector뿐이므로 독립이다. 그렇다면 식(6)의 벡터가 3차원 공간 전체를 "span"하는가? 그렇지 않다. 이 두 벡터만 가지고는 3차원 공간에서 어떤 평면(plane) 만을 "span"할 수 있다. 따라서 식 (6)은 R3의 기저가 아니다

 

식 (7)의 경우엔 어떨까? 세 번째 벡터가 첫 번째, 두 번째 벡터의 합이다. 따라서 독립이 아니다. 독립이 아니라는 것은 식(7)의 세 번째 벡터 [3 3 7]T는 첫 번째 벡터와 두 번째 벡터가 이루는 평면 상에 존재하는 것이다. 따라서 3차원 공간 전체를 "span"하지도 않는다. 따라서 식 (7)도 R3의 기저가 아니다

 

마지막 식 (8)을 보자. 식 (8)은 세 개의 3차원 column vector로 이루어져 있고, 서로 독립이다. 이는 3차원 공간 전체를 "span"한다. 따라서 식 (8)은 R3의 기저이다

 

 

이해를 돕기 위해 위의 식 중 (7)을 시각화 해보겠다. 아래 그림은 식 (7)이 3차원 공간에서 표현할 수 있는 영역을 표현한 것이다.

 

 

노란색 부분이 식(7)의 column space를 표현한 것이다. 보다 시피 평면이고 세 번째 벡터가 첫 번째와 두 번째 벡터가 이루는 평면위에 놓여있음을 알 수 있다. 따라서 식 (7)은 종속(dependent)임을 알 수 있다. 

 

 

아래는 MATLAB 코드

 

 

 

 

그렇다면 이렇게 우리가 어떤 벡터들을 가지고 있을 때, 이들이 N차원의 기저인지 아닌지를 어떻게 판별할 수 있을까? 

먼저 벡터들을 어떤 행렬의 column vector로 만들어서 하나의 행렬을 만든 다음 가우스 소거(Gauss Elimination)를 통해 echelon form 행렬을 만든다. 그런 뒤 이 행렬이 free variable을 갖는지, 혹은 모든 각 column vector가 pivot을 가지고 있는지를 확인하면 된다. 즉 행렬의 Rank를 가지고 판별하는 것이다. 

 

우리가 만약 N차원의 공간 $R^N$에 대해 n개의 벡터를 가지고 있을 때, 이들이 기저 벡터(basis vector)이기 위해서는 n x n 행렬이 역행렬이 존재(invertible)해야 한다. 즉 3차원 공간 R3의 기저는 3개의 3차원 크기의 벡터가 존재해야 하며, 결국 3x3 크기의 행렬의 역행렬이 존재해야하는 것이다. 식 (8)과 같이 말이다. 

결국 식(8)과 같이 3차원 벡터 세 개로 구성되면서 서로 독립인 어떠한 벡터도 3차원 공간 R3의 기저(basis)가 될 수 있다

 

 

 

4. 차원(dimension)

 

앞에서 언급했듯이 기저(basis)는 유일하지 않다. N차원의 공간(space)에 대해 무수히 많은 기저가 존재한다. 그렇다면 여기서 차원(Dimension)이라는 것은 무엇을 의미할까? 

일반적으로는 선(Line)을 1차원, 면(Plane)을 2차원, 입방체(cubic)를 3차원으로 알고 있을것이다. 하지만 여기에선 N차원에 대해 정의할 수 있도록 선형대수의 관점으로 차원을 보도록하자. 

 

기저를 설명할 때 사용했던 식(6), (7), (8)을 다시 보자. 

 

 

 

식(6)은 기저가 아니다. 하지만 정확히는 R3에 대한 기저가 아니다. 이렇게 얘기할 수 있는 것은 식(6)은 기저에 대한 조건 자체는 충족하기 때문이다. 식 (6)의 벡터는 독립이며, 이 벡터들의 선형 결합을 통해 형성할 수 있는 공간을 "span"하기 때문이다. 즉 3차원 공간의  부분 공간(subspace)인 2차원 평면(plane)에 대한 기저이다. 

 

그러나 어떤 차원의 공간, 즉 3차원 공간에 대한 기저를 이야기 할 때 식(6)은 기저라고 할 수 없다. 왜냐하면 이들은 3차원 공간을 표현하기엔 벡터가 부족하기 때문이다. 

식(7)의 경우엔 벡터의 수는 맞지만 독립이 아니기 때문에 기저가 아니다. 

 

반면 식(8)의 경우엔 독립이면서 벡터의 수가 차원의 수(N=3)와 같기 때문에 기저이다. 2차원의 기저가 되려면 두 개의 벡터가, 4차원의 기저가 되려면 네 개의 벡터가, N차원의 기저가 되려면 N개의 벡터가 있어야한다. column space든, Null space든 어떤 공간이던간에 마찬가지로 다음의 정의가 성립한다. 



차원(Dimension):


주어진 공간(space)들에 대한 모든 기저(basis)들은 같은 수의 벡터를 가진다. 여기서 벡터의 수가 바로 그 공간의 차원(Dimension)을 의미한다. 

 

차원은 그 공간이 얼마나 큰지를 나타내는 지표이다. 차원은 기저가 반드시 가져야 할 벡터의 수를 나타낸다. 4차원 공간의 기저가 되기 위해선 반드시 4개의 벡터가 필요하다. 3개는 적고, 5개가 있어도 많기 때문에 기저가 아니다. 반드시 4개가 필요하다. 

차원에 대한 예를 들어보자. 

 

 

- Column space의 차원:

 

 

식(9)의 행렬 A의 column space C(A)를 생각해보자. A의 column vector들은 column space C(A)를 "span"하는가? 

답은 YES이다. 당연히 column vector들이 column space를 "span"할 수 있다. 

 

그렇다면 A의 column vector들은 독립(Independent)인가? 

답은 No다. col4가 col1과 같고 col3은 col1+col2이기 때문에 종속(Dependent)이다. 

따라서 A의 column vector들은 A의 column space C(A)의 기저(basis)가 아니다

 

그렇다면 A의 column space C(A)의 기저(basis)는 무엇일까? 바로 pivot column인 col1과 col2이다. col1과 col2만 놓고 봤을 때 이들은 독립이면서 column space를 "span"한다. 나머지 col3, col4는 col1과 col2가 이루는 평면에 존재하기 때문에 새로운 차원을 정의하는데 전혀 도움을 주지 못한다. 

결과적으로 행렬 A의 column space의 기저는 pivot column인 col1과 col2 두 개의 column vector이고, pivot column의 개수는 곧 A의 Rank이다. 따라서 A의 rank(=2)는 column space C(A)의 차원(Dimension)과 같다. 

 

어떤 행렬 A의 Rank는 행렬 A의 column space C(A)의 차원(Dimension)이다.

(※ N차원이 아닌 행렬 A의 Column space의 차원임을 유의)

 

 

 

참고로 A의 column space의 기저(basis)는 pivot column을 어떻게 잡느냐에 따라 다양하게 설정할 수 있다. 예를 들면 [col1, col3], [col2, col3], [col3, col4], 혹은 그들의 선형 조합(Linear combination)형태가 될 수 있다. 단 이때의 pivot column들은 독립이어야 한다. ([col1, col4]와 같은 조합은 안됨)

 

 

- Null space의 차원:

 

이번엔 Null space의 차원에 대해 알아보자. A의 Null space의 차원은 어떻게 될까? 

A의 Null space(Ax=0)를 보자. free columns에 대응되는 free variable 두 개를 1과 0으로 번갈아 설정하여 두 개의 special solution을 계산하면 아래와 같다. (Lecture 7의 Null space계산법 참고)

 

 

 

계산해보면 각각 -col1-col2+col3+0=0, -col1+0+0+col4=0이 된다. 

 

위의 두 개의 special solution은 Null space의 기저(basis)일까? Null space가 이 두 개의 벡터의 선형 조합으로 만들어질 수 있을까? 

답은 YES이다. 위의 두 벡터는 Null space에 존재하는 두 개의 해이고, 독립이다. 또한 Null space의 차원은 free variable의 개수와 같은데, 행렬 A의 free variable은 두 개이고 서로 독립인 두 개의 Null space vector가 존재하므로 식 (10)의 두 벡터는 Null space의 기저이다. 이를 정리하면....

 

 

행렬 A의 column space C(A)의 차원(dim)은 rank의 수 r이고, 

행렬 A의 Null space N(A)의 차원(dim)은 free variable의 개수이다. 이는 전체 column의 수 n에서 pivot variable의 수인 r을 뺀 것과 같다. 따라서 n-r=4-2=2가 A의 Null space의 차원이 된다. 

 

 

 

5. 마치며

 

이번 포스팅에선 선형 대수에서 중요한 개념들인 선형 독립(Linear independence), Span, 기저(basis) 그리고 차원(dimension)에 대해 배웠습니다. 이들 각각은 서로 연관된 개념들이기 때문에 선형 독립부터 차원까지 차례로 하나의 글에 담게 되었네요. 그러다보니 글이 조금 길어졌지만 깊이있는 이해를 위해선 길더라도 처음부터 차례로 보는 것을 추천드립니다. 

 

카메라나 전자현미경 등의 장비를 이용해 우리가 관찰하는 사물이나 장면을 샘플링(sampling)과 양자화(Quantization)과정을 거쳐 디지털 영상으로 만들 수 있음을 지난 포스팅에서 배웠다. 이번 포스팅에선 디지털 이미지가 실제로 어떤 식으로 표현이 되는지를 알아보고, 디지털 영상이 차지하는 메모리의 크기를 계산하는 법을 알아보도록 하자. 

 

 

 

1. 디지털 이미지의 표현 방법

 

디지털 이미지는 자연계에 존재하는 어떤 사물, 혹은 장면을 이미지 센서를 통해 디지털 값들의 집합으로 표현한 것이다. 이 과정에서 아날로그 신호인 대상체의 빛의 패턴을 샘플링(sampling)과 양자화(quantization)를 통해 전기 신호로 바꾸고, 최종적으로 전압값을 이진수로 바꾸어 메모리에 저장한다. 데이터를 표현하는 가장 간단한 형태는 이러한 이진수(binary number)이며, 이 이진수들을 여러개 붙여서 그 조합을 통해 흑백 영상, 컬러 영상등을 표현한다. 가장 간단한 형태의 디지털 이미지인 바이너리 이미지(binary image)부터 컬러 영상까지 디지털 이미지가 실제로 어떻게 표현되는지를 살펴보자. 

그보다 앞서 디지털 이미지를 표현하는 데이터 뭉치가 컴퓨터안에서 어떠한 방식으로 표현되는지를 살펴보도록 하자. 

 

 

- 디지털 이미지의 좌표계(Digital Image Coordinate) 

 

외부의 어떤 장면이 카메라 렌즈를 거쳐 디지털 이미지로 형성이 되기 까지 몇 가지 좌표계를 거치게 된다. 잠깐 언급만 하자면 월드 좌표계(World coordinate), 카메라 좌표계(Camera coordinate), 이미지 좌표계(Image coordinate) 그리고 마지막으로 픽셀 좌표계(Pixel coordinate)가 있다. 이번에 우리가 살펴볼 좌표계는 이 픽셀 좌표계이다. (나머지 좌표계는 추후에 Multiple view geometry관련 포스팅을 할 때 언급하도록 하겠다.)

 

이미지를 이루는 가장 작은 단위를 픽셀(pixel)이라 하는데, 이미지를 이루는 점들이라고 생각하면 된다. 우리가 보통 모니터 해상도를 이야기 할 때 640x480, 1024x768등의 해상도를 많이 들어봤을 것이다. 이 해상도는 바로 픽셀(pixel)의 개수를 의미한다. 즉 640x480의 경우엔 아래 그림과 같이 가로 640개, 세로 480개의 픽셀로 이루어진 이미지를 의미한다. 이때 이미지의 총 픽셀 개수는 640x480=307,200개 이다. 

 

 

위의 이미지에서 각 픽셀은 밝기 값, 혹은 컬러 값을 가지고 있는데, 이들 각각이 모여서 하나의 이미지 패턴을 만드는 것이다. 이때 각 픽셀들이 이미지를 형성하기 위해선 어떤 기준이 필요하다. 바로 이미지(픽셀) 좌표계(image coordinate)이다. 이미지 좌표계는 우리가 기존에 수학책에서 배웠던 좌표평면의 기준과는 좀 다른데, y축이 아래 방향이다. 따라서 y의 아래쪽 방향이 +방향, 위쪽이 -방향이 된다. 

 

  

 

 

 

 

이미지 좌표는 선형대수의 행렬(matrix)과 같이 생각할 수 있다. M개의 row와 N개의 column을 가진 M x N 행렬을 생각해보자. 여기서 M을 y축의 크기, N을 x축의 크기로 생각한다면 아래와 같이 각 픽셀의 값을 접근할 수 있다. 보통의 함수 f(x,y)에서 x와 y가 뒤집힌 꼴이라고 생각하면 된다. 

 

 

 

이러한 픽셀 접근 방법을 실제로 MATLAB으로 이미지를 띄워 확인해 보았다. 아래 그림은 M=258, N=350인 크기의 이미지의 좌표를 확인한 것이다. MATLAB의 데이터 커서 툴을 이용하여 임의의 좌표의 픽셀 값을 확인해 보았고, (x=137, y=29)좌표의 밝기 값이 127인 것을 확인하였다. 

 

 

 

 

- 이진 영상(binary image) 

 

디지털 이미지중 가장 간단한 형태는 이진 영상(binary image)이다. 이진 영상은 각 픽셀이 1비트(bit)로 이루어져 있으며 각 픽셀은 오직 밝음(=1), 어두움(=0)의 두 가지 만을 표현한다. 쉽게 말해 각 픽셀에 LED를 달아 놓은 형태를 생각하면 된다. LED가 켜져 있으면 그에 해당하는 픽셀은 1, 꺼져 있으면 0이라고 생각하면 된다. 아래 그림은 이진 영상을 나타낸 것이다. 

 

 

 

 

사과 그림을 이진 이미지로 바꾸어 출력한 것이다. 왼쪽의 빨간색 박스 안의 실제 픽셀 값들을 오른쪽에 나타내었다. 0과 1로만 픽셀 값들이 이루어진 것을 볼 수 있다. 

 

사실 바이너리 이미지를 만드는 방법은 두 가지가 있는데 첫 번째는 원하는 포인트에 점을 찍어 만드는 방법이 있다. 두 번째는 기존의 흑백 영상으로부터 임계값(threshold)을 기준으로 만드는 방법이 있다. 이때 임계값은 0~255 사이의 값 중 하나를 지정하게 되는데, 기본적으로 128을 많이 사용한다. 즉 128보다 작은 픽셀 값들은 0으로, 큰 픽셀 값들은 1로 만드는 방법이다. 이 외에도 이중 임계값으로 만드는 방법 등 다양한 방법이 존재한다. 이후 포스팅에서 자세히 다루도록 하겠다. 

 

이러한 바이너리 이미지는 Image segmentation, Object Detection 등 다양한 영상처리 기법의 한 과정으로 응용된다. 이진 이미지가 실제 응용된 예로는 Monochrome OLED Display가 있다. 

 

이진 이미지로 표현된 Monochrome OLED display

 

 

 

 

- 흑백 영상(gray-scale image)

 

흑백 영상은 각 픽셀의 밝기 값을 0~255사이의 값으로 표현한 이미지이다. 이는 8bit=1Byte의 메모리를 사용한 것이며 아래 그림은 똑같은 사과 영상을 8bit의 흑백 영상으로 표현한 것이다. 

 

 

 

왼쪽의 빨간색 박스 안쪽의 픽셀의 밝기값들을 오른쪽에 출력하였다. 픽셀 값들의 범위가 0~255사이의 값인 것을 볼 수 있다. 픽셀의 밝기 값들을 어느 범위에서 표현할지에 따라 흑백 영상의 모습이 약간씩 달라진다. 가장 작은 범위로 표현한 영상이 바이너리 이미지(0~1사이의 값으로 밝기를 표현)라고 할 수 있으며 가장 큰 값으로 표현한 범위가 0~255인 8bit로 표현한 흑백 영상이다. 밝기의 범위에 따른 흑백 이미지의 모습은 바로 이전의 포스팅인 이미지 샘플링과 양자화에서 후반부를 보면 자세히 나와있다. 

 

대부분의 영상처리 알고리즘은 이 흑백 이미지에서 처리 된다. 심지어는 딥러닝을 통한 얼굴 인식 등에도 컬러 영상이 아닌 흑백 영상이 학습 데이터로써 이용된다. 

다음에 설명할 컬러 이미지는 표현방법이 약간 복잡하기 때문에 영상 처리를 적용하기가 까다롭고 복잡하다. 

 

 

- 컬러 영상(color image)

 

컬러 영상은 3개의 채널로 표현된다. 이때 3개의 채널은 빛의 3원색인 빨강(Red), 녹색(Green), 파랑(Blue)이다. 각 채널은 0~255사이의 값으로 빨강의 정도, 녹색의 정도, 파랑의 정도를 각각 나타낸다. 

 

컬러 영상에서는 세 개의 기본 컬러를 조합하여 다양한 색깔을 만들어낼 수 있는데 각각의 8bit의 기본 컬러 3개를 조합하여, 256 x 256 x 256 = 16,777,216가지의 컬러를 만들어낼 수 있다. 8bit(red, green, blue) 3개를 조합하여 총 24bit를 이용하여 컬러를 표현했으며 이를 트루 컬러(True color)라 부른다. 여러 이미지나 그래픽 관련 프로그램들은 RGB 채널에 투명도(Transparent)를 나타내는 Alpha채널을 더하여 RGBA인 32bit컬러 모델을 많이 사용한다. 

 

아래 그림은 위의 사과 영상을 컬러 이미지로 표현한 것이다. 

 

 

원래의 빨간 사과 컬러 이미지를 R(Red, )G(Green), B(Blue)의 각 채널별 이미지로 표현하였다. 보다시피 사과는 빨간색인데, 세 개의 채널 중 Red 채널이 가장 밝은 것을 볼 수 있다. 가장 밝다는 것은 높은 값들이 많이 분포해 있다는 의미이며, 이는 색깔이 빨간색일 확률이 높은 것이다. 실제로 위 이미지의 (x=163, y=116)인 좌표의 RGB값들은 R=180, G=2, B=2 이다. 따라서 이 좌표의 픽셀의 색깔은 빨간색에 가깝다. 

 

컬러 이미지는 다양한 컬러 모델로 표현할 수 있다. 가장 기본적인 형태인 RGB모델, HSV(Hue, Saturation, Intensity)모델, YCbCr모델 등 다양한 컬러 모델이 존재한다. 컬러 모델에 대한 자세한 사항은 추후에 컬러 영상에 대한 포스팅을 할 때 이야기 하도록 하겠다. 

 

 

 

2. 디지털 이미지의 메모리 계산법

 

디지털 이미지는 기본적으로 컴퓨터를 이용하여 보여지고 처리되는 데이터 집합이다. 이는 반드시 메모리에 저장이 되어야 하는데, 이번엔 디지털 이미지가 차지하는 메모리를 계산하는 방법을 알아보도록 하자. 

 

디지털 이미지는 기본적으로 2차원 배열 형태를 띄고 있다. 배열의 각 원소는 하나의 메모리 공간을 나타내며 보통 1Byte의 공간을 차지한다. 따라서 이미지의 가로(width)와 세로(height)의 크기의 곱에 각 픽셀이 차지하는 비트수(bits)를 곱해주면 메모리에서 차지하는 공간이 나오게 된다. 이때 비트수는 8로 나누어줘야 하는데 이는 1Byte=8bit 이므로 bit를 Byte로 바꾸어 주기 위함이다. 

 

 

 

흑백 이미지일 경우 bit수는 8bit가 사용되므로 1Byte이다. 8bit가 사용되는 이유는 부호가 없는 경우 8bit를 사용하여 0~255의 숫자를 표현할 수 있기 때문이다. (부호가 있을 경우 보통 맨 앞의 bit인 MSB(most significant bit)를 부호로 사용하고 0~127사이의 숫자를 표현함)

 

위에서 사용했던 사과 이미지를 예로 들어보자. 사과 이미지는 가로(width)가 420, 세로(height)가 288이며 24bit를 사용한다. 

컬러 이미지의 경우에 그 크기가 아래와 같다. 

 

Apple Color Image(24bit): 

362,880 Byte = 420 x 288 x (24/8)

 

약 360 Kilo Byte의 메모리 공간을 차지하는 것을 볼 수 있다. 다음은 흑백 이미지를 계산해보자. 

 

 

 

Apple Gray-scale Image(8bit): 

120,960 Byte = 420 x 288 x (8/8)

 

메모리 크기가 약 1/3로 줄어든 것을 볼 수 있다. 마지막으로 바이너리 이미지를 계산해보자. 

 

 

 

Apple Binary Image(2bit): 

30,240 Byte = 420 x 288 x (2/8)

 

바이너리 이미지가 차지하는 메모리 공간은 단 2bit만 사용하기 때문에 훨씬 작은 것을 볼 수 있다. 그러나 바이너리 이미지도 대부분은 흑백 이미지와 같이 픽셀당 1Byte로 표현하기 때문에 흑백 이미지와 같은 크기의 메모리를 차지한다. 

 

 

위에서 보인 메모리 계산법은 이미지의 확장자가 *.BMP(bitmap)일 때의 계산법이다. 또한 실제로는 위의 계산된 크기보다 약간 더 크다. 이는 BMP이미지의 포맷을 정의하기 위한 헤더나 색깔을 지정하기위한 팔레트(Palette)등의 정보가 이미지에 추가 되기 때문이다. 인터넷에서 BMP확장인 이미지를 다운 받아 크기를 계산하여 확인해보자. 

 

이 외에도 Jpg, png등 많은 이미지 포맷이 존재한다. 나머지 이미지 포맷은 사람이 느낄 수 없을 정도로 이미지를 압축하여 저장하기 때문에 용량이 훨씬 작다. 위의 apple 이미지의 BMP포맷은 약 360KB의 크기이지만, 이를 jpg로 바꿨을 경우 약 20KB로 용량이 줄어든다. 

 

이미지 압축도 손실 압축, 무손실 압축 등 방법이 다양하다. 기존의 jpg방식은 손실 압축 방식을 사용하여 아주 미세하게 화질의 차이가 존재하지만 일반사람들은 구분하기 힘들다. 개선된 jpg나 png포맷은 무손실 압축 방식을 사용하고 용량도 훨씬 작은 장점이 있다. 

 

지난 포스팅(Lecture 7)에선 선형방정식(Linear equation) Ax=0의 해(solution)인 Null space를 계산하는 법에 대해서 배웠다. 이번 포스팅에서는 우변에 값이 존재하는 형태의 선형방정식 Ax=b의 완전해(complete solution)에 대해 알아보자.

 

 

1. Ax=b의 해(solution)

 

어떤 선형방정식 Ax=b에 대한 해가 존재할 수도 있고 존재하지 않을 수도 있다. 해의 존재 여부를 우리는 소거법(Elimination)을 통해 판별할 수 있으며, 만약 해가 존재한다면 이 식에 대한 유일해(unique solution)나 해의 전체 집합을 알아내는 것이 우리의 목적이다. 

 

지난 강의(Lecture 7)에서 Null space를 구할 때 사용했던 행렬을 이용하여 해를 구해보도록 하자. 이번에는 우변이 0이 아닌 어떤 값 b가 존재하는 경우다. 아래 식 (1)은 지난번에 사용했던 행렬을 방정식의 형태로 나타낸 것이다. 

 

 

 

식 (1)의 방정식에서 좌변을 살펴보면 row3는 row1+row2와 같은 것을 알 수 있다. 그렇다면 이 선형방정식의 해가 존재하기 위해선 우변의 b1, b2, b3는 어떤 값이 와야 할까? b1=1, b2=5일 때 b3는 아무런 값이 되어도 상관없을까? b3=8인 경우엔 해가 존재하는가? 

 

결론적으로 이 경우엔 해가 존재하지 않는다. 해가 존재하기 위해선 좌변의 경우와 마찬가지로 b3가 b1+b2이어야 한다. 즉 b3=1+5=6이 되어야 해가 존재한다. 

결국 좌변의 어떤 선형 결합의 결과가 0이 된다면(row1+row2-row3=0), 우변의 같은 선형 결합도 0이 되어야 해가 존재한다

 

이제 실제로 위의 선형방정식의 소거를 통해 결과를 살펴보자. 기존에 우변이 0일 때는 좌변의 계수만 행렬로 만들었지만 우변에 어떤 값 b가 존재할 경우 b를 행렬의 오른쪽에 붙여서 Augmented matrix를 만든다. 아래는 b를 붙여서 만든 Augmented matrix의 모습이다. 

 

 

이제 소거를 해보자. 첫 번째 pivot을 기준으로 [row2=row2-2*row1], [row3=row3-3*row1]을 해주면 아래와 같이 된다. 오른쪽의 b도 같은 상수를 곱해서 동일한 방식으로 계산해주면 아래의 행렬과 같이 된다. 이때 pivot variable이 있는 첫 번째와 세 번째 column이 pivot column이 되고 나머지 두 번째와 네 번째 column이 free column이 된다. 

 

 

 

아직 두 번째 pivot variable(row2, col3)의 아래 원소가 전부 0이 아니므로 [row3=row3-row2]를 통해 소거하면 row3는 모두 0이 된다. 이때 우측의 b항은 아래와 같이 계산된다. 

 

 

소거를 마친 최종적인 U행렬은 아래와 같다. 

 

 

 

위의 식(5)에서 마지막 줄(row3)의 방정식을 살펴보자. 좌변은 계수들이 전부 0이다. 이것은 무엇을 의미하는가? 바로 우변의 값은 b3-b2-b1=0 이 되어야 한다는 것을 쉽게 알 수 있다. 계수가 전부 0이기 때문에 어떤 변수를 곱해도 결과는 당연히 0이 될 수 밖에 없다. 이것을 우리는 해가 존재하기 위해 필요한 조건인 가해 조건(solvability condition)이라 한다. 이 가해 조건이 만족되어야만 이 선형방정식의 해가 존재하는 것이다.

 

 

 

 

가해 조건이 만족되려면 b가 어떤 값이 되어야만 할까? b2와 b1을 우변으로 이항하면 b3=b2+b1과 같이 될 것이다. 즉 b2와 b1의 합이 b3와 같은 크기여야 한다. 이는 앞서 행렬 A의 좌변의 계수들이 row3=row2+row1과 같기 때문이다. 

 

그렇다면 b는 어떤 값이 오면 될까? 결과적으로 b1=1, b2=5, b3=6 일 때 식이 성립됨을 알 수 있다. 이때의 row3의 우변 값은 0이 되어서 식이 성립함을 알 수 있다. 

 

 

이와 같이 b에 대한 가해 조건(solvability condition)이 만족 되었기에 해가 존재하고 우리는 4개의 미지수에 대해 2개의 식으로 해를 구할 수 있다. 

 

그런데 식 (6)에서 나타난 가해 조건(solvability condition)은 일반적인 조건이 아니다. 이것은 식(1)의 선형방정식에 해당되는 내용에 관한 것이다. 그렇다면 이를 일반적인 b에 대한 가해 조건으로 표현하면 어떻게 될까? 이는 아래와 같다. 

 



b에 대한 가해조건(Solvability Condition on b):
  • 우변의 b벡터가 행렬 A의 column space안에 존재할 때, 선형방정식 Ax=b는 해가 존재한다. 
똑같은 말을 약간 다르게 표현해보자. 
  • 행렬 A의 row의 어떤 선형 결합이 zero row를 만들어낸다면, b에 대한 똑같은 선형 결합도 반드시 0이 되어야한다. 
  • (여기서 zero row가 되었다는 것은 어느 한 row가 다른 row에 dependent하다는 의미, 즉 다른 row들이 만들어낸 공간 내에 존재하기 때문에 새로운 차원을 정의하는 데에 기여하지 못한다는 뜻)
 

 

결국 Ax=b의 선형방정식에서 b에 대해 위의 가해 조건이 충족되어야만 해가 존재한다. 위의 가해 조건을 확인해보는 것은 결국 이 선형방정식이 해가 존재하는지를 확인해보는 작업이다. 

 

 

 

 

2. Ax=b의 완전해(complete solution)

 

 

Ax=b의 해가 존재하는지 확인했으면 그 다음은 해를 구하는 과정을 알아내는 것이다. 즉 해를 구하는 과정인 알고리즘을 알아봐야 한다. 

이제 Ax=b의 완전해(complete solution)를 구하는 알고리즘을 살펴보자. 크게 두 단계가 있는데 아래와 같다.  

 



  1. : 특수해(particular solution) x를 찾는다. 모든 free variable을 0으로 설정한 뒤, pivot variable에 대해 Ax=b를 푼다. 
  2. :  Null space해(Null space solution)를 찾은 뒤 특수해와 더해준다. 즉 이다. 
 

 

 

- 1) 특수해(particular solution):

 

첫 번째 과정은 Ax=b에 대한 특수해(particular solution) x를 찾는 것이다. 여기서 특수해라는 것은 소거를 마친 행렬 U에서 free variable을 모두 0으로 만든 다음 pivot variable에 대해서 구한 해를 의미한다. 위의 행렬 A에 대한 특수해를 실제로 구해보자. 우선 식 (7)을 선형방정식의 형태로 다시 써보면 아래 식의 오른쪽과 같다. 

 

 

 

 

식 (8)에서 free variable은 식(7)에서 pivot이 없는 free column에 대응하는 x값들이다. 즉 x2와 x4가 free variable이다. 이들은 0으로 설정하면 식(8)은 (9)와 같이 되고, 후방대입법(back substitution)을 이용해 나머지 값들을 구하면 해는 x1=-2, x3=3/2가 된다.  

 

 

 

따라서 Ax=b에 대한 특수해는 아래와 같다. 

 

 

 

 

- 2) Null space solution:

 

첫 번째 단계인 특수해를 구했으니 이제 Null space 해를 구할 차례이다. Null space의 해는 알다시피 Ax=0을 만족시키는 x이며, 완전해를 계산하기 위한 두 번째 단계이다. 그런데 이번 포스팅에서 사용하는 행렬 A는 지난 강의 Lecture 7에서 사용했던 행렬이다. 지난 강의에서 우리는 이 행렬 A에 대한 special solution을 구한적이 있다. 

special solution은 위의 행렬 A에서 두 개의 free variable중 하나를 1, 나머지 하나를 0으로 만들고 pivot에 대해 계산하고, 반대로 0, 1로 설정하여 각각 계산한 두 개의 해이다. free variable이 두 개 이기 때문에 그 개수만큼 special solution이 만들어진다. 이 special solution 두 개의 선형 결합(Linear combination)이 Null space 전체를 표현하기 때문에 이 special solution들을 그대로 사용하도록 하겠다. 사실 이 special solution이 아닌 Null space상에 존재하는 어떠한 벡터를 사용해도 상관없다

 

special solution의 해를 구하는 자세한 과정은 지난 강의(Lecture 7)를 참고하고 결과적으로 해는 아래와 같다. special solution역시 Null space상에 존재하는 해이기 때문에 완전해를 구하기 위한 두 번째 해로 사용하도록 하겠다.  

 

 

 

두 special solution의 선형 결합이기 때문에 각 해의 앞에 상수c를 각각 곱해준다. 

 

 

 

- 3) Complete solution:

 

두 개의 해(particular, complete solution)를 구했으니 이제 완전해(complete solution)을 구할 차례이다. 완전해는 앞서 언급했듯이 특수해(particular solution)와 Null space해를 더해주면 된다. 이를 식으로 표현하면 아래와 같다. 

 

 

xp는 particular solution을, xn은 Null space solution을 각각 의미한다. 

그렇다면 완전해(complete solution)구하기 위해 이러한 조합을 사용하는 이유는 무엇일까? 아래 식을 보자. 

 

 

Axp=b에서 b가 A의 column space상에 존재한다면 이 선형방정식은 해가 존재한다. 이때 이 해에 우리는 Null space상에 존재하는 어떤 벡터를 더해도 되는데 이유는 식 (13)이 성립하기 때문이다. 즉 Null space에 대한 선형방정식의 우변은 0이다. 따라서 이 두 방정식을 더한다고 해도 우변은 b가 그대로 오기 때문에 수학적으로 가능한 이야기이다. 

 

식(1)의 Ax=b에 대한 완전해(complete solution)는 특수해와 Null space해를 더한 형태인 아래 식(14)가 된다. 

 

 

 

다시 한 번 이야기 하지만 Null space해 전체는 두 개의 special solution의 선형 조합으로 표현이 되고, special solution이 두 개인 이유는 free variable이 두 개이기 때문이다. 

여기서 Null space해는 유일해가 아니기 때문에 subspace인 Null space전체를 표현하기 위해 각각에 상수 c1, c2가 곱해져 있는 것을 볼 수 있다. 

 

그렇다면 특수해(particular solution)에도 상수 c가 곱해질 수 있을까? 

정답은 No다. 

 

식 (13)을 보면 특수해의 경우는 Ax=b의 해를 구하는 것이고 우변의 b가 특정 값으로 정해져 있다. 따라서 우리는 이 식을 만족시키는 어떤 특수한 해를 구하는 것이기 때문에 상수를 곱해선 안된다. 

반면 Null space의 해의 경우엔 space라는 말처럼 Ax=0의 해들의 집합이 공간을 이루는 형태이다. 즉 부분 공간(subspace)이기 때문에 여러 개의 해가 존재할 수 있고 따라서 다양한 해들을 정의할 수 있도록 상수를 곱해주는게 가능하다. 

 

사실 애초에 우변 벡터 b가 0이 아닌 임의의 상수일 땐 해에 대한 부분 공간을 정의할 수 없다고 이미 Lecture 6의 후반부에서 언급하였다. 결론적으로 Ax=b의 완전해는 어떤 하나의 특정해(particular solution)와 Null space해인 부분 공간(subspace)의 합으로 표현될 수 있다

 

 

- Plot of Complete solution:

 

위에서 완전해에 대한 설명은 했는데, 사실 말과 수식만으로는 잘 이해가 가지 않을 수 있다. 그림으로 이해를 돕도록 하자. 완전해를 그려야 하는데 다시 보니 4차원 공간 R4이다. 필자의 머리로는 4차원 공간을 이 포스팅 공간에 그려넣을 방법이 생각나지 않지만 아인슈타인은 4차원 공간을 그렸다고 하니 따라해보도록 하자. 

 

 

 

 

 

이것이 x1, x2, x3, x4로 이루어진 4차원 공간의 plot이다. 왜 이렇게 그려져야 하는지는 필자도 잘 이해가 가지 않는다. 차원이라는 것은 높은 차원이 이전의 모든 차원에 직교(Orthogonal)해야 한다. 4차원에서 4번 째 벡터가 1,2,3번 째 벡터를 어떻게 직교하는지는 잘 모르겠지만 일단 넘어가도록 하자. 

 

위 그림에서 Null space라고 하는 평면은 식 (14)에서 뒤쪽의 상수 c1, c2가 곱해진 두 개의 벡터로 형성되는 평면이다(두 벡터의 선형 결합으로 형성되기 때문에 평면의 형태가 됨). 원래 Null space만 있었다면 이는 R4의 원점을 지나는 부분 공간(subspace)이 된다. 그러나 xp가 더해졌기 때문에, 혹은 xp에 Null space가 더해진 형태이기 때문에 결과적으로 Null space가 xp만큼 shift된 형태가 된다. 즉 원점이 아닌 xp를 지나는 Null space인 것이다. 결국 원점을 지나지 않기 때문에 더이상 부분 공간(subspace)이 아니다

 

위 그림에서 빨간색 벡터와 빨간색 점은 xp를 나타내고 xn은 Null space 평면에 존재하는 어떤 벡터를 나타낸다. 이 둘을 더하면 우리가 구하고자하는 완전해(녹색 벡터)인 x_complete(=xp+xn)를 구하게 된다. 

 

 

 

 

3. Rank

 

지금까지 우리는 선형방정식 Ax=b의 완전해를 구하는 방법을 공부하였다. 여기서 예를 든 행렬 A의 형태는 3x4크기에 pivot variable이 2개, free variable이 2개 있는 형태이고, 이때의 rank는 2이다. 이제 이 예제를 넘어 좀 더 큰 그림을 생각해보자. 행렬의 형태와 크기, 그리고 rank에는 어떠한 상관관계가 있을까? 

 

m by n 크기에 rank r을 갖고 있는 행렬 A가 있다고 가정해보자. m은 row의 수, n은 column의 수이고 r은 rank의 수이다. rank는 앞서 언급했듯이 pivot variable의 개수이다. 이때의 rank는 

을 만족한다. 

r=n일 때를 Full column rank라 하고, r=m일 때를 Full row rank라 한다. 이때 다음 질문을 한 번 생각해보자. 

 

 

Full column or Full row rank일 때, 

- 이는 해(solution)에 관해 무엇을 암시하는가? 

- 이는 Null space에 대하여 무엇을 말하고 있는가? 

- 이는 완전해(complete solution)에 대하여 무엇을 말하는가? 

 

Rank에 대한 각 case별로 해(solution)와 어떤 상관관계를 가지는지 한 번 살펴보도록 하자. 

 

 

- Full column rank (r=n):

 

Full column rank는 r=n을 의미한다. 즉 rank가 column의 개수와 같으며, 모든 column이 pivot을 가지고있다. 이때 중요한 것은 Full column rank일 때 free variable이 없다는 것이다. free variable이 없기 때문에 행렬 A의 Null space는 오직 영벡터(zero vector)뿐이다. 즉 각 column의 선형 조합으로 0을 만들 수 있는 해 x는 오직 zero vector 뿐이다. 

그렇다면 해(solution)는 어떨까? 해가 존재한다면 유일한 해(unique)가 존재하게된다. 이를 정리하면 아래와 같다. 

 

 Full column rank (r=n)
 Rank   =n (number of columns) 
 Free variable  No free variable
 Null space   only  zero vector
 Solution  0 or Unique solution

 

글 만으로는 이해가 어려울 수 있으니 실제 예제를 통해 Full column rank의 형태를 살펴보도록 하자. Full column rank를 보여주기에 적절한 형태인 4x2 행렬을 보자. 소거를 통해 Reduced row echelon form으로 가기까지의 과정을 모두 나타내도록 하겠다. 혹시 소거 과정이 잘 이해가 가지 않는다면 지난 강의를 다시 보길 바란다. 

 

 

 

 

 

식 (15)의 마지막 줄 우측의 행렬이 바로 A의 Reduced row echelon form이다. 결과적으로 row3와 row4는 소거를 통해 영벡터가 되었다. 이는 row3와 row4는 row1과 row2에 dependent하기 때문이다. 즉 row3와 row4는 row1과 row2의 선형 조합으로 만들어진다. 결국 independent한 row는 row1과 row2뿐이다. 

 

이제 Ax=b의 해(solution)에 대해 알아보도록 하자. Full column rank일 때 해는 아예 존재하지 않거나, 혹은 유일해(unique solution)가 존재한다. 이는 free variable을 모두 0으로 만들어서 구한 특수해(particular solution)를 의미하며, 식(15)의 행렬 A는 free variable이 없기 때문에 해가 존재할 경우 바로 특수해가 된다. 

 

그렇다면 이 행렬 A에 대해 Ax=b는 b가 어떤 값이어도 해가 존재할까? 정답은 No다. 

일단 Ax=0인 Null space를 살펴보면 해가 영벡터인 경우를 제외하고 어떠한 column 조합으로도 우변을 0으로 만들 수는 없다. 

Ax=b인 경우에도 역시 항상 해가 존재하지는 않는다. 해가 존재하기 위해선 b가 A의 column들의 선형조합으로 만들어지는 column space에 존재해야한다. 

따라서 해가 존재하기 위해선 b가 A의 column들의 선형조합으로 만들 수 있는 값이어야 한다. 세 가지만 예를 들어보겠다. 

 

 

위와 같이 A의 column space에 존재하는 해들의 경우엔 각 b에 대한 특수해(particular solution) 혹은 유일해(unique solution)가 존재한다. 

이를 MATLAB으로 확인할 수 있다. 행렬 A와 b가 설정되어 있을 때 해(x)를 구하는 명령어는 x=A\b이다. 아래의 코드를 참조하여 상수값을 바꿔가며 확인해 보도록 하자. 

 

 

 

 

 

- Full row rank (r=m):

 

이번에는 Full row rank를 살펴보도록 하자. r=m, 즉 rank와 row의 수가 일치하는 경우이다. 모든 row가 pivot을 가지는 경우이다. 

그렇다면 모든 b에 대해 해를 가지는가? 즉 Ax=b에서 b가 어떤 값을 가지더라도 해를 가질 수 있는가? 정답은 Yes이다. 항상 해가 존재한다. 그렇다면 이때 free variable은 몇 개일까? n-r개 이다. 위에서 예를 들었던 행렬 A의 Transpose의 형태를 가지고 이해를 해보도록 하자. 

 

 

 

소거를 통해 행렬 A의 Reduced row echelon form을 만들었다. 왼쪽의 col1과 col2가 pivot columns을 나타내며 단위 행렬(Identity)의 형태를 띄는 것을 볼 수 있다. 오른쪽의 col3과 col4는 free column을 나타낸다. 여기에선 Full row rank, 즉 row의 숫자와 rank의 숫자가 같기 때문에 zero rows는 없다. 

결론적으로 free variable이 두 개가 존재하기 때문에 항상 해가 존재하며 special solution이나 Null space해도 존재한다. Full row rank에 대해 정리하면 아래와 같다.

 

Full row rank (r=m)
 Rank =m (number of rows) 
 Free variable  n-r or n-m
 Null space  Exist
 Solution  Exist for every b

 

마찬가지로 MATLAB으로 확인해볼 수 있다. 아래 코드를 참고하여 constant를 바꿔가며 해가 맞는지 확인해보도록 하자.

 

 

 

- Full row and column rank (r=m=n):

 

마지막으로 살펴볼 case는 가장 중요한 case라고도 볼 수 있다. 바로 rank가 m와 n과 같은 경우다(r=m=n). 즉 정방행렬(square matrix)이면서 Full rank인 경우를 말한다. 바로 예를 들어 이해해보자. 

 

 

식 (18)의 행렬 A는 2x2크기의 정방행렬이다. A대한 Reduced row echelon form은 단위 행렬과 같은 것을 알 수 있다. 이 경우엔 A는 역행렬을 가질 수 있다(Invertible). 

이 경우에 Null space는 존재하는가? 오직 zero vector만 존재한다. 

모든 b에 대한 Solution은 존재하는가? b에 대한 유일해(unique solution)가 존재한다. 

Full row and column rank에 대해 정리하면 다음과 같다. 

 

Full row and column rank (r=m=n)
 Rank =m=n (number of rows and columns) 
 Free variable  No free variable
 Null space  only zero vector
 Solutions  1 unique solution


아래는 Full row and column rank에 대한 MATLAB 코드이다. 

 

 

 

4. 마치며

 

이번 포스팅에선 선형방정식의 완전해(complete solution)를 구하는 방법에대해 배웠다. 완전해를 구하기 위해선 어떤 행렬 A에 대한 유일해를 구하고 Null space를 구하여 이 둘을 더해줘야 한다는 것을 알았다. 

 

또한 우리는 Rank에 따라 해(solution)가 어떻게 정의되는지, rank와 row와 column의 수가 어떠한 관계를 가지고 있는지에 대해 배웠다. 아래는 Rank에 따른 해와 상관관계를 한 번에 정리한 표다. 

 

r : rank

m: number of rows

n : number of columns

 r=m=n  r=n<m  r=m<n  r<m, r<n
Reduced row echelon form:




- Square invertible case
- Ax=b에 대해 오직 하나의 해만 존재함
Reduced row echelon form: 


- 해가 아예 없거나
- 오직 하나의 유일해(Unique solution)만 존재
 Reduced row echelon form: 
(※ F can be mixed to the I)


- 항상 해가 존재한다. 
- 무한대(
)의 해가 존재
 Reduced row echelon form:
(※ F can be mixed to the I)


- 해가 아예 없거나  
- 무한대(
)의 해가 존재

 

이 말을 기억하자. 

 

Rank는 해의 실제 값들을 제외하곤 해의 모든 것들을 말한다. 

 

+ Recent posts