FOUNDATION · 약 60분
벡터와 텐서
Transformer가 읽는 문장은 결국 숫자의 묶음입니다. 첫 챕터에서는 그 숫자가 어떻게 크기, 방향, 그리고 관계를 갖게 되는지 직접 움직이며 확인합니다.
새로운 학습자들이 이 챕터를 학습하고 있어요.
- 벡터를 방향과 크기로 설명할 수 있다.
- 덧셈, 뺄셈, 스칼라 배와 정규화를 해석할 수 있다.
- NumPy의 rank-1 배열, 행·열벡터와 reshape를 구분할 수 있다.
- stack·axis·브로드캐스팅으로 batch, tokens, d_model shape를 읽고 오류를 고칠 수 있다.
- 내적을 두 벡터의 정렬 정도로 해석할 수 있다.
CHAPTER COMPASS
지금 어디를 배우고 있나요?
- 01기초 계산
- 02표현과 순서
- 03Attention
- 04조립과 생성
여기서 익힌 shape와 내적은 뒤에서 token 행렬을 읽고 Q·K 관계 점수를 만드는 규칙으로 돌아옵니다.
클릭 없이 뜻부터 확인하세요
아래 용어 읽기와 의견 보내기는 진도에 포함되지 않습니다.
- 벡터vector
- 순서가 있는 숫자 묶음으로 하나의 상태나 방향을 표현합니다.
- 차원dimension
- 벡터를 구성하는 숫자의 개수입니다.
- Shape
- 각 축에 몇 개의 항목이 있는지 적은 배열의 구조입니다.
- 축axis
- 배열을 읽거나 합치거나 줄일 때 기준이 되는 방향입니다.
- 내적dot product
- 두 벡터의 대응 값을 곱해 더한 값으로 정렬 정도를 요약합니다.
설명이 막히면 현재 챕터와 위치를 포함해 알려주세요.
숫자 두 개가 방향이 되는 순간
벡터 v = [3, 2]는 단순히 숫자 두 개가 아닙니다. 원점에서 오른쪽으로 3, 위로 2만큼 이동하는 화살표입니다. 숫자의 개수가 늘어나면 눈으로 그릴 수 없을 뿐, 같은 규칙이 계속됩니다.
중요한 것은 숫자 하나하나의 이름보다 벡터 전체가 어떤 상태를 표현하는가입니다. 이미지의 픽셀, 사용자의 취향, 토큰의 의미처럼 서로 다른 대상을 같은 계산 규칙으로 다룰 수 있게 해 주는 공통 언어가 벡터입니다.
벡터를 직접 움직이며 크기와 방향을 확인하세요
- 벡터 v
- [1.63, 1.15, 0.00]
- 크기 ‖v‖
- 1.99
- 방향 θ
- 35.2°
크기
원점에서 얼마나 멀리 떨어져 있는지를 하나의 값으로 요약합니다.
방향
어떤 특징의 조합을 향하는지, 다른 벡터와 얼마나 정렬되는지 말합니다.
차원
벡터를 표현하는 숫자의 개수입니다. 모델에서는 보통 d_model로 표시합니다.
READ THE SYMBOLS
수식은 기호로 압축한 문장입니다
기호를 하나씩 눌러 소리 내어 읽어 보세요.
벡터 브이
굵은 글씨나 화살표로도 쓰며, 순서가 있는 숫자 묶음 전체를 가리킵니다.
의 아래 2는 “두 번째 성분”, 의 위 2는 “그 값을 제곱”한다는 뜻입니다.
- 01성분 찾기
- 02각 성분 제곱하기
- 03제곱근으로 길이 구하기
읽기: “브이의 길이는 각 성분을 제곱해 더한 뒤 제곱근을 구한다.”
에서 는 무엇일까요?
2입니다. 아래 첨자 2는 대괄호 안 두 번째 값을 가리킵니다.
는 그림의 어느 부분일까요?
원점과 를 잇는 대각선 화살표의 길이입니다.
임베딩 벡터도 같습니다. 각 차원이 단어의 특징 하나와 정확히 대응하지는 않지만, 벡터 사이의 상대적인 방향과 거리가 의미를 표현합니다.
배열의 shape와 크기를 출력하고, 같은 벡터를 좌표 평면의 화살표로 그립니다.
실행 결과가 여기에 표시됩니다.
벡터 연산은 “이동하고, 비교하고, 크기를 맞추는” 규칙입니다
같은 차원의 벡터는 좌표별로 더하고 뺍니다. 스칼라를 곱하면 방향을 유지하거나 뒤집으면서 크기를 바꾸고, 노름으로 나누면 방향만 남긴 단위벡터가 됩니다.
아래 실험실은 원본 노트북의 덧셈 [1, 2] + [5, -4], 스칼라 배, 단위벡터 예제를 한곳에 모았습니다. 결과를 보기 전에 먼저 종이나 머릿속으로 예측해 보세요.
VECTOR WORKBENCH
연산을 바꾸고 결과를 예측하세요
각 좌표의 결과와 방향 변화를 머릿속이나 종이에 먼저 적어 보세요.
덧셈·뺄셈
수학에서는 차원과 방향이 같은 벡터끼리 대응 원소를 계산합니다.
스칼라 배
양수는 방향을 유지하고, 음수는 방향을 뒤집으며, 0은 영벡터를 만듭니다.
정규화와 v̂
는 “브이 햇”이라고 읽습니다. 로 길이를 1로 만들며, 영벡터에는 정의되지 않습니다.
원소 수가 같아도 shape는 다를 수 있습니다
수학의 벡터에는 행과 열 방향이 있습니다. NumPy에서는 (3,), (1, 3), (3, 1)이 서로 다릅니다. 특히 1차원 배열에 .T를 붙여도 shape가 바뀌지 않는 점이 자주 실수를 만듭니다.
수학에서는 전치를 , “브이 전치”라고 읽습니다. 위 첨자 T는 값을 바꾸는 것이 아니라 행과 열의 방향을 바꾸라는 표시입니다.
RESHAPE BLOCKS
값은 그대로 두고 shape만 다시 배치해 보세요
원소 여섯 개가 목표 shape를 채울 수 있는지 먼저 예측한 뒤 NumPy의 결과를 확인합니다.6 개 원소shape (6,)- axis 0원소
| i0 | i1 | i2 | i3 | i4 | i5 |
|---|---|---|---|---|---|
| 11 | 22 | 33 | 44 | 55 | 66 |
(6,)→shape (6,)- axis 0원소
| · | · | · | · | · | · |
a.reshape(6)목표 shape의 모든 크기를 곱해 원소 수 6과 비교하세요.
열벡터 (3, 1)과 행벡터 (1, 3)의 덧셈은 수학의 벡터 덧셈이 아닙니다. NumPy는 두 축을 브로드캐스팅해 (3, 3) 행렬을 만듭니다.
SHAPE DETECTIVE
실행 전에 원인을 찾고 코드를 고쳐 보세요
정답을 외우기보다 shape가 만들어지는 규칙을 세 번 추적합니다.
전치했는데 왜 세로가 되지 않을까요?
rank-1 배열에는 바꿀 두 번째 축이 없습니다. 실행 전에 출력 shape를 예측하세요.
v = np.array([1, 2, 3])
print(v.T.shape)벡터를 더했는데 표가 생겼습니다
NumPy는 길이만 보는 대신 오른쪽부터 각 축을 비교합니다.
column = np.ones((3, 1))
row = np.ones((1, 3))
result = column + row숫자보다 먼저 축의 의미를 읽어 보세요
문장 두 개, 문장마다 토큰 세 개, 토큰마다 숫자 네 개가 있습니다.
batch = np.stack([sentence_a, sentence_b])
print(batch.shape)벡터를 쌓으면 Transformer의 입력이 됩니다
토큰 하나는 벡터이고, 문장은 토큰 벡터의 행렬입니다. 문장을 여러 개 묶으면 [batch, tokens, d_model] 순서의 텐서가 됩니다.
여기서 shape는 데이터의 내용이 아니라 계산이 통과할 수 있는 구조를 설명합니다. Transformer 디버깅의 많은 오류는 값이 아니라 축의 순서를 잘못 읽어서 생깁니다.
SHAPE EXPLORER
텐서를 읽는 세 가지 축
[4]하나의 토큰 임베딩
토큰 하나를 네 개의 숫자로 표현한 rank-1 벡터입니다.
- 축 1
shape (4,)- axis 0d_model
| d1 | d2 | d3 | d4 | |
|---|---|---|---|---|
| token | 0.8 | -0.3 | 1.1 | 0.2 |
위치 정보는 모든 문장에 같은 규칙으로 더해집니다
[2, 3, 4]+positions[3, 4]=encoded tokens[2, 3, 4]필수 실습 · AXIS BUILDER
축을 만들고, 늘리고, 없애 보세요
연산과 axis를 바꾼 뒤 결과 shape를 먼저 예측하세요. 세 연산을 모두 맞히면 필수 실습이 완료됩니다.shape (3,)- axis 0원소
| d0 | d1 | d2 |
|---|---|---|
| 1 | 2 | 3 |
shape (3,)- axis 0원소
| d0 | d1 | d2 |
|---|---|---|
| -1 | -2 | -3 |
np.stack([a, b], axis=0)stack은 같은 shape의 배열을 놓을 새 축을 하나 만듭니다.
shape를 먼저 선택하세요.
두 벡터를 움직여 보세요
슬라이더로 v와 w를 바꾸면 내적, 각도, 코사인 유사도가 함께 변합니다. 먼저 내적의 부호를 예측한 뒤 벡터를 움직여 확인해 보세요.
내적은 크기와 방향을 동시에 포함합니다. 크기의 영향을 제거한 코사인 유사도는 두 벡터가 같은 방향인지에만 집중하며, 임베딩 검색과 Attention 점수의 직관으로 이어집니다.
[3, 2][-1, 3]- 내적
- 3.00
- 각도
- 74.7°
- 3.61
- 0.263
두 벡터는 대체로 같은 방향을 바라봅니다.
0°에서 180°까지 각도를 움직이며 같은 방향, 직각, 반대 방향이 각각 1, 0, -1에 대응하는지 확인합니다.
실행 결과가 여기에 표시됩니다.
같은 shape의 벡터가 파라미터를 갱신합니다
파라미터 와 gradient 는 같은 shape의 벡터입니다. W = [0.20, -0.40], grad = [-0.60, 0.30], eta = 0.10이면 의 좌표별 뺄셈 결과는 [0.26, -0.43]입니다.
내적이 token 관계 점수가 됩니다
두 벡터의 내적은 관계를 하나의 점수로 바꿉니다. Attention에서는 query와 key의 내적을 여러 token에 대해 계산하고, 그 점수를 어느 value를 얼마나 읽을지 결정하는 weight로 바꿉니다.
이해 확인: 계산 전에 구조를 예측하기
Transformer 코드를 읽을 때는 계산값뿐 아니라 방향, 예외 조건, 각 축의 의미를 먼저 추적하는 습관이 중요합니다.
CHECKPOINT
이제 숫자의 모양과 관계를 먼저 읽을 수 있습니다.
벡터의 방향과 크기를 설명하고, reshape와 axis를 이용해 batch, tokens, d_model shape를 추적하며, 내적의 부호를 예측할 수 있다면 첫 챕터의 목표를 달성했습니다.
남은 조건: Axis Builder 세 연산 · Shape Detective 세 미션 · 이해 확인 5문제