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

1장. 준비 수학과 Transformer 개요

실습 1 — 벡터와 행렬을 NumPy 로 만들기

낱말 하나를 숫자 6개짜리 벡터로, 문장 하나를 3행 4열 행렬로 만들어 shape 를 읽어 봅니다. 노트북 1일차의 셀 6과 셀 8입니다. 출력은 이 PC 에서 노트북을 실제로 실행한 결과입니다.

코드를 단계별로 따라가기 전에 실행 흐름을 한 장으로 봅니다. 요리책의 순서도처럼 위에서 아래로 화살표를 따라 읽습니다.

실습 1 코드의 실행 흐름도. NumPy 를 불러온 뒤 숫자 6개로 student_vec 벡터를 만들어 shape (6,) 을 찍고, np.arange(12).reshape(3, 4) 로 sentence_mat 행렬을 만들어 shape (3, 4) 를 찍고 끝난다
단계하는 일반복과 조건핵심 한 줄
1낱말 하나를 숫자 6개 벡터로 적고 shape 찍기없음student_vec = np.array([0.2, -1.0, 0.5, 0.0, 1.3, -0.4])
20~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개로 적어 봅니다. 성적표의 한 행처럼 숫자를 한 줄로 늘어놓은 것이 벡터입니다.

Python
# 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 를 그대로 씁니다.

Python
# 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장의 임베딩이 그 표입니다.
← 이전 절1장 · 실습 지도다음 절 →1장 · 실습 2 — 행렬곱, 내적, Softmax 계산하기