이번에는 선형대수학(Linear algebra)에 대해서 공부를 합니다.
이름은 거창하지만 실제로는 더하기, 곱하기 이런 기본 산수 수준인데 단지 다른 것은 알고리즘을 사용하기 위해서 필요한 행렬과 벡터 위주로 다루고 있습니다.
행렬이나 벡터도 이름만 거창하지 실제로는 여러번 산수해야하는 것을 한번에 산수하면 되도록 해주는 도구라고 생각하면 될 것 같습니다. 알아두면 매우 유용한 면이 많아 보이는 내용입니다.
예를 들어서, 1+1, 1+2, 1+3을 한다고 생각해보겠습니다.
단순한 더하기를 3번 수행해야 하는데, 행렬이나 벡터를 이용하면 더하기 1번에 3개의 결과를 얻어낼수 있는 효과가 있을 뿐이지 더하기는 동일합니다.
행렬(Matrix)
사각형 모양안에 숫자들을 나열해 놓은 형태로 아래 그림과 같이 표기가 됩니다.
이 숫자들은 행(rows)과 열(columns)로 구분이 가능합니다. 그래서 전체를 하나로 표기할 수도 있고 내부에 숫자들을 각각 표기할 수도 있게 됩니다.
Matrix를 표기할 때 4 x 2와 같이 표기를 합니다. 그냥 4개의 행과 2개의 열로 이루어진 Matrix이며 4 by 2라고 읽습니다.
아래 그림에서는 R로 Matrix의 이름을 표현했고 4x2의 숫자를 갖는 매트릭스를 보여주고 있습니다. 그리고 그 오른쪽에는 2x3의 다른 Matrix를 표현하고 있는 것입니다.
Matrix는 여러 숫자들을 가지고 있고 각자의 자리가 있기 때문에 개별적으로 요소들도 표기가 가능합니다.
아래 그림의 A라는 Matrix는 4x2의 크기를 갖고 있으며 총 8개의 숫자를 표현하고 있습니다.
A11은 1번째 행의 1번째 열의 자리에 있는 숫자를 표현합니다. 그래서 A11의 값은 1402가 됩니다.
A32는 3번째 행의 2번째 열의 자리에 있는 숫자를 표현하는 것이니 값이 1437이 되겠지요
그런데 A43은 4번째 행의 3번째 열의 자리를 찾는데 3번째 열이 없기 때문에 error가 됩니다. 존재하지 않는 값을 찾고 있기에 오류이지요
벡터(Vector)
Vector는 행렬과 비슷하게 생겼지만 다른 점은 열(column)이 1개만 존재하는 형태라는 것입니다. 그래서 항상 한줄로만 표기가 됩니다. 즉, n x 1의 matrix 이면서 vector가 되는 것입니다.
아래 그림에서는 Vector를 y로 표기하였습니다.
마찬가지로 각 숫자들은 지정 좌석이 있기 때문에 y1은 1번째 자리의 460의 값을 표현할 수 있게 됩니다.
1번째 자리수는 0번부터 시작할 수도 있고 1번부터 시작할 수도 있습니다.
이것은 사용하는 program에 따라 다를 수 있습니다. 일반적인 java와 c 같은 프로그램에서는 배열을 보통 0부터 표현을 하기도 하며 (0-indexed), 이 강좌에서는 1부터 표현하는 것으로 교수님께서 설명을 하고 계십니다. (1-indexed)
4개의 숫자이므로 0-indexed에서는 y0, y1, y2, y3으로 표현이 되고, 1-indexed에서는 y1, y2, y3, y4로 표현이 되는 차이만 있을뿐입니다.
Matrix Addition(행렬 더하기)
Matrix와 Vector의 정의를 알았으니 이제 더하는 방법을 알아봅니다.
두개의 Matrix를 더하는 것은 같은 자리의 숫자를 더해서 새로운 Matrix를 만들어 내는 것입니다.
아래 그림에서 3x2 Matrix+ 3x2 Matrix를 하면 같은 사이즈를 가지는 3x2 Matrix가 생성된다는 것을 보여주고 있습니다.
같은 자리의 수인 1 + 4 = 5, 0 + 0.5 = 0.5, 2 + 2 = 4와 같이 더하기가 되는 것을 알 수 있습니다.
그 밑에 있는 3x2 Matrix + 2x2 Matrix는 왜 error가 될까요? 숫자들의 자리가 맞지 않으니 더할 수 있는 값이 없어서 입니다. 그러므로 같은 크기의 Matrix끼리만 연산이 된다는 결과가 나타납니다.
Scalar Multiplication ( Matrix 곱하기 상수)
Scalar는 상수를 의미합니다. 이 상수를 Matrix에 곱하는 것이 가능합니다. 같은 크기의 Matrix가 아니지만 각각의 숫자들에 동일하게 적용시켜주면 됩니다.
아래 그림에서 Matrix에 3을 곱해주면 각 자리에 위치한 모든 숫자들에 3을 곱해서 기존 Matrix의 크기와 같은 Matrix가 생성이 되는 모습입니다. 앞에서 곱해주나 뒤에서 곱해주나 같은 결과가 나옵니다. 산수와 같죠?
그 밑에 쪽에 나누기도 동일하게 적용을 해주면 연산이 가능합니다.
지금까지 알아본 더하기와 곱하기를 혼합해서 연산을 하면 아래 그림과 같이 됩니다.
곱하기와 나누기를 먼저 계산하고 그 결과를 더하기와 빼기를 수행합니다. 이것도 산수와 똑같습니다.
Matrix X Vector (Matrix 곱하기 Vector)
Matrix와 Vector를 곱하면 어떻게 될까요
각각 크기를 가지고 있으므로 곱하기가 되는 대상에 주의를 해야 합니다.
아래 그림은 기본적인 곱하기에 대한 특성을 보여주고 있습니다. A Matrix의 크기가 m x n이라고 할 경우에 x Vector의 크기는 n x 1이 되어야 한다 입니다. 같은 사이즈의 n이 되어야 곱하기를 할 수 있다는 뜻이됩니다. 이렇게 곱하기를 한 결과는 m의 크기를 갖는 Vector가 됩니다. 그럼 어떻게 곱하기가 되는지 예제를 보면 쉽습니다.
A Matrix는 3x4의 크기를 가지고 있습니다. 4개의 columns를 가지고 있고 곱하고자 하는 x Vector는 4x1의 크기를 가지고 4개의 rows를 가집니다. 곱하기를 하는 방법은 A Matrix의 가로줄과 x라는 이름의 Vector의 세로줄을 곱해주고 이 값들을 모두 더해줍니다 .
A11 * x1 + A12 * x2 + A13 * x3 + A14 * x4와 같이 연산이 되어 결국 값은
1*1 + 2*3 + 1*2 + 5*1 = 1 + 6 + 2 + 5 = 14 값이 되는 것입니다.
결과 값을 차례대로 Vector 형식으로 적어주면 m개의 크기를 갖는 결과 Vector가 생성이 됩니다.
이와 같이 연산이 되기에 Matrix의 가로 크기와 Vector의 세로 크기가 같아야 하겠습니다. 그리고 그 결과는 Matrix 의 세로 크기와 같은 크기를 갖는 Vector로 만들어집니다.
복잡한 식도 심플하게 변형 (kind of trick)
Matrix의 연산에 특성을 이용하면 복잡한 계산식을 심플하게 표현할 수 있게 됩니다. 이것은 parameters이 많아질수록 더욱 효과적으로 표현이 가능해지는 장점을 가지고 있습니다. 우리가 앞으로 다뤄야 하는 dataset이 아주 많은 데이터 parameters들을 가지고 있기 때문에 이를 활용하는 것에 익숙해져야 하기 때문입니다.
이전에 본적이 있는 일차방정식으로 표현이 된 h 함수입니다. 두개의 parameters를 가지고 있고 곱하기와 더하기로 표현이 되고 있습니다. 이것을 Matrix로 표현을 하면 아래쪽에 있는 그림과 같이 표현이 가능합니다.
세타zero로 표현했던 -40의 값은 상수이기 때문에 1을 곱해줘도 같은 값을 가질 수 있습니다. 세타one으로 표현했던 0.25의 값은 x와 곱해지는 인수임을 유의해서 아래 그림을 보면 됩니다.
h 함수는 집의 사이즈에 따른 집의 가격을 나타내는 공식이였습니다. x는 집의 사이즈 데이터가 되고 h는 그 사이즈에 해당하는 집의 가격을 나타냈었습니다. 이 공식에 의하면 집의 사이즈에 0.25를 곱하고 -40을 더하면 집에 가격이 된다고 합니다. 이것을 Matrix로 아래와 같이 변환해서 계산을 해보면 일차방정식과 동일한 결과가 된다는 것을 알 수 있습니다.
h 함수는 다음과 같이 표현이 가능하게 되고
h = -40 * 1 + 0.25 * x
그리고 이것은 다음과 같은 행렬의 곱으로 표현이 가능합니다.
h = [-40, 0.25] * [1, x]
이러한 원리로 분리해서 만들어낸 것입니다. (2번째 Vector를 세로로 써야 맞는데...)
아래 그림에서는 곱하는 순서만 바뀌었을 뿐이지 같은 방식의 곱하기를 나타내고 있습니다.
결국 이렇게 Matrix를 이용하면 어떻게 되는가 하면, h 함수가 다음과 같이 심플해지게 됩니다.
h = Xa (X : Matrix, a : Vector)
상수들이 Vector가 되면서 곱하기로만 표현이 됩니다. 여기서 주의할 것은 X Matrix의 columns의 수와 a Vector의 rows 수가 같아야 연산이 된다는 것입니다.
Matrix x Matrix (Matrix 곱하기)
Matrix 끼리의 곱셈입니다. column만 늘어나는 것이고 연산은 동일합니다.
아래 그림은 m x n Matrix와 n x o Matrix를 곱하면 m x o Matrix가 결과가 된다는 것을 이야기 합니다.
아래 그림은 예를들어서 설명을 하고 있습니다.
앞에 Matrix의 가로줄과 뒤에 Matrix의 세로줄의 수들을 곱하고 그결과를 더해서 나온 값이 결과 Matrix가 됩니다.
즉, 1번째 row와 1번째 column이 연산되어, 결과 Matrix의 1번째 row와 1번째 column의 자리에 위치하는 값이 되는 것입니다.
다수의 공식도 심플하게 변형 (kind of trick)
다시 h 함수로 돌아가보겠습니다.
아까전에는 parameters를 심플하게 표현했었는데 이번에는 여러개의 h 함수를 표현해보려 합니다.
머신러닝에서 우리의 목표는 cost가 가장 적은(0에 가까운) h 함수의 찾아내는 것이였습니다.
그러기 위해서 parameters를 동시에 업데이트 해가면서 cost를 산출하고 목표를 향해 갔었습니다.
parameters가 변경되면 다른 h 함수가 되기 때문에 여러번의 연산을 하게 될 것입니다.
이것을 아래 그림과 같이 parameter를 이제 Vector가 아닌 Matrix로 표현을 하면 여러번의 연산도 한번에 심플하게 할수 있다는 것을 알수 있습니다.
Properties of Matrix (특성)
Matrix의 곱셈은 순서가 바뀌면 다른 결과가 나오므로 일반적으로는 곱하는 순서가 중요합니다.
즉, 교환법칙이 성립하지 않는다고 합니다.(not commutative)
아래 그림의 예제를 보시면 다른 결과가 나오는 것을 보실수 있습니다.
Matrix x scalar 값은 교환법칙이 성립이 되었었는데, Matrix x Matrix는 그렇치 않으니 주의를 해야겠습니다.
곱셈에서 결합법칙이 성립이 됩니다. (Associative)
산수할때 괄호안에 있는 계산이 우선순위가 되는 것과 동일합니다.
Identity Matrix라고 하는 것인데 산수에서 8 * 1 = 8이 되는 것과 동일한 결과를 나타내주는 숫자 1과 같은 역활을 하는 Matrix를 의미합니다. 이 Matrix는 대각선으로 1의 값을 갖는 형태로 표현이 됩니다. 아래 그림을 보면 Matrix의 크기별로 형태를 볼 수 있습니다. 이 Identity Matrix는 I라고 표기하며 A * I = I * A = A의 결과가 됩니다.
특이한 점은 일반적으로 Matrix 의 곱셈은 교환법칙이 성립되지 않치만 Identity Matrix 는 교환법칙이 성립된다는 점입니다.
Inverse Matrix는 어떤 Matrix 와 반대 성향을 가지고 있는 Matrix 로서 이 두개의 Matrix 의 곱셈은 Identity Matrix 로 나타나는 것입니다. 아래 그림에서 A Matrix 에 대해서 A-1 라는 Inverse Matrix 가 존재하며 이 둘을 곱하면 I Matrix가 되는 것을 보여주고 있습니다. 하지만 모든 Matrix가 Inverse 형태를 갖는 것은 아니라고 합니다. 모든 요소가 0으로 구성되는 Matrix는 Inverse를 가지지 않습니다.
Inverse Matrix는 Identity Matrix를 만들기 위한 역산으로 계산이 되어 만들어집니다. 아래 그림의 상단에 표기된 분수처럼 계산이 되어 생성이 되는데 실제 구현할때는 이를 계산해주는 함수들이 있으니 개념만 알고 넘어가면 됩니다.
Matrix Transpose는 어느 Matrix의 크기를 변형하는 방법입니다.
아래 그림에서 A Matrix 는 2x3의 크기를 가지고 있습니다. AT라고 표시되어 있는 오른쪽에 Matrix 는 A Matrix 의 transpose라고 하고 이 Matrix 값들은 대칭이 되는 형태로 표현이 됩니다.
A Matrix의 값들을 오른쪽 아래방향으로 대각선을 그어서 이 대각선을 기준으로 거울에 비치듯이 뒤집으면 됩니다.
각각의 값들은 변하지 않고 자리만 변경되는 것입니다. 그래서 m x n Matrix의 transpose는 n x m의 크기로 변형이 됩니다.
이것은 Matrix곱하기를 할 때 유용하게 사용할 수 있습니다. 일반적인 곱셈을 할 때 크기가 동일해야 했습니다. 즉, A Matrix의 rows의 숫자들 갯수와 B Matrix의 columns의 숫자들의 갯수가 동일해야 연산이 가능했었습니다. 이 크기를 맞춰주기 위해서 형태를 transpose하고 연산을 수행하는데 이용되는 것입니다.
이것이 Linear algebra의 전부는 아니지만 우리가 머신러닝을 배우면서 사용하게 될 내용들에 대해서 배웠습니다. 이제 우리는 많은 데이터들을 한번에 처리할 수 있는 준비가 된 셈입니다.