본문 바로가기

DEVELOP_NOTE/Math

[행렬곱/행렬과 벡터의 곱]행렬곱이 딥러닝이랑 무슨 관계이길래?

딥러닝을 공부하다보면 모든 계산에 행렬곱 공식이 포함되어있는것을 볼 수 있다.

딥러닝의 neural network은 모두 행렬곱을 기반으로 계산 된다는데, 도대체 어떻게 계산되는건지, 한번 자세하게 알아보자.

 

먼저, 행렬곱을 알아보기전에 행렬곱이라는 개념이 포함된 '선형대수학'을 간단히 정리해보면 아래와 같다.

선형대수학(線型代數學, 영어: linear algebra)은 벡터 공간, 벡터, 선형 변환, 행렬, 연립 선형 방정식 등을 연구하는 대수학의 한 분야이다. 현대 선형대수학은 그중에서도 벡터 공간이 주 연구 대상이다. 

 

즉, 행렬곱은 선형대수학의 주 연구대상인 벡터공간에서 '선형변환'(벡터공간의 모든 벡터를 다른벡터로 매핑함)을 표현하는 역할을 한다.

 

여기서, 행렬곱이 벡터공간에서 '선형변환'을 수행한다고 했는데, '선형변환'은 도대체 왜하는건지 궁금할 수 있다.

선형변환은 머신러닝에서 다양한 사유로 사용되는 개념인데, 예시를 들면 아래 작업들을 위해 활용된다고 이해할 수 있다.

1) 데이터 차원 축소
: 고차원 데이터를 낮은 차원으로 변환하여 시각화하거나 분석하기 쉽게 만듦

2) 이미지 처리와 컴퓨터 그래픽스
: 이미지의 회전, 크기 조절, 기울임과 같은 변형을 구현할 때 선형 변환을 사용한다. 3D 그래픽스에서는 객체를 3차원 공간에서 변환하는 데 필수적이다.

3) 데이터 변환과 특성 추출
: 기계 학습에서 데이터를 적절한 형태로 변환하거나, 중요한 특성을 추출하는 데 사용된다.

4) 시스템의 상태 변화 모델링
: 물리학, 공학, 경제학 등에서 시스템의 상태를 모델링하고 예측하는 데 사용된다.
이를 통해 시스템의 다양한 상태와 그 변화를 이해할 수 있게된다.

 

덧붙이자면, 기본적으로 행렬곱은 수학적 및 계산적 표현을 간소화하고, 단순한 형태로 변환, 해결하는데 기여하여

복잡한 문제를 선형적 관점에서 해결하는 데 도움을 준다.
선형대수학에서 행렬곱은 이러한 방식으로 위의 예시와 같이, 다양한 분야에서 중요한 역할을 하며, 복잡한 문제를 해결하는

핵심 도구로 활용될 수 있다.

 

다시, 선형대수학으로 돌아와서, 

 

행렬간의 곱을하던, 벡터-행렬 곱을 하던, 선형대수학이 풀고자하는건 '연립1차방정식'이다.

'연립1차방정식'이 뭔지 기억나는가?

아래와 같은 최대차수 항이 '1차'인 두개의 식이 병합된 식을 '연립1차방정식'이라고 한다.

이때, 2개의 식으로 이루어진 연립방정식을 아래와 같이 하나의 식으로 바꿀 수 있다.

위와 같이, 두개의 식을 '행렬'과 '벡터'의 개념을 도입하여 단순화된 식으로 표현할 수 있다. (행렬곱의 기여)

 

행렬과 벡터의 곱

'연립1차방정식'을 '행렬x행백터'로, '행렬x행백터'를 다시 '연립1차방정식'으로...

위와 같이 '연립방정식'을 하나의 '행렬곱' 식으로 변환했고, 반대로 '행렬곱'을 '연립방정식'으로 다시 변환할 수도 있다.

위 그림의 행렬곱 식에서 첫번째 행렬과 'x,y'로 이루어진 행벡터를 곱하면,

1) (1 * X) + (2 * y) = 4

2) (2 * X) + (5 * y) = 9 

로 정리할 수 있고, 결국 위에서 처음에 정의했던 연립방정식과 동일해진다.

 

행렬과 행렬의 곱

이번엔 복수의 '연립1차방정식'을 '행렬x행렬'으로, 그리고 다시 '연립1차방정식'으로 연속 변환해보자

 

위 그림을 보면 '연립방정식'을 '행렬 x 벡터'로 변환했던 것과 크게 다르지 않다.

다만, 행렬곱을 수행할때는 인지하고 있어야 할 두가지 제한사항이 있다.

 

1) 첫번째행렬의 '열'의 길이와 두번째행렬의 '행'의 길이가 같아야 행렬곱 연산이 가능하다.

즉, 2x3 행렬과 3x2 행렬은 행렬곱이 가능하지만, 3x2 행렬과 3x2 의 행렬은 행렬곱이 불가하다.

 

2) 행렬곱을 수행할때, 두 행렬의 위치가 바뀌게 되면 전혀 다른 연산이 되므로 연립방정식을 표현하는 행렬곱은 두개의 행렬의 위치를 바꿀 수 없다.

 

 

그렇다면 위와 같은 행렬곱이 딥러닝에 어떻게 활용되지?

위와 같은 연립방정식이 있다고 하자.

이것을 fully-connected layer로 표현해보면,

1-1) 먼저, input으로 x와 y가 들어오고, 첫번째 식에서 x의 계수가 1이므로, x에 연결된 검정색 엣지의 중요도(weight)가 1로 곱해진다

1-2) 첫번째 식에서 y의 계수가 2이므로, y에 연결된 검정색 엣지의 중요도(weight)가 2로 곱해지며, 정답은 4가 된다.

 

2-1) 두번째식에서 x의 계수가 2이므로, x에 연결된 파랑색 엣지의 중요도(weight)가 2로 곱해진다.

2-2) 두번째식에서 y의 계수가 5이므로, y에 연결된 파랑색 엣지의 중요도(weight)가 5로 곱해지며, 정답은 9가된다.

 

위 Fully-Connected Layer를 행렬곱으로 표현하면 아래와 같다

결국, fully-connect layer 층 '하나'를 통과하는것은 '행렬'을 '하나' 곱하는것과 같다.

 

추가로, 만약 Layer의 node가 늘어나게 된다면, 행렬의 '열'이 추가되는것과 같다.

 

 

마치며

오늘은 선형대수학에서 행렬곱의 역할과, 행렬곱이 딥러닝에서 어떻게 활용되는지에 대해 살펴봤다.

가장 궁금했던 부분인 Fully-connceted layer에서 행렬곱이 활용되는 역할에 대해 정리해보자면, 

 

먼저, 딥러닝에서 layer의 역할은 순전파, 역전파 과정에서 input과 output사이의

명확한 관계를 찾기 위한 계산을 진행하는 공간의 역할을 한다. 

이때, fully-connected layer에 input되는 x, y를 output(위의 4, 9)과 동일하게 근사하기 위해

각 엣지, 즉 가중치를 조정해 나가게 된다.

이때, 각각의 엣지에 할당된 가중치들은 바로 행렬 구조로 이루어져있고(표현할 수 있고), 

우리는 이 행렬값(가중치)을 조정하며, output으로 근사하는 공식(관계)을 찾아 나가게된다.

 

즉,

* 행렬=가중치

* 행렬곱 = 가중치를 반영하는 과정

으로 이해할 수 있다.

 

이제 다음 단계로는, 위 가중치(행렬의 값)값을 output으로 조정해 나갈때의 기준에 대한 원리 이해가 필요하다.

다음에는 미분을 통해 위 가중치를 조정하는 방법에 대해서 정리해보도록 하자.