3.행렬, 연립방정식의 필수 요소
728x90

지난 시간에는 좌표의 변환을 공부하였습니다. 특히, 바뀐 basis vector가 서로 orthogonal일 때, projection을 이용하면 좌표를 쉽게 바꿀 수 있죠. 이번 포스팅에서는 벡터의 모음인 행렬을 왜 공부해야 하는지, 역행렬의 의미, 판별식의 의미 등을 계산이 아닌 선형 변환(linear transformation) 관점에서 알아보겠습니다.


연립방정식 풀이 : 행렬이 필요한 이유

1편 글 (벡터를 배우는 이유?)에서 알아본 바와 같이 데이터들을 대상으로 MSE를 계산하는 등 여러 데이터를 다루려면 연립방정식을 계산해야 합니다. 데이터들이 늘어날수록 연립방정식 줄도 길어져서 계산에 시간이 많이 걸리는데, 행렬을 이용하면 굉장히 쉽게 연립방정식을 풀 수 있습니다. 연립방정식의 계수들을 행렬로 나타내어 이 행렬의 역행렬을 곱하면 구하는 벡터만 좌변에 남기 때문입니다. 예시를 통해 알아보겠습니다.



현재 사과의 가격을 모르지만, 각각을 산 갯수와 총 지불한 금액은 알고 있는 상황입니다. 사과를 2개, 바나나를 3개 샀을 때는 8달러를 지불하였고, 사과를 10개, 바나나를 1개만 샀을 떄는 13달러를 지불하였습니다. 이 상황에서 사과의 가격을 a, 바나나의 가격을 b라고 하면 위 그림과 같이 적을 수 있습니다. 연립방정식을 풀어 벡터 r, 즉 [a b]를 구하는 방법에는 2가지가 있습니다. 


(방법 1) Gaussian elimination으로 벡터 r을 직접적으로 구하는 방법. (벡터가 저차원일 때 주로 사용합니다)

(방법 2) A라는 행렬에 역행렬을 곱하여 r이라는 벡터만 좌변에 남게 하는 방법. (아래 그림 참조) 물론 손으로 역행렬을 구할 때도 Gaussian elimination



이 '사과, 바나나' 문제를 강의 동영상에서 (1)과 (2)의 방법으로 푸는 것을 모두 보여줍니다. 참고로 이 문제는 행렬이 간단하기 때문에 A의 역행렬을 구하는 방법 (2)보다 벡터 r을 직접 구하는 (1) 방법이 더 적합합니다. Gaussian elimination을 간단하게 설명하자면 행렬 A의 대각선 숫자들이 1인 identity matrix로 만들어주는 방법입니다. 푸는 방법은 아래 그림과 같습니다.


(방법1) 벡터 r 직접적으로 구하기


이 사진은 벡터가 [a b c] 3개 방향으로 이루어져 있을 때의 풀이 방법입니다. 행렬의 각 row를 이용하여 숫자를 지워나가는 방법입니다. (방법 1)이 Ar=s 를 이용하여 Gaussian elimination을 하는 거라면, (방법 2)는 A* A역행렬 = I 를 Gaussian elimination을 하는 것입니다.


(방법2) A의 역행렬 구하기


그렇다면 이처럼 연립방정식을 행렬로 푸는 건 무슨 기하학적 의미가 있을까요? 지금까지 벡터를 좌표평면에서 살펴보았는데, 행렬과 벡터의 곱은 좌표평면에서 어떤 의미가 있는 걸까요? 이 질문의 답은 '행렬과 벡터의 곱은 벡터의 basis vector를 바꾼다'는 점입니다. 



행렬 : basis vector의 이정표

지금까지 2차원 좌표계인 좌표 평면에서 벡터의 의미, 좌표 변환을 알아보았는데요, 벡터(column 모양)을 여러개 이어붙인 행렬과 벡터를 곱하는 것의 의미는 무엇일까요? 아래 그림의 행렬과 벡터의 곱셈을 예로 들어 설명해보겠습니다.



[3 2] 벡터 앞에 2x2 행렬을 곱하면 [2*3+3*2  10*3+1*2] = [12 32] 결과를 얻을 수 있습니다. (벡터이기 때문에 세로로 써야 하지만 글 쓰기 편하도록 가로로 벡터를 적겠습니다. 제가 벡터 쓸 때는 가로로 놓여져 있더라도 세로로 읽어주세요!) 이 수식으로 봐서는 이 행렬과 벡터의 곱셈 연산이 좌표평면과 어떤 관계가 있는지 알기 어렵습니다. 그래서 아래 그림과 같이 수식을 보아야 합니다.



위의 수식을 보시면 쉽게 [3 2]라는 벡터는 사실 basis vector인 [1 0], [0 1]을 각각 3배, 2배 scale한 뒤, 선형 결합(+)한 결과물인 걸 볼 수 있습니다. 그리고 벡터 앞에 있는 행렬의 역할은 이 basis vector에 곱해서 이를 변형시키는 것입니다. 그러면 이제 [2 10], [3 1]이라는 새로운 basis vector를 갖게 됩니다.  이 벡터도 똑같이 [3 2]라고 표시되지만, basis vector가 그 전의 [1 0], [0 1]이었던 시절과는 표시되는 곳이 다릅니다! 


행렬을 곱하기 전에는 [1 0], [0 1]이라는 basis vector를 가진 좌표평면에서 각각의 basis vector를 3배, 2배 했었다면, 행렬이 곱해진 뒤에는 [2 10], [3 1]이라는 basis vector를 각각 3배, 2배 scale한 것의 합이 되기 때문입니다. 따라서 [12 32]라는 벡터의 의미는 이처럼 basis vector가 바뀐 다음, 바뀌기 전의 좌표로 환산하여 보았을 때의 좌표입니다. 여기서 중요한 점은 벡터에 곱한 행렬의 column [2 10], [3 1]이 basis vector가 된다는 사실입니다. 즉 2차원 벡터의 2*2행렬을 곱하거나, 3차원 벡터에 3*3 행렬을 곱하는 건 basis vector를 행렬의 column으로 바꾸겠다는 뜻입니다. 


그렇다면 선형 대수학을 배우는 학생의 입장에서 위의 '사과, 바나나 연립 방정식 문제'를 올바르게 해석하는 방법은 무엇일까요? '총 2번 사과를 샀는데, 각각 [2 10]라는 갯수만큼 샀고 (사과 basis vector), 마찬가지로 2번 바나나를 샀는데, 각각 [3 1]만큼 바나나를 샀다. (바나나 basis vector) 이 때 사과 가격 a, 바나나 가격 b만큼 각 basis vector에 곱해준 뒤 (= scaling) 더한다면, 좌표평면에서 주어진 벡터(=총 가격)을 구할 수 있다'라고 해석할 수 있습니다. 


만약 행렬의 역행렬이 존재한다면, (방법2)에서 배운 방법대로 역행렬을 구하여 식의 양변에 곱해주면 벡터 값을 구할 수 있습니다. 그런데 모든 행렬이 역행렬이 존재할까요? 아니죠. 행렬의 판별식이 0이 아닐 때에만 역행렬이 존재합니다! 중학교 때 다들 배우셨던 'ad-bc=0이면 행렬의 역행렬이 존재하지 않는다'를 기억하실겁니다. 그렇다면 행렬 판별식의 의미는 무엇일까요?  


판별식 : 행렬을 곱할 때 벡터가 변하는 정도



행렬의 판별식은 '행렬을 곱했을 때 벡터의 영역이 얼마나 변화하는지를 알려주는 지표'입니다. 위 그림에서처럼 [[a 0], [0 d]]라는 행렬을 벡터에 곱하면 basis vector가 [1 0], [0 1]에서 [a 0], [0 d]으로 변화합니다. 따라서 [1 1]에 있던 벡터는 [a d]로 이동하게 되어 벡터의 영역이 얼마나 변화하는지 알려주는 지표가 되는 것이지요. 이게 중요한 이유는 행렬의 역행렬이 존재해야 연립방정식의 연산을 편하게 할 수 있기 때문입니다.



지금까지 행렬을 데이터를 다룰 때 사용하는 이유, 벡터에 행렬을 곱하면 basis vector가 어떻게 바뀌는지, 그리고 determinant의 의미를 알아보았습니다. 점점 글을 쓰는 속도가 느려지고 있는데, Linear algebra 복습은 다음주까지 마무리 지어보겠습니다.

728x90
더보기

댓글,

하얀눈곰

프랑스에서 살아가며 드는 생각들을 적는 블로그