숫자가 아니라 벡터를 빼는 식
KING - QUEEN ≈ HUSBAND - WIFE 같은 식을 보면 숫자 뺄셈부터 떠올리기 쉬워. 하지만 단어 임베딩에서 각 토큰은 스칼라가 아니라 같은 차원의 벡터야. 여기서 뺄셈은 대응하는 성분끼리 빼서 두 점 사이의 변위를 만드는 연산이지.
일부 임베딩에서는 성별이나 문법 관계 같은 패턴이 비슷한 변위로 나타나 유추 문제를 풀 수 있어. 다만 4,096라는 차원 수가 모든 모델에 고정된 것도 아니고, 위 식이 모든 임베딩과 단어에서 정확한 등식인 것도 아니야. 그래서 보통 등호보다 근사 기호를 쓰고 실제 벡터로 검증해.
같은 기호, 자료형에 따라 다른 계약
| 연산자 | 스칼라에서 | NumPy/PyTorch 배열에서 |
|---|---|---|
+ - | 산술 | 원소별 연산, 호환되는 모양에는 브로드캐스팅 가능 |
* | 곱셈 | 원소별 곱, 행렬곱이 아님 |
@ | 정의되지 않음 | 벡터 내적 또는 행렬곱 계열 연산 |
np.dot은 입력 차원에 따라 동작이 달라질 수 있어서, 행렬곱 의도를 드러낼 때는 모양을 확인하고 @나 np.matmul을 쓰는 편이 명확해.
등호는 결과 화살표가 아니다
수학의 =는 양쪽 표현이 같은 값을 나타낸다는 관계야. a + b = c에서 b를 ‘반대편으로 옮긴다’는 말은 양쪽에 같은 연산을 적용해 등식을 보존하는 과정을 줄여 말한 거지. 실제로는 양변에서 b를 빼서 a = c - b를 얻어.
행렬 방정식 AX = B에서는 스칼라 나눗셈처럼 B/A라고 쓸 수 없어. A가 가역이면 왼쪽에 A^{-1}를 곱해 X = A^{-1}B라고 쓸 수 있지만, 수치 계산에서는 역행렬을 직접 만들기보다 선형시스템을 푸는 함수를 사용해.
Python의 =와 ==
Python에서 =는 이름에 값을 할당하고 ==는 두 값의 동등성을 검사해. if x = 5는 문법 오류지만 if x == 5는 비교식이야. 수학 표기와 프로그래밍 언어의 기호가 같은 모양이어도 역할은 다를 수 있어.
output = input @ W + b *는 같은 자리끼리 곱하니 B의 0이 A의 정보를 죽이고, @는 A의 행과 B의 열을 내적해서 합치니 B에 0이 있어도 다른 항이 살아남아 A 전체가 2배로 보존된다. 내적: 물건 개수: [사과 3개, 빵 2개] 물건 가격: [사과 1000원, 빵 2000원] "곱해서 다 더하는 것." 장 보면서 매일 하는 계산