초보자 깨는 그 등식
슬라이드에서 봐: KING - QUEEN = HUSBAND - WIFE. 네 뇌가 말함: 5 - 3 = 2. 쉬움.
5 - 3 = 2 가 아니야. KING 은 숫자 아니야. KING 은 4,096차원 벡터. 여기서 뺄셈 은 element-wise 벡터 뺄셈이야. 등식이 말하는 거: 의미 공간에서 QUEEN 에서 KING 까지 변위가 WIFE 에서 HUSBAND 까지 변위와 거의 같은 방향과 길이. 그래서 단어 임베딩이 유추 task 가능.
이거 처음 보면 초등 수학의 모든 본능이 오발. 그게 스칼라 함정.
네가 안다고 생각한 세 연산자
| 연산자 | 스칼라에서 | NumPy/PyTorch 배열에서 |
|---|---|---|
+ - | 산술 | element-wise (broadcasting 적용 가능) |
* | 곱셈 | element-wise, 행렬곱 X |
@ 또는 np.dot | (없음) | 행렬곱 / 내적 |
이거 헷갈리는 게 첫 주 신경망 디버깅 1위 원인.
그리고 등호 자체
초등학교는 "= = 답이 이 쪽" 이라 가르쳤어. 편의의 거짓말. 등호 = 평형. 양쪽이 같은 걸 표현. a + b = c 에서 "b 를 다른 쪽으로 옮긴다" 는 건 사실 옮기는 게 아니야 — 양쪽에 동시에 b 빼기 적용해서 균형 유지. 행렬에서도 같음: AX = B 가 X = B/A 가 안 되고 X = A^{-1} B (양쪽 왼쪽에 역행렬 곱).
코드에서도 = 와 == 헷갈리지 마
온 김에: Python 에서 = 는 할당. == 는 동등성 검사. 헷갈리는 건 Python 통과의례. if x = 5 는 syntax error. if x == 5 는 검사. 헷갈려도 세상 안 끝나지만 디버그 세션은 끝날 수도.
output = input @ W + b *는 같은 자리끼리 곱하니 B의 0이 A의 정보를 죽이고, @는 A의 행과 B의 열을 내적해서 합치니 B에 0이 있어도 다른 항이 살아남아 A 전체가 2배로 보존된다. 내적: 물건 개수: [사과 3개, 빵 2개] 물건 가격: [사과 1000원, 빵 2000원] "곱해서 다 더하는 것." 장 보면서 매일 하는 계산