이번 시간에 배울 내용은 바로 투영 행렬(Projection matrix)에 관한 내용이다. 이번 강의는 매우 중요하므로 잘 공부해 두도록 하자. 투영 행렬에 관한 내용을 공부하기에 앞서 2차원 벡터의 투영을 먼저 공부해보도록 하자. 

 

 

1. 2D-Vector Projection(2차원 벡터 투영)

 

벡터 투영(vector projection)은 두 개의 벡터 중 하나의 벡터를 다른 하나의 벡터에 투영(projection)시키는 것을 말한다. 그렇다면 여기서 투영이라는 것은 무엇을 의미하는 것일까? 벡터의 관점에서 보면 하나의 벡터를 다른 벡터로 옮겨서 표현하는 것을 말한다. 

조금더 쉽게 비유하자면 그림자로 설명할 수 있다. 햇살 좋은 날에 야외에 서 있었을 때 햇빛에 의해 우리 몸의 그림자가 땅에 비춰진 것을 본 적이 있을 것이다. 이때 우리 몸이 벡터 a, 땅이 벡터 b라고 하면 그림자는 땅(b)에 투영된 우리 몸(a)이라고 할 수 있다. 이때 태양은 항상 땅과 수직(perpendicular)하게 떠 있다. 이 장면을 상상해보며 아래 그림을 보도록 하자. 

 

Fig. 1 두 벡터 a와 b. 벡터 b를 벡터 a에 투영하면 어떻게 될까? 

 

 

Fig. 1은 두 벡터 a와 b를 나타내고 있다. 벡터 a는 1차원 공간인 line이며, 우리가 찾고자하는 것은 벡터 b를 a에 투영시켰을 때 그 점이 벡터 a의 어느 지점에 위치할 것인가를 찾는 것이다. 이것은 다시말하면 벡터 a라는 1차원 공간의 어느 점이 벡터 b가 가리키는, 즉 벡터 b의 화살표 끝점과 가장 가까운지를 찾는 것이다. 

그렇다면 어느 점이 가장 가까울까? 당연히 벡터 b의 끝점에서 벡터 a의 수직(perpendicular) 방향으로 선을 그렸을 때 만나는 점일 것이다. 아래 그림을 보자. 

 

 

 

Fig. 2 벡터 a에 벡터 b를 투영(projection)한 모습. 

 

 

Fig. 2 를 보면 벡터 b의 끝점에서 벡터 a의 수직 방향으로 보라색 선을 그었다. 이때 a와 만나는 점이 바로 p이고, 이는 초록색 벡터로 나타내었다. 이 초록색 벡터가 바로 벡터 b를 벡터 a에 투영시킨 벡터이다. 보라색 선은 벡터 b와 p의 차이를 나타내는데, 원래의 벡터 b와 투영시켰을 때의 벡터 p사이의 오차(error)를 의미한다. 즉 투영시키기 전과 투영시킨 후가 거리상으로 얼마나 차이가 나는지를 나타내는 것이다. 이 보라색 벡터는 투영의 대상이 되는 벡터인 a와 직교(orthogonal)하며, 식으로는 b에서 p를 뺀 e=b-p로 나타낸다. 이 식을 이항하여 p=의 꼴로 다시 써보면 p=b-e가 된다. 벡터 b에서 오차 e만큼 빼면 바로 투영 벡터 p가 되는 것이다. 

 

Fig. 2를 잘 보면 벡터 b, e, p사이에 직각삼각형(right triangle)이 그려져 있는 것을 볼 수 있다. 그렇다면 벡터 b와 벡터 p사이의 각도인 theta를 통해 투영 벡터 p에 대한 식을 삼각법(trigonometry)을 활용한 sin과 cos에 관한 식으로 표현할 수 있겠구나! 라고 생각할 수 있다. 물론 그렇게 나타낼 수도 있겠지만 식이 조금 지저분해 진다. 우리는 지금 선형대수(Linear algebra)를 공부하고 있으며, 이 선형대수를 통해 p에 대한 식을 훨씬 깔끔하게 표현할 수 있다. 잘 보면 벡터 p는 벡터 a에 어떤 스케일 상수 x를 곱한 것과 같다. 즉 p=xa이며, 여기서 우리가 찾고자 하는 것은 바로 스케일 상수 x이다. 이제 이 x를 어떻게 찾을지 알아보도록 하자. 

 

먼저 가장 중요한 사실 한 가지는 벡터 a와 e가 수직(perpendicular)이라는 것이다. 이를 수식으로 나타내면 아래와 같다. 

 

 

일반적으로 bold체로 나타낸 벡터들은 column vector를 나타낸다. a의 transpose는 row 벡터이고 b-xa는 Fig.2의 보라색 벡터 e를 나타낸 것이다(p=xa 임을 기억하자). 따라서 식 (1)은 벡터 a와 벡터 e의 내적(dot product)을 표현한 것이고, 수직이기 때문에 내적의 결과는 0인 것이다. 

 

이제 식 (1)을 전개하고 우변으로 이항하여 정리해보자. 아래와 같이 정리할 수 있다. 

 

 

$\boldsymbol{a}^T\boldsymbol{b}$와 $\boldsymbol{a}^T\boldsymbol{a}$는 전부 내적이며 결과 값은 상수이다. 따라서 앞서 언급했듯이 x는 벡터 a에 곱해지는 스케일 상수가 된다. 그런데 이렇게 풀어놓으니 분명 수학적으로 정리되는 것 같긴 한데 뭔가 직관적으로 와닿지는 않는 느낌이다. 이해를 돕기 위해 삼각법(trigonometry)의 관점, 즉 $\theta$에 관해서도 정리를 해보자. 

Fig. 2의 직각삼각형에서 녹색 벡터인 p는 $\theta$에 대해서 정리하면 아래 식과 같이 나타낼 수 있다. 

 

 

 

우선 벡터 b의 크기에 b와 a사이의 cos각을 곱하면 벡터 p의 크기인 $|| p ||$가 된다. 여기에 벡터 a의 방향성분벡터인 $\hat{\boldsymbol{a}}$를 곱해주면 최종적으로 벡터 p가 된다. 여기에 $\boldsymbol{a}^T \boldsymbol{b}=||\boldsymbol{a}||  \; ||\boldsymbol{b}|| \text{cos}(\theta)$ 식을 이용하여 cos을 치환해주면 식 (3.2)와 같이 된다. 여기서 $||\boldsymbol{b}||$는 소거된다. a의 방향성분벡터인 $\hat{\boldsymbol{a}}$는 벡터 a를 a의 크기로 나눠준 것과 같다. 즉 $\hat{\boldsymbol{a}}=\boldsymbol{a}/||\boldsymbol{a}||$이고, 이것을 정규화된 벡터(Normalized vector)라 하며 크기가 1이며 오직 방향성분만을 나타내는 벡터이다. 이를 정리한 것이 식 (3.3)~(3.4)이다. ${||\boldsymbol{a}||}^2$는 벡터의 크기 계산에 있어서 루트가 벗겨지는 것과 같기 때문에 자기 자신과의 내적(dot product)과 같게 된다. 이를 정리한 것이 식 (3.5)이고 괄호안의 분수식은 결국 x와 같다. 마지막으로 식을 정리하면 (3.6)과 같이 된다. 이 식은 Fig. 2의 p=xa와 같다. 

결국 투영 벡터의 식을 선형 대수적으로 표현한 것과 삼각법으로 표현한 것이 일치함을 증명하였다. 

 

 

 

 

 

- Projection matrix of n-dimensional vectors

 

우리는 위에서 벡터의 투영에 대한 식을 벡터에 대한 식으로 정리하였다. 이제 이것을 행렬에 대한 식, 즉 투영 행렬(projection matrix)로 표현해보자. 우선 식 (3.6)을 보면 p=xa로 벡터 p에 대한 식을 표현하였다. 여기서 x는 스칼라(scalar) 값이고 x를 먼저 곱하던, a를 먼저 곱하던 같은 값이 나온다. 즉 p=xap=ax나 똑같다는 말이다. 두 번째 방법으로 다시 정리해보면 아래와 같다. 

 

 

 

여기서 한 가지 생각해보자. 만약 Fig. 2에서 벡터 b의 길이가 두 배가 되면 어떻게 될까? 당연히 투영된 벡터 p의 길이도 두 배가 될 것이다. 식 (4.2)의 b에 2를 곱하면 당연히 벡터 p도 2배가 늘어날 것이다. 

이번엔 벡터 a의 길이가 두 배가 된다고 생각해보자. 각 a의 앞에 2씩을 곱해주면 분자의 두 개의 a에도 각각 2, 분모의 두 개의 a에도 각각 2가 곱해질 것이다. 2는 결국 소거되어 식은 원래와 같게 된다. 즉 a는 아무리 늘어나거나 줄어들어도 p에는 영향을 미치지 않는다. 

 

결국 벡터 b가 어떤 투영시키는 매개체에 의해서 벡터 a로 투영되는 것이다. 여기서 투영시키는 매개체가 바로 투영 행렬(projection)이다. 그리고 투영행렬은 이미 식 (4.2)에 나타나있다. 벡터 b의 a로의 투영을 식으로 나타내면 아래와 같다. 

 

 

 

(※bold체의 소문자 p는 투영된 벡터이고 대문자 P가 투영 행렬이다. 헷갈리지 않게 주의하자.

식 (4.2)에서 분수식 앞의 a를 분자로 끌어올리고 b를 따로 떼어서 생각하면 식 (5)와 같이 정리할 수 있다. 우리는 지난 강의에서 column vector x row vector 순으로 곱하면 행렬이 됨을 배웠다. $\boldsymbol{a}$는 column vector, $\boldsymbol{a}^T$는 row vector이고, $\boldsymbol{a}^T \boldsymbol{a}$는 상수가 된다. 따라서 식 (5)의 P는 행렬이 되는 것이다. 이것이 b를 a로 투영시키는 투영행렬(projection matrix)이다. 지금의 예는 2D벡터에 대한 것이지만, 식 (5)와 같이 투영 행렬을 만드는 것은 n차원의 벡터에 대해서도 성립한다. 즉 a와 b가 3차원, 4차원 벡터이더라도 식 (5)를 이용하여 똑같이 투영행렬을 만들 수 있다는 의미이다. 

 

 

- Properties of projection matrix

 

이제 투영 행렬을 구했으니 이것이 어떤 특징을 가지고 있는지 간단히 살펴보도록 하자. 

그 전에 어떤 행렬의 column space에 대해서 한 번 생각해보자. 어떤 임의의 행렬 A가 있다고 했을 때 A의 column vector들의 선형조합(Linear combination)을 통해 만들 수 있는 공간을 우리는 행렬 A의 column space라고 한다. 그렇다면 이 행렬 A에 어떤 임의의 벡터 x를 곱하면 어떻게 될까? 이것이 의미하는 것이 무엇일까? 바로 A에 곱해진 그 벡터 x가 A의 column space에 안착(landing)하는 것이다. 아래의 예를 보고 확실히 이해해 보도록 하자. 

 

 

 

식 (6)의 A에 벡터 x를 곱하는 것은 A의 각 column vector에 x의 각 원소들을 곱하여 더하는, 즉 column vector들의 선형조합 연산에서  x의 원소들은 각 벡터에 곱해지는 상수가 된다. 결국 column vector의 선형조합으로 표현되기 때문에 x는 당연히 column space안으로 들어가는 것이다. 이것은 굉장히 중요한 개념이니 잘 기억해두도록 하자. 

 

그렇다면 식 (5)의 투영행렬 P의 column space는 무엇일까? 바로 벡터 a를 지나가는 Line이다. 

 

다음으로 투영 행렬의 rank는 어떻게 될까? 우리는 지난 강의(Lecture 11-(2))에서 어떤 두 벡터를 column vector x row vector의 순서로 곱하면 반드시 rank 1 행렬이 만들어진다고 배웠다. 따라서 식 (5)에 나온 것 처럼 column x row($\boldsymbol{a} \boldsymbol{a}^T$)의 곱으로 만들어졌기 때문에 투영 행렬은 rank가 1이며 벡터 a가 행렬 P의 column space의 기저(basis)가 된다. 

 

투영 행렬 P는 대칭(symmetric)인가? 당연히 그렇다. 똑같은 벡터 a의 column x row순으로 곱하여 만들어진 행렬이기 때문에 대칭 행렬(symmetric matrix)이다. 따라서 아래 식과 같이 나타낼 수 있다. 

 

 

마지막으로 중요한 질문이다. 만약 벡터 b를 투영 행렬 P에 두 번 투영시킨다면 어떻게 될까? 즉 P의 제곱에 b를 곱하는 경우를 말하는데, 결과는 변하지 않는다. Fig. 2에서 벡터 b를 P에 투영시켜 벡터 p로 만든 다음, 다시 p를 투영행렬 P에 곱하여 투영하는 것이다. 결과는 변함없이 p이다. 따라서 아래 식과 같이 나타낼 수 있다. 

 

 

이렇게 하여 투영 행렬(projection matrix)의 두 가지 중요한 특성을 알아보았다. 먼저 투영 행렬의 rank는 1이며 식 (7), (8)과 같이 대칭 행렬(symmetric matrix)이고 P의 제곱은 P와 같다. 이와 같은 투영 행렬의 특성을 바탕으로 Fig. 2의 벡터 b는 투영 행렬 P의 column space인 a를 지나 가는 Line(rank=1)에 위치하게 되는 것이다. 

 

 

 

 

 

 

2. N-Dimensional Vector Projection (N차원 벡터 투영)

 

우리는 위에서 2차원 벡터 투영에 대한 내용을 배웠다. 이번엔 2차원을 넘어 더 높은 차원의 벡터에 대한 투영을 공부해보도록 하자. 그 전에 우리가 왜 투영(projection)에 대해 공부하고 있는 지를 한 번 생각해보고 넘어가자. 

 

 

- Why projection?

 

왜 우리는 투영(projection)을 공부하고, 이것이 왜 중요할까? 우리는 바로 지난 강의에서 해가 존재하지 않는 선형연립방정식 Ax=b에 대하여 공부하였다. 해가 존재하지 않는 경우는 미지수보다 방정식이 더 많은 경우이고 이를 overdetermined case라고 배웠다. 이를 해결하기 위해서 우리는 비록 정확한 해는 없지만 그래도 가장 근접한 해인 x hat($\hat{\boldsymbol{x}}$)을 구하여 이 문제를 해결하였다. 그렇다면 무엇이 가장 근접한 해(closest solution)인가? 

 

Overdetermined case인 경우 Ax=b에서 Ax의 결과 벡터는 항상 A의 column space에 존재한다. 그러나 b는 column space에 존재하지 않는다. 식은 =로써 정의했지만, 사실은 양변의 불일치가 발생하는 것이다. A는 이미 정해진 시스템이라 바꿀 수 없고 x는 앞으로 구해야 할 해다. 따라서 b를 바꿔야 한다. 이를 어떻게 바꿀 것인가? 바로 A의 column space에서 가장 근접한 벡터로 바꾸는 것이다. 즉 A의 column space에 존재하는 수 많은 벡터중에서 현재의 b와 가장 흡사한 벡터를 골라서 b대신 놓는 것이다. 이때 b와 가장 흡사한 벡터가 바로 A의 column space로 투영한 벡터 p다. 우변에 p가 위치한 경우 x는 x hat($\hat{\boldsymbol{x}}$)이 된다. 즉 원래의 b를 만족시키는 정확한 해는 아니지만, 최대한 근접한 해를 의미한다. 이를 정리하면 아래와 같다. 

 

 

 

 

이제 우리의 다음 목표는 우변의 벡터 b를 어떻게 column space로 투영(projection)시키는가 이다. 이해를 돕기 위해 3차원 공간에서의 그림을 가지고 설명해보겠다. 

 

Fig. 3 3차원 공간에서의 투영(projection)

 

 

Fig. 3은 3차원 공간에서 3차원 벡터와 행렬을 이용하여 투영을 하는 모습을 나타낸 것이다. 베이지색 평면은 행렬 A의 column space를 의미한다. 또한 이들의 기저(basis)는 그림에서 각각 a1과 a2이며 평면 위에 존재하는 column space의 임의의 벡터들이다. 따라서 행렬 A는 아래 식과 같이 이 기저들로 이루어진 형태가 될 것이고 크기는 3x2가 될 것이다. 물론 이는 Fig. 3을 기준으로 한 크기이며 차원은 임의의 n차원이 될 수 있다. 

 

 

 

파란색 화살표로 나타낸 벡터 b는 column space의 평면 위에 존재하지 않는다. 이 벡터 b가 바로 식 (9.1)에 있는 Ax=b의 b이다. 이러한 overdetermined case에서 x는 a1과 a2의 선형 결합의 상수로써 그 결과가 b가 되도록 해야 한다. 그러나 보다시피 b는 column space 평면 위에 존재하지 않기 때문에 이를 만족시키는 x는 애초에 존재하지 않는다. 그래서 최대한 만족시키는 해를 찾기 위해 b를 치환하는 것이다. 바로 A의 column space에 존재하는 무수히 많은 벡터들 중에 b와 가장 근접한 벡터로 말이다. 벡터의 화살표 끝점을 기준으로 봤을 때 가장 가까운 벡터는 당연히 평면에 수직(perpendicular)으로 내린 벡터가 될 것이다. 이것이 바로 벡터 p가 된다. (b가 애초에 평면 위에 존재한다면 문제는 훨씬 쉬워짐) 벡터 b에서 p의 방향으로 수직으로 연결한 선이 바로 두 벡터 사이의 오차(error)이며 보라색으로 표기되어 있다. 

 

결국 우리가 최종적으로 구하고자 하는 것은 x hat($\hat{\boldsymbol{x}}$)이며, 이를 위해서는 먼저 p를 구해야한다. p는 Fig. 3에 표현된 것과 같이 x hat과 a1, a2와의 선형 조합(Linear combination)으로 나타낸 것이며 이를 다시 행렬로 표현 하면 $\boldsymbol{p}=A \hat{\boldsymbol{x}}$와 같이 나타낼 수 있다. 

 

 

 

 

다시 한 번 우리의 문제를 정리해보면 overdetermined case의 Ax=b는 미지수가 방정식보다 작기 때문에 해가 존재하지 않는다. 따라서 가장 근접한 해를 구하기 위해 우변의 b를 A의 column space에서 가장 근접한 벡터로 치환해준 뒤 최종적으로 x hat을 구하는 것이 우리가 하고자하는 것이다. 여기서 x hat($\hat{\boldsymbol{x}}$)을 구하기 위한 핵심 포인트는 바로 보라색 선인 오차(e)이다. 이 오차가 column space에 수직(perpendicular)하다는 것이 핵심이다. 오차는 e=b-p로 표현되었는데, p를 $\boldsymbol{p}=A \hat{\boldsymbol{x}}$로 치환하여 다시 정리하면 아래와 같다. 

 

식 (11)을 놓고 보면 우리는 a1과 a2 두 개의 방정식(equation)에 대해 정리할 수 있다. A는 a1과 a2의 두 개의 column vector로 이루어져 있고 x hat역시 x1과 x2로 이루어져 있기 때문이다. 이 말은 즉 오차에 대한 라인 e가 a1에도 수직이고 a2에도 역시 수직이라는 의미다. a1, a2가 plane의 기저(basis)이므로 이 두 벡터하고 수직이면 모든 plane과 수직이다. 따라서 우리는 식(11)을 a1과 a2로 나누어 식을 정리할 수 있다. 

 

 

식 (12)는 오차 벡터 e와 a1, a2와의 내적(dot product)에 관한 식으로 정리한 것이다. 내적했을 때 0이라는 것은 수직인 것을 다들 이미 알고 있을 것이다. 그러나 우리는 선형 대수를 배우고 있기 때문에 식 (12)를 행렬의 형태로 다시 정리해보자. 

 

 

앞의 a1과 a2로 이루어진 행렬은 원래 A의 전치(transpose)행렬이다. 따라서 행렬로 표현하면 식 (13.2)처럼 나타낼 수 있다. 이를 다시 전개하여 정리하면 우리가 지난 강의(Lecture 15-(1))에서 봤던 식이 나온다. 즉 x hat을 구하는 식 말이다. 

 

여기서 식 (13.2)를 우리가 지난 강의(Lecture 14)에서 배웠던 직교벡터와 부분 공간과 연결지어 생각해보자. 식 (13.2)가 지난 번에 배웠던 네 개의 부분 공간 중 어떤 것과 유사해 보이지 않는가? 바로 Left null space의 형태인 것을 알 수 있다. 따라서 오차 벡터($e=(\boldsymbol{b}-A \hat{\boldsymbol{x}})$)는 행렬 A에 대한 Left null space에 존재한다. 또한 Left null space는 행렬 A의 column space와 직교(orthogonal)인 것을 배웠다. Fig. 3과 연결시켜 설명해보자면 행렬 A의 column space는 베이지색 plane이고, 이와 직교인 오차 벡터 e는 Left null space에 있음을 증명했는데, 그림상에서도 plane과 수직(perpendicular)인 것을 알 수 있다. 이렇게 하여 행렬의 부분 공간(subspaces)과도 연결지어 이해할 수 있었다. 이를 간단히 정리하면 다음과 같다. 

 

 

 

결과적으로 우리의 문제를 해결하기 위해 핵심이 되는 식은 (13.3)이다. 

 

 

- Solution of the x hat and projection matrix

 

이제 식 (13.3)으로부터 해(solution)를 구해보자. 해가 존재하지 않는 overdetermined case에서 우변의 b를 column space의 가장 유사한 벡터로 치환했으니 이제 유사한 해가 존재한다. 식 (13.3)을 x hat에 대하여 정리하면 아래와 같다. 

 

 

우리가 구하고자 하는 x hat은 식 (14.1)과 같다. 이를 통해 우리는 x hat의 값을 구할 수 있다. 그 다음엔 원래의 식에 이 x hat을 곱해서 b에서 A의 column space로 투영된 행렬 P를 구할 수 있다. x hat을 A에 곱하면 A의 column space로 들어가게 되는데, 이것이 원래의 벡터 b를 A의 column space로 투영한 p 벡터가 된다. 이 식을 나타낸 것이 식 (14.2)의 왼쪽이다. 

 

그런데 사실 우리가 최종적으로 구하고 싶은 것은 x hat이 아니다. 바로 같은 차원의 공간에 있는 어떠한 벡터이든지 행렬 A의 column space로 투영시킬 수 있는 투영 행렬(Projection matrix)을 구하고 싶은 것이다. 이를 위해 x hat을 먼저 구하고, x hat과 A를 정리하여 투영 행렬 P를 구하는 것이다. 식 (14.2)로부터 이 투영 행렬을 구할 수 있다. (14.2)의 x hat을 (14.1)로 치환해서 정리하면 (14.2)의 오른쪽과 같이 된다. 여기서 밑줄 친 부분이 바로 투영 행렬 P에 대한 식이다. 우리는 이미 section 1에서 1차원 벡터에 대한 투영 행렬 P를 식 (5)와 같이 구했다. 그러나 이는 1차원에 해당하는 방법이다. 식 (14.x)는 바로 n차원에 대한 투영 행렬을 구하는 방법을 나타낸다

 

 

그런데 어떤 사람은 식 (14.3)을 보고 이렇게 생각할 수 있다. 저거 전개 해서 없앨 수 있을 것 같은데.. 일단 전개해보자. 

 

 

전개해보니 식 (14.3)이 결국 단위 행렬(Identity matrix)가 되었다. 그러나 이것이 과연 맞을까? 정확히 말하자면 특정 조건일 때만 맞는 이야기이다. 바로 행렬 A가 정방행렬(square matrix)이고 역행렬이 존재할 때(invertible) 식 (15)가 성립하는 것이다. 우리가 기본적으로 가정하는 것은 overdetermined case, 즉 직사각 행렬(Rectangular matrix)이며 방정식이 미지수보다 많은 경우이다. 이 경우엔 당연히 역행렬이 존재하지 않는다. 따라서 식 (15)는 직사각 행렬의 경우엔 성립하지 않는다

 

그렇다면 행렬 A가 역행렬을 가지는 경우(invertible)엔 이것을 어떻게 생각해야 할까? 다시 말하면 투영 행렬 P가 n x n의 정방행렬이며 역행렬이 존재하는 경우 말이다. 이것은 결국 n차원 공간에서 n차원 공간으로의 투영, 즉 3차원 공간에서 3차원 공간으로 투영시키는 것이고 결국 단위 행렬(Identity matrix)을 의미한다. 투영 시켜도 아무 일도 일어나지 않는 다는 말이다. 

 

 

 

 

 

우리는 section 1의 1차원 예시에서 식 (7), (8)과 같이 투영 행렬이 대칭(symmetric)이며, 제곱해도 같음을 증명하였다. N차원의 경우에도 이것이 성립하는지 알아보자. 식 (14.3)을 전치 시키면 아래와 같다. 

 

 

식 (16)을 통해 전치를 해도 식이 같음을 증명하였다. 이번엔 P의 제곱에 대해 증명해보자. 

 

 

P를 제곱했더니 밑줄 친 부분이 단위 행렬이 되어 삭제된다. 따라서 P의 제곱이 원래의 P와 같음을 증명하였다. 

 

이렇게 하여 투영 행렬(Projection Matrix)에 대한 모든 식을 정리하였다. 

 

 

 

3. MATLAB 구현

 

아래 그림은 Fig. 3과 같은 투영(projection)에 관한 문제를 MATLAB으로 구현한 것이다. 각 벡터의 색깔을 Fig. 3과 맞추었으니 비교해보기 바란다. 구현한 식은 다음과 같다. 

 

 

 

 

Fig. 4 MATLAB을 이용해 식 (18)을 투영 행렬로 해를 구하고 시각화 한 모습

           굵은 녹색 벡터가 p를, 가는 녹색 벡터는 standard basis의 y축을 의미함

 

 

아래는 구현 코드이다. Overdetermined case인 식 (18)을 어떻게 풀고 어떻게 구현하고 시각화 했는지를 잘 살펴보기 바란다. 실제로 A와 b의 값을 바꿔가며 감을 잡아보도록 하자. 

 

 

 

 

 

 

4. 마치며

 

이번 강의에서 정말 중요한 개념인 투영(Projection)을 배우고 이를 행렬의 부분 공간(subspaces)과 연결지어 생각해 보았다. 투영을 배우는 이유는 해가 존재하지 않는 경우인 Overdetermined case의 문제에 대한 해를 찾으려는 시도에서부터 출발한다. 이 경우 Ax=b 식을 만족시키는 해가 애초에 존재하지 않지만, 가장 근접한 해를 구하기 위해 우변의 b를 행렬 A의 column space 공간의 가장 유사한 벡터로 만든 다음 이에 대한 근사해(approximate solution) x hat을 계산한다. 이때 b를 A의 column space로 투영시키는 역할을 하는 것이 바로 투영 행렬(projection matrix) P이며, x hat을 구하고 이를 행렬 A와 함께 정리하여 구할 수 있다. 

 

다음 강의에서 배울 내용이지만, 이 투영의 개념은 우리가 실제 문제에서 유용하게 사용할 수 있는 수학적 방법론인 최소자승법(Least square method)의 배경이 되는 아주 중요한 개념이다. 잘 숙지하도록 하자. 

 

이번 강의에서 배울 내용은 바로 해가 존재하지 않는 선형연립방정식의 해를 구하는 방법이다. 이는 바로 다음 강의에서 배울 투영 행렬(Projection matrix)을 배우기 위함이다. 투영 행렬에 대해 본격적으로 공부해보기 전에 먼저 준비 운동을 해보자. 투영 행렬에 대한 이해를 돕기 위해서 말이다. 

 

 

1. 해가 존재하지 않는 선형연립방정식 Ax=b (Solving Ax=b when there is no solution)

 

 

우리는 지금 까지 부분 공간(subspaces)등을 다뤄오면서 주로 null space에 관한 식 Ax=0에 대해서 공부해왔다. 투영 행렬에 대한 준비운동으로 우변에 어떤 값이 존재하는 식 Ax=b에 대해서 다시 한 번 생각해보자. 

 

우리는 지난 강의 Lecture 8에서 어떤 시스템의 선형방정식인 Ax=b 를 만족시키는 해 x를 구할 때, b가 행렬 A의 column space상에 존재한다면 이 선형시스템은 가해 조건(solvability condition)을 만족하며 해를 구할 수 있다고 배웠다(b를 붙인 Augmented matrix를 만든 뒤 함께 소거하여 후방대입). 그러나 만약 b가 가해 조건을 만족하지 않는다면? 즉 b가 A의 column space상에 존재하지 않는다면 어떻게 될까? 가해 조건을 만족하지 않아 해가 존재하지 않는 경우 말이다. 이러한 경우에도 해를 구할 수 있을까? 

 

질문이 약간 이상해보일 수 있다. 해가 존재하지 않는데 해를 구한다고? 말이 안되는 것 처럼 보이겠지만 사실 해를 구할 수 있다. 좀 더 정확히 이야기 하자면 애초에 해가 없기 때문에 아주 정확한 해(exact solution)는 구할 수 없지만 가장 근사한 해를 구하는 것이다. 특히 행렬 A의 미지수(unknown)보다 방정식(equation)이 더 많은 경우(m>n), rank는 m보다는 당연히 작고 최소 n이 된다. 이 경우 column 벡터의 차원이 rank보다 작기때문에 우변의 벡터 b에 상응하는 해가 없을 가능성이 훨씬 높을 것이다. 이를 overdetermined라 한다. 미지수와 방정식의 수가 같은 경우(m=n)를 determined, 방정식이 미지수보다 적을 경우(m<n) underdetermined라 한다. 그 형태는 아래와 같다. 

 

 

 

 

Overdetermined는 방정식이 미지수보다 많은 경우이며 일반적으로 해가 존재하지 않는다. 해가 존재하는 경우가 있다면 우변의 b벡터가 A의 column space에 존재할 때 해(solution) x가 존재한다. 실제로 식 (1)의 overdetermined행렬에 우변 벡터 b를 붙여 Augmented matrix를 만든 다음 소거(elimination)를 통해 row reduced echelon form을 만들면 row4는 영벡터인데, b4의 원소는 0이 아닌 상수가 나온다. 애초에 식 자체가 성립이 안되기 때문에 해가 존재하지 않는다. 

Determined는 미지수와 방정식의 수가 같은 경우이며, full rank일 경우 유일한 해(unique solution)를 갖는다. 

Underdetermined는 미지수가 방정식보다 많은 경우이다. 이 경우엔 무수히 많은 해가 존재한다. 

위와 관련해서는 나중에 행렬식(determinant)을 공부할 때 다시 살펴보도록 하자. 

 

 

어쨋든 해가 없는 경우인 overdetermined에 대한 이해를 돕기 위해 예를 들어 설명을 하겠다. 인공위성의 위치를 추정하는 식이라고 생각해보자. 위치 측정값에 대한 위한 수백, 수천개의 방정식을 얻었다고 가정해보자. 이렇게 되면 미지수(unknown)보다 측정 값에 대한 방정식이 훨씬 많은 경우가 되어 overdetermined형식이 된다. 따라서 해가 존재 하지 않게 되는데, 가장 간단하게는 미지수의 수 만큼의 방정식만 남기고 나머지는 없애는 것이다. 그러나 어떤 방정식(측정값)이 좋은 것이고 어떤 것이 나쁜 데이터인지 정확히 판단하기는 어렵다. 대부분의 데이터에는 잡음(noise)이 있지만 또한 시스템의 해 x에 대한 정보도 담겨있다. 어떤 방정식을 없애야 하는지에 대한 기준은 명확하지 않다. 따라서 우리는 이 모든 데이터에 대한 방정식을 고려한 최적의 해(best solution)를 구해야 할 것이다. 곧이어 배우겠지만 이것이 최소자승법(Least square method)이며 투영행렬(projection matrix)과도 관련이 있다

 

다시 overdetermined행렬의 소거를 생각해보자. 이때의 행렬의 형태는 직사각형(Rectangular)형태일 것이고 바로 위에서 언급한 것처럼 소거했을 때 pivot row아래의 row들, 즉 row4는 [0 0 0]=[1]와 같이 말이 안되는 식이 될 것이다. 소거(Elimination)에 실패한 것이다. 소거의 결과는 우리에 해가 존재하는지, 혹은 존재하지 않는지에 대한 것을 말해준다. overdetermined인 경우에는 소거가 해가 존재하지 않는다고 말해준다. 그럼 어떻게 해야 할까? 지금부터가 중요하다. 우선 아래의 행렬을 이해하는 것이 굉장히 중요하다. 

 

 

 

식 (4)의 행렬은 우리의 문제를 이해하는데 핵심적인 역할을 하는 행렬이다. 위 행렬은 어떤 행렬일까? 

여기서 한 가지 가정은 행렬 A는 m by n크기이며 m이 n보다 더 큰, 즉 m>n 의 overdetermined형태이다. 이러한 A행렬의 전치(transpose)를 A앞에 곱해주었다. 어떻게 될까? 바로 정사각행렬(square matrix)이 된다. 원래 행렬 A는 m x n이고, A의 transpose행렬은 행과 열이 뒤바뀐 n x m이다. A의 transpose행렬을 앞에 곱해주면 (n x m) * (m x n) = (n x n)이 되어 정사각행렬이 되는 것이다. 

 

 

 

식 (4)의 또 다른 특성은 어떤 것이 있을까? 바로 대칭(symmetric)이다. 대칭 행렬(symmetric matrix)의 특성은 전치를 해도 원래 자기 자신과 똑같은 특성을 가지고 있다. 한 번 증명해보자. 

 

 

전치를 해도 원래의 행렬 곱과 똑같아지는 것을 알 수 있다. 

 

자 이제 가장 중요한 것을 확인해보자. 식 (4)는 역행렬이 존재하는가(invertible)? 식 (4)는 역행렬이 존재한다. 단 조건은 Full rank여야 한다는 것이다. 우리는 식 (5)를 통해 식 (4)가 정사각행렬이 됨을 알았다. 역행렬(Inverse matrix)의 조건은 정방행렬이면서 full rank여야 한다. 따라서 full rank라는 조건만 충족된다면 식 (4)는 역행렬이 존재한다. 사실 full rank가 되기 위한 조건은 원래 행렬의 column이 독립(independent)하면 된다. 

 

이렇게 하여 우리는 overdetermined형태의 행렬 A의 앞에 A의 transpose를 곱해준 형태인 식 (4)의 중요한 특성 3가지를 알아보았다. 특성 3 가지를 다시 정리해보면 아래와 같다. 

 

  • Square Matrix
  • Symmetric Matrix
  • Invertible (if Full rank)

 

우리가 지금까지 식 (4)에 대한 주요 특성들을 알아본 이유는 결국 어떤 문제를 해결하기 위함이다. 맨 처음 언급한 것과 같이 우리는 Ax=b에서 방정식이 미지수보다 더 많은 형태(m>n)인 overdetermined에 대한 형태에 관한 문제를 풀고자한다. 그러나 overdetermined형태의 식은 앞서 언급한 것과 같이 방정식이 미지수보다 더 많기 때문에 해가 존재하지 않는다. 그렇다면 여기서 끝내야 할까? 아니다. 식을 정확하게 만족시키는 해를 구할 순 없어도 모든 식을 최대한 만족시키는 해(best solution)를 구하면 된다. 아래 식을 다시 보자. 

 

 

식 (7)의 행렬 A는 정방행렬(square matrix)이 아니기 때문에 역행렬을 구할 수 없다. 따라서 해를 구할 수 없다. 그러나 최적의 해는 구할 수 있다. 바로 식의 양변에 A의 전치(transpose)를 곱해주는 것이다. 

 

 

양변에 똑같은 행렬을 곱해줬기 때문에 식은 성립한다. 이때 식의 해(solution)에 해당하는 x에 hat(^)이 붙었다. x hat이 의미하는 것은 최적해(optimal or best solution)이다. 식을 정확히 만족시키는 해(solution)는 아니지만, A에 존재하는 모든 방정식(row, b)을 최대한 만족시키는 해를 의미하는 것이다. 식 (8)은 굉장히 중요하다. 

 

거의 다 왔다. 이제 중요한 것은 식 (8)의 실제 해를 구하는 것이다. 

은 앞서 살펴봤듯이 full rank이기만 하면 역행렬이 존재한다고 했다. 따라서 이것의 역행렬을 구하여 양변에 곱해주면 최종적인 해를 구할 수 있을 것이다. 

 

 

 

이렇게 하여 해가 존재하지 않는 Ax=b에 대한 최적해(best solution)를 구할 수 있다. 다음 섹션에서 실제 예를 들어서 계산해보도록 하자. 

 

 

 

2. Examples of Ax=b (overdetermined case)

 

- Best solution for overdetermined equation

 

섹션 1에서 가장 처음 봤던 식 (1)의 overdetermined 식의 해를 구해보도록 하자. 식 (1)을 다시 써보면

 

 

 

 

위의 식을 (9)와 같이 정리해보자. 

 

 

 

식 (1)의 예제를 식 (9)의 방법을 통해 최적해(best solution) $\hat{\boldsymbol{x}}$(x hat)를 계산하였다. 계산된 결과를 원래의 식과 비교해 봤을 때 약간의 차이가 있지만 그 정도가 크지 않은 것을 알 수 있다. 

 

결국 우리는 미지수(unknown)보다 방정식(equation)이 많아서 원래 해가 존재하지 않는 overdetermined case의 선형연립방정식에 대한 최적해를 구할 수 있었다. 비록 딱 들어맞는 정확한 해는 아니지만, 각 방정식의 정보를 최대한 반영하여 각 방정식과의 오차(error)의 합을 최대한 줄이는 쪽으로 해를 계산할 수 있었다. 

 

아래는 식 (10)을 MATLAB으로 구현한 코드이다. 

 

 

 

- when the solution exists in overdetermined equation

 

아무리 overdetermined 방정식이라도 해가 존재할 경우가 있다. 바로 우변의 벡터 b가 행렬 A의 column space에 존재할 때이다. 즉 A의 column 벡터들의 선형 조합(Linear combination)으로 b를 만들 수 있을 때를 말한다. 중간과정은 생략하고 결과만 보면 아래와 같다. 

 

b가 A의 column space에 존재할 경우 값이 정확하게 일치하는 것을 볼 수 있다. 

아래는 식 (11)의 MATLAB 코드

 

 

 

- Not invertible case

 

마지막으로 아예 최적해(best solution)조차 구할 수 없는 경우가 있다. 바로 행렬 A의 column이 dependent할 때 이다. Overdetermined system(m>n)에서 그나마 최적해라도 구하려면 행렬의 rank가 최소한 n과 같아야한다. 그러나 rank가 n보다 작을 경우엔 이 조차 불가능하다. 식(1)의 행렬을 아래와 같이 바꿔보자. 

 

 

행렬 A의 col3은 col1+col2와 같다. 따라서 column vector는 종속(dependent)이다. A의 앞에 A의 transpose를 곱해보자. 

 

 

연산 결과도 마찬가지로 col1+col2=col3인 것을 볼 수 있다. Full rank가 아니므로 역행렬이 존재하지 않는다. 따라서 행렬 A의 column이 dependent하면 최적해조차 구하는 것이 불가능하다. 결론적으로 ATA가 역행렬을 가지기 위해선 반드시 A의 column이 독립(independent)이어야 한다. 

사실 Full rank가 아닌 행렬, 즉 rank-deficient overdetermined matrix에 대한 역행렬을 구하는 방법들이 있긴하다. 그러나 본 포스팅의 범위에서 벗어나므로 생략하도록 하겠다. 관심이 있다면 다음 링크 참조 Moore–Penrose pseudoinverse

 

아래는 식 (13)의 MATLAB 코드

 

 

 

 

3. 마치며

 

이번 포스팅에선 해가 존재하지 않는 선형연립방정식에 대한 최적해(best solution)를 구하는 방법에 대해서 알아보았다. 이번 포스팅의 내용을 잘 이해야지만 이후에 배울 투영 행렬(Projection matrix)와 최소자승법(Least square method)을 공부하는데에 무리가 없을 것이다. 잘 이해하고 넘어가도록 하자. Overdetermined system에 대해 좀 더 관심이 있다면 overdetermined-wiki를 참고하기 바란다. 그래프와 함께 잘 설명이 되어 있다. 

 

이번 포스팅에서는 이전 강의 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)에 관한 내용이다. 앞으로의 학습을 위해 이번 강의를 잘 숙지하도록 하자. 

 

 

이번 포스팅에선 선형 대수의 응용에 대한 이야기를 할까 한다. 선형 대수를 공부하면서 한 번쯤은 "이것들이 어디에 사용될까?" 하는 의문을 가져본 적이 있을 것이다. 선형 대수는 실제로 너무나 다양한 곳에 응용되고 있다. 머신 러닝(Machine Learning), 로보틱스(Robotics), 컴퓨터 비전(Computer Vision), 그래픽스(Graphics), 영상 처리(Digital Image Processing), 게임(Game), 물리학(Physics), 생물학(Biology) 그리고 경제학(Economics)에 이르기까지 굉장히 방대한 분야에 걸쳐 사용되고 있다. 

 

필자의 경험을 예로 들자면, 실험실에서 보유하고 있던 다관절 형태의 산업용 로봇을 제어하기 위해 기구학을 풀었어야 했는데, 이때 선형대수를 이용하여 역기구학(Inverse Kinematics)을 풀고 이를 통해 로봇을 제어한 경험이 있다. 또한 물체 인식을 위한 카메라 캘리브레이션(Camera Calibration), 물체 자세추정을 위해 세그멘테이션(segmentation)된 바이너리 이미지의 Eigenvalue 및 Eigenvector등의 사용, 그리고 각종 머신 러닝 등을 사용할 때에도 선형대수를 이용하였다. 특히 컴퓨터 비전이나 그래픽스 분야에서는 선형 대수를 모르고서는 절대 공부할 수 없다. Multiple view geometry라는 컴퓨터 비전 분야의 전설적인 책이 있는데, 이 책은 선형 대수를 모르면 아예 읽을 수 조차 없다. 이렇듯 선형 대수는 특히 공학도라면 절대로 피할 수 없는 학문이다. 선형 대수의 중요함은 아무리 강조를 해도 지나치지 않는다. 

 

서론이 조금 길어졌는데 어쨋든 이번 포스팅에서 다룰 내용은 그래프(Graph)와 네트워크(Network)에 관련된 내용이다. 이 그래프 이론은 이후 확률/통계 기반의 머신 러닝 기법인 베이지안 네트워크(Bayesian Network)및 마코프 모델(Markov Model)의 기초가 되니 잘 이해하도록 하자. 또한 이를 우리가 잘 알고있는 법칙인 키르히호프의 법칙(Kirchhoff's Laws)과 연관지어 이해해보도록 하자. 

 

 

 

1. 그래프(Graph)

 

- Graph: Nodes and Edges

 

우리는 그래프(Graph)라고 하면 주가의 변동을 나타내는 2차원 평면상의 그래프와 같은 형태를 많이 떠올릴 것이다. 그러나 수학, 특히 이산 수학(discrete mathematics)에서의 그래프는 어떤 네트워크 형태의 구조를 의미한다. 즉 어떤 객체(object)들과 그들을 연결짓는 선(Line)을 통해 그들 사이의 관계를 나타내는 구조를 의미한다. 여기서 각 객체를 노드(node)(혹은 정점(vertex))라 하고 각 노드들을 연결하는 선을 에지(edge)라 한다. 그래프는 응용수학(Applied mathematics)에서 가장 중요한 모델 중 하나이며, 이산(discrete)적 형태를 띄고 있다. 그래프의 형태는 다음과 같다. 

 

 

위의 그림에 나와있듯이 그래프는 노드(node)와 에지(edge)로 구성되어 있다. 노드는 각각의 객체(object)를 의미하며 정점(vertex)이라고 부르기도 한다. 위 그림에서 색깔을 가지고있는 동그라미들이 바로 노드들이다. 

에지(edge)는 각 노드들을 연결시켜주는 역할을 한다. edge는 방향을 가지거나 방향을 가지지 않는 경우도 있다. 방향이 있는 edge로 구성된 그래프를 우리는 directed graph라 하며 위의 그림과 같다. 방향이 없는 edge로 구성된 그래프는 undirected graph라 한다

 

그래프 모델을 우리 실생활과 연결시켜보자. 각 노드를 어떤 하나의 웹사이트 혹은 우리 컴퓨터라고 생각해보자. node1은 네이버, node2는 다음, node 3는 우리집에 있는 컴퓨터와 같이 말이다. 각 웹사이트는 인터넷으로 연결되어 있는데, 우리는 네이버에 접속하기 위해서 가장 빠른 경로를 찾거나 가장 최적의 경로를 찾아야 할 때도 있다. 혹은 node들을 SNS의 계정이라고 생각해보자. 각 node들은 서로 연결되어 있고, 친구를 추천해주는 일 등을 할 때 이와 같은 그래프 모델을 사용해서 최적의 친구를 추천해 주거나 하는 일들을 할 수 있다. 

이밖에도 어떤 도시의 수도관 공사에서 물의 흐름을 나타내는 모델, 도시의 다리를 설계하기 위한 모델, 전자회로에서 전류의 흐름에 대한 모델 등 다양한 곳에 응용이 가능하다. 이렇듯 그래프 모델은 우리 실생활에서 유용하게 사용될 수 있다. 

 

 

- Incidence Matrix:

 

다시 그래프의 내용으로 돌아가서, 위의 그래프는 node가 총 4개이고 edge가 총 5개이다. node끼리 연결된 방향은 화살표로 표현되어 있다. 이러한 그래프의 노드와 그들의 연결관계를 행렬(Matrix)로 나타낼 수 있다. 이러한 그래프의 연결 관계에 대한 그래프를 우리는 근접행렬(Incidence Matrix)이라 한다. 

 

위의 그래프에서 node의 개수를 n, edge의 개수를 m이라고 했을 때, n=4, m=5가 된다. node의 개수인 n을 column으로, edge의 개수인 m을 row로 하여 5x4 크기의 근접 행렬을 만들 수 있다. 이때 그래프의 edge는 방향을 가지고 있기 때문에 근접 행렬의 각 원소들은 방향을 나타내야한다. 근접 행렬에 방향을 나타내는 방법은 다음과 같다. edge1의 경우 node1에서 출발하여 node2로 향한다. node1이 출발점, node2가 끝점이 되는데, 출발점은 -1, 끝점은 1로 지정하는 것이다. 이렇게 하여 위의 그래프에 대한 근접 행렬을 만들면 아래와 같다. 

 

 

행렬 A의 row를 중심으로 생각해보면 각 node들 간의 관계를 -1과 1로 정의해 준다. 이 incidence matrix만 있으면 그래프를 모르더라도 그릴 수 있다. 예를 들면 column이 4개 이므로 종이에 점 4개를 먼저 그리고 번호를 부여한다음 row를 보면서 node끼리 연결하는 것이다. 가령 row3를 보면 node1에 -1, node3에 1의 원소가 있으므로 node1에서 node3로 연결되는 화살표를 그리면 된다. 

 

여기서 한 가지 눈여겨봐야 할 것이 있다. node1은 node2와 node3로 각각 연결되어 있다. 이때 node2는 다시 node3로 연결되어 있다. 이렇게 node들이 연결되어져 있는 부분 그래프(subgraph)를 Loop라고 한다. Loop를 찾는 방법은 연결되어있는 edge들을 따라가며 찾는 방법도 있으나, 좀 더 쉬운 방법은 그래프에서 부분 면적을 찾는 것이다. 이것은 마치 아래 그림에서 작은 삼각형들의 총 개수를 찾는 문제와 같다. 

 

위 그림에서 중복되지 않는 삼각형의 총 개수는 몇 개인가? 

이를 그래프로 생각하면 각각의 부분 삼각형의 총 개수는 loop의 총 개수와 같다. 

그림 출처: http://kwon-blog.tistory.com/1289

 

 

위 그림에서 각 삼각형들의 꼭짓점들을 node라 하고 삼각형을 이루는 line들을 edge라고 생각했을 때, 위 그림의 각각의 삼각형들이 바로 부분 그래프(subgraph)가 되는 것이고 Loop가 된다. 위 그림에선 총 8개의 Loop가 존재한다(숨어있는 삼각형을 모두 찾으면 25개가 나오지만 여기선 중복되지 않는 부분만 loop로 간주함). 꼭 삼각형 뿐만 아니라 임의의 다각형 형태의 그래프에서 각각의 면적을 찾으면 그것이 loop의 개수이다(겹치는 부분 제외). 

 

다시 우리의 그래프로 돌아와서, 그렇다면 우리의 그래프는 몇 개의 loop를 가지고 있을까? 결론부터 말하자면 아래 그림과 같이 총 3개의 loop를 가지고 있다. edge1, 2, 3에서 loop1,  edge3, 4, 5에서 loop2,  edge1, 2, 4, 5에서 loop3가 나온다. 이러한 loop와 loop들의 위치는 그래프에서 중요한 역할을 한다. 

 

 

 

사실 loop는 incidence matrix에서 재미있는 특성을 가지고 있다. incidence matrix를 loop를 고려하여 다시 써보자. 

 

 

식 (2)에서 edge1,2,3는 loop1이다. A의 row1, 2, 3에 해당하는 것들인데, 이 row들은 독립(independent)인가?를 한 번 생각해보자. 즉 행렬 A에서 loop에 해당하는 row들은 독립(independent)인가? 정답은 No다. loop1의 row들은 종속(dependent)이다. row1과 row2를 더했을 때 row3가 나오는 것을 보면 쉽게 알 수 있다. 여기서 알 수 있는 사실은 어떤 그래프의 loop에 대한 Incident matrix의 row들은 선형종속(linearly dependent)의 특성을 갖는다는 것이다. 

 

 

 

2. 전자회로의 그래프 모델링(Graph modeling of an electronic circuit)

 

- Potential difference and null space of A:

 

우리는 4개의 node와 5개의 edge로 구성된 그래프에 대한 5x4크기의 Incidence matrix를 만들었다. 그런데 만약 node가 100개이고 이들을 연결하는 edge가 180개라고 가정해보자. 이에 대한 Incidence matrix는 180x100의 크기를 가질 것이다. 그러나 이때 이 행렬은 굉장히 많은 0을 가지게 될 것이다. 왜냐하면 Incidence matrix에서는 하나의 row에서 오직 2개의 non-zero원소들만 나타나기 때문이다. 결국 그래프의 규모가 커질수록 Incidence matrix의 원소들은 행렬의 크기에 비해 적은 비율로 나타날 것이다. 즉 희소(sparse)한 원소를 가지게 되는 것이다. 이러한 형태의 행렬을 희소 행렬(sparse matrix)이라 한다. 

중요한 것은 이러한 희소 행렬은 내부적으로 어떤 구조(structure)가 형성된다. 만약 실제 문제에 대한 그래프라면, 가령 실제 어떤 전자회로에 대한 그래프라면 그 회로에 대한 구조가 Incidence matrix에 드러나게 될 것이다. 이러한 구조를 파악하기 위해 우리는 선형 대수적으로 행렬을 분석할 수 있다. 이에 대한 첫 번째 방법은 바로 Incidence matrix의 null space를 찾는 것이다

 

행렬 A의 null space를 구한다는 것은 어떤 의미를 가질까? node를 나타내는 column이 독립인지를 파악할 수 있다. Null space라는 것은 어떻게 행렬의 column벡터들의 선형 조합(Linear combination)을 통해 0을 만드는지를 알려준다. 만약 column 벡터들이 독립(independent)이라면, null space의 해는 오직 영벡터(zero vector)만이 존재한다. 만약 종속이라면, null space라는 말처럼 해들의 공간, 즉 해들의 집합이 발생한다. 

 

그렇다면 식(2)의 행렬 A의 column은 독립인가? 지금부터 알아보도록 하자. Null space를 계산하기 위해선 Ax=0를 풀면 된다. 식(2)를 아래와 같이 Ax=0의 꼴로 다시 써보자. 

 

 

위의 행렬은 무엇을 나타낼까? 이해를 돕기 위해 위의 그래프를 전자 회로(electronic circuit)라고 생각해보자. node들을 전자 회로에서 전압을 측정하는 임의의 지점이라 생각해보자(사실 전자회로에서 node는 두 개 이상의 branch들이 연결되는 지점). Incidence matrix와 연관지어 생각해보면 Ax=0에서 변수인 x=[x1, x2, x3, x4]들은 각 node에서의 전압(potentials)이다. 이때 행렬 A를 x에 곱하게 되면 우리는 각 node들의 전위차(potential differences)를 계산할 수 있게 된다. 

 

 

이제 우리가 찾아야 할 것은 언제 모든 node들의 전위차(potential differences)가 0이 되는지다. 즉 null space를 찾는 것이다. 물론 모든 x가 0인 경우에 당연히 전위차가 0일 것이다. 그러나 x가 모두 0이라는 것은 회로에 아예 전류가 흐르지 않는 다는 말이기 때문에 별 의미가 없다. 따라서 우리는 회로에 전류가 흐를 때를 가정하고 x의 값, null space를 구해야 하는 것이다. 물론 영벡터도 null space에 존재하긴 하지만, A의 column이 dependent이기 때문에 영벡터 이외의 해가 존재한다. 어떻게 column이 dependent인지를 바로 알 수 있을까? 이유는 영벡터 이외의 해를 바로 찾을 수 있기 때문이다. 행렬 A를 보면 하나의 row에 -1과 1이 딱 한 번씩만 나온다(하나의 row가 하나의 edge를 나타내므로 당연히...). 이 말은 column 끼리 다 더하면 반드시 0이 된다는 소리이고, 결국 x1=1, x2=1, x3=1, x4=1이면 column끼리 그대로 더한 것과 같기 때문에 이것이 해가 된다. 

 

x가 1로만 이루어진 벡터라는 것은 결국 각 node의 potential이 constant하다는 것을 의미한다. 즉 각 node의 전압(potential)이 constant하다면, node들의 전위차(potential difference)는 0이 된다. 이것이 Ax=0인 null space의 해(solution)이다. 

Null space는 Ax=0의 해의 공간을 의미하므로 x는 해의 집합을 가질 것이고, 어떤 1차원의 line이 해가 된다. x에 상수 c를 곱한 것이 4차원 공간에서 [1, 1, 1, 1]을 지나는 line이고 결국 우리가 찾는 최종적인 null space는 4차원 공간상에 존재하는 1차원의 line이 되는 것이다. 이때의 null space의 기저(basis)는 x=[1, 1, 1, 1]이 된다. 

 

 

그렇다면 위의 그래프를 전자회로라고 가정했을 때, 식 (5)의 null space가 물리적으로 의미하는 것은 무엇일까? 위의 회로에서 각 노드들의 전압(potentials)은 오직 임의의 상수 c에 의해 동일하게 결정된다는 것이다. 즉 식 (5)의 null space에 의하면, 임의의 상수값 c를 설정하면(ex: c=1, 3, 56, etc...) 모든 노드의 전압이 한 번에 동일하게 설정된다는 말이다. 이것이 의미하는 것은 각 노드들간에 전위차(potential differences)가 없다는 것이다. 전자 회로에서 전위차는 전류의 흐름을 만들어낸다. 그러나 전위차가 없다면 어떠한 전류의 흐름도 일어나지 않는다. 결국 위의 그래프 모델에서는 모든 노드들의 전압을 올리거나 내릴 수 있는 단 하나의 파라미터(parameter)만이 존재하는 것이다. 

 

이러한 경우에 우리는 전위차를 만들어주기 위해 node들 중 하나를 ground로 설정하고 나머지를 풀 수 있다. 이를 테면 x4=0으로 만든다음 나머지 x1, x2, x3를 푸는 것이다. 이렇게 하면 Incidence matrix A의 col4는 신경쓰지 않아도 된다. 나머지 column을 가지고 해(solution)를 구하면 된다. 

 

 

 

node들 중 하나를 0으로 설정한다는 것은 전압(potential)을 0으로 만든다는 것이고 다른 node들의 기준 전압(base voltage)이 된다는 것이다. 이제 나머지 3개의 node에 대한 전압값에 대해서 해를 구하면 된다. 지금 예에서는 x4=0로 설정했지만(ground), x1=0, 혹은 x3=0처럼 어떤 node를 ground로 만들어도 상관 없다. 이 행위가 결국 전위차(potential difference)를 만들게 되고 전류의 흐름을 만든다.  

 

이와 같이 하나의 node를 ground로 만들고 나머지 3개의 node를 이용해 해를 구하는 것은 Incidence matrix의 rank가 3이기 때문이다. 우리는 앞서 식 (5)와 같이 그래프 행렬 A의 null space를 구했고, null space의 차원(dimension)이 1임을 알았다. Lecture 10에서 배웠듯이 null space의 차원은 dim N(A)=n-r이다. 여기서 n=4이고 r은 가우스 소거를 통해 pivot을 살펴보면 알 수는 있지만 아직은 모르는 상태다. 그러나 소거를 하지 않아도 n-r = 4-r=1으로부터 r=3임을 알 수 있다. 따라서 A의 column space(or row space)의 차원(dimension)은 3이고 결국 col1, col2, col3가 독립(independent)이라는 뜻이다. x1이나 x2, x3를 ground로 설정해도 마찬가지이다. 

 

정리하자면 위에서 정의했던 전자회로 그래프 모델에서 A의 4개의 변수(node의 전압(potential)을 의미)중 어떤것이던 처음 3개는 독립(independent)이며 유의미하다(pivot variable을 의미). 그러나 마지막 4번 째 변수는 그렇지 못하기 때문에(free variable처럼..) 보통 이 독립인 변수를 제외한 마지막 변수를 0으로 설정하고 나머지 변수에 대해서 해를 계산한다. 

 

 

- Kirchoff's current law and null space of A transpose:

 

이번에는 A의 transpose의 null space를 구해보자. 응용수학에서는 A의 transpose의 null space를 계산하는 경우가 의미 있을 때가 많다. $N(A^T)$는 우리가 잘 알고 있는 키르히호프의 전류 법칙(Kirchhoff's current law)과 관련이 있다. 우선 아래와 같이 식을 써보자. 

 

 

먼저 위의 Left null space의 차원(dimension)에 대해 알아보자. Left null space의 차원인 $\text{dim} \; N(A^T)$을 알기위해선 행렬에 대한 3가지 성분을 알아야한다. 바로 row와 column의 수인 m과 n, 그리고 rank이다. Lecture 10에서 배웠듯이 Left null space의 차원은 m-r이다. 여기서 m=5이고 r=3이다. A transpose에서는 m은 여전히 5이지만 column의 수를 나타낸다. 어쨋든 계산하면 m-r=5-3=2가 Left null space의 차원이 된다. 사실 m-r=2라는 것은 A transpose 행렬에서 소거를 했을 때 free column으로 나타나는 부분들이다. free column이 2개이고 이것이 결국 Left null space의 차원이 되는 것이다. Left null space의 차원은 2차원이다. 

 

 

차원을 알았으니 그 다음에 찾아야 할 것은 Left null space의 기저(basis)이다. 기저를 구하기전에 먼저 식 (8)이 의미하는 것이 정확히 무엇인지, 어떤 것을 표현하고 있는지를 먼저 이해해보자. 본 전자회로에 대한 그래프 모델에 대한 관계는 아래 그림과 같다. 

 

 

그래프 모델과 선형대수의 부분 공간과의 관계도

 

 

우리는 가장 먼저 그래프를 그렸고 미지수 x=[x1, x2, x3, x4]를 정의했다. 이 x가 나타내는 것은 각 node에서의 potential을 나타낸다. 그 다음 그래프의 node사이의 연결 관계를 식(1)과 같이 Incidence matrix로 정의하였다. 미지수 x에 Incidence matrix A를 곱해줬을 때, 우리는 식 (4)와 같은 방정식을 얻을 수 있고 이것이 의미하는 것은 node들 간의 전위차(potential difference)이다. Incidence matrix A를 곱해서 node들의 전압(potential)에서 node들 간의 전위차(potential difference)에 대한 방정식 Ax=0을 만들어낸 것이다. 

 

그 다음으로 정의한 것은 y=[y1, y2, y3, y4, y5]이다. y는 회로에 흐르는, 즉 그래프에서 edge에 흐르는 전류(current)를 나타낸다. 어떤 행렬 C가 있다고 했을 때, 이 C행렬이 전위차와 전류 사이를 연결시켜주는 행렬이라고 하자. C를 통해 전위차에서 전류로 연결되는 관계를 우리가 잘 아는 옴의 법칙(Ohm's law)으로 생각할 수 있다. edge에 흐르는 전류는 전위차(potential difference)가 클 수록 커지는데, 이때 edge 자체가 가지고 있는 저항이 전류의 양에 영향을 준다. 저항이 크면 edge에 흐르는 전류의 양도 작아지고, 저항이 작으면, 즉 전도율(conductance)이 높아지면 전류의 양도 커지는 것이다. 옴의 법칙은 결국 얼마나 많은 영의 전류가 흐르는지에 대한 관계를 설명해 주는 것이다. 이러한 전위차와 전류의 관계를 우리는 C행렬을 통해 연결시킬 수 있다. 

 

마지막 단계는 A의 transpose의 null space, 즉 Left null space를 구하는 것이다. 이 Left null space가 의미하는 것이 바로 우리가 잘 알고 있는 법칙인 키르히호프의 전류 법칙(Kirchhoff's current law)이다. 

 

이렇게 전체 그림을 보니 뭔가 떠오르는 것이 있을 것이다. 바로 Lecture 10에서 배웠던 4개의 주요 부분 공간(four fundamental subspaces)이 보일 것이다. 4개의 주요 부분 공간이 우리가 지금껏 전자회로의 그래프 모델에서 찾고자 하는 것과 정확히 일치한다. 즉 어떤 실제 응용문제에 대한 사각 행렬을 정의했을 때, 우리가 찾고자 하는 구조나 관계가 A와 A transpose를 통해 설명되어진다. 4개의 주요 부분 공간을 잘 이해하는 것이 굉장이 중요하다. 

 

 

이제 A transpose의 null space인 Left null space를 구해보자. 앞서 언급했듯이 이 응용문제에서 left null space가 의미하는 것은 키르히호프의 전류 법칙이라고 했다. 이를 다시 상기시켜보면 "전자(전기)회로에서 어떤 분기점을 기준으로 들어온 전류의 양과 나간 전류의 양은 같다" 이다. 이것이 Left null space의 식과 어떻게 연관되는지 살펴보자. 비교해보기 좋기 위해 그래프와 식을 다시 써보자. 

 

 

 

 

식 (10)의 화살표 부분의 row1을 보자. -y1-y3-y4=0이다. 음의 부호(-)는 node에서 전류가 흘러나가는 것을 의미한다. 즉 node1에서 전류가 다른 곳으로 나가는 edge1, edge3, edge4를 각각 의미한다. row1이 의미하는 것은 node1에서 흘러나간 전류의 총 합은 0이다. 이 말은 물리학에서 알짜힘(net force)과도 같은 말인데, 정지하고 있는 물체가 계속 정지할 수 있는 것은 물체에 작용하는 알짜힘이 0이기 때문이다. 즉 물체에 작용하는 다양한 힘 벡터의 크기가 물체에 작용하는 것이 0이기 때문에 물체가 계속 정지해 있는 것이다. 마찬가지로 node1에 흐르는 알짜 전류(net current)가 0이라는 뜻이다. 쉽게 말하면 "들어온만큼 나간다"이다. 만약 node1이 커패시터라고 했을 때, 알짜 전류가 0이 아니라면, 예를 들어 들어온 전류보다 덜 나간다면 커패시터는 터지고 말 것이다. 그러나 회로에는 들어온만큼 나가는 법칙이 존재하기 때문에 커패시터가 터지지 않고 잘 작동하는 것이다. 전류는 node에 쌓이지않고 계속 흘러서 돌아다닌다. (물론 커패시터는 충/방전을 통해 잠시 쌓이긴 하지만 말이다..)

 

row2를 보면 y1-y2=0인데, y2를 이항하면 y1=y2이다. 즉 node2에 흘러들어온 전류 y1과 node2에서 흘러나가는 전류 y2는 같다. 

row3는 y2+y3-y5=0인데, 역시 이항하면 y2+y3=y5이다. node3로 흘러들어오는 전류y2와 y3의 합은 node3에서 흘러나가는 전류 y5와 같다. 

마지막 row4를 보면 node4로 흘러들어가는 y4와 y5의 총 합이 0이다. 이렇듯 Left null space의 식 (10)은 "들어온만큼 나간다"는 키르히호프의 전류의 법칙을 잘 설명해주고 있다. 이것은 결국 평형방정식(balance equation)이다. 

 

 

이제 Left null space의 해(solution)를 구해보자. 어떻게 구할 수 있을까? 물론 지난 강의에서 배운대로 소거(elimination)를 통해 row reduced echelon form을 만들고 pivot과 free variable을 구하면 special solution을 구할 수 있고 결국 null space를 계산할 수는 있을 것이다(Lecture 7참고). 그러나 이런 실제 예제에서 우리는 소거를 하지 않고도 null space의 해를 구할 수 있다. 키르히호프의 전류 법칙을 잘 이해하면 Left null space의 기저(basis)를 어렵지 않게 구할 수 있다. 바로 Loop 단위로 node들 사이에 edge로 표현된 전류의 흐름을 따져서 기저를 구하는 방법이다. 

 

우선 Left null space의 차원은 식 (9)에 따라 2이다. 따라서 기저는 두 개의 special solution이어야 한다. 

먼저 node1, node2, node3에 걸쳐 형성된 Loop1을 보자. 방향은 처음에 정하기 나름이므로 y1을 1로 정하자. 그 다음 y2는 1일까? -1일까? y2=1이어야 한다. 왜냐하면 node1에서 출발한 전류가 node2를 거쳐 node3로 흘러가는 것이기 때문이다. 또는 식 (10)의 row2에 의해 y1=y2 이기때문에 1로 설정해야 한다. 

y3는? -1이다. 왜일까? Loop1에서 보자면 node1에서는 1만큼의 전류가 흘러나갔다. 키르히호프의 전류법칙에 따르면 전류가 나간 만큼 들어와야 하기 때문에 y3로는 전류가 들어와야 한다. 또한 우리는 현재 node3에 와 있다. 그런데 y3는 node3 입장에서 들어오는 전류이다. 지금까지 node 입장에서 나가는 전류를 1로 설정했기 때문에 y3는 -1로 설정해야 한다. loop1을 기준으로 기저를 찾고 있기 때문에 y4와 y5는 0으로 만들어준다. 이렇게 해서 첫 번재 special solution인 Left null space는 y=[1, 1, -1, 0, 0] 이다. 식 (10)의 row1, 2, 3, 4를 통해 검산해보면 special solution이 맞는지 확인할 수 있다. 

 

두 번째 special solution은 loop2를 기준으로 구해보자. 이번엔 y3=1, y5=1, y4=-1이고 나머지는 y1=0, y2=0이다. 따라서 y=[0, 0, 1, -1, 1]이다. 역시 식 (10)을 통해 검산해보도록 하자. Left null space의 기저(basis)는 아래와 같다. 

 

 

 

그런데 loop1과 loop2말고 node1, node2, node3, node4에 이르는 큰 loop가 기저가 될 수 있지 않을까? 하는 생각을 할 수도 있다. 우선 해를 구해보자. y1=1, y2=1, y5=1와 같이 설정하고 y3=0이다. 마지막으로 y4=-1로 설정하면 아래와 같은 큰 loop에 대한 left null space의 해가 구해진다. 

 

 

그렇다면 (12)에 있는 해를 세 번째 기저로 쓸 순 없을까? 그럴 수 없다. (11)의 두 special solution을 더하면 (12)가 된다. 즉 dependent한 해이기 때문에 사용할 수 없다. 

 

이렇게 해서 A의 Left null space의 해를 구하였다. 비록 소거(elimination)를 이용하여 해를 구하진 않았지만 키르히호프의 전류 법칙(Kirchhoff's Current Law)을 이해하고 이를 이용하여 해를 구할 수 있었다. 

 

 

- Graph without a loop: TREE

 

A transpose의 column space인 row space를 한 번 살펴보자. 앞서 row space의 차원은 rank=3임을 알았다. 차원, 즉 rank=3이라는 것은 A transpose를 소거하여 row reduced echelon form을 만들었을 때 pivot column이 3개이고 free column이 2개라는 소리다. 그렇다면 처음 3개의 col1, col2, col3가 pivot column일까? 그렇지않다. 왜냐하면 col1+col2=col3이기 때문이다. 즉 처음 세 개의 column은 독립(independent)이 아니다. 이들은 loop(col1=edge1, col2=edge2, col3=edge3)에서 왔기 때문이다. 따라서 pivot column은 col1, col2, col4이다

 

 

 

 

서로 독립(independent)인 이들 pivot column에 해당되는 edge들만 초록색 line으로 굵게 표시하였다. 독립인 column에 대한 edge들만 연결하니 원래 있던 loop가 없어졌다. 이렇게 loop가 없는 형태의 그래프를 우리는 TREE라 한다. 원래 그래프가 가지고 있던 모든 종속(dependency)성질은 loop로부터 왔다. 그러나 loop가 없어졌기 때문에 독립인 그래프인 TREE가 된 것이다.

 

 

 

3. 마치며

 

모든 그래프들에 대해서 node와 edge, 그리고 loop의 관계에 대해서 하나의 식으로 정리하자면 다음과 같다. 

 

 

어떤 그래프에서 loop의 개수는 edge의 개수에서 node의 개수-1과 같다. 여기서 nodes-1은 rank를 의미하는데, 그래프의 Incidence matrix에서 항상 rank=n-1이기 때문이다. n은 column의 개수이고 1개의 column은 종속이므로 1을 빼주면 rank(=dimension)가 된다. 

edge의 수는 Incidence matrix에서 row의 수와 같다. 즉 #edge=m이다. 결국 이 식이 의미하는 것은 어떤 그래프에서 독립적인 loop의 개수는 그래프의 Incidence matrix의 left null space와 같다. 사실 이 공식을 약간 다르게 쓰면 오일러의 공식(Euler's Formula)이 된다. 

 

 

이 오일러의 공식은 어떠한 그래프에도 적용되는 위상기하학(topology)의 하나의 사실이다이다. 우리가 예를 들었던 그래프에 적용하여 확인해보면 4-5+2=1임을 확인할 수 있다. 어떠한 그래프를 그려서 확인해도 마찬가지이다. 이는 그래프의 node와 edge, 그리고 loop에 대한 관계를 이해함에 있어 유용하게 사용될 수 있는 공식이다. 

 

 

마지막으로 위에서 살펴봤던 그래프 모델과 선형대수의 부분 공간과의 관계도에 대한 그림을 다시 보자. 

 

 

 

최초에 각 node에서의 potential을 x로 정의하고 여기에 Incidence Matrix A를 곱해 potential difference를 만들었다. 이것을 e라고 하자. e=Ax

그 다음 potential difference에 C를 곱해 current y와의 관계를 정의했다. y=Ce

마지막으로 A의 transpose를 y에 곱하여 키르히호프의 전류 법칙을 정의했다. 이를 정리하면 아래와 같다. 

 

 

사실 이 과정이 어떤 공식으로 부터 나온 것들은 아니다. 전자 회로를 그래프 모델로 정의한 후 선형 대수 이론을 적용하여 키르히호프 법칙까지 유도해낸 과정이다. 이 과정에서 지난 시간에 배운 네 개의 주요 부분 공간에 대한 이론이 적용되었다. 어떤 실제 문제에 선형 대수 등의 수학 이론을 적용하는 응용 수학의 전반적인 과정이라고 보면 된다. 

 

사실 이 과정에 실제 전자 회로처럼 여러 branch(배터리, 저항 등)들을 추가할 수 있다. 배터리를 추가한다면 위의 과정에서 실제 potential difference가 생겨날 것이고, 마지막에 가서는 키르히호프 법칙에 대해서 0이 아닌 어떤 전류값 f가 우변에 위치할 것이다. 즉

 

 

 

위의 (16)과 (17)에 있는 식을 한 번에 써보자. 

 

 

이것이 어떤 실제 문제에 수학을 적용할 때 사용되는 응용 수학의 기본 공식이다. 마지막 식 (18)이 의미하는 것은 결국 평형방정식(balance equation)에 대한 내용이다. 

 

 

사실 강의에서 대략적인 내용은 이해했지만 마지막 부분을 완벽하게 이해하기는 조금 어렵다. 아무래도 물리학에 대한 공부를 좀 더 하면 이해가 될까 싶은데, 일단 이러한 것이 있다 정도만 알아두도록 하자. 자세한 내용이 궁금하신 분은 아래 링크에서 확인하시면 됩니다. 

Lecture 12 MIT Linear Algebra

 

전자회로에 대한 깊이 있는 이해가 없어서 고생을 많이 했네요 ㅠㅠ 이상으로 포스팅을 마칩니다. 

 

지난 강의(Lecture 8, and etc...)에서 우리는 Rank에 대해서 배웠다. Rank라는 것은 어떤 행렬을 소거했을 때 만들어지는 pivot의 개수를 의미하며, 행렬이 표현할 수 있는 차원(dimension)을 의미하기도 한다. 또한 rank는 m by n 크기의 행렬에서 반드시 m보다 작거나 같고, n보다 작거나 같다. Rank는 행렬을 설명하는데에 있어서 굉장히 중요한 숫자이다. 

 

이번 강의에서는 이러한 rank와 관려하여 rank가 1인 행렬에대해 공부해보도록 하겠다. 

 

 

1. Rank 1 행렬(rank 1 matrices)

 

Rank가 1인 행렬을 하나 예를 들어보자. 아래의 행렬 A는 rank가 1인 행렬이다. 

 

 

row1이 [1 4 5]이고, row2가 row1의 두 배인 [2 8 10]이다. 이렇게 되면 row1과 row2는 서로 종속(dependent)이며 같은 선상에 위치한다. col1, col2, col3도 마찬가지이다. col2와 col3는 col1에 상수 4, 5를 곱한 것과 같기 때문에 col1과 일직선상에 위치해있다. 따라서 rank 1인 행렬이 표현할 수 있는 공간은 1차원이며 직선이다. (이전에 배운 내용을 토대로 직접 row echelon form을 만들어보자)

 

A의 row space의 기저(basis)는 무엇일까? 오직 row1이다. column space의 기저 역시 col1이다. 따라서 A의 row space와 column space의 차원(dimension)은 1로 같다. 

 

 

 

여기서 재밌는 사실 한 가지를 배워보자. 식 (2)에서 A의 column space와 row space의 기저를 각각 나열하였다. 이 기저들의 곱으로 원래의 rank 1 행렬 A를 만들어낼 수 있다. 아래 식은 굉장히 중요하다. 잘 살펴 보자. 

 

 

column space의 기저와 row space의 기저 순으로 곱하였더니 원래의 rank 1행렬 A가 만들어졌다. 여기서 중요한 포인트는 어떤 column vector와 어떤 row vector를 column x row순으로 곱하면 반드시 rank 1행렬 A가 만들어진다는 것이다. 

 

식 (3)에서 u는 column vector 이고 v도 역시 column vector이지만 전치(transpose)를 시켜서 row vector로 만든 것이다. 이것이 rank 1행렬의 큰 그림이다. 이후에 행렬식(determinant)이나 고유값(eigenvalue)등도 알아보겠지만, rank 1행렬은 벽돌 건물로 치자면 집짓기블록(building block)과 같은 것이다. 즉 모든 행렬에 있어서 가장 작은 기본 단위의 요소와 같다는 것이다. 빌딩 블록이란 말을 들으니 왠지 이러한 생각을 할 수도 있겠다. 

 

만약 어떤 임의의 크기의 행렬, 예를 들면 5 x 14크기의 행렬을 얻었다고 했을 때, 이 행렬의 rank가 4라면 4개의 rank 1 행렬의 조합으로 이를 표현할 수 있다. 즉 원래의 행렬을 5 x 14크기의 A라고 했을 때, A의 rank는 4이기 때문에 5 x 14크기의 rank 1행렬 4개의 조합으로 A를 표현할 수 있는 것이다. 이렇게 원래의 행렬을 rank 1행렬들로 분해하여 표현할 수 있기때문에 rank 1행렬들을 building block이라 표현하는 것이다. 

 

 

 

 

2. Rank 1행렬에 대한 부분 공간(subspaces for rank 1 matrices)

 

Section 1에서 예를 들었던 5 x 14크기의 행렬 A를 다시 생각해보자. 이번에 살펴볼것은 이 행렬 A의 부분 공간이다. 5 x 14크기의 rank 4인 행렬 A는 부분 공간을 가지는가? 5 x 14크기의 모든 행렬을 M이라고 가정해보자. 

 

 

전체집합 M중에서 rank가 4인 행렬들을 생각해봤을 때, 이들은 M의 부분 집합일까? 정답은 부분 공간이 아니다

M과 같은 크기(5 x 14)를 가지며 rank가 4인 행렬들을 더했을 때, 이들은 rank가 4가 안될 수 있다. 부분 공간이 되려면 스칼라곱(scalar multiplication)과 행렬 끼리의 덧셈 연산에 닫혀있어야(closed) 하며 영벡터를 포함해야한다

 

이 말은 어떤 rank 4 행렬 U와 또 다른 rank 4행렬 K를 선형 조합(Linear combination)연산을 했을 때 그 결과가 같은 공간에 있지 않을 수 있다는 말이다. 예를 한 번 들어보자. 아래의 3x3 크기의 행렬 A와 B를 보자. 

 

 

A와 B행렬의 rank는 각각 2다. 그러나 A+B의 rank는 3이 되어 원래의 rank2의 차원에서 벗어나게 되는 것이다. 3x3행렬로 예를 들었지만 5x14크기의 행렬도 마찬가지이다. 따라서 부분 공간이 아니다. 

 

 

- In R4 cases:

 

4차원 공간인 R4의 경우를 생각해보자. R4 공간상의 모든 벡터는 아래와 같이 4개의 component를 가지는 벡터로 표현할 수 있다. 

 

 

이때 R4의 부분 공간을 식(7)과 연관지어 다음과 같이 정의해보자.

 

 

식 (8)의 S는 R4의 부분 공간이다. 스칼라곱(scalar multiplication)과 덧셈 연산(addition)에 닫혀(closed)있기 때문이다. 즉 벡터 v에 어떤 상수를 곱해도 0이 되고, 혹은 같은 공간에 존재하는 vw에 임의의 상수를 곱하여 더해도 여전히 같은 공간에 존재한다. 잘 이해가 가지 않을 수도 있는데, 다시 말하면 이때의 v는 어떤 행렬 A의 null space이다. 처음부터 R4의 예를 들었지만 시각적으로 보여주기 편하게 하기 위해 같은 내용을 일단 R2의 경우로 예를 들어보자.

 

 

식 (9)는 2차원 공간인 R2에서의 예를 든 것이다. v, w, z의 각 벡터의 원소들의 합은 0이다. 이들을 좌표평면위에 표현한다면 어떤 그림이 나올까? 아래와 같을 것이다. 

 

 

 

R2의 경우에서 각 벡터들의 원소들의 합이 0인 경우를 그래프로 표현한 것이다. v, w, z의 벡터들이 하나의 라인을 형성하는 것을 볼 수 있다. 이 벡터들이 이와 같이 하나의 라인을 형성하는 것은 이들이 행렬 A=[1 1]의 null space이기 때문이다. 즉 위 그림의 v, w, z는 A=[1 1]행렬의 null space의 해(solution)인 것이다. 이때의 A는 rank 1인 행렬이고 따라서 1차원 행렬이다. 주요 부분공간에 대한 차원과 기저(basis)는 다음과 같다. 

 

차원(dimension) in R2

  • row space:      r=1
  • null space:      n-r = 2-1 = 1
  • column space: r=1
  • left null space: m-r = 1-1 = 0
 

기저(basis) in R2

  • row space:      [1 1]
  • null space:      [1 -1], [-1 1], ...
  • column space: R1
  • left null space: [0], empty

 

위의 R2의 경우를 잘 이해한 뒤 다시 R4의 경우를 보자. R4의 경우도 마찬가지다. 식 (7)과 (8)에서 얘기하는 벡터들은 R4에서 어떤 행렬 A의 null space이고 그 A는 아래와 같다. R2의 경우와 유사하다. 

 

 

이를 통해 우리는 R2에서와 같이 R4에서의 rank 1인 행렬과 Ax=0의 null space를 연결시킬 수 있다. R4일때의 차원은 rank와 밀접한 관련이 있다. row space와 column space는 rank의 수인 1과 같고, null space와 left null space의 경우엔 각각 n-r, m-r과 같다. (※lecture 10참고)

 

기저는 어떨까? 일단 row space의 기저는 첫 번째 row인 [1 1 1 1]그대로이다. 이제 null space의 기저를 알아보자. 무수히 많은 null space에 대한 기저가 존재하겠지만 lecture 7에서 다뤘던 special solution을 구할 수 있다. 간단히 말하자면 행렬의 소거 과정에서 드러나는 free variable을 각각 1과 0으로 설정해가며 나머지 해를 구하는 방법이다. (자세한 사항은 lecture 7참고). R4에서 null space의 special solution은 아래와 같다. 

 

 

식 (11)에서 pivot을 제외한 나머지 column의 component들이 free variable이다. 이 free variable들을 하나씩 1로 설정하고 나머지 component들을 0으로 설정한 뒤, Ax=0에 대해서 풀면 null space의 special solution을 구할 수 있다. 

 

column space의 기저는 어떨까? 그저 R1이다. [1] [1] [1] [1]의 선형 조합으로 정의되는데, 어떤 상수들을 곱하고 이들을 더해도 단지 상수값이 나올뿐이다. 즉 c1[1]+c2[1]+c3[1]+c4[1]=c 결국 R1의 값으로 정의할 수 있다. 

마지막으로 Left null space의 경우엔 어떨까? A의 전치 행렬에 대한 null space이므로 그 형태는 아래와 같을 것이다. 

 

 

 

위의 식 (12)를 만족시키는 x는 0밖에 없다. 따라서 Left null space는 0밖에 존재하지않는 0차원의 공간이다. 지금까지의 내용을 정리해보면 아래와 같다. 

 

 

차원(dimension) in R4

  • row space:      r=1
  • null space:      n-r = 4-1 = 3
  • column space: r=1
  • left null space: m-r = 1-1 = 0
 

기저(basis) in R4

  • row space:      [1 1 1 1]
  • null space:      [-1 1 0 0], [-1 0 1 0], [-1 0 0 1]...
  • column space: R1
  • left null space: [0], empty

 

결론적으로 R4에서의 주요 부분공간들의 차원을 살펴보면 row space의 차원은 rank 인 1이고 null space의 차원은 column의 수 n에서 rank를 뺀 n-r=3이 된다. 따라서 row space와 null space의 차원의 합은 1+3=4이다. 

 

column space의 차원도 역시 rank인 1이고, left null space의 경우엔 row의 수 m에서 rank를 뺀 m-r=1-1=0이다. 따라서 column space와 left null space의 차원의 합은 1+0=1이다. 이렇게 부분 공간의 각 차원들은 결과적으로 원래의 행렬 A의 차원을 나타낸다. 

 

 

 

 

3. 마치며

 

이번 포스팅에서는 Rank 1행렬과 이와 관련된 부분 공간들에 대해서 알아보았다. Rank 1은 모든 행렬들의 기본적인 행렬 단위가 되는, 즉 building block이라 할 수 있으며 이후 행렬식(determinant), 고유값(eigenvalue)등을 배울 때 이해해야 하는 부분이다. 또한 중요한 사실 중 하나인 column x row를 할 경우 항상 rank 1행렬이 만들어진다는 것을 배웠다. 

 

우리는 또한 Rank 1행렬에 대한 부분 공간들에 대해서 공부하였다. Rank 1행렬에 대한 각 부분 공간들인 row space, column space, null space, left null space들에 대하여 알아보고 각 공간들에 대한 차원과 기저에 대해서도 알아보았다. 또한 이들의 차원이 원래의 행렬 A의 크기와 어떠한 관계를 갖는가를 알아보았다. 

 

+ Recent posts