Search

반응형

'2026/07'에 해당되는 글 1건

  1. 22:45:24 [인공 신경망] 행렬 이야기를 해보자.
반응형

행렬과 행렬곱

 

인공 신경망을 공부하니 행렬이 나온다.

수학시간에 배웠던 행렬 그대로다.

시간이 흘렀으니 다시 인공 신경망을 위한 행렬과 행렬곱을 복습해 본다.

 


행렬은 무엇인가?

 

가로는 행, 세로는 열이라고 한다.

13 51 6
22 7 32
39 9 14

 

위 표를 보면 각 칸에 숫자가 들어 있다.

1번째 은 13, 51, 6이 순서대로 들어가 있다.

1번째 은 13, 22, 39가 순서대로 들어가 있다.

 

2번째 행, 2번째 열의 값은 7이다.

행렬을 가지고 값을 찾았다. (행과 열)

위 표처럼 행과 열이 있고 그 안에 숫자값이 있다.

이것이 행렬이다.

 

위 표는 가로 개수(열)가 3개세로 개수(행)가 3개다.

행렬로 표시하면 3*3 행렬이라 한다.

13 51 6
22 7 32

이 표에 담긴 행렬은 가로 3개 세로 2개다.

행렬로 표기한다고 하면 행, 열 단어대로 써주면 된다.

2개의 행이 있고 3개의 열이 있다.

그래서 2*3 행렬이라고 한다.


 

행렬곱

 

행렬곱은 또 무엇인가?

인공 신경망에 필요한 내용이니 잘 정리해 보자.

 

마지막 2*3 행렬을 다시 보자.

이 행렬로 행렬곱을 어떻게 할까?

2*3 행렬이니 2와 3을 곱하는 걸까?

아니다.

행렬곱을 하기 위해선 행렬이 2개가 있어야 한다.

2개의 행렬을 곱하는 것이 행렬곱이다.

행렬곱

이렇게 2개 행렬은 행렬곱을 할 수 있다.

방법은 다음과 같다.

행렬곱 순서

행렬곱은 a, b, c, d 순으로 한다.

그리고 행렬곱의 결과는 2*2 행렬이 된다.

a, b, c, d 순으로 곱하자.

a : (1 × 5) + (2 × 7) = 5 + 14 = 19

b : (1 × 6) + (2 × 8) = 6 + 16 = 22

c : (3 × 5) + (4 × 7) = 15 + 28 = 43

d : (3 × 6) + (4 × 8) = 18 + 32 = 50

 

결과 행렬은 다음과 같다.

여기에 값을 대입하자.

로 행렬곱의 결과가 만들어진다.

 


 

행렬곱이 안 되는 경우

 

행렬은 조건이 맞는 경우에만 곱할 수 있다.

다음 행렬끼리는 곱할 수 없다.

행렬곱이 안된다

그 이유는 다음과 같다.

행렬의 곱의 조건은 첫 번째 행렬의 열의 개수와 두 번째 행렬의 행의 개수가 같아야 한다.

복잡해 보일 수도 있지만,

곱셈 방식대로 진행하면 그 이유를 알 수 있다.

 

첫 번째 행렬의 1열의 1행인 19와 두 번째 행렬의 1행의 1 열인 20을 곱한다.

다음으로 첫 번째 행렬의 2열 1행인 22와 두 번째 행렬의 2행의 1열 원소를 곱해야 한다.

그런데 두 번째 행렬은 2행이 없어서 곱할 수가 없다.

 

두 개의 행렬을 곱할 때는 항상 확인해야 한다.

첫 번째 행렬의 열의 개수와 두 번째 행렬의 행의 개수는 같아야 한다.


 

행렬곱을 알아야 하는 이유

 

신경망을 공부하다 보면 행렬곱을 사용하게 된다.

신경망 기준으로 가정해서 생각해 보자.

인공 신경망

 

계층 1에 2개의 노드가 있고 각각 노드에 입력 1과 입력 2로 값이 들어온다.

이제 계층 1에 가중치를 적용 후 입력값과 곱해서 계층 2를 구성한다.

 

입력값에 화살표대로 가중치를 곱해서 더해주면 계층 2의 노드 값이 된다.

계층 2의 1번 노드는 다음과 같다.

(입력 1 × w11) + (입력 2 × w21) = 계층 2의 1

(입력 1 × w12) + (입력 2 × w22) = 계층 2의 2

현재는 입력값이 2개에 계층은 2까지 있다.

실제로는 더 많은 입력값과 계층이 존재한다.

그 많은 입력값과 가중치들을 계산하려고 하니 머리가 지끈거린다.

 

하지만,

쉽게 계산하기 위해 이 구조를 행렬로 변환시키고 컴퓨터에게 계산을 시킨다.

그러니 걱정 안 해도 된다.

방금 이야기했듯이 행렬로 변환해서 행렬곱을 활용하면 된다고 했다.

그래서 행렬곱이 필요하다.

위 구조를 행렬곱으로 바꾼다면

가중치 w가 4개, 입력값이 2개다.

가중치를 첫 번째 행렬로 정하고 입력값을 두 번째 행렬로 정하자.

그 반대로 하면 열과 행의 수가 안 맞아 행렬곱이 안된다.

 

이 구조대로 행렬곱을 만들어보자.

인공 신경망 행렬곱

우선 가중치의 계층 연결 값(w11, w12 같은)으로 행렬에 맞춰봤다.

보통 위 행렬처럼 생각하겠지?

하지만 저렇게 행렬을 만들면 잘못된 계산식이 나온다.

즉 w11, w12에서 숫자로 행렬을 만들면 안된다.

그래서 그 숫자를 행렬처럼 사용하면 안 된다.

전치를 하면 된다고 하는데...개념적으로 다른 거 아닌가?

사실 처음엔 이 부분을 이해하기 어려웠다.

하지만 행렬, 행렬곱을 알게 되고 가중치를 이해하면서 어떻게 하면 되는지 이해하게 되었다.

저 숫자의 의미는 위의 계층 이미지를 다시 보자.

현재 계층의 노드 + 다음 계층의 노드다.

 

그렇다면 행렬로 구성하려면?

w옆의 숫자는 잊자.

계층 2의 노드 값을 정해야 한다.

 

다시 말하지만 입력값들과 계층 1의 값을 행렬곱하고 계층 2의 값을 만든다.

이걸 명확히 이해한다면 혼란스럽지 않을 것이다.

 

우선 계층 2의 1번 노드값은 다음과 같이 계산한다.

입력 1과 계층 1의 1번 노드의 곱

입력 2와 계층 1의 2번 노드의 곱

두 값의 합이 계층 2의 1번 노드값이다.

계층 2 값

핑크 화살표를 참고하자.

이제 행렬곱을 한다면,

왼쪽 행렬에서 (w11 × 입력 1) + (w21 × 입력 2)가 계층 2 행렬의 1행 1열이 되고

왼쪽 행렬에서 (w12 × 입력 1) + (w22 × 입력 2)가 계층 2 행렬의 2행 1열이 된다.

 

이제 가중치와 입력값을 행렬곱으로 표현하겠다.

제대로 된 행렬곱

이제 제대로 행렬곱이 구성되었다.

w12와 w21의 위치를 확인하면 된다.

결론은 가중치 w에 붙은 숫자가 행렬의 위치를 의미하는 것이 아니다.

 

이제 우리는 신경망에서 입력값, 가중치를 행렬로 표현할 수 있다.

행렬곱으로 계산도 할 수 있다.

 

신경망에서 이 식을 다음과 같이 표현한다.

끝.

 

잘못된 내용은 댓글로 부탁한다.

 

 

 

 

 

 

 

 

반응형