이번 포스팅에서는 이전 강의 Lecture 10에서 배웠던 부분 공간(subspace)과 직교성(orthogonality)에 대한 내용을 알아보도록 하겠다. 먼저 알아볼 것은 직교 벡터(orthogonal vector)이다. 먼저 부분 공간에 대해 잠시 복습해보도록 하자.  

 

 

0. 부분 공간(subspace) 복습

 

 

Fig. 1 부분 공간(subspace)과 직교(orthogonality)

 

 

우리는 지난 강의 Lecture 10에서 임의의 행렬에 대한 부분 공간을 배웠다. 여기서 공간이 의미하는 것은 어떤 행렬 A로부터 만들 수 있는 벡터들이 존재할 수 있는 영역을 의미한다. 먼저 Row space라는 것은 어떤 행렬 A의 row 벡터들의 선형 조합(Linear combination)을 통해 만들 수 있는 모든 벡터들의 집합을 의미한다. Column space는 역시 행렬 A의 column 벡터들의 선형 조합으로 만들 수 있는 모든 벡터들의 집합을 의미한다. Row space와 Column space의 차원은 rank와 같으며 이 두 공간은 같은 차원을 갖는다.

Null space는 Ax=0를 만족시키는 모든 해인 x로 이루어진 공간을 의미한다. 차원은 행렬 A의 column의 개수에서 rank를 뺀 것과 같다. 

마지막 Left null space는 A의 transpose에 대한 null space이며 $A^T y=0$를 만족시키는 해 y의 집합들을 의미하며 row의 수 m에서 rank를 뺀 것이 차원이 된다. 

 

여기까지가 우리가 지난 강의에서 배웠던 내용들이다. 지난 번에도 잠시 언급은 했지만 다시 한 번 눈여겨 봐야할 것이 바로 이 부분 공간들의 관계이다. 그림에도 나타나 있듯이 row space와 null space는 직각(perpendicular)이다. 이 말은 직교(orthogonal)와 같은 말인데, 쉽게 말해서 두 공간사이에 이루는 각도가 90도라는 말이다. 

마찬가지로 column space와 Left null space도 직교(orthogonal)한다. 이제부터 이들 공간들이 왜 직교를 하는지 차근차근 알아보도록 하자. 이번 강의를 통해 네 개의 부분 공간에 대한 이해도가 한층 높아질 것이다. 

 

 

 

 

1. 직교 벡터(Orthogonal Vector)

 

우리가 중.고등학교 때 배웠듯이 벡터는 크기와 방향을 나타내는 물리량이다. 이러한 두 벡터가 직교(orthogonal)하다는 것은 어떤 의미일까? 직교를 다른 말로하면 수직(perpendicular)이라는 말과 같다. 즉 두 벡터 사이의 각도가 90도를 이루는 것을 바로 직교 벡터(Orthogonal Vector)라 한다. 이때 벡터는 임의의 모든 n차원에 대해서 해당되는 말이다. 

이것을 약간 다르게 표현하면 두 벡터가 직각삼각형(right triangle)을 이룬다는 말이다. 아래 그림의 x와 y처럼 말이다. 

 

Fig. 2 직각삼각형(right triangle)의 벡터 표현

 

 

 

빨간색 벡터인 x는 x축 방향으로 뻗어있다. 파란색 벡터인 y는 y축 방향으로 뻗어있다. 이 두 벡터가 이루는 각도는 보다시피 직각이며, 두 벡터를 더했을 때 피타고라스(pythagoras)가 정의한대로 직각삼각형이 만들어진다. 

 

위와 같이 2차원 벡터일때는 우리는 좌표 평면에 그림을 그려서 쉽게 알 수 있다. 하지만 3차원만 되도 표현하기가 까다로우며 4, 5차원, n차원의 경우엔 표현 자체가 불가능하다. 하지만 이론적으론 가능하다. 그렇다면 n차원의 두 벡터가 직교인지를 우리는 어떻게 알 수 있을까? 이미 짐작했겠지만 내적(dot product)을 통해 알 수 있다. 

 

 

내적은 식 (1) 혹은 (2)와 같이 표현한다. 식(1)에서 ||a||, ||b||는 각각의 벡터의 크기(norm)를 나타낸다. 우리가 중.고등학교때 많이 봤던 형태일 것이다. 식 (1)의 경우 두 벡터 사이의 각도에 대한 cosine이 들어가 있는데 이 cosine때문에 두 벡터가 직교(orthogonal)할 경우 그 결과값이 0이 나오는 것이다. 

내적을 dot연산자와 함께 추상적으로 표현한 식 (1)을 실제적으론 식 (2)와 같이 row vector와 column vector의 곱으로 표현한다. x의 transpose가 붙은 이유는 보통 벡터는 x, y, v 와 같이 하나의 볼드체(Bold) 문자로 표기하는데 일반적으로 볼드체로 표현되는 벡터들은 column vector를 나타낸다. 그런데 이를 row vector로 만들지 않으면 곱셈 자체를 할 수가 없다. 벡터나 행렬의 곱셈연산을 하기 위해선 가령 [1x3]과 [3x1]과 같이 중간의 차원이 맞아야 곱셈이 가능한데, 그냥 column vector 두 개는 [3x1], [3x1]처럼 가운데 차원이 맞지 않는다. 따라서 row와 column의 곱셈으로 만들어줘야 하기 때문에 (2)와 같이 transpose를 해주는 것이다. 이렇게 row와 column vector의 곱셈을 해주면 각 벡터의 같은 요소들끼리 곱하여 더해주는 연산을 하게 된다. 

 

 

 

 

그렇다면 왜 내적을 해서 0이 되면 두 벡터가 직교일까? 피타고라스의 정리(pythagoras' theorem)로부터 그 이유를 알아보자. 다들 아래의 유명한 공식은 잘 알고 있을 것이다. 위의 그림에 나타나있는 벡터와 삼각형을 식으로 표현한 것이다.  

 

 

중학교때는 단순히 x의 제곱, y의 제곱, 그리고 대각선은 c등의 문자로  배웠지만 여기서는 약간 표현 방법이 다르다. 벡터로 표현했기 때문이다. 즉 벡터 x의 크기의 제곱과 벡터 y의 크기의 제곱은 벡터 x+y(삼각형의 대각선)의 크기의 제곱과 같다는 말이다. 식(3)이 좀 더 와닿을 수 있도록 3차원 벡터의 예를 들어서 실제 계산을 해보자. 

 

 

식이 성립하는 것을 알 수 있다. 여기서 정말 주의해야 할 것은 위의 식이 항상 성립하는 것은 절대 아니다! 위의 식은 오직 직각 삼각형의 형태처럼 직교(orthogonal)하는 벡터들 사이에서만 성립하는 것이고, 피타고라스 정리와 연관지어 설명하기 위함이다. y에 직교 하지 않는 다른 벡터를 넣으면 식이 틀리는 것을 알 수 있다. 

 

식 (4)처럼 ||x||는 벡터 x의 크기, 즉 벡터의 길이(length)를 의미한다. 이것을 norm이라고 부르는데, norm에도 L2-norm, L1-norm등 다양한 방식이 존재한다. norm에 대해선 추후에 정리해보는 시간을 갖도록 하자. 어쨋든 일반적으로는 L2-norm을 나타내고 그것이 식 (4)에 나타낸 것이다. 그런데 가만히 보면 L2-norm을 구하는데 있어 식 (3)과 비슷한 패턴이 보일 것이다. 이는 어떤 임의의 벡터의 크기를 계산하는 원리가 피타고라스의 정리로부터 나온 것이기 때문이다. Fig. 2처럼 x+y벡터의 크기는 벡터의 각 요소의 제곱을 더해 제곱근(square root)를 씌운 것과 같다. 이 방법은 n차원의 벡터에 모두 동일하게 적용된다. 

 

사실 식 (4)는 우리가 기존에 알던 방식으로 풀이해본 것이다. 이것을 좀 더 선형대수적인 방법으로 표현해보자. 우선 식 (3)은 다음과 같이 표현할 수 있다. 

 

 

자기 자신의 벡터를 그대로 제곱하는데, 이때 column 벡터를 transpose를 하여 row vector로 만들어준 뒤 다시 자기 자신과 곱하는 형태이다. 실제로 그러한지 식 (4)의 벡터들을 가지고 확인해보자. 

 

 

식 (4)에 있는 벡터를 가지고 실제로 계산해보니 답이 같은 것을 알 수 있다. 이를 통해 식 (3)을 우리가 기존에 알던 (4)의 방식과 벡터 방식으로 표현한 (5)가 같다는 것을 이해할 수 있다. 

 

여기까진 이해하겠는데, 그렇다면 식 (3) ~ (6)에 걸쳐 설명한 피타고라스의 직각삼각형(right triangle)에 대한 정리가 내적(dot product)와 도대체 어떻게 연결된다는 것일까? 즉 식 (1), (2)와 어떻게 연결지어서 이해를 해야할까? 이는 식 (5)를 풀어서 정리해보면 알 수 있다. 

 

 

 

먼저 우변에 있는 식을 전개한다. 이때 좌변과 우변에 $\boldsymbol{x}^T \boldsymbol{x}, \; \boldsymbol{y}^T \boldsymbol{y}$가 각각 존재하므로 소거할 수 있다. 이들을 소거하고 나면 좌변은 0이 되고 우변엔 $\boldsymbol{x}^T \boldsymbol{y}, \; \boldsymbol{y}^T \boldsymbol{x}$가 남는데, a*b나 b*a나 어차피 똑같기 때문에 같은 것으로 간주할 수 있다. 따라서 $2\boldsymbol{x}^T \boldsymbol{y}$가 되고 2는 상수이기 때문에 무시할 수 있다(직교인 경우 곱하면 0인데 앞에 상수는 곱하나마나..). 결국 이렇게 전개하여 정리한 식이 내적의 식 (2)와 일치하는 것을 볼 수 있다. 이렇게 해서 피타고라스의 직각삼각형에 대한 정리로부터 내적(dot product)을 유도하였다. 결론적으로 차원이 동일한 두 벡터를 내적하였을 때 그 결과값이 0이면 두 벡터는 직교(orthogonal)하며 두 벡터사이의 각도는 90도이다. 

 

여기서 한 가지 의문이 생길 수 있다. 만약 벡터 a와 b를 내적하는데, b가 영벡터(zero vector)라면? 이 두 벡터는 직교(orthogonal)일까? 정답은 YES이다. 영벡터인 벡터와 내적하는 모든 벡터는 서로 직교이다. 왜냐하면 직교에 대한 정의 자체가 내적했을 때 결과가 0인 것으로 되어 있기 때문이다. 내적에 대한 개념을 잘 이해하도록 하자. 

 

 

 

 

 

 

2. 부분 공간의 직교(Orthogonality of subspaces)

 

 

우리는 위에서 피타고라스의 정리를 이용하여 임의의 두 n차원 벡터가 직교(orthogonal)하다면, 두 벡터의 내적(dot product)의 결과 값은 0이 됨을 보였다. 이 개념을 확장하여 부분 공간에 적용해보자. 다음의 정의를 생각해보자. 

 

  • 부분 공간 S는 부분 공간 T에 직교하다. 

 

위의 정의가 의미하는 것이 정확히 무엇일까? 이해를 돕기 위해 그림을 통해 정의를 해보도록 하자. 

 

 

Fig. 3 두 부분 공간은 직교(orthogonal)인가? 직교가 아니다..

 

 

Fig. 3은 3차원 공간 R3에서 두 개의 부분 공간(subspace) S와 T를 나타낸 것이다. S는 yz평면, T는 xy평면이고 두 평면은 수직(perpendicular)이다. 가운데 빨간 점이 원점이다. 주황색 벡터 Vs는 부분 공간 S상에 존재하는 벡터이고, Vt는 부분 공간 T에 존재하는 벡터이다. T와 S는 직교라고 할 수 있을까? 

결론부터 말하자면 두 부분 공간은 직교가 아니다. (분명 평면 자체는 직교이지만 이것을 어떤 행렬의 부분 공간으로 봤을 땐 직교가 아니라는 의미다위에서 세웠던 부분 공간에 대한 정의를 다시 풀어서 정리해보면 다음과 같다. 

 
 
 
  • 부분 공간 S는 부분 공간 T에 직교하다. 
  • 다시 말하면 S에 존재하는 모든 벡터가 T에 존재하는 모든 벡터와 직교해야 한다. 
 

 

Fig. 3의 두 부분 공간은 위의 빨간색 글씨의 정의 때문에 직교가 아니다. S와 T는 분명 90도를 이루고 있는 평면이고 Vs는 분명히 S에, Vt는 T에 존재하는 벡터이지만, 두 벡터가 이루는 각도는 약 45도 정도 된다. 또는 Vs가 Vt와 나란히 있을 수도 있다. 만약 Vt가 x축을 향해 뻗어있다면 두 벡터는 직교하지만 그렇지 않는 경우가 있기 때문에 위의 정의에 위배된다. 이것을 일반적으로 얘기해보자면 다음과 같다. 

 

어떤 두 부분 공간이 영벡터(origin)가 아닌 임의의 벡터에서 만난다면, 이 두 부분 공간은 직교(orthogonal)하지 않다. 

 

Fig. 3 은 두 부분 공간 S와 T가 원점 뿐만 아니라 아예 y축 line을 따라서 만나고 있는 것을 볼 수 있다. 결국 두 부분 공간이 직교하기 위해선 다음의 두 가지 조건이 충족되어야 한다. 

 

  • S에 존재하는 모든 벡터가 T에 존재하는 모든 벡터와 직교해야 한다.
  • 두 부분 공간이 만나는 점은 오직 원점(origin)에서만 만나야한다.   

 

따라서 두 부분 공간 S와 T는 직교가 아님을 알 수 있다. Fig. 3의 두 부분 공간이 직교하는 공간이 되기 위해서는 아래 그림과 같은 형태가 되어야 한다. 

 

Fig. 4 2D 평면 부분 공간 S 전체에 직교(orthogonal)하는 Line형태의 부분 공간 T

 

 

 

Fig. 4는 부분 공간 S전체를 직교하는 1D Line 부분 공간 T를 나타낸다. 이때 두 부분 공간이 교차하는 교차점(intersection)은 오직 원점(origin)뿐이다. 부분 공간 S의 어떠한 벡터라도 T의 어떠한 벡터 Vt와는 90도 각도를 이루게 된다. 

2차원을 가정할 경우엔 두 개의 Line이 90도 각도를 이루면서 서로 원점을 지나게 되면 이 역시도 직교한 두 개의 부분 공간이 된다. 

 

 

 

- Orthogonality in row space and null space

 

앞서 정리한 부분 공간의 직교에 대한 내용을 토대로 이제 어떤 행렬의 row space와 null space가 직교한 부분 공간이라는 것을 이해해보자. Fig. 1을 참조하자. 이미 언급한 내용이지만 row space와 null space는 직교(orthogonal)한다. 어떻게 알 수 있을까? 사실 행렬의 rank를 살펴보면 알 수 있다. 결론부터 이야기 하자면 어떤 행렬의 row space와 null space라는 것은 이 행렬의 전체 공간을 두 개의 수직인 부분 공간으로 나누는 것이다. 

사실 Fig. 3은 애초에 잘못된 그림이다. 왜냐하면 우리가 정의하는 공간은 3차원 공간인데, 부분 공간은 두 개의 2차원 평면이다. 2+2=4이므로 부분 공간을 나타낸 그림이라면 차원이 맞지 않는다. Fig. 4가 사실은 맞는 그림인 것이다. rank에 대한 이야기는 잠시 후 다시 하도록 하고, row space와 null space가 직교인 이유를 알아보자. 이 두 공간은 왜 직교일까? 

 

알다시피 null space는 Ax=0를 만족시키는 모든 해 x의 집합이다. 일단 Ax=0를 자세히 풀어서 써보자. 

 

 

Ax=0의 연산을 풀이하면 A의 각 row는 x벡터와 곱해져서 0을 만든다. 즉 각각의 row와 벡터 x간의 곱만 놓고보면 내적(dot product)와 똑같은 연산이다. 다시 말하면 row1 연산의 경우 a11*x11+a12*x21+a13*x31+a14*x41=0의 연산 자체가 내적이라는 의미다. 모든 row에 대해서 내적을 했을 때 결과가 모두 0이기 때문에 각각의 row와는 직교(orthogonal)인 것을 알 수 있다. 

그런데 우리는 분명 row space와 null space가 직교라고 했다. 각각의 벡터가 아닌 row 공간(space)에 대해서 말이다. 이 말이 의미하는 것은 결국 row space상에 존재하는 모든 벡터, 즉 row의 선형 결합(Linear combination)을 통해 만들어지는 모든 벡터들과도 직교라는 말과 같다. 아래 식과 같이 말이다. 

 

 

 

 

이렇게 해서 row space와 null space가 직교(orthogonal)하다는 것을 수식적으로 이해는 했는데, 사실 한 가지 더 알아둬야 할 것이 있다. 바로 rank, 즉 차원에 관한 것이다. 조금 멀리 있겠지만 Fig. 1을 다시 살펴보면 row space와 null space는 직교하며, 이들은 Rn차원에 대한 공간에서 다뤄지고 있다. 이때 row space의 차원은 rank인 r차원이고, null space의 차원은 전체 공간 n에서 rank를 뺀 만큼의 공간 n-r이다. 이 말이 의미하는 것은 결국 row space와 null space는 전체 공간인 Rn차원의 공간을 두 개의 수직(perpendicular)한 부분 공간으로 나눴다는 말이 된다. 다시 말하면...

Row space의 차원 + Null space의 차원 = Rn

이 된다는 말이다. 아래의 예를 보자. 

 

 

식 (9)의 행렬 A는 m=2, n=3이며 rank=1이다. 즉 row space의 차원이 1이고, null space의 차원은 n-r=3-1=2이다. 행렬 A의 rank가 비록 1이지만, 대신 null space의 차원이 2가 되어 결과적으로 Rn차원에는 변함이 없게 되었다. row space의 차원 + null space의 차원 = 3 이 되어 결국 전체 공간인 Rn차원을 두 개의 수직인 부분 공간으로 나눈 것을 알 수 있다. row space와 null space의 관계를 정리하자면..

 

  • Null space에 존재하는 모든 벡터들은 row space에 존재하는 모든 벡터들에 직교(orthogonal)한다. 
  • Null space와 row space는 Rn차원에서 서로 직교하는 보완재(complements)이다. 

 

 

- Orthogonality in column space and left null space

 

column space와 left null space도 row, null space와 마찬가지로 서로 직교(orthogonal)하며 보완(complements)해준다. 차이점이 있다면 전체 공간이 Rm공간이며 이를 서로 직교하는 column space와 left null space로 나눈다는 것이다. 자세한 설명은 내용이 거의 동일하기 때문에 간단히 수식만 나열하고 마치도록 하겠다. 마찬가지로 아래의 정의는 똑같이 적용된다. 

Column space의 차원 + Left null space의 차원 = Rm

 

 

 

 

식 (9)를 기준으로 m=2, r=1이므로 column space의 차원은 1, left null space의 차원은 m-r=2-1=1이다. 

 

  • Left null space에 존재하는 모든 벡터들은 column space에 존재하는 모든 벡터들에 직교(orthogonal)한다. 
  • Left null space와 column space는 Rm차원에서 서로 직교하는 보완재(complements)이다. 

 

 

 

 

- Matlab Implementation of the orthogonality of subspaces

 

좀 더 직관적인 이해를 돕기 위해 식 (9)를 실제로 matlab을 통해 시각화(visualization)해보자. 아래 그림은 Row space와 Null space를 그린 것이다. Row space는 Line으로, Null space는 2D 평면의 형태를 띄며 서로 직교한다. 

 

Fig. 5 Row space와 Null space

 

 

아래는 Row space와 Null space의 MATLAB코드.

 

 

 

다음으로 식 (9)의 Column space와 Left null space의 그림이다. 식 (9)의 Rm은 2차원이며 Column space와 Left null space각각이 1차원의 Line으로 나타나는 것을 볼 수 있다. 

 

Fig. 6 Column space와 Left null space

 

아래는 MATLAB 코드이다. 

 

 

 

 

 

 

 

3. 마치며

 

우리는 지금까지 부분 공간의 구조 및 차원에 대해서 배웠고 이것이 선형 대수(Linear algebra)에서 굉장히 중요한 부분이라고 강조했다. 이번 시간에는 부분 공간들의 직교(orthogonality)에 대해 알아보았고 이제 남은 것은 부분 공간들의 기저(basis)에 관한 내용이다. 앞으로의 학습을 위해 이번 강의를 잘 숙지하도록 하자. 

 

 

+ Recent posts