모두의 AI
머신러닝AI논문
로딩 중…

배우기

🏅내 업적

Ch.02

벡터의 내적과 정사영: 얼마나 닮았는지 숫자로 재기

챕터별 수학 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 중급 수학 흐름을 한눈에 보세요.

좌표 평면: u, v, 정사영

xyuvproj
기준 u회전 v그림자잔차 ⊥ u

방향·유사도·수치

방향
−10+1

내적 u·v

13.32

cos θ (방향)

0.969

|proj| / |v|

0.969

초록 벡터 vvv가 한 바퀴 돌면 각도 θ\thetaθ가 바뀌고, 호박색 그림자(정사영) 길이와 내적·cos⁡θ\cos\thetacosθ가 함께 변합니다. 같은 방향에 가까울수록 내적이 커지고, 직교하면 000, 반대면 음수가 됩니다. 오른쪽 작은 원은 vvv의 방향만 추려 본 것입니다.
내적(Dot Product)은 두 개의 데이터(벡터)가 '얼마나 비슷한 방향을 향하고 있는지'를 단 하나의 숫자로 알려주는 마법 같은 도구입니다. 정사영(Orthogonal Projection)은 한 데이터를 다른 데이터라는 벽에 비췄을 때 생기는 그림자라고 생각하면 쉽습니다. 이번 장에서는 복잡한 데이터를 숫자로 비교하는 방법을 배우고, 이것이 인공지능이 어떻게 비슷한 이미지를 찾고(유사도), 중요한 정보에 집중하는지(어텐션) 알아봅니다.

벡터의 내적과 정사영: 얼마나 닮았는지 숫자로 재기

앞서 배운 벡터가 숫자들을 담은 '상자'라면, 내적은 두 상자를 열어서 같은 위치에 있는 숫자끼리 짝지어 곱한 뒤 모두 더하는 작업입니다. 수학적으로는 두 데이터의 크기와 그 사이의 각도를 이용해 계산할 수도 있습니다. 정사영은 이렇게 구한 내적을 이용해, 한 데이터가 다른 데이터의 방향으로 얼만큼 뻗어 나가는지를 그림자 형태로 만들어내는 과정입니다.
아주 쉽게 말해서, 내적은 두 데이터의 '궁합 점수'를 계산하는 것과 같습니다. 방향이 완전히 같으면 양수로 높은 점수가 나오고, 연관성이 없으면(수직) 0점, 정반대면(반대 방향) 음수가 나옵니다. 정사영은 한 쪽의 데이터를 다른 쪽 데이터의 기준에 맞춰 투영(그림자)해 보는 것과 같습니다.
가장 핵심이 되는 수식은 다음과 같습니다.
1. 내적: u⋅v=∥u∥∥v∥cos⁡θ\mathbf{u} \cdot \mathbf{v} = \|\mathbf{u}\|\|\mathbf{v}\|\cos\thetau⋅v=∥u∥∥v∥cosθ (두 벡터의 크기와 그 사이 각도 θ\thetaθ를 이용한 계산)
2. 코사인 유사도: cos⁡θ=u⋅v∥u∥∥v∥\cos\theta = \frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\|\|\mathbf{v}\|}cosθ=∥u∥∥v∥u⋅v​ (데이터의 크기에 상관없이 순수한 방향의 유사성만 비교할 때 사용)
3. 정사영: projuv\mathrm{proj}_{\mathbf{u}}\mathbf{v}proju​v (벡터 v\mathbf{v}v를 기준 벡터 u\mathbf{u}u 위에 내린 그림자)
4. 단위벡터: u^\mathbf{\hat{u}}u^의 모자(^)는 “방향만 본다”는 뜻으로 자주 씁니다. 단위벡터는 말 그대로 길이가 1인 화살표(∥u^∥=1\|\mathbf{\hat{u}}\|=1∥u^∥=1)라서, “얼마나 긴지”는 이미 정해져 있고 어느 쪽을 보는지만 남습니다. 그래서 v\mathbf{v}v를 u^\mathbf{\hat{u}}u^ 위로 내리는 그림자(정사영)는 한 번에 (v⋅u^) u^(\mathbf{v}\cdot\mathbf{\hat{u}})\,\mathbf{\hat{u}}(v⋅u^)u^로 적을 수 있습니다. 여기서 v⋅u^\mathbf{v}\cdot\mathbf{\hat{u}}v⋅u^는 “v\mathbf{v}v가 그 방향으로 얼마나 나란한지”를 숫자 하나로 말해 주는 점수이고, 그림자의 실제 길이는 그 점수의 크기, 즉 ∣v⋅u^∣|\mathbf{v}\cdot\mathbf{\hat{u}}|∣v⋅u^∣입니다. (음수면 반대쪽을 향한다는 뜻이고, 길이만 보면 절댓값을 씁니다.)
여기서 ∥u∥\|\mathbf{u}\|∥u∥와 ∥v∥\|\mathbf{v}\|∥v∥는 각각 벡터의 놈(Norm), 즉 길이입니다. 코사인 유사도는 내적을 이 길이들의 곱으로 나누기 때문에 크기 영향이 사라지고 방향만 남습니다.
이 수식들은 복잡해 보이지만, 결국 컴퓨터가 '얼마나 닮았는가'를 계산하기 위한 공식일 뿐입니다.
인공지능, 특히 딥러닝에서는 이 '내적'이 숨 쉬듯이 사용됩니다. 인공지능이 수많은 데이터 속에서 패턴을 찾을 때 계산하는 '가중치와 입력값의 곱'이 바로 내적입니다. 또한, 챗GPT 같은 언어 모델이 문장 속에서 어떤 단어에 집중해야 할지 결정하는 어텐션(Attention) 메커니즘이나, 넷플릭스가 내가 좋아할 만한 영화를 찾아주는 추천 시스템 모두 내적과 코사인 유사도를 바탕으로 작동합니다.
한 줄 요약: 내적은 두 데이터가 얼마나 닮았는지 보여주는 '궁합 점수'이고, 정사영은 한 데이터를 다른 데이터의 기준에 맞춰 비춘 '그림자'입니다. 코사인 유사도는 크기를 무시하고 오직 '방향(특징)'만 비교할 때 최고의 도구입니다. 이 개념들은 앞으로 배울 복잡한 인공지능 모델의 뼈대가 됩니다.
이전 장에서 벡터라는 '숫자 상자'를 만드는 법을 배웠다면, 이제는 그 상자들을 서로 비교하고 관계를 맺어주는 법을 배우는 단계입니다. 데이터들 사이의 거리, 각도, 유사도를 하나의 숫자로 명확하게 표현할 수 있게 되면, 컴퓨터는 비로소 데이터 간의 관계를 이해하고 더 복잡한 인공지능 모델로 나아갈 수 있습니다.
컴퓨터에게 '강아지와 고양이가 닮았어?'라고 물어보면 이해하지 못합니다. 오직 숫자만 알기 때문이죠. 내적과 코사인 유사도는 이런 모호한 '닮음'이라는 개념을 명확한 점수(수치)로 바꿔줍니다. 데이터의 크기(길이)와 특징(방향)을 분리해서 분석할 수 있게 해주기 때문에, 수만 개의 특징을 가진 고차원 데이터를 다룰 때 없어서는 안 될 필수 도구입니다.
머신러닝에서는 나와 가장 비슷한 취향을 가진 사람을 찾는 k-최근접 이웃(kNN) 알고리즘에서 데이터 간의 유사도를 잴 때 쓰입니다. 또한, 정상적인 데이터와 방향이 완전히 다른 데이터를 찾아내는 이상치 탐지(Anomaly Detection)에도 활약합니다. 스팸 메일을 걸러내거나 환자의 데이터를 보고 질병을 예측할 때도 내부적으로 무수히 많은 내적이 계산됩니다.
기하학적 관점에서 정사영은 복잡한 세상을 단순하게 보는 안경과 같습니다. 수많은 변수를 가진 복잡한 데이터를 우리가 이해하기 쉬운 2차원이나 3차원 평면 위로 그림자(사영)를 내려 시각화하는 주성분 분석(PCA) 같은 차원 축소 기법의 핵심 원리가 바로 여기에 있습니다.
아래 표에는 문제 풀이에 필요한 수식과 기호 의미를 요약했고, 바로 이어지는 항목별 자세한 설명에서 왜 그렇게 정의되는지까지 짚습니다. 풀이 예시에는 대표 유형별로 단계를 적어 두었습니다.
  • 수식u⋅v\mathbf{u}\cdot\mathbf{v}u⋅v
  • 기호 의미같은 인덱스 성분끼리 곱해 모두 더한 값; 결과는 스칼라
  • 수식∥u∥\|\mathbf{u}\|∥u∥
  • 기호 의미유클리드 놈(길이) u⋅u\sqrt{\mathbf{u}\cdot\mathbf{u}}u⋅u​
  • 수식cos⁡θ\cos\thetacosθ
  • 기호 의미u⋅v∥u∥∥v∥\dfrac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\|\mathbf{v}\|}∥u∥∥v∥u⋅v​ — 두 벡터 사이각의 코사인(영벡터 제외)
  • 수식projuv\mathrm{proj}_{\mathbf{u}}\mathbf{v}proju​v
  • 기호 의미v\mathbf{v}v를 u\mathbf{u}u가 그리는 직선 위로 내린 정사영 벡터
  • 수식v−projuv\mathbf{v}-\mathrm{proj}_{\mathbf{u}}\mathbf{v}v−proju​v
  • 기호 의미정사영을 뺀 잔차; 항상 u\mathbf{u}u와 직교
  • 수식단위벡터 u^\mathbf{\hat{u}}u^
  • 기호 의미∥u^∥=1\|\mathbf{\hat{u}}\|=1∥u^∥=1, 사영 길이 =∣v⋅u^∣=|\mathbf{v}\cdot\mathbf{\hat{u}}|=∣v⋅u^∣
수식기호 의미
u⋅v\mathbf{u}\cdot\mathbf{v}u⋅v같은 인덱스 성분끼리 곱해 모두 더한 값; 결과는 스칼라
∥u∥\|\mathbf{u}\|∥u∥유클리드 놈(길이) u⋅u\sqrt{\mathbf{u}\cdot\mathbf{u}}u⋅u​
cos⁡θ\cos\thetacosθu⋅v∥u∥∥v∥\dfrac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\|\mathbf{v}\|}∥u∥∥v∥u⋅v​ — 두 벡터 사이각의 코사인(영벡터 제외)
projuv\mathrm{proj}_{\mathbf{u}}\mathbf{v}proju​vv\mathbf{v}v를 u\mathbf{u}u가 그리는 직선 위로 내린 정사영 벡터
v−projuv\mathbf{v}-\mathrm{proj}_{\mathbf{u}}\mathbf{v}v−proju​v정사영을 뺀 잔차; 항상 u\mathbf{u}u와 직교
단위벡터 u^\mathbf{\hat{u}}u^∥u^∥=1\|\mathbf{\hat{u}}\|=1∥u^∥=1, 사영 길이 =∣v⋅u^∣=|\mathbf{v}\cdot\mathbf{\hat{u}}|=∣v⋅u^∣
항목별 자세한 설명
① u⋅v\mathbf{u}\cdot\mathbf{v}u⋅v Ch.01에서 배운 것처럼 같은 자리 성분끼리 곱한 뒤 전부 더합니다. 결과는 벡터가 아니라 하나의 실수(스칼라)입니다. R2\mathbb{R}^2R2이면 uxvx+uyvyu_xv_x+u_yv_yux​vx​+uy​vy​ 꼴로 계산합니다.
② ∥u∥\|\mathbf{u}\|∥u∥ u⋅u\sqrt{\mathbf{u}\cdot\mathbf{u}}u⋅u​로, 벡터의 유클리드 길이입니다. 내적이 먼저 정의되면 놈으로 길이를 읽는 흐름이 자연스럽습니다.
③ cos⁡θ\cos\thetacosθ 두 벡터가 이루는 각 θ\thetaθ에 대해 u⋅v∥u∥∥v∥\dfrac{\mathbf{u}\cdot\mathbf{v}}{\|\mathbf{u}\|\|\mathbf{v}\|}∥u∥∥v∥u⋅v​입니다. 분모가 0이 되지 않게 영벡터는 제외하고 논의합니다. 같은 방향이면 111에 가깝고, 직교하면 000, 반대면 음수가 됩니다.
④ projuv\mathrm{proj}_{\mathbf{u}}\mathbf{v}proju​v 비영 벡터 u\mathbf{u}u에 대해 u⋅vu⋅uu\dfrac{\mathbf{u}\cdot\mathbf{v}}{\mathbf{u}\cdot\mathbf{u}}\mathbf{u}u⋅uu⋅v​u입니다. v\mathbf{v}v를 u\mathbf{u}u가 그리는 직선 위로 수직으로 내린 그림자 벡터로 생각하면 됩니다.
⑤ v−projuv\mathbf{v}-\mathrm{proj}_{\mathbf{u}}\mathbf{v}v−proju​v 정사영을 뺀 잔차입니다. 항상 u\mathbf{u}u와 직교하며, v=projuv+(v−projuv)\mathbf{v}=\mathrm{proj}_{\mathbf{u}}\mathbf{v}+(\mathbf{v}-\mathrm{proj}_{\mathbf{u}}\mathbf{v})v=proju​v+(v−proju​v)로 직교분해가 됩니다.
⑥ 단위벡터 u^\mathbf{\hat{u}}u^ ∥u^∥=1\|\mathbf{\hat{u}}\|=1∥u^∥=1이면 사영 벡터는 (v⋅u^)u^(\mathbf{v}\cdot\mathbf{\hat{u}})\mathbf{\hat{u}}(v⋅u^)u^이고, ∣v⋅u^∣|\mathbf{v}\cdot\mathbf{\hat{u}}|∣v⋅u^∣가 v\mathbf{v}v의 u^\mathbf{\hat{u}}u^ 방향 그림자 길이입니다.

연습 문제

아래는 60문제 은행에서 무작위로 뽑은 10문제입니다(쉬움 4·중간 3·어려움 3, 순서는 쉬움→중간→어려움). 각 문항은 객관식이며, 보기 번호를 선택하세요.

로지스틱 회귀에서 선형부 z=w⋅x+bz=\mathbf{w}\cdot\mathbf{x}+bz=w⋅x+b의 w⋅x\mathbf{w}\cdot\mathbf{x}w⋅x는 무엇과 직결되는가?
1 / 10