트랜스포머·PEFT 2일 과정1장 · 준비 수학과 Transformer 개요3 / 17← 이전목차다음 →MetaContents

1장. 준비 수학과 Transformer 개요

벡터와 행렬: 숫자를 담는 두 가지 모양

학교 성적표를 떠올려 봅니다. 민지의 국어, 수학, 영어 점수는 한 줄에 놓인 숫자 세 개입니다. 이 한 줄이 벡터입니다. 반 학생 전체의 성적표는 이런 줄을 여러 개 쌓은 표이고, 이것이 행렬입니다. 모델도 같은 방식으로 낱말을 다룹니다. "student" 라는 낱말 하나를 숫자 여러 개로 된 한 줄로 적고, 문장 하나는 낱말마다 한 줄씩 쌓은 표로 적습니다.

벡터 (6,), 행렬 (3, 4), shape 의 세 상자를 나란히 놓은 비교 그림

왼쪽 상자는 숫자 6개를 한 줄로 놓은 벡터입니다. shape 는 (6,) 입니다. 가운데 상자는 낱말 3개를 각각 숫자 4개로 적은 행렬이고, shape 는 (3, 4) 입니다. 오른쪽 상자의 shape 는 pandas 의 df.shape 와 같은 꼴입니다. 앞 숫자가 행 수, 뒤 숫자가 열 수입니다.

벡터와 행렬 견주기

이름생김새shape 예성적표로 치면모델 안에서
벡터숫자 한 줄(6,)학생 한 명의 점수 줄낱말 하나의 숫자 묶음
행렬숫자 표(3, 4)반 전체 성적표문장 하나(낱말 3개 × 차원 4)
차원한 줄의 숫자 개수d_model = 4과목 수낱말 하나를 적는 숫자 개수

짧은 예시

Python
import numpy as np
import pandas as pd

# 두 학생의 세 과목 점수표(설명을 위해 정한 값)
report = pd.DataFrame(
    {"국어": [90, 60], "수학": [80, 75], "영어": [70, 95]},
    index=["민지", "준호"],
)

# to_numpy(): DataFrame 에서 숫자만 꺼내 NumPy 배열(행렬)로 바꾼다
table = report.to_numpy()
print("성적표 행렬 shape:", table.shape)     # 결과: 성적표 행렬 shape: (2, 3) → 학생 2명, 과목 3개

# table[0]: 첫 행만 꺼낸다. 행 하나는 벡터다
print("민지 벡터:", table[0])                # 결과: 민지 벡터: [90 80 70]
print("민지 벡터 shape:", table[0].shape)    # 결과: 민지 벡터 shape: (3,)

이 코드가 뜻하는 것

성적표 한 장을 행렬로, 학생 한 명의 줄을 벡터로 꺼내 본 코드입니다. 여기서 성적표가 table, 민지의 점수 줄이 table[0] 입니다.

줄하는 일쉽게 말하면
report.to_numpy()표에서 숫자만 꺼내 2차원 배열로 만든다이름표를 떼고 숫자만 남기기
table.shape행 수와 열 수를 본다학생 2명, 과목 3개
table[0]첫 행을 꺼낸다민지의 점수 줄 하나

(2, 3) 과 (3,) 의 차이를 눈여겨봅니다. 행렬은 숫자 두 개로, 벡터는 숫자 하나와 쉼표로 shape 가 나옵니다. 뒤에서 문장 하나가 (낱말 수, d_model) 행렬로 나올 때 이 읽는 법을 그대로 씁니다.

주의할 점

  • (3,) 과 (1, 3) 은 다릅니다. 앞은 1차원 벡터이고, 뒤는 행이 하나인 2차원 행렬입니다. 숫자는 같아도 곱셈 규칙이 달라지므로 shape 를 자주 찍어 봅니다.
  • 실제 모델의 벡터는 훨씬 깁니다. 이 장의 예는 숫자 4~6개지만, 원 논문의 Transformer 는 낱말 하나를 숫자 512개로 적습니다.
← 이전 절1장 · 용어 짚고 가기다음 절 →1장 · 행렬곱과 내적: 곱하고 더하기