본문 바로가기
정기연재 - 수학 & 통계학/[선형대수학] Welcome to Linear world!

선형대수학_1.행렬의 연산(1)

by STEMentor Editor 2020. 1. 1.

 

안녕하세요. STEM 10기 김경찬입니다. 어느새 2020년이 되었는데요, 글을 읽고 계신 여러분 모두 썩 괜찮은 한 해가 되셨으면 좋겠습니다.

첫 글에서 언급했듯이, 벡터와 행렬은 선형대수학에서 계속 등장하는 가장 기초적인 재료입니다. 숫자를 더하고 빼고 곱하고 나누는 것을 자유롭게 할 수 있어야 방정식을 풀 수 있었던 것처럼, 벡터와 행렬의 연산에 능숙해야 선형대수학을 이해하기 쉬운데요. 그래서 이번 글에서는 행렬과 벡터의 연산(덧셈, 곱셈, Trace, Transpose, Inverse) 에 대해 이야기해보도록 할게요. 어쩌면 제가 앞으로 쓰게 될 글들 중 가장 길고 자세한 글이 될 수도 있겠습니다.

행렬의 덧셈

행렬의 덧셈/뺄셈은 매우 쉬우므로 간단히 언급만 하고 넘어가도록 하겠습니다.
같은 차원을 갖는 두 행렬 A,BA, B에 대해, A+BA + B는, 차원은 기존의 두 행렬과 같고 각 원소들은 A,BA, B의 원소들을 대응하는 위치의 것들끼리 더한 것들이 됩니다. 뺄셈도 마찬가지로 정의되고요. 식으로 쓰자면,
A,B∈Rm×nA±B∈Rm×n,[A±B]i,j=Ai,j±Bi,j,(복호동순)∀i=1,2,⋯ ,m∀j=1,2,⋯ ,n \begin{aligned} &A, B \in \mathbb{R}^{m \times n}\\ &A\pm B\in \mathbb{R}^{m \times n}, [A \pm B]_{i,j} =A_{i,j} \pm B_{i,j}, (복호동순)\\ &\forall i = 1, 2, \cdots, m\\ &\forall j= 1, 2, \cdots, n \end{aligned}

제가 앞으로 어떤 행렬 MM에 대해 Mi,jM_{i,j}라는 표현을 사용하면, 그 행렬의 iijj열의 원소라는 뜻입니다. 앞으로도 이렇게 글 중간에 Notation 과 관련된 약속들을 언급하면서 지나갈 예정인데, 아마 대부분의 교과서에서 범용적으로 사용하는 표현들을 활용하게 될테니 생소한 표현들은 아닐 겁니다. 그럼 다음은 행렬의 Transpose(전치) 에 대해 알아보도록 하겠습니다.

Transpose(전치)

어떤 행렬 AA의 전치행렬(Transpose matrix)은 AA의 행과 열을 바꾼 것을 뜻합니다. ATA^\mathrm{T}로 표시하고,식으로는 다음과 같이 나타낼 수 있겠네요.

A∈Rm×nAT∈Rm×n,Ai,jT=Aj,iA\in \mathbb{R}^{m \times n}\\ A^\mathrm{T} \in \mathbb{R}^{m \times n}, A^\mathrm{T}_{i,j} = A_{j,i}

좀 더 직관적으로 와닿게 설명하자면, 어떤 행렬의 전치 행렬은 그 행렬의 주대각선을 중심으로 모든 원소들을 대칭시켜서 얻을 수 있습니다. 행렬 AA의 주대각선은 A1,1,A2,2,⋯A_{1,1}, A_{2,2}, \cdots 과 같이 행과 열의 번호가 같은 성분들을 말합니다.
(예시)[123456]T=[142536] (예시) \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 &6 \end{bmatrix}^\mathrm{T} = \begin{bmatrix} 1 & 4 \\2 & 5 \\ 3 &6 \end{bmatrix}

전치 행렬의 성질은 여러 가지가 있는데, 우선 다음의 몇 가지 기본적인 사실들만 살펴보겠습니다.

A,B∈Rm×n1)(A+B)T=AT+BT2)(cA)T=cAT3)(AT)T=A \begin{aligned} &A, B \in \mathbb{R}^{m \times n}\\ 1)& (A+B)^\mathrm{T} = A^\mathrm{T}+B^\mathrm{T} \\2)& (cA)^\mathrm{T} = cA^\mathrm{T} \\3)& (A^\mathrm{T})^\mathrm{T} = A \end{aligned}

1)1)2)2)를 보시고 첫번째 글에서 봤던 선형 변환을 떠올리셨다면 당신은 기억력이 좋은 학생입니다!(전치 연산은 선형 변환이 맞습니다.) 3)3)은 어떤 행렬에 2번 전치 연산을 하면 자기 자신으로 돌아온다는 것이죠. 앞서 전치 행렬을 행렬의 주대각선에 대한 대칭으로 생각할 수 있다는 것을 떠올리면 쉽게 받아들일 수 있겠죠.
만약 어떤 행렬의 전치 행렬이 자기 자신과 같을 때, 즉 ST=SS^\mathrm{T} = S 일 때 SS대칭 행렬(Symmetric matrix) 이라 합니다.

행렬의 곱셈(0) - 정의와 성질들

이번 글의 하이라이트라고 할 수 있는 행렬의 곱셈 부분인데, 정의부터 살펴봅시다. 우선 행렬의 곱셈은 아무 행렬끼리나 가능한 것이 아닙니다. 행렬과 행렬의 곱셈이 정의되기 위해서는, 왼쪽 피연산행렬의 열의 개수와 오른쪽 피연산 행렬의 행의 개수가 같아야 합니다. 아래와 같이 m×nm\times n 행렬 AAn×ln \times l 행렬 BB의 곱셈을 살펴보도록 합시다.
A∈Rm×n,B∈Rn×lC=AB⟹C∈Rm×l,  Ci,j=∑k=1nAi,kBk,j,i=1,2,⋯ ,m,j=1,2,⋯ ,l \begin{aligned} &A \in \mathbb{R}^{m \times n}, \quad B \in \mathbb{R}^{n \times l} \\ & C = AB \Longrightarrow C \in \mathbb{R}^{m \times l},\; C_{i,j} = \sum_{k=1}^n A_{i,k}B_{k,j}, \\ & i=1,2,\cdots ,m, \quad j=1, 2, \cdots, l \end{aligned}
말로 설명하자면, AA에서 한 행들을 잡고 BB에서 한 열을 잡아서 대응되는 원소들끼리 각각 곱해준 걸 더하면 CC의 원소 하나를 구할 수 있습니다. 이 때문에 행렬 곱셈 계산은 상당히 귀찮은 일인데요. 예를 들어 3×33 \times 3 행렬과 3×33 \times 3행렬의 곱셈은 총 27번의 곱셈을 필요로 합니다. 일반화하면, n×nn \times n 행렬과 n×nn\times n 행렬의 곱셈은 n3n^3번의 곱셈이 필요한데요. 행렬의 크기가 커지면 그의 3제곱에 비례해서 늘어나는 곱셈 횟수 덕분에, 현대 계산과학에서도 "어떻게 하면 행렬의 곱셈을 최대한 적은 시간 내에 해낼 수 있을까?"는 중요한 이슈였답니다. 여러분들이 공대에서 흔히 사용하는(혹은 공대생이라면 앞으로 많이 사용하게 될 가능성이 높은) Matlab 같은 경우, 이런 행렬 계산을 빠르게 하는 기술들이 탑재되어 있답니다.
이 글이 선형대수학에 대한 글이지 전산학에 대한 글이 아니기 때문에 넘어가도록 하고,(사실은 저도 자세한 건 잘 모른답니다 ㅎㅎ…) 행렬의 곱셈과 관련된 다양한 성질들을 살펴보도록 하죠.

A∈Rm×n,  B,C∈Rn×l,  D∈Rl×k(1)AB≠BA(비가환성)(2)A(B+C)=AB+AC,  (B+C)D=BD+CD(덧셈에대한분배법칙)(3)ABD=(AB)D=A(BD)(결합법칙) \begin{aligned} &A \in \mathbb{R}^{m \times n},\; B, C \in \mathbb{R}^{n \times l}, \;D \in \mathbb{R}^{l \times k} \\&(1) AB \neq BA &(비가환성) \\&(2) A(B+C) = AB+AC, \; (B+C)D = BD+CD &(덧셈에 대한 분배 법칙) \\&(3) ABD = (AB)D = A(BD) &(결합 법칙) \end{aligned}
이들 중 기존 스칼라끼리의 곱셈과 가장 다른 점은 (1)번 성질이라 할 수 있습니다. 실수 혹은 복소수 간의 곱셈과는 달리 교환 법칙이 성립하지 않습니다. 사실, 대부분의 경우에 ABAB가 정의되면 차원이 맞지 않아서 BABA는 정의조차 되지 않고, 정의되는 경우에도 대부분의 경우 두 값이 다릅니다.
(4)(AB)T=BTAT(전치행렬의곱)(5)AIn=A,ImA=A(항등행렬(IdentityMatrix))(6)A∈Rm×m,∀t∈N⟹At=A⋅A⋅A⋯A(t번)(정사각행렬의거듭제곱) \begin{aligned} &(4) (AB)^\mathrm{T} = B^\mathrm{T}A^\mathrm{T} &(전치 행렬의 곱) \\&(5) AI_{n} = A, I_mA = A & (항등행렬(Identity Matrix)) \\&(6) A \in \mathbb{R}^{m \times m}, \forall t \in \mathbb{N}\Longrightarrow A^t = A\cdot A \cdot A \cdots A \quad(t번) &(정사각행렬의 거듭제곱) \end{aligned}
(4)는 행렬의 곱의 Transpose가 각각의 행렬의 Transpose를 역순으로 곱한 것과 같다는 사실입니다.
(5)에서 항등행렬(Identity Matrix) 이란 행렬의 곱셈에 대한 항등원으로써, 주대각선의 모든 값들이 1이고 나머지는 모두 0인 정사각행렬을 말합니다.위에서 AA가 정사각행렬이라면 혼동의 여지가 없겠으나, 일반적인 행렬일 때와 같이 차원이 혼동될 여지가 있는 경우에 위와 같이 n×nn \times n차원 항등행렬을 InI_n으로 표시하도록 할게요. (6)은 정사각행렬에 대해 거듭제곱을 정의하는 방법입니다.
행렬의 곱셈의 성질들은 이 정도 살펴보고, 이제 행렬의 곱셈을 나타내는 다양한 방법들에 대해 알아보도록 할게요. 먼저 행렬과 벡터의 곱셈부터 알아보도록 합시다.

행렬의 곱셈(1) - 행렬 X 벡터

곱셈이나 덧셈을 하는 데에 있어서, 벡터는 행렬의 특수한 경우로써 행이나 열 중 하나가 1개 뿐인 경우라고도 볼 수 있는데요. 앞으로 별다른 언급 없이 벡터라고 하면 보편적으로 열이 하나인, 열벡터(Column Vector) 를 이야기한다고 보시면 됩니다. 즉 mm차원 벡터는 m×1m \times 1 행렬을 이야기한다는 것이죠. 1×m1 \times m행벡터(Row Vector) 를 사용할 경우에는 행벡터라는 말로 따로 표기하도록 하겠습니다.

아무튼 이렇게 벡터를 행렬의 특수한 케이스로 보게 되면, 행렬과 벡터의 곱셈 역시 행렬과 행렬의 곱셈의 특수한 케이스라고 볼 수 있습니다. 행렬과 열벡터를 곱할 때에는 행렬이 왼쪽에, 벡터가 오른쪽에 놓입니다. (열벡터를 왼쪽에 놓았을 때에 오른쪽 피연산행렬로 올 수 있는 것은 행벡터 뿐입니다.)

그럼 이제 m×nm \times n 행렬 AAnn차원 벡터 xx를 곱한 결과를 bb라 두고 bb가 어떤 녀석인지 살펴보도록 합시다.
우선 m×nm \times n 행렬과 n×ln \times l 행렬을 곱했을 때 그 결과가 m×lm \times l 행렬이라는 것으로부터, bbm×1m \times 1 행렬 즉 mm차원 벡터가 될 것이라는 것을 알 수 있군요. 이 bb라는 벡터를 어떻게 나타낼 지를 생각해 보도록 하죠.

첫 번째 방법

행렬의 곱셈의 정의에 따라 행렬과 벡터의 곱셈을 각 원소의 값을 하나씩 찾아내는 방식으로, 식으로는 다음과 같이 쓸 수 있겠습니다.

A∈Rm×n,x∈Rnb=Ax⟹b∈Rm,  bi=∑j=1nAi,jxj,i=1,2,⋯ ,m \begin{aligned} &A \in \mathbb{R}^{m \times n}, x \in \mathbb{R}^n \\ & b = Ax \Longrightarrow b \in \mathbb{R}^m, \;b_i = \sum_{j=1}^n A_{i,j}x_j, \quad i=1,2,\cdots ,m \end{aligned}
위 식을 조금 더 함축적으로 나타내 보도록 할게요. bb의 각 원소를 구하는 방식을 보면, Ai,jA_{i,j}xjx_j를 모든 jj에 대해 곱한 것들을 더하고 있습니다. 즉, AAii번째 행과 xx를 내적(inner product)한 것이 bbii번째 원소가 된다는 것입니다. 이제부터 Ai,⋅A_{i,\cdot}라는 표현을 AAii번째 행벡터라는 뜻으로 사용하고, A⋅,iA_{\cdot, i}라는 표현은 AAii번째 열벡터라는 뜻으로 사용할게요. 보편적으로 쓰는 표현은 아니지만 편의를 위해 도입하겠습니다. 그러면 bi=Ai,⋅⋅xb_i = A_{i,\cdot}\cdot x로 표현할 수 있겠네요.

Ax=[−A1,⋅−−A2,⋅−⋮−Am,⋅−]x=[A1,⋅⋅xA2,⋅⋅x⋮Am,⋅⋅x]=b Ax= \begin{bmatrix} -A_{1,\cdot}-\\-A_{2,\cdot}-\\ \vdots\\ -A_{m,\cdot}- \end{bmatrix} x= \begin{bmatrix} A_{1,\cdot}\cdot x \\ A_{2,\cdot} \cdot x\\ \vdots \\ A_{m,\cdot}\cdot x \end{bmatrix} = b
수식으로 보기 좋게(?) 적으면 위와 같이 됩니다. 요약하자면 bb의 각 원소를 구하기 위해서는 AA의 해당 행과 xx의 내적을 구하면 됩니다.

두 번째 방법

첫번째 방법이 AA의 행과 xx를 곱하는 방법이었다면 두번째 방법은 AA의 열(column)들에 조금더 포커스를 맞추는 방법이에요. 행렬과 벡터의 곱셈 식으로 돌아가 봅시다.

b=Ax⟹bi=∑j=1nAi,jxj,i=1,2,⋯ ,m b = Ax \Longrightarrow b_i = \sum_{j=1}^n A_{i,j}x_j, \quad i=1,2,\cdots ,m
AA의 열 벡터를 사용해 곱셈을 나타내려면 bb의 각 원소들의 값을 따로 구한다는 프레임에서 벗어나, 한꺼번에 벡터들을 더하는 방식으로 생각해야 합니다. 무슨 말이냐 하면, 위의 식을 다음과 같이 슬쩍 바꿔놓는 것입니다.
b=Ax⟹b=∑j=1nA⋅,jxj b = Ax \Longrightarrow b = \sum_{j=1}^n A_{\cdot,j}x_j
무엇이 바뀌었는지 아시겠나요? bb의 각 원소 번호이자 A의 행 번호를 나타내주던 ii라는 값을 식에서 지워버렸습니다. 이렇게 보면 우변은 A의 jj번째 행벡터들을 xxjj번째 원소와 곱한 것들을 더한 것이 됩니다. 그리고 조금 생각해보면 이 우변의 값이 행렬 곱셈의 정의에 따라 계산한 것과 같다는 것을 알 수 있습니다. AA의 행들끼리는 곱셈 과정에서 전혀 상호작용하지 않기 때문에 이렇게 열로 묶어서 곱해도 결과가 같은 것입니다.
b=Ax=[∣∣⋯∣A⋅,1A⋅,2⋯A⋅,n∣∣⋯∣][x1x2⋮xn]=[∣A⋅,1∣]x1+[∣A⋅,2∣]x2+⋯+[∣A⋅,n∣]xn \begin{aligned} b=Ax &= \begin{bmatrix} | & | & \cdots & | \\ A_{\cdot,1} & A_{\cdot,2} & \cdots &A_{\cdot,n}\\| & | & \cdots & | \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\x_n \end{bmatrix} \\&=\begin{bmatrix} | \\A_{\cdot,1}\\| \end{bmatrix}x_1 + \begin{bmatrix} | \\A_{\cdot,2}\\| \end{bmatrix}x_2 + \cdots + \begin{bmatrix} | \\A_{\cdot,n}\\| \end{bmatrix}x_n \end{aligned}

역시 조금 더 수식으로 보기 좋게(?) 적어봤습니다. 이런 방식으로 행렬과 벡터를 곱하면 첫번째 방법에서는 알 수 없던 사실이 하나 보입니다. 바로 xx가 임의의 nn차원 벡터라도 AxAx의 결과는 xx의 각 원소들을 계수로 하는 AA의 열 벡터들의 선형 결합(Linear Combination)으로 나타낼 수 있다는 것입니다.

선형결합(Linear Combination)의 의미 : kk개의 벡터들 v1,v2,⋯ ,vkv_1, v_2, \cdots , v_k의 선형결합으로 나타낼 수 있다는 말은 적당한 스칼라들 a1,a2,⋯aka_1, a_2, \cdots a_k에 대해 a1v1+a2v2+⋯akvka_1v_1 + a_2v_2 + \cdots a_kv_k 로 나타낼 수 있다는 말입니다.

이런 관점에서 행렬과 벡터의 곱셈을 바라보는 것은 후에 행렬을 벡터 공간(Vector Space)의 관점에서 바라볼 때 유의미한 통찰을 제공해줍니다. (Vector Space에 대해서는 3번 글 정도에서 다룰 예정입니다.) 지금까지 행렬과 벡터의 곱셈을 다루는 2가지 방법을 알아봤는데요. 이번 글이 길어지는 바람에 행렬과 행렬의 곱셈 파트 부터는 다음 글에서 다루도록 하겠습니다.

 

댓글