P2-3.3 행렬 곱(matrix multiplication)은 무엇을 재사용하는가¶
Section ID:
P2-3.3Version:v2026.07.20
P2-3.1에서는 스칼라(scalar), 벡터(vector), 행렬(matrix)을 데이터 모양(shape)의 관점에서 봤습니다. P2-3.2에서는 벡터를 공간 안의 위치(position)처럼 읽고, 가까움과 멂을 비교하는 직관을 잡았습니다. 이제 행렬 곱(matrix multiplication)을 봅니다.
행렬 곱은 처음 보면 단순한 곱셈처럼 보이지만, 실제로는 “같은 방식의 가중합(weighted sum)을 여러 번 재사용하는 계산”에 가깝습니다.
- 벡터의 값들을 가중치와 함께 묶어 더합니다.
- 하나의 새 값을 만듭니다.
- 같은 계산을 여러 출력에 반복합니다.
- 여러 입력에도 한꺼번에 적용합니다.
여기서는 AI 문서에서 “입력 벡터에 가중치 행렬을 곱한다”는 말이 무엇을 뜻하는지 읽는 감각에 집중합니다.
여기서는 행렬 곱(matrix multiplication), 가중합(weighted sum), 가중치 행렬(weight matrix), 선형 변환(linear transformation), 입출력 차원(input/output dimension)을 다시 정리합니다. 3.1에서 데이터 모양을 읽고 3.2에서 벡터를 위치처럼 읽었다면, 이제 그 입력을 새 표현으로 바꾸는 계산 구조를 정리합니다.
여기서는 행렬 계산 공식을 완전히 숙달하기보다 AI 모델이 입력을 새 표현으로 바꾸는 계산을 읽는 데 집중합니다. 가중합, shape, 선형 변환의 직관을 잡아 두면, 뒤에서 신경망 층이나 분류기 설명을 볼 때 왜 행렬을 곱하는가를 구조적으로 이해할 수 있습니다.
| 지금 이 절에서 잡을 것 | 바로 다음에 이어질 질문 | 이후 다시 쓰이는 위치 |
|---|---|---|
| 행렬 곱이 위치별 곱이 아니라는 구분 | P2-3.6에서 NumPy로 배열 shape와 곱셈을 직접 확인합니다. | Part 3에서 특징 행렬 X를 읽고, Part 4와 Part 5에서 가중치와 점수 계산을 읽을 때 다시 씁니다. |
| 가중합을 여러 출력에 재사용하는 감각 | 뒤 절에서 코드로 shape 오류와 계산 결과를 확인합니다. | Part 5에서 선형층(layer), attention 계산, 표현 변환 설명으로 이어집니다. |
| 입력 차원과 출력 차원이 shape에 반영된다는 점 | P2-6.1, P2-6.2, P2-6.3에서 가중치와 손실이 어떻게 연결되는지로 넘어갑니다. | Part 5에서 임베딩 투영, 로짓(logit), 출력 벡터 설명을 읽을 때 다시 등장합니다. |
핵심 기준: 행렬 곱(matrix multiplication)은 무엇을 재사용하는가¶
- 행렬 곱(matrix multiplication)이 위치별 곱(element-wise multiplication)이 아님을 설명할 수 있습니다.
- 벡터와 가중치의 곱이 가중합(weighted sum)으로 새 값을 만든다는 점을 이해할 수 있습니다.
- 행렬 곱을 여러 가중합을 한꺼번에 계산하는 방식으로 읽을 수 있습니다.
- 입력 차원(input dimension)과 출력 차원(output dimension)이 행렬의 모양(shape)에 반영된다는 점을 설명할 수 있습니다.
- 선형 변환(linear transformation)을 벡터를 다른 표현 공간으로 옮기는 계산으로 이해할 수 있습니다.
- 이 계산이 신경망(neural network)의 층(layer), 임베딩(embedding), 분류(classification)에서 다시 등장하는 이유를 말할 수 있습니다.
세 가지 기준¶
| 기준 | 왜 중요한가 | 이 절에서 필요한 이해 수준 |
|---|---|---|
| 행렬 곱은 가중합을 재사용한다 | 출력 하나가 아니라 여러 출력을 한 번에 만들 수 있는 기본 계산이기 때문입니다. | 입력값에 가중치를 곱해 더한 계산이 열마다 반복된다고 이해합니다. |
| shape가 계산 가능 여부를 정한다 | 안쪽 차원이 맞지 않으면 어떤 값과 어떤 가중치를 대응시킬지 정할 수 없기 때문입니다. | 입력 길이와 가중치 행렬의 입력 방향 크기가 맞아야 한다고 이해합니다. |
| 선형 변환은 표현을 바꾼다 | 신경망 층과 분류기 설명이 모두 입력을 새 표현으로 바꾸는 계산으로 이어지기 때문입니다. | 행렬 곱이 벡터를 다른 길이와 의미의 벡터로 옮길 수 있다고 이해합니다. |
위치별 곱과 행렬 곱은 다르다¶
P2-3.1에서는 같은 모양(shape)의 벡터나 행렬을 위치별로 더할 수 있다고 했습니다. 곱셈도 위치별 곱(element-wise multiplication)으로 쓰면 다음과 같습니다.
여기서 \(\odot\)는 같은 위치의 값끼리 곱한다는 표시입니다. 이 계산은 각 위치를 따로 처리합니다.
행렬 곱(matrix multiplication)은 다릅니다. 행렬 곱은 같은 위치끼리만 곱하는 계산이 아니라, 한쪽의 행(row)과 다른 쪽의 열(column)을 조합해 새 값을 만듭니다.
- 위치별 곱은 같은 위치끼리 곱합니다.
- 행렬 곱은 행과 열을 맞춰 곱하고 더합니다.
이 차이를 먼저 구분해야 합니다. 행렬 곱을 위치별 곱으로 오해하면 shape 오류와 계산 의미를 모두 잘못 읽게 됩니다.
하나의 출력은 가중합으로 만들어진다¶
먼저 벡터 하나와 가중치(weight) 하나를 생각합니다.
두 벡터를 같은 위치끼리 곱한 뒤 더하면 하나의 숫자가 나옵니다.
이 계산은 다음처럼 읽을 수 있습니다.
- 첫 번째 입력값에 첫 번째 가중치를 곱합니다.
- 두 번째 입력값에 두 번째 가중치를 곱합니다.
- 그 결과를 더합니다.
- 하나의 출력값을 만듭니다.
이것이 가중합(weighted sum)의 기본 모양입니다.
AI 모델에서 입력값은 모두 같은 중요도를 갖지 않을 수 있습니다. 어떤 값은 크게 반영하고, 어떤 값은 작게 반영하고, 어떤 값은 음의 방향으로 반영할 수도 있습니다. 가중치(weight)는 이런 반영 정도를 숫자로 표현합니다.
다만 여기서는 가중치가 어떻게 학습되는지는 다루지 않습니다. 학습(training)과 최적화(optimization)의 기본 흐름은 P2-6.1부터 P2-6.3에서, 딥러닝 문맥의 역전파(backpropagation)와 옵티마이저(optimizer)는 P5-5.1, P5-7.1, P5-7.2에서 다시 다룹니다. “입력에 가중치를 곱해 더하면 새 값이 만들어진다”는 계산 형태만 봅니다.
행렬 곱은 가중합을 여러 번 재사용한다¶
출력값 하나를 만들 때는 가중치 벡터 하나가 필요했습니다. 출력값을 두 개 만들고 싶다면 가중치 벡터도 두 개 필요합니다.
여기서 \(W\)는 가중치 행렬(weight matrix)입니다. 첫 번째 열(column)은 첫 번째 출력값을 만들기 위한 가중치이고, 두 번째 열은 두 번째 출력값을 만들기 위한 가중치로 볼 수 있습니다.
계산하면 다음과 같습니다.
이 계산은 가중합을 두 번 재사용한 것입니다.
행렬 곱은 “곱하고 더한다”는 작은 계산을 여러 출력에 반복 적용합니다. 그래서 행렬 곱은 하나의 입력 벡터를 다른 모양의 출력 벡터로 바꾸는 도구가 됩니다. 여기서는 입력 벡터 shape이 2이고, 가중치 행렬 shape이 2 x 2이며, 출력 벡터 shape도 2입니다.
shape은 계산 가능 여부를 정한다¶
행렬 곱에서는 shape이 매우 중요합니다. 입력 벡터의 값 개수와 가중치 행렬의 행(row) 수가 맞아야 합니다.
위 계산에서는 입력 벡터의 길이가 2이고, 행렬의 행도 2개입니다. 그래서 각 입력값이 각 행의 가중치와 대응될 수 있습니다.
반대로 다음 계산은 바로 맞지 않습니다.
입력값은 3개인데, 가중치 행렬은 2개의 입력만 받을 수 있는 모양입니다.
- 입력 길이와 가중치 행렬의 입력 방향 크기가 맞아야 합니다.
- 맞지 않으면 어떤 값과 어떤 가중치를 곱할지 정할 수 없습니다.
이것이 AI 코드에서 shape 오류가 자주 발생하는 이유입니다. 행렬 곱은 수학적으로도, 코드적으로도 “모양이 맞아야 실행되는 계산”입니다.
행렬 곱은 여러 데이터를 한꺼번에 처리한다¶
행렬 곱의 힘은 입력 하나만 처리하는 데 있지 않습니다. 여러 입력을 행렬로 모아 한꺼번에 계산할 수 있습니다.
예를 들어 입력 벡터 두 개가 있다고 해 봅니다.
각 행(row)은 하나의 입력 샘플(sample)입니다.
같은 가중치 행렬 \(W\)를 곱합니다.
계산 결과는 다음과 같습니다.
첫 번째 행은 첫 번째 샘플의 출력이고, 두 번째 행은 두 번째 샘플의 출력입니다.
- 여러 입력 샘플을 행렬로 묶습니다.
- 같은 가중치 행렬을 곱합니다.
- 여러 출력 샘플을 한꺼번에 얻습니다.
이것은 배치(batch) 계산의 기본 직관과 연결됩니다. 모델은 입력 하나씩만 처리할 수도 있지만, 여러 입력을 묶어 한 번에 계산하면 같은 계산 구조를 반복해서 재사용할 수 있습니다.
선형 변환은 표현을 다른 공간으로 옮기는 계산이다¶
선형 변환(linear transformation)은 벡터에 행렬을 곱해 다른 벡터로 바꾸는 계산으로 먼저 이해할 수 있습니다.
- 입력 벡터를 준비합니다.
- 가중치 행렬을 적용합니다.
- 출력 벡터를 얻습니다.
예를 들어 입력이 2개 값이고 출력이 3개 값이라면, 가중치 행렬은 입력 2개를 받아 출력 3개를 만들 수 있는 모양이어야 합니다.
이 식은 다음처럼 읽을 수 있습니다.
- 2개의 값으로 표현된 입력을 받습니다.
- 3개의 값으로 표현된 출력으로 바꿉니다.
2차원에서는 이 변화를 그림으로 볼 수 있습니다. 다음 예시는 입력 벡터 \(\mathbf{x} = [2,\ 3]\)에 단순한 행렬 \(W\)를 곱해 \(\mathbf{y} = [2,\ 4]\)로 옮기는 모습을 보여 줍니다.
이 그림에서 중요한 것은 숫자 계산 자체보다 관점입니다. 벡터는 공간 안의 위치처럼 읽을 수 있고, 행렬 곱은 그 위치를 다른 위치로 옮기는 계산으로 볼 수 있습니다.
실제 AI 모델에서는 이런 변환이 2차원 그림보다 훨씬 많은 차원에서 일어납니다. 그래서 사람이 직접 눈으로 그리기는 어렵지만, 기본 사고는 같습니다. 입력 표현은 가중치 행렬을 지나며 다른 표현으로 이동합니다.
이 관점이 AI에서 중요합니다. 모델은 입력 표현을 그대로 두지 않고, 여러 단계의 계산을 거치며 다른 표현으로 바꿉니다.
- 원래 입력 표현이 있습니다.
- 첫 번째 변환을 거칩니다.
- 중간 표현을 얻습니다.
- 다음 변환을 거칩니다.
- 출력에 가까운 표현으로 이동합니다.
신경망(neural network)의 층(layer)은 이런 변환을 여러 번 쌓는 구조로 볼 수 있습니다. 다만 실제 신경망은 선형 변환만으로 구성되지 않습니다. 활성화 함수(activation function), 정규화(normalization), attention 같은 다른 계산도 함께 등장합니다. 여기서는 선형 변환이 그중 중요한 기본 블록이라는 점만 봅니다.
행렬 곱은 무엇을 재사용하는가¶
이 절의 제목은 “행렬 곱은 무엇을 재사용하는가”입니다. 답은 세 가지로 정리할 수 있습니다.
첫째, 같은 가중합 구조를 재사용합니다.
- 곱합니다.
- 더합니다.
- 하나의 출력값을 만듭니다.
둘째, 같은 가중치 행렬을 여러 입력 샘플에 재사용합니다.
- 샘플 A에도 같은
W를 적용합니다. - 샘플 B에도 같은
W를 적용합니다. - 샘플 C에도 같은
W를 적용합니다.
셋째, 같은 변환 구조를 여러 층에서 반복합니다.
- 표현을 바꿉니다.
- 다시 표현을 바꿉니다.
- 더 문제에 맞는 표현으로 이동합니다.
이렇게 보면 행렬 곱은 단순 계산 공식이 아니라, 모델이 데이터를 반복적으로 바꾸고 압축하고 재표현하는 기본 장치입니다.
사례 및 예시¶
사례 1. 두 특징으로 두 개의 새 점수를 만드는 계산¶
학습자가 행렬 곱을 처음 볼 때는 숫자를 줄 세워 곱하는 규칙처럼 느낄 수 있습니다. 하지만 실제 모델 계산에서는 입력 특징을 여러 가중치 조합으로 다시 묶어 새 점수를 만든다는 관점이 더 중요합니다.
예를 들어 한 상품을 가격대와 구매 빈도 두 값으로 표현했다고 해 보겠습니다. 이 두 입력 특징에 서로 다른 가중치 조합 두 개를 적용하면, 가격 영향 점수와 구매 성향 점수처럼 두 개의 새 출력값을 만들 수 있습니다. 바로 이 같은 입력으로 여러 가중합을 반복 계산하는 구조가 행렬 곱입니다.
이 사례는 왜 행렬 곱이 단순한 위치별 곱이 아닌지도 보여 줍니다. 같은 위치끼리만 곱하는 것이 아니라, 한 입력 벡터의 값들을 각 출력에 맞는 가중치와 조합해 새 표현을 만들어 내기 때문입니다.
즉 행렬 곱은 계산 규칙 암기보다 입력을 다른 표현 공간으로 바꾸는 재사용 가능한 계산으로 읽습니다. 이 감각은 신경망 층(layer), 선형 변환(linear transformation), 가중치 행렬(weight matrix) 설명으로 그대로 이어집니다.
체크리스트¶
- 행렬 곱(matrix multiplication)과 위치별 곱(element-wise multiplication)을 구분할 수 있다.
- 가중합(weighted sum)이 입력값에 가중치를 곱해 더하는 계산임을 설명할 수 있다.
- 행렬 곱을 여러 가중합을 한꺼번에 계산하는 방식으로 읽을 수 있다.
- 입력 벡터의 길이와 가중치 행렬의 입력 방향 크기가 맞아야 함을 설명할 수 있다.
- 여러 샘플을 행렬로 묶어 같은 가중치 행렬을 적용하는 배치(batch) 계산의 직관을 설명할 수 있다.
- 선형 변환(linear transformation)을 입력 표현을 다른 출력 표현으로 바꾸는 계산으로 설명할 수 있다.
- 행렬 곱이 신경망의 층(layer), 임베딩, 분류에서 다시 등장하는 이유를 말할 수 있다.
- 행렬 곱을
입력 -> 가중치 행렬 -> 출력의 가중합 재사용 구조로 설명할 수 있다. - 입력 차원, 출력 차원, 가중치 행렬 shape를 함께 읽으며 위치별 곱과 구분할 수 있다.
출처와 참고 자료¶
- Marc Peter Deisenroth, A. Aldo Faisal, Cheng Soon Ong, Mathematics for Machine Learning, Cambridge University Press, 2020, 확인 날짜: 2026-07-19.
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press, 2016, 확인 날짜: 2026-07-19.
- Charles R. Harris et al., Array Programming with NumPy, Nature, 2020, 확인 날짜: 2026-07-19.
- NumPy Developers, numpy.matmul, NumPy User Guide, 확인 날짜: 2026-07-19. 행렬 곱의 shape 조건과
@연산자 의미를 확인하는 공식 참고 자료입니다. - Google for Developers, Neural networks: Nodes and hidden layers, Machine Learning Crash Course, 확인 날짜: 2026-07-19. 신경망 노드가 입력과 가중치의 곱을 더해 계산된다는 설명을 확인하는 공식 교육 자료입니다.