1장. 준비 수학과 Transformer 개요
실습 1 — 벡터와 행렬을 NumPy 로 만들기
낱말 하나를 숫자 6개짜리 벡터로, 문장 하나를 3행 4열 행렬로 만들어 shape 를 읽어 봅니다. 노트북 1일차의 셀 6과 셀 8입니다. 출력은 이 PC 에서 노트북을 실제로 실행한 결과입니다.
코드를 단계별로 따라가기 전에 실행 흐름을 한 장으로 봅니다. 요리책의 순서도처럼 위에서 아래로 화살표를 따라 읽습니다.
| 단계 | 하는 일 | 반복과 조건 | 핵심 한 줄 |
|---|---|---|---|
| 1 | 낱말 하나를 숫자 6개 벡터로 적고 shape 찍기 | 없음 | student_vec = np.array([0.2, -1.0, 0.5, 0.0, 1.3, -0.4]) |
| 2 | 0~11 을 3행 4열로 놓아 문장 행렬 만들기 | 없음 | sentence_mat = np.arange(12).reshape(3, 4) |
- 흐름도의 모양: 위아래가 둥근 알약은 시작과 끝, 네모는 하는 일, 화살표는 실행 차례입니다. 마름모는 "반복을 더 할까?", "조건이 맞나?"처럼 묻는 곳인데, 이 실습에는 묻는 곳이 없어 마름모가 하나도 없습니다. 위에서 아래로 줄마다 한 번씩만 지나갑니다.
- 한 줄기 흐름: 모든 네모가 짙은 청록 한 줄로 이어집니다. 2단계는 1단계의
import numpy as np에 기대므로 차례를 바꾸면np를 모른다는 오류가 납니다. - 끝부분: 두 단계 모두
print로 값과 shape 를 찍고 끝납니다. pandas 에서 표를 만든 뒤df.shape부터 보는 습관과 같습니다.
1단계. 낱말 하나를 벡터로 적기
낱말 "student" 를 숫자 6개로 적어 봅니다. 성적표의 한 행처럼 숫자를 한 줄로 늘어놓은 것이 벡터입니다.
# NumPy = Numerical Python. 숫자 배열을 빠르게 계산하는 도구이고, 관례대로 np 라는 짧은 이름으로 부른다
import numpy as np # 수치 계산 라이브러리 NumPy를 불러옵니다.
# np.array(리스트) = 파이썬 리스트를 NumPy 배열로 바꾼다
# 숫자 6개는 실제 모델이 배운 값이 아니라 설명을 위해 고른 값이다
student_vec = np.array([0.2, -1.0, 0.5, 0.0, 1.3, -0.4]) # 단어 'student'를 숫자 6개로 표현합니다. 벡터의 차원은 6입니다.
# 결과: 벡터: [ 0.2 -1. 0.5 0. 1.3 -0.4] (NumPy 는 -1.0 을 "-1." 로 줄여 찍는다)
print("벡터:", student_vec)
# .shape = 배열의 모양. 1차원 배열은 (원소 수,) 로 나오고, 끝의 쉼표는 "숫자 하나짜리 튜플"이라는 표시다
# 결과: shape: (6,) → 차원 6짜리 벡터 1개
print("shape:", student_vec.shape, "→ 차원 6짜리 벡터 1개") # shape가 (6,)이면 숫자 6개가 한 줄로 놓인 1차원 배열입니다.벡터: [ 0.2 -1. 0.5 0. 1.3 -0.4]
shape: (6,) → 차원 6짜리 벡터 1개2단계. 문장 하나를 행렬로 적기
낱말 3개를 각각 숫자 4개로 적어 3행 4열 표로 만듭니다. 성적표의 여러 행을 쌓은 것과 같고, 이 장의 1단계에서 만든 np 를 그대로 씁니다.
# np.arange(12) = array range. 0부터 11까지 정수 12개를 한 줄로 만든다
# .reshape(3, 4) = 숫자 12개를 3행 4열로 다시 배치한다(3 × 4 = 12 라서 딱 맞는다)
sentence_mat = np.arange(12).reshape(3, 4) # 단어 3개를 각각 숫자 4개로 표현한다고 가정하고 3행 4열 배열로 나타냅니다.
# 결과: 첫 행 [0 1 2 3] 이 첫 낱말, 둘째 행 [4 5 6 7] 이 둘째 낱말, 셋째 행 [8 9 10 11] 이 셋째 낱말
print(sentence_mat)
# 결과: shape: (3, 4) → (단어 수, 차원)
print("shape:", sentence_mat.shape, "→ (단어 수, 차원)")[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
shape: (3, 4) → (단어 수, 차원)이 실습이 뜻하는 것
학생 한 명의 성적 줄(벡터)을 만들고, 반 전체 성적표(행렬)를 만든 일입니다. 모델에서는 낱말 하나가 벡터, 문장 하나가 행렬입니다. 여기서 낱말 하나가 student_vec, 문장 하나가 sentence_mat 입니다.
| 단계 | 출력 | 뜻 |
|---|---|---|
| 1. 벡터 | shape: (6,) | 숫자 6개가 한 줄로 놓인 1차원 배열, 차원 6 |
| 2. 행렬 | shape: (3, 4) | 낱말 3개 × 차원 4, 문장 하나 |
한 줄로 줄이면, 낱말은 (d_model,) 벡터이고 문장은 (낱말 수, d_model) 행렬입니다.
코드 설명
np.array([...])는 리스트를 NumPy 배열로 바꿉니다. 소수가 하나라도 있으면 모든 원소가 소수(float)가 되어-1.0이-1.로 찍힙니다..shape는 배열의 모양입니다.(6,)은 1차원,(3, 4)는 2차원입니다. pandas 의df.shape와 읽는 법이 같습니다.np.arange(12).reshape(3, 4)는 0~11을 3행 4열로 다시 놓습니다. 숫자 개수(12)와 3×4 가 같아야 하고, 다르면 오류가 납니다.- 2단계는 1단계의
import numpy as np에 기댑니다. 같은 노트북에서 1단계를 먼저 실행합니다. - 실제 Transformer 에서는 이 숫자들을 사람이 정하지 않고 학습으로 정합니다. 2장의 임베딩이 그 표입니다.