우리가 배운 개념이 어디서 어떻게 쓰이는지 알아보자
선형 대수는 벡터 공간, 벡터, 선형 변환, 행렬, 연립 선형 방정식 등을 연구하는 대수학의 한 분야이다. 공학 쪽에서는 정말 빼놓을 수가 없는 수학이다. 공학에서는 계산을 많이 하게 되는데, 이때 행렬을 이용하면 계산이 매우 편리해지기 때문이다. 특히, 그래픽스를 전공하게 된다면 선형 대수 없이는 아무것도 할 수 없을 것이다. 평행 이동, 회전, 확대 축소를 비롯한 기본 변환뿐만 아니라 쉬어 변환 등의 계산을 할 때 행렬이 쓰이기 때문이다. 이제 학부의 기초 강의 수준에서 등장하는 개념들을 위주로 알아보도록 하겠다.
연립 일차 방정식의 해를 구하는 것이 얼마나 다양한 문제에서 쓰이고 있는가에 대해서는 굳이 설명할 필요가 없을 것이다. 고교 과정에서는 변수 두 세 개 정도까지만 나타났지만, 더 어려운 문제에서는 변수가 훨씬 더 많이 늘어날 수 있으며 이것을 사람이 직접 풀기란 굉장히 고통스러운 일이다. 그렇다면 연립 일차 방정식을 컴퓨터로 풀기 위해서는 어떻게 해야 하는가? 변수에 값 하나하나 넣어보면서 푸는 것은 말이 안 된다는 것을 직관적으로 알 수 있다.
우리는 이미 답을 알고 있다. 고등학교 수학 과정에서도 등장하는 개념인데, 선형성과 행렬의 관계로부터 연립 일차 방정식을 계수 행렬과 미지수 벡터의 곱으로 표현할 수 있다. 즉, 행렬은 연립 일차 방정식 풀이를 위한 도구로 쓰일 수 있다. 고등학생 때 연립 일차 방정식을 풀기 위해 소거법을 써본 경험이 있을 것이다. 소거법과 비슷한 방식을 행렬에 적용할 수 있는 알고리즘으로 가우스 소거법을 쓴다. 가우스 소거법으로 미지수를 하나씩 소거해나가다 보면 해를 찾을 수 있게 된다. 가우스 소거법은 연립 일차 방정식 풀이뿐만 아니라 정사각행렬의 역행렬 계산에도 쓰일 수 있다.
그런데 가우스 소거법은 문제가 있다. 가우스 소거법 알고리즘은 전진 소거와 후진 대입 두 단계로 나뉘는데, 전진 소거 단계에서 너무 계산이 많이 필요하다는 단점이 있다. 이 단점을 해결하기 위한 또 다른 방법이 바로 LU 분해법이다. 이 강의 자료에 의하면 계산 시간이 많이 필용한 행렬의 소거를 우변 항의 조작과 분리함으로써 계산 효율을 올리는 것이라고 설명하고 있다.
선형 대수에서 언제나 빠지지 않고 등장하는 역행렬이다. 역행렬은 대체 왜 필요한 것인가? 그냥 봐서는 행렬을 단위행렬로 만들고 싶을 때 쓰이는 것으로밖에 보이지 않는다. 일단 위의 연립 일차 방정식에 연계하여 말하자면 역행렬을 구하여 우변 항에 곱하면 미지수 벡터가 계산된다는 것을 알 수 있다. 하지만 역행렬을 계산하는 것보다 그냥 LU 분해를 통해 해를 찾는 것이 더 빠르므로 이 예는 적절하지가 않다. 역행렬은 단위행렬을 만들기 위해 쓰이기보다는 역행렬을 이용하여 다른 문제를 풀기 위해 쓰이는 것으로 생각하는 것이 좀 더 필요성 차원에서 이해하기 쉬운 것 같다.
먼저 연립 방정식의 자명하지 않은 해가 존재하기 위한 필요충분조건으로 역행렬이 존재해야 한다는 것을 들 수 있다. 만약 해를 구하는 게 아니라 해가 존재하는지만 알고 싶다면 역행렬이 존재하는지 확인해보면 되며, 이를 쉽게 해주는 것이 행렬식이다. 왜냐하면, 행렬식의 결과값이 0인지 여부는 역행렬의 존재 여부와 또다시 필요충분조건이기 때문이다. 행렬식의 결과값은 선형 변환의 스케일 값이기도 하다. 좀 더 자세한 내용은 다음 내용을 참고. 또한, 고윳값, 고유 벡터 계산에도 역행렬 계산이 필요하다. 고윳값과 고유 벡터의 의미는 나중의 항목에서 좀 더 자세히 설명하겠다.
고등학교 수학 문제를 기억해보면 2차원 회전 행렬을 응용한 문제가 기억날 것이다. 선형 변환은 실제로 매우 유용하다. 컴퓨터를 통해서 보여주는 모든 것은 그래픽스가 쓰이는데, 선형 변환은 그래픽스 분야의 꽃이기 때문이다. 예를 들어, (100, 200, 300) 위치에 존재하는 주전자 모델을 X 축을 기준으로 45도 회전하여 보여주고 싶다면 어떡해야 할까? 정답은 주전자 모델의 위치 벡터에 45도 회전 선형 변환 행렬을 곱한 결과를 변경된 위치로 보여주면 된다. 평행 이동도, 스케일 변환도 선형 변환이다. 사각형을 대각선 방향으로 쭉 잡아 늘인 결과로 보여주려면 쉬어 변환을 적용하면 된다.
흔히 아는 평행 이동, 회전, 스케일 변환 말고 투영 변환이라는 것도 있다. 영화 속에서 카메라가 이동함에 따라 프레임 내 모든 세상이 이동하는 것처럼 보이는데, 이는 사실 카메라의 위치에 따른 원근 투영 변환을 적용한 결과와 같다. 모든 물체에 대해 선형 변환을 적용하기보다 투영 변환을 미리 적용해둔 뒤 각 물체의 위치를 곱하면 카메라에 대한 상대적 위치로 변환되는 것이다. 원근 투영 변환은 원근감이 적용되는 변환이며, 직교 투영 변환을 이용하는 경우 원근감을 제거할 수 있다. 여기서 투영 변환은 다른 항목에서의 투영 변환과 달리 사영 기하학에서의 투영 변환인데, 이 둘은 다른 내용인 것으로 알아두는 것이 혼란을 막기에 좋다고 생각한다.
벡터 공간과 부분 공간을 인지하고 나면 선형 시스템에 대해서 이해하는 데 도움이 된다. 벡터들을 선형 결합하여 계산될 수 있는 벡터의 모음을 하나의 공간으로 생각할 수 있다. 대표적인 예가 바로 표준 기저인 (1, 0, 0), (0, 1, 0), (0, 0, 1) 벡터의 선형 결합으로 만들어지는 3차원 공간이다. x * (1, 0, 0) + y * (0, 1, 0) + z * (0, 0, 1)으로 3차원상의 모든 벡터를 표현할 수 있다. 이를 열 공간으로 나타내면 3차원 단위행렬로 표현할 수 있다.
벡터 공간과 부분 공간은 그 유명한 최소자승법의 기반이다. 최소자승법까지 이 항목에서 모두 설명하기엔 내용이 많으므로 다음 항목에서 이어서 설명하겠다. 그 외에도 선형 시스템은 미분 방정식 등 다양한 학문과 연관되는데 코딩과 연결지으려는 글의 목적에서 다소 벗어나므로 다른 학문에 연결되는 부분에 대해서는 더 다루지 않으려고 한다.
지금까지 이야기한 선형 시스템은 Determined system이었다. Determined system은 미지수와 방정식의 개수가 같고 정확한 해가 존재할 수 있는 시스템이다. 그런데 만약 방정식이 미지수보다 더 많거나 적은 상황이 된다면? 방정식이 더 적다면(Underdetermined system) 해가 무수히 많이 존재하고 방정식이 더 많다면(Overdetermined system) 일반적으로 해가 존재하지 않는다. 우리는 Overdetermined system에서도 해를 구하고 싶다. 정답을 찾을 수 없다면 정답에 가장 가까운 것이라도 찾아야 하지 않겠는가?
Overdetermined system에서 해가 존재하는 경우는 벡터 공간과 부분 공간에서 언급되는 열 공간과 연관된다. `Ax = b`의 식에서 b가 A 행렬의 열 공간에 포함되는 경우 정확한 해가 존재하는 것이다. 하지만 그렇지 않은 경우엔 위에서 말했듯이 가장 근사한 해(best solution, x hat)라도 구하고 싶다. 이를 위해 벡터 b를 열 공간에 투영한 뒤, 그 상태에서의 해를 찾으면 가장 근사한 해를 찾을 수 있게 된다. 벡터 b를 투영한 곳이 선형 시스템에서 가장 가까운 곳일 테니 그곳에 투영시킨 뒤의 해 또한 정확한 해에 가장 가까운 해가 되는 것이다.
이 방식을 활용한 것이 바로 최소자승법(Least square method)이다. 각 데이터를 하나의 벡터로 생각하고, 그 벡터들을 열 공간으로 보는 Overdetermined system을 만든 뒤, 그 시스템상에서 가장 근사한 해를 찾는 것이다. 이렇게 하면 오차(에러)의 합이 최소가 되는 가장 근사한 해를 구할 수 있다.
쉬운 말로 풀어쓰려다 보니 모호한 표현이 많은데, 따로 자세히 찾아보는 것을 권하고 싶다.
앞서 선형 변환에 대해 말하면서 행렬을 변환 도구로써 볼 수 있다고 하였다. 벡터는 크기와 방향을 가진다. 선형 변환은 그럼 모든 벡터를 변환시켜버릴까? 선형 변환 후에도 방향이 그대로인 벡터는 존재하지 않는 걸까? 고유 벡터가 바로 그 답이다. 선형 변환 후에도 방향을 유지하는 벡터가 바로 고유 벡터이며, 고윳값은 고유 벡터의 크기가 변한 정도이다. 예를 들어 회전 행렬에 대해 고유 벡터를 구하면 회전축이 되는 벡터를 얻게 된다.
데이터 마이닝을 할 때 모델 정규화 및 데이터의 차원을 낮추는기법 중 주성분 분석(Principal Component Analysis)이라는 것이 있는데, 이 기법은 데이터를 낮은 차원으로 투영시켜나가는 방법으로 데이터의 손실을 최소화하면서 차원을 축소시킨다. 낮은 차원의 데이터로 변경하려는 이유는 가진 데이터의 개수에 비해 차원이 클 경우 잘못된 학습을 하게 될 수 있기 때문인데, PCA 방법은 분산을 최대화하는 벡터에 투영시킴으로써 실제 변수 간의 관계는 알 수 없으나 그 특성은 손실되지 않게 된다. 분산을 최대화하는 벡터가 바로 고유 벡터다.
좀 더 자세한 내용은다음 문서들을 참고:
고유 벡터(Eigenvectors), PCA, 공분산(Covariance) 및 엔트로피(Entropy)에 대한 기초 강의
이것으로 선형대수의 주요 내용 정리를 마친다. 어디까지나 핵심 내용 몇 가지만 추려낸 글이기 때문에 자세한 내용은 좀 더 찾아보는 것을 권하고 싶다. 선형대수는 특히 많은 분야에서 응용되는 기초 학문이기 때문에 인터넷에서 좋은 자료를 찾아보기 쉽다. 다음 편에서는 오토마타에 대해 다뤄보겠다.