Lemma
수학, 거꾸로
도입 · 같은 화살표, 네 가지 옷

왜 그래픽, 물리, 머신러닝은 모두 같은 화살표를 훔쳐 쓸까?

(3,4)(3, 4). 이것은 화면 위의 점인가, 움직임을 일러주는 화살표인가, 속도인가, 사과를 나타내는 특징 벡터인가? 답은 무엇을 하느냐에 달려 있다 — 바로 그래서 가 응용 곳곳에서 가장 널리 공유되는 수학이 된다. 튜플은 같다. 산술도 같다. 바뀌는 건 역할, 그리고 그 위에 입혀지는 옷이다.

아래 위젯: 튜플 하나 AA, 튜플 하나 vv, 결과 A+cvA + cv. 역할 버튼을 누르면 — 기본/그래픽/물리/ML — 라벨만 바뀌고 그림은 그대로다. 그림은 바뀔 수 없다; 그 그림을 두고 풀어내는 이야기만 바뀐다.

위젯 — 벡터의 역할
점 A · (2.0, 1.0)
변위 v · (3.0, 3.0)
A + v · (5.0, 4.0)
A는 위치. v는 어떻게 움직일지. A + v는 도착점. 가장 군더더기 없는 읽기.
흐름
1

한 튜플, 여러 일

표기 (3,4)(3, 4)은 어딘가를 가리키는 손가락 — 하지만 그 끝에 놓이는 대상은 가지각색이다. 2D 평면 위의 위치로 읽으면, 오른쪽으로 3, 위로 4 떨어진 지점. **로 읽으면 명령: “어디 있든 오른쪽 3, 위로 4 움직여라.” 속도로 읽으면 비율: 초당 가로 3, 세로 4. 과일 분류기의 특징 벡터로 읽으면 (단맛 3, 신맛 4) — 기하적 해석이 전혀 없는 추상 특징 공간의 좌표. 튜플은 자신이 무엇인지 말하지 않는다.

벡터가 쓸모 있는 이유가 바로 이 모호함에 있다. “수 둘 이상을 묶어 하나로 다루고 싶다”는 모든 응용이 같은 도구 — 하나의 산술, 하나의 항등식 묶음 — 을 물려받고, 그것을 자기 영역의 방식으로 해석하는 일만 응용의 몫으로 남는다.

2

점: 어디인지

역할이 “위치”일 때, 튜플은 공간 속의 주소. 어디냐에는 답하지만, 어떻게 움직이느냐에는 답하지 않는다. 원점을 바꾸면 위치도 바뀐다 — 같은 물리적 점이 한 좌표계에선 (3,4)(3, 4)이고, 그 점에 원점을 둔 좌표계에선 (0,0)(0, 0)이 된다. 위치는 원점에 매달려 있다.

3

벡터: 어떻게 움직일지

역할이 “변위”일 때, 튜플은 이동 레시피: 어디 있든 x에 3, y에 4를 더하라. 핵심은 이것이 _원점에 무관하다_는 점이다 — 좌표계 원점을 옮겨도 두 점 사이의 변위는 그대로다. 포물선 운동 식과 경사하강법 갱신식이 축을 어디에 놓든 같은 모양으로 보이는 까닭이 여기 있다.

두 점을 빼면 벡터가 된다: v=BAv = B − A는 A에서 B로 가는 변위. 점에 벡터를 더하면 다른 점이 된다: A+v=BA + v = B. 두 점과 벡터 하나는 같은 그림 안에 살지만, 방향이라는 차원을 가진 건 벡터뿐이다.

# A vector is a tuple. Component-wise addition. Scalar multiplication.
# That's the whole arithmetic — every role uses these two operations.
def add(u, v):
    return tuple(a + b for a, b in zip(u, v))

def scale(c, v):
    return tuple(c * a for a in v)

A = (2, 1)
v = (3, 4)
add(A, v)              # → (5, 5)        (location → location)
scale(2, v)            # → (6, 8)        (twice the displacement)
scale(-1, v)           # → (-3, -4)      (the reverse)
add(A, scale(-1, v))   # → (-1, -3)      (going backward from A)
4

성분: 쪼개고, 계산하고, 합치기

2D 벡터는 x-, y- 으로 쪼개진다: v=(vx,vy)=vxx^+vyy^v = (v_x, v_y) = v_x · \hat{x} + v_y · \hat{y}, 여기서 x^\hat{x}y^\hat{y}는 각 축의 단위 벡터. 두 벡터의 덧셈은 성분끼리: (a,b)+(c,d)=(a+c,b+d)(a, b) + (c, d) = (a + c, b + d). 벡터에 cc를 곱하면 성분이 각자 그만큼 늘어난다: c(a,b)=(ca,cb)c · (a, b) = (c·a, c·b).

분해-계산-재조립 패턴은 너무나 흔해서 의식조차 되지 않는다. 포물선 운동 페이지는 발사 속도를 (v0cosθ,v0sinθ)(v₀ \cos θ, v₀ \sin θ)로 쪼개 각 성분을 1D 운동으로 따로 돌린다. 경사하강법 갱신은 wηLw − η·∇L을 벡터 뺄셈으로 적지만, 실제 구현은 모두 그 밑의 배열을 성분별로 처리한다. 성분이란, _벡터 산술이 소프트웨어 안에서 스칼라 산술로 옮겨 앉는 자리_다.

# Same arithmetic, four roles. The tuple is the same; the application slot
# is what gives it meaning.

# graphics: shift one Bezier control point by v.
control = (200, 60)
new_control = add(control, v)            # the curve translates with it.

# physics: a position-and-velocity update.
pos     = (0.0, 0.0)
vel     = (10.0, 14.0)         # m/s
dt      = 0.05                  # s
new_pos = add(pos, scale(dt, vel))        # one Euler step.

# ML: one gradient-descent step on a 2-parameter weight vector.
weights = (0.0, 0.0)
grad    = (-2.4, -1.8)         # ∇L at current weights
lr      = 0.1
new_weights = add(weights, scale(-lr, grad))

# In every block: add(point, scale(c, vector)). Same six characters of math.
5

두 연산, 예외 없음

벡터 산술에 있는 연산은 단 둘이다 — 두 벡터를 더한다, 하나에 수를 곱해 키운다. 이 한 묶음이 이 수학 전반에서 “선형”이라 불리는 모든 것을 그려낸다. 이 둘로 무엇을 짓는가:

  • 선형 보간. lerp(A,B,t)=(1t)A+tBlerp(A, B, t) = (1 − t)·A + t·B — 덧셈 한 번, 스칼라배 두 번. 베지에 곡선이 그 위에 올라앉는 바로 그 원시 연산이다.
  • 평행 이동. 도형의 모든 점을 같은 벡터 vv로 옮긴다 — 좌표 PP를 모두 P+vP + v로 갈아 끼우는 일.
  • 선형 결합. c1v1+c2v2+c₁v₁ + c₂v₂ + ⋯ 꼴의 모든 식. 계수 합이 1인 볼록 결합은, 베지에 위젯이 제어점을 한 층씩 줄여 가는 방식 그대로다.
  • 기저 분해. 2D 평면의 어떤 벡터든 vxx^+vyy^v_x · \hat{x} + v_y · \hat{y}. 기저를 다른 것으로 고르면 성분은 바뀌어도 벡터 자체는 그대로 — 포물선 운동 페이지가 가로/세로 운동의 독립성을 말할 때 암시한 게 정확히 이 상황이다.

약속은 이렇다: 성분별 덧셈과 스칼라배가 정의되는 양이라면 무엇이든 이 도구 상자를 그대로 가져다 쓸 수 있다. 수, 점, 색, 소리, 함수 공간, 신경망 매개변수 — 모두 해당된다. 튜플이 자기 역할에 침묵하기에, 이 도구가 영역을 가로질러 옮겨 다닐 수 있는 것이다.

6

이게 어디에 나타나나 — 한 대상, 네 얼굴

벡터는 그저 “화살표”가 아니다. 더하고 스케일할 수 있는 대상이다. 얼굴은 필러마다 달라지지만, 산술은 그대로다.

graphics : 좌표, 방향, 제어점
physics  : 위치, 속도, 힘
ml       : 특징 벡터, 임베딩, 기울기
finance  : 포트폴리오 비중, 수익률, 위험 방향

Lemma에 올라온 모든 응용이 이 네 얼굴 중 하나로 벡터를 가져다 쓴다. 위젯의 역할 토글은 위의 네 줄짜리 표를 그대로 인터랙티브하게 옮긴 것 — 토글 하나하나가 정확히 그 산술을 돌리는 살아있는 응용과 짝지어진다.

  • graphics베지에 곡선을 위치로 두고 그 볼록 결합을 사용한다; JPEG는 왜 픽셀을 버릴까는 8×8 픽셀 블록을 64차원 벡터 하나로 다시 보고 기저를 갈아 끼운다.
  • physics포물선 운동은 발사 속도를 (v0cosθ,v0sinθ)(v₀ \cos θ, v₀ \sin θ)로 성분 분해해 각각을 따로 굴린다; 낙하는 왜 계속 빨라지지 않을까는 서로 맞서는 두 힘 벡터(중력은 아래로, 저항은 위로)를 더해 어디서 상쇄되는지를 읽는다.
  • ml경사하강법은 매개변수, 기울기, 한 걸음이 모두 벡터인 한 줄짜리 벡터 뺄셈 wwηLw ← w − η·∇L; TF-IDF는 각 문서를 고차원 가중치 벡터로 나타내고, 검색어와의 거리는 두 벡터가 이루는 각도의 코사인으로 잰다.
  • finance포트폴리오 위험은 제곱 길이 항등식 a+b2=a2+b2+2ab|a + b|² = |a|² + |b|² + 2 a · b을 다시 꺼내 쓰는 일이다 — 공분산은 수익률 사이의 내적이고, 상관계수는 그 코사인, 그리고 교차항이 위험 자산 둘을 섞었을 때 각자보다 덜 위험하게 만드는 장본인이다.

이름은 달라져도 연산은 그대로다. 둘을 더할 수 있고 하나를 늘릴 수 있다면, 벡터 기계는 이미 돌기 시작한 셈이다.

튜플은 자기 역할에 침묵한다. 성분별로 더하라. 수로 키워라. 산술은 그대로 남고, 바뀌는 건 응용이 그 답에 입히는 옷뿐이다.

exercises · 손으로 풀기
1손으로 더하기계산기 없이

A=(2,1)A = (2, 1), v=(3,4)v = (3, 4). A+vA + v, AvA − v, 2v2v를 계산하라. 셋을 모눈종이에 그린 뒤, 첫째가 왜 “내가 어디에 닿는가?”, 둘째가 “내가 어디서 왔는가?”, 셋째가 *“내 한 걸음이 두 배 길어지면?”*에 답하는지 한 문장으로 적어보라.

2발사 속도 분해계산기 없이

공을 수평에서 위로 θ=30°θ = 30° 기울여 v0=10m/sv₀ = 10 m/s로 던진다. 속도를 (vx,vy)(v_x, v_y)로 분해하라. cos30°=3/20.87\cos 30° = \sqrt{3}/2 ≈ 0.87, sin30°=1/2\sin 30° = 1/2. 0.4 s 동안 날아간 뒤의 변위 벡터는? (이 문제에선 중력은 무시한다.)

3접선 벡터

제어점 P0,P1,P2,P3P₀, P₁, P₂, P₃로 그린 베지에 곡선에서, t=0t = 0일 때의 접선은 P1P0P₁ − P₀ 방향이다. 왜 그 벡터가 — P1P₁의 위치 자체가 아니라 — “출발 방향”이라 불릴 자격을 가지는가?

4기울기는 벡터다

간단한 경사하강법 페이지에는 매개변수 ww 하나와 기울기 L(w)L'(w) 하나가 있다 — 둘 다 스칼라다. 매개변수가 둘 (w1,w2)(w₁, w₂)이 되면, 손실은 편미분 둘 (L/w1,L/w2)(∂L/∂w₁, ∂L/∂w₂)을 가진다. 하강 스텝 wwηLw ← w − η · ∇L을 성분 형태로 적어보라. 이 모듈에 나온 어떤 산술을 쓰고 있는가?

용어집 · 이 페이지에서 쓰임 · 5
vector·벡터
크기와 방향을 모두 가진 양. 구체적으로는 수의 튜플 — 2D에서 `(3, 4)`, 3D에서 `(1, 0, −2)` — 이지만, 그 수가 *무엇을 의미하는가*는 무엇을 하느냐에 따라 다르다. 그래픽에서는 제어점의 오프셋, 물리에서는 속도나 힘, ML에서는 매개변수 갱신이나 특징 표현. 튜플은 _같다_. *역할*이 다르다. 산술 — 성분별 덧셈, 수로의 스칼라배 — 은 모든 역할에서 _같기_ 때문에, 한 벌의 수학이 모두를 받친다.
displacement·변위
한 점에서 다른 점으로 가는 _벡터_: `변위 = 도착 − 출발`. 위치 (원점이 어디 있는지에 의존)와 달리, 변위는 _원점-자유_ — 원점을 옮겨도 두 점 사이의 변위는 변하지 않는다. 속도는 단위 시간당 변위, 힘은 속도를 바꾸는 것 (그리고 결국 변위를). 물리학자·그래픽 디자이너·ML 엔지니어가 모두 "두 점을 뺀다"고 할 때 나오는 것은 _변위 벡터_ — 같은 객체의 세 가지 옷.
component·성분
벡터의 한 좌표. 벡터 `v = (3, 4)`의 x-성분은 `3`, y-성분은 `4`. 벡터를 성분으로 *분해*한다는 건 축에 정렬된 조각들의 합으로 다시 쓰는 일: `v = 3·x̂ + 4·ŷ`. 성분은 축의 선택에 의존한다 — 좌표계를 회전시키면 *벡터 자체는 그대로*인데도 성분은 바뀐다. 대부분의 계산은 벡터를 성분으로 쪼개고, 각 성분에 스칼라 산술을 한 뒤, 다시 합친다.
scalar·스칼라
벡터와 구별되는, 단일한 수. `c · v`에서 `c`가 스칼라, `v`가 벡터. 벡터에 스칼라를 곱하면 방향은 그대로 두고 크기만 늘리거나 (줄이거나, 뒤집거나) 한다. 손실값·학습률·질량·개별 확률은 스칼라, 위치·속도·기울기·특징 임베딩은 벡터. "scalar"라는 단어는 "수만큼 _늘인다_"는 옛 의미에서 살아남았다 — 스칼라 곱이 지금도 하는 일 그대로.
control point·제어점
베지에 곡선을 정의하는 손잡이. 곡선은 첫 제어점에서 시작해 마지막 제어점에서 끝나고, 중간 제어점들 쪽으로 _휘기만_ 한다 (점을 통과하지 않는다). 제어점 하나를 움직이면 그 근처 곡선만 바뀐다 — 디자이너가 의존하는 _국소 제어_ 속성. 연속한 제어점들을 이은 다각형을 *제어 다각형*이라 부르며, 곡선을 가두긴 하지만 (베지에 곡선은 제어점들의 볼록껍질 안에 있다) 곡선 자체는 결코 아니다.