Rootorial
Python · NumPy
CHAPTER 01
1 / 10

FOUNDATION · 약 60분

01

벡터와 텐서

Transformer가 읽는 문장은 결국 숫자의 묶음입니다. 첫 챕터에서는 그 숫자가 어떻게 크기, 방향, 그리고 관계를 갖게 되는지 직접 움직이며 확인합니다.

새로운 학습자들이 이 챕터를 학습하고 있어요.

학습 목표
  • 벡터를 방향과 크기로 설명할 수 있다.
  • 덧셈, 뺄셈, 스칼라 배와 정규화를 해석할 수 있다.
  • NumPy의 rank-1 배열, 행·열벡터와 reshape를 구분할 수 있다.
  • stack·axis·브로드캐스팅으로 batch, tokens, d_model shape를 읽고 오류를 고칠 수 있다.
  • 내적을 두 벡터의 정렬 정도로 해석할 수 있다.

CHAPTER COMPASS

지금 어디를 배우고 있나요?

핵심 경로만 완료 · 선택 실습은 건너뛰어도 됩니다
  1. 01기초 계산
  2. 02표현과 순서
  3. 03Attention
  4. 04조립과 생성
TRANSFORMER에서 다시 만나는 곳

여기서 익힌 shape와 내적은 뒤에서 token 행렬을 읽고 Q·K 관계 점수를 만드는 규칙으로 돌아옵니다.

먼저 읽는 핵심 용어

클릭 없이 뜻부터 확인하세요

아래 용어 읽기와 의견 보내기는 진도에 포함되지 않습니다.

벡터vector
순서가 있는 숫자 묶음으로 하나의 상태나 방향을 표현합니다.
차원dimension
벡터를 구성하는 숫자의 개수입니다.
Shape
각 축에 몇 개의 항목이 있는지 적은 배열의 구조입니다.
axis
배열을 읽거나 합치거나 줄일 때 기준이 되는 방향입니다.
내적dot product
두 벡터의 대응 값을 곱해 더한 값으로 정렬 정도를 요약합니다.

설명이 막히면 현재 챕터와 위치를 포함해 알려주세요.

01 — VECTOR

숫자 두 개가 방향이 되는 순간

벡터 v = [3, 2]는 단순히 숫자 두 개가 아닙니다. 원점에서 오른쪽으로 3, 위로 2만큼 이동하는 화살표입니다. 숫자의 개수가 늘어나면 눈으로 그릴 수 없을 뿐, 같은 규칙이 계속됩니다.

중요한 것은 숫자 하나하나의 이름보다 벡터 전체가 어떤 상태를 표현하는가입니다. 이미지의 픽셀, 사용자의 취향, 토큰의 의미처럼 서로 다른 대상을 같은 계산 규칙으로 다룰 수 있게 해 주는 공통 언어가 벡터입니다.

벡터를 직접 움직이며 크기와 방향을 확인하세요

벡터의 기초 › 1. 벡터 한눈에 보기실습 모드
끝점을 드래그하거나 방향키로 움직일 수 있습니다. Shift와 방향키를 함께 누르면 더 크게 이동합니다.
끝점을 드래그하거나 방향키로 움직여 보세요
벡터 v
[1.63, 1.15, 0.00]
크기 ‖v‖
1.99
방향 θ
35.2°
MAGNITUDE

크기

원점에서 얼마나 멀리 떨어져 있는지를 하나의 값으로 요약합니다.

DIRECTION

방향

어떤 특징의 조합을 향하는지, 다른 벡터와 얼마나 정렬되는지 말합니다.

DIMENSION

차원

벡터를 표현하는 숫자의 개수입니다. 모델에서는 보통 d_model로 표시합니다.

READ THE SYMBOLS

수식은 기호로 압축한 문장입니다

기호를 하나씩 눌러 소리 내어 읽어 보세요.

이렇게 읽어요

벡터 브이

굵은 글씨나 화살표로도 쓰며, 순서가 있는 숫자 묶음 전체를 가리킵니다.

v=[3,2]\mathbf{v} = [3, 2]
아래 첨자와 위 첨자는 달라요

v2v_2의 아래 2는 “두 번째 성분”, v22v_2^2의 위 2는 “그 값을 제곱”한다는 뜻입니다.

성분에서 길이로먼저 [3, 2]로 계산해 봅시다
  1. 01
    성분 찾기v=[3,2]\mathbf{v} = [3, 2]
  2. 02
    각 성분 제곱하기32+22=133^2 + 2^2 = 13
  3. 03
    제곱근으로 길이 구하기133.606\sqrt{13} \approx 3.606

읽기: “브이의 길이는 각 성분을 제곱해 더한 뒤 제곱근을 구한다.”

성분이 n개여도 같은 규칙v2=v12+v22++vn2\lVert \mathbf{v} \rVert_2 = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}
v=[3,2]\mathbf{v} = [3, 2]에서 v2v_2는 무엇일까요?

2입니다. 아래 첨자 2는 대괄호 안 두 번째 값을 가리킵니다.

v2\lVert \mathbf{v} \rVert_2는 그림의 어느 부분일까요?

원점과 (3,2)(3, 2)를 잇는 대각선 화살표의 길이입니다.

임베딩 벡터도 같습니다. 각 차원이 단어의 특징 하나와 정확히 대응하지는 않지만, 벡터 사이의 상대적인 방향과 거리가 의미를 표현합니다.

Python벡터를 만들고 크기와 방향 확인하기

배열의 shape와 크기를 출력하고, 같은 벡터를 좌표 평면의 화살표로 그립니다.

실행 대기

실행 결과가 여기에 표시됩니다.

02 — OPERATIONS

벡터 연산은 “이동하고, 비교하고, 크기를 맞추는” 규칙입니다

같은 차원의 벡터는 좌표별로 더하고 뺍니다. 스칼라를 곱하면 방향을 유지하거나 뒤집으면서 크기를 바꾸고, 노름으로 나누면 방향만 남긴 단위벡터가 됩니다.

아래 실험실은 원본 노트북의 덧셈 [1, 2] + [5, -4], 스칼라 배, 단위벡터 예제를 한곳에 모았습니다. 결과를 보기 전에 먼저 종이나 머릿속으로 예측해 보세요.

LIVE

VECTOR WORKBENCH

연산을 바꾸고 결과를 예측하세요

결과를 먼저 예측하세요
벡터 v
벡터 w
계산[1,2]+[5,4]\left[1,2\right] + \left[5,-4\right]

각 좌표의 결과와 방향 변화를 머릿속이나 종이에 먼저 적어 보세요.

추천 실험
SAME SHAPE

덧셈·뺄셈

수학에서는 차원과 방향이 같은 벡터끼리 대응 원소를 계산합니다.

SCALE

스칼라 배

양수는 방향을 유지하고, 음수는 방향을 뒤집으며, 0은 영벡터를 만듭니다.

UNIT VECTOR

정규화와 v̂

v^\widehat{\mathbf{v}}는 “브이 햇”이라고 읽습니다. v^=vv2\widehat{\mathbf{v}} = \frac{\mathbf{v}}{\lVert \mathbf{v} \rVert_2}로 길이를 1로 만들며, 영벡터에는 정의되지 않습니다.

03 — ORIENTATION

원소 수가 같아도 shape는 다를 수 있습니다

수학의 벡터에는 행과 열 방향이 있습니다. NumPy에서는 (3,), (1, 3), (3, 1)이 서로 다릅니다. 특히 1차원 배열에 .T를 붙여도 shape가 바뀌지 않는 점이 자주 실수를 만듭니다.

수학에서는 전치를 vT\mathbf{v}^{\mathsf{T}}, “브이 전치”라고 읽습니다. 위 첨자 T는 값을 바꾸는 것이 아니라 행과 열의 방향을 바꾸라는 표시입니다.

RESHAPE BLOCKS

값은 그대로 두고 shape만 다시 배치해 보세요

원소 여섯 개가 목표 shape를 채울 수 있는지 먼저 예측한 뒤 NumPy의 결과를 확인합니다.
6 개 원소
원본 배열 ashape (6,)
  1. axis 0원소
i0i1i2i3i4i5
112233445566
reshape(6,)
재배치 결과shape (6,)
  1. axis 0원소
······
실행할 코드a.reshape(6)
원소 여섯 개로 이 shape를 만들 수 있을까요?

목표 shape의 모든 크기를 곱해 원소 수 6과 비교하세요.

!
수학 규칙과 NumPy 동작을 구분하세요

열벡터 (3, 1)과 행벡터 (1, 3)의 덧셈은 수학의 벡터 덧셈이 아닙니다. NumPy는 두 축을 브로드캐스팅해 (3, 3) 행렬을 만듭니다.

SHAPE DETECTIVE

실행 전에 원인을 찾고 코드를 고쳐 보세요

정답을 외우기보다 shape가 만들어지는 규칙을 세 번 추적합니다.

0 / 3
01

전치했는데 왜 세로가 되지 않을까요?

rank-1 배열에는 바꿀 두 번째 축이 없습니다. 실행 전에 출력 shape를 예측하세요.

v = np.array([1, 2, 3])
print(v.T.shape)
출력되는 shape는 무엇일까요?
02

벡터를 더했는데 표가 생겼습니다

NumPy는 길이만 보는 대신 오른쪽부터 각 축을 비교합니다.

column = np.ones((3, 1))
row = np.ones((1, 3))
result = column + row
result의 shape는 무엇일까요?
03

숫자보다 먼저 축의 의미를 읽어 보세요

문장 두 개, 문장마다 토큰 세 개, 토큰마다 숫자 네 개가 있습니다.

batch = np.stack([sentence_a, sentence_b])
print(batch.shape)
[batch, tokens, d_model] 순서의 shape는?
각 미션은 선택한 뒤 ‘예측 확인하기’를 눌러야 완료됩니다.
04 — TENSOR SHAPE

벡터를 쌓으면 Transformer의 입력이 됩니다

토큰 하나는 벡터이고, 문장은 토큰 벡터의 행렬입니다. 문장을 여러 개 묶으면 [batch, tokens, d_model] 순서의 텐서가 됩니다.

여기서 shape는 데이터의 내용이 아니라 계산이 통과할 수 있는 구조를 설명합니다. Transformer 디버깅의 많은 오류는 값이 아니라 축의 순서를 잘못 읽어서 생깁니다.

LIVE

SHAPE EXPLORER

텐서를 읽는 세 가지 축

[4]
rank 1

하나의 토큰 임베딩

토큰 하나를 네 개의 숫자로 표현한 rank-1 벡터입니다.

1
dmodel=4d_{\mathrm{model}} = 4
하나의 토큰 임베딩shape (4,)
  1. axis 0d_model
d1d2d3d4
token0.8-0.31.10.2
BROADCASTING

위치 정보는 모든 문장에 같은 규칙으로 더해집니다

token embeddings[2, 3, 4]positions[3, 4]encoded tokens[2, 3, 4]

필수 실습 · AXIS BUILDER

축을 만들고, 늘리고, 없애 보세요

연산과 axis를 바꾼 뒤 결과 shape를 먼저 예측하세요. 세 연산을 모두 맞히면 필수 실습이 완료됩니다.
ashape (3,)
  1. axis 0원소
d0d1d2
123
bshape (3,)
  1. axis 0원소
d0d1d2
-1-2-3
선택한 연산np.stack([a, b], axis=0)

stack은 같은 shape의 배열을 놓을 새 축을 하나 만듭니다.

결과
?

shape를 먼저 선택하세요.

np.stack([a, b], axis=0)의 결과 shape는?

숫자를 계산하기 전에 shape의 어느 위치가 바뀌는지 확인하세요.

완료한 축 연산 0 / 3

05 — EXPLORE

두 벡터를 움직여 보세요

슬라이더로 vw를 바꾸면 내적, 각도, 코사인 유사도가 함께 변합니다. 먼저 내적의 부호를 예측한 뒤 벡터를 움직여 확인해 보세요.

내적은 크기와 방향을 동시에 포함합니다. 크기의 영향을 제거한 코사인 유사도는 두 벡터가 같은 방향인지에만 집중하며, 임베딩 검색과 Attention 점수의 직관으로 이어집니다.

LIVE
v[3, 2]
w[-1, 3]
빠른 실험
내적
3.00
각도
74.7°
v2\lVert \mathbf{v} \rVert_2
3.61
cosθ\cos\theta
0.263
원소별로 곱하고 모두 더하기

두 벡터는 대체로 같은 방향을 바라봅니다.

Python각도를 코사인 유사도로 바꾸기

0°에서 180°까지 각도를 움직이며 같은 방향, 직각, 반대 방향이 각각 1, 0, -1에 대응하는지 확인합니다.

실행 대기

실행 결과가 여기에 표시됩니다.

NEXT · CHAPTER 02

같은 shape의 벡터가 파라미터를 갱신합니다

파라미터 W\mathbf{W}와 gradient L\nabla L는 같은 shape의 벡터입니다. W = [0.20, -0.40], grad = [-0.60, 0.30], eta = 0.10이면 Wnext=WηL\mathbf{W}_{next}=\mathbf{W}-\eta\nabla L의 좌표별 뺄셈 결과는 [0.26, -0.43]입니다.

LATER · CHAPTERS 07–08

내적이 token 관계 점수가 됩니다

두 벡터의 내적은 관계를 하나의 점수로 바꿉니다. Attention에서는 query와 key의 내적을 여러 token에 대해 계산하고, 그 점수를 어느 value를 얼마나 읽을지 결정하는 weight로 바꿉니다.

06 — CHECK

이해 확인: 계산 전에 구조를 예측하기

Transformer 코드를 읽을 때는 계산값뿐 아니라 방향, 예외 조건, 각 축의 의미를 먼저 추적하는 습관이 중요합니다.

PREDICT BEFORE YOU RUN

실행하지 않고 연산 결과와 shape를 먼저 예측하세요

다섯 문제를 모두 맞히면 이 챕터를 완료할 수 있습니다.

01NumPy의 행벡터 (1, 3)과 열벡터 (3, 1)을 더하면 shape는?
02영벡터 [0,0][0, 0]을 단위벡터로 정규화하면?
03두 문장에 각각 토큰 4개가 있고 임베딩 차원이 8이라면 입력 shape는?
04텐서 [2, 4, 8]에 보정값 [4, 8]을 더한 결과 shape는?
05두 벡터가 직교하면 내적과 코사인 유사도는?
다섯 답을 고른 뒤 확인해 보세요.

CHECKPOINT

이제 숫자의 모양과 관계를 먼저 읽을 수 있습니다.

벡터의 방향과 크기를 설명하고, reshape와 axis를 이용해 batch, tokens, d_model shape를 추적하며, 내적의 부호를 예측할 수 있다면 첫 챕터의 목표를 달성했습니다.

남은 조건: Axis Builder 세 연산 · Shape Detective 세 미션 · 이해 확인 5문제