선형대수 1 - 벡터와 행렬

2024. 8. 2. 15:01기계 학습 (Machine Learning)/수학 (Mathematics)

 

 

어떻게 생겼냐

 

가 사실 가장 중요한 궁금증입니다.

 

필자는 무엇인지 모르는 것까진 괜찮다고 생각합니다.

저 같은 일반인은 어떤 걸 정확히 정의하면서까지 빠져들진 못하기 때문이죠.

 

하지만 적어도 어떻게 생겼는 지 모른다면

그냥 눈가리고 공차는 거랑 똑같습니다.

너무 재미없고, 또 이해도 안 됩니다.

 

 

 


Vector

 

벡터(vector)는 이렇게 생겼습니다.

그냥 숫자를 나열해놓은 것이죠.

(저 숫자는 원소(element)라고도 표현합니다.)

 

 

만일 몸무게가 70kg이고 키가 170cm인 사람을 벡터로 표현해본다고 합시다.

쉽습니다.

 

그리고 저 몸무게에 옷 무게 3kg을 빼야 된다고 해봅시다.

여기서 우리가 짚고 넘어가야 하는 점은

저 3kg 무게가 키 170cm에는 절대 영향을 주지 않았다는 것입니다.

 

 

 

 

 

자 그럼 벡터 표현식은 왜 사용할까요?

컴퓨터에서 표현하기도 쉽고

계산하기 편리하기 때문입니다.

 

예를 들어봅시다.

우리가 코드에서 A라는 사람에 대해 몸무게와 키를 표현하려고 합니다.

뭐 물론 이렇게 표현할 수 있겠죠.

a_height = 170
a_weight = 70

 

우리가 한 사람만으로 기계 학습을 한다면 오산이죠.

100명을 표현하려면 어떻할까요?

(혹시 변수를 100개 만들꺼란 생각은 버리는 게 좋습니다.)

 

그래서 이렇게 표현하면 쉽습니다.

a = [170, 70]

 

같은 의미로 100명도 끄떡없죠

x = [[170, 70], [185, 91], [162, 61], ...]

 

이런 표현식 아래에서 우리가 굳이 선형대수를 사용하지 않을 필요는 없습니다.

오히려 선형대수를 사용해야 계산이 더 쉽고 빠르죠.

그래서 우리가 벡터를 배우는 이유입니다.

 

 

 

 

일전에 우리는 x - b 와 같이 뺄셈이 각 행에서만 동작한다는 걸 배웠습니다.

이 때 행의 개수를 차원(dimension)이라고 표현합니다.


몇 개일까요?

4개죠! 그래서 차원은 4입니다.

 

이를 수학적으로 표현하면

x의 숫자들이 실수에 속해있고, 이는 4차원에 있다고 생각하면 됩니다.

 

벡터는 딱 이 정도만 알고 넘어가도 충분합니다.

 

 

 

 

 

 

 

 


Matrix

 

행렬은 그냥 벡터를 나열해놓은 것입니다.

뭐 더 필요한 건 없습니다.

 

 

 

 

우리가 행렬의 세계를 방문하는 이유는,

여러 개의 벡터를 한꺼번에 다룰 수 있기 때문입니다.

그리고 행렬은 벡터와 마찬가지로 차원을 가집니다.

벡터가 4차원에 있는 건 알고 있고,

저 벡터들이 n개 있다고 하니까 n 곱하기 4로 표현합니다.

 

 

사실 행렬을 정의해보면 공간(space) 개념이 나옵니다.

본인이 엄격하다면 공부해도 좋으나, 굳이 이런식으로 접근하지 않아도 됩니다.

다시 한 번 말하지만 행렬은 그냥 벡터를 나열해놓은 것입니다.

 

 

 

 

 

 

만일 본인 스스로 엄격하다고 생각해서,

실제로 복잡한 수식을 보면 행렬을 짜증나고 이해하기 싫은 경우가 잦은데

사실 행렬이 그 자체로 1개라고 생각하기 때문입니다.

 

그 관념을 깨는 방법은 역시 쉽게 이해하는 것이겠죠.

3명의 몸무게와 키를 행렬로 만들어봅시다.

 

이전에 첫 번째 사람은 3kg의 옷을 가진 건 알고 있었고,

나머지 2명도 각각 4kg, 2kg 옷을 가지고 있다고 해봅니다.

자, 이제 전달할 최종 몸무게와 키가 구해졌습니다.

 

 

우리는 이 계산을 봤을 때 '갑자기 뜬금 행렬들로 빼기가 왜 나오지?'하면 안됩니다.

70kg에 3kg을 빼고, 91kg에 4kg를 빼고... 처럼

결국 우리가 이전에 배웠던 벡터의 연산으로 생각해야 합니다.

더 나아가 그냥 몸무게만 건드린다고 해도 좋습니다.

 

 

 

 

사실 행렬과 노는 건 이렇게 쉬운 일입니다.

 

지금 내가 이런 마인드를 가지느냐 못하느냐 판별하는 건

간단하게 아래 같은 행렬 수식 하나를 보면 알 수 있습니다.

평균 제곱 오차 함수

 

y, o는 모두 행렬입니다.

여기서 윽... 했다면 아직도 y와 o를 1개로 보고 마인드가 아직 멈춰있는 사람입니다.

 

이건 그냥 몸무게와 키 계산과 다르지 않습니다.

벡터 수준으로 빼서 || || 라는 연산을 할 뿐 더 심오하지도 않습니다.

심지어 저 1/2는 그냥 절반으로 나누는 거고요.

 

 

 

 

 

다행스럽게 기계 학습에 관한 좋은 논문과 서적을 보면, 행렬 수준으로 표현하지 않습니다.

모두 벡터나 원소 수준에서 독자가 이해하기 쉽게 다루려고 합니다.

따라서 우리가 굳이 어렵게 생각할 필요는 없습니다.

처음에는 가장 밑바닥까지 내려가서 어떻게 계산되는 지 원리를 아는 게 느리지만,

정작 한 번 알면 전체 그림을 보는 건 순식간입니다.

 

안타깝게도 필자가 처음 선형대수나 기계 학습을 공부할 때는

아무도 이렇게 가르쳐주지 않았죠... 슬픈 교육 현실입니다.