3강 / 20강

내적 — 두 화살표가 얼마나 같은 쪽을 보는가

길이와 각도를 숫자 하나로 바꾸는 장치

내적 — 두 화살표가 얼마나 같은 쪽을 보는가
내적은 두 방향이 얼마나 맞는지를 재는 숫자 하나입니다.

지금까지 벡터로 한 일은 더하고 늘이는 것뿐이었습니다. 그런데 우리는 길이도 재고 싶고 각도도 알고 싶어요. "이 두 문장이 얼마나 비슷한가"를 물으려면 반드시 필요한 것들입니다.

놀랍게도 그 둘을 한꺼번에 주는 아주 단순한 계산이 있습니다. 내적(dot product)이에요. 성분끼리 곱해서 더하기, 그게 전부입니다.

(4, 1) · (1, 3) = 4×1 + 1×3 = 7

결과는 벡터가 아니라 숫자 하나입니다. 그래서 '스칼라곱'이라고도 불러요. 이 숫자 하나에 길이와 각도가 함께 접혀 들어가 있습니다.

자기 자신과의 내적 = 길이의 제곱. 직각인 둘의 내적 = 0.
Python 브라우저에서 실행

🎮 각도가 바뀌면 내적은 어떻게 되나

화살표를 끌면서 내적이 언제 커지고, 언제 0이 되고, 언제 음수가 되는지 보세요. "직교하게 맞추기" 버튼도 눌러 보고요.

내적의 부호와 사잇각 — 두 화살표를 직접 돌려 봅니다
불러오는 중…

코사인 유사도 — 검색과 추천이 쓰는 자

내적을 두 길이로 나누면 cos θ 만 남습니다. 이 값은 −1 부터 1 사이이고, 길이와 상관없이 방향만 비교합니다. 이것을 코사인 유사도라고 불러요.

왜 길이를 지울까요? 문서 하나가 길고 하나가 짧아도, 다루는 주제가 같으면 비슷하다고 말하고 싶기 때문입니다. 긴 글이라고 더 '고양이스러운' 건 아니니까요.

검색 엔진이 질문과 문서를 견주는 방식, 추천 시스템이 취향이 닮은 사람을 찾는 방식, 얼굴 인식이 두 얼굴이 같은 사람인지 판단하는 방식이 전부 이 한 줄입니다.

길이를 지우고 방향만 비교하기 — 이것이 검색·추천의 기본자입니다.
Python 브라우저에서 실행

정사영 — 그림자의 길이

내적의 또 다른 얼굴은 그림자입니다. 햇빛이 u 방향에 수직으로 내리쬔다고 할 때, v 가 u 위에 드리우는 그림자의 길이는 (u·v) / |u| 입니다.

말로 바꾸면 "v 가 u 방향으로 얼마나 나아갔는가"예요. 힘이 비스듬히 걸릴 때 실제로 미는 만큼을 계산하거나, 데이터에서 필요한 방향의 성분만 뽑아낼 때 쓰입니다.

이 그림자 이야기는 16강 정사영과 17강 최소제곱법에서 이 강의의 절정으로 돌아옵니다. 지금은 위 실험실에서 주황색 점이 어떻게 움직이는지만 눈에 익혀 두세요.

그림자와 오차. 16강 정사영의 예고편입니다.
Python 브라우저에서 실행
🤔 확인 문제
(2, −3) · (4, 1) 은?
🤔 확인 문제
두 벡터의 내적이 0 이라는 것은 무슨 뜻인가요?
🤔 확인 문제
코사인 유사도를 쓸 때 내적을 길이로 나누는 까닭은?