이번 글에서 다룰 내용
이 글에서는 벡터의 길이와 두 벡터 사이의 거리를 정의합니다.
- 노름(norm)이 무엇인지 설명합니다.
- 유클리드 노름(Euclidean norm)과 유클리드 거리(Euclidean distance)를 직관적으로 이해합니다.
- L1, L2, 최대 노름(max norm)이 언제 자주 쓰이는지도 짚습니다.
- 거리와 유사도가 같은 개념이 아니라는 점도 함께 정리합니다.
이번 글에서 새로 나오는 용어
- 벡터 (vector): 길이와 거리의 기준이 되는 표현 대상입니다.
- 노름 (norm): 벡터의 크기를 재는 규칙입니다.
- 내적 (dot product): 다음 글에서 길이와 각도를 함께 다룰 때 쓰는 핵심 연산입니다.
핵심 아이디어
벡터를 데이터 표현으로 받아들였다면, 그다음 질문은 자연스럽습니다. 이 벡터가 얼마나 큰가? 그리고 두 벡터가 얼마나 다른가?를 어떻게 수치로 말할 것인가입니다.
이때 등장하는 개념이 노름 (norm)입니다. 노름은 벡터의 크기를 재는 규칙입니다. 가장 익숙한 것은 유클리드 노름으로, 2차원이나 3차원에서 우리가 흔히 말하는 길이와 같은 개념입니다.
벡터 v = (v1, v2, ..., vn)의 유클리드 노름은 보통 다음처럼 씁니다.
||v|| = sqrt(v1^2 + v2^2 + ... + vn^2)
기호가 조금 낯설어 보여도 의미는 단순합니다. 각 축 방향 기여를 제곱해서 더한 뒤, 다시 제곱근을 취해 전체 크기를 구하는 것입니다.
거리(distance)는 이 노름을 두 벡터의 차이에 적용한 것입니다. 두 벡터 u, v의 거리는 다음처럼 쓸 수 있습니다.
d(u, v) = ||u - v||
즉 거리는 "둘 사이의 차이 벡터가 얼마나 큰가"를 재는 값입니다. 이 관점은 선형대수뿐 아니라 머신러닝, 최적화, 신호 처리, 검색 시스템 전반에 계속 등장합니다.
노름을 더 일반적으로 쓰면
유클리드 노름만 있는 것은 아닙니다. p >= 1일 때 Lp 노름은 보통 다음처럼 씁니다.
||v||_p = (|v1|^p + |v2|^p + ... + |vn|^p)^(1/p)
대표적인 경우는 아래와 같습니다.
L1노름: 절댓값의 합L2노름: 제곱합의 제곱근- 최대 노름(max norm): 성분 절댓값 중 가장 큰 값
입문 단계에서는 L2를 중심으로 잡는 것이 좋지만, 실제 문제에서는 어떤 차이를 중요하게 볼지에 따라 다른 노름을 선택하기도 합니다.
왜 길이와 거리가 중요한가
프로그래밍에서는 정답과 예측값의 차이를 자주 다룹니다. 예를 들어 회귀(regression) 문제에서 예측 오차를 벡터로 모을 수 있고, 그 오차 벡터의 길이가 작을수록 모델이 잘 맞는다고 해석할 수 있습니다.
또 이미지 두 장을 픽셀 벡터로 보고 차이를 구하면, 두 이미지가 얼마나 다른지 하나의 숫자로 요약할 수 있습니다. 임베딩(embedding)에서도 두 벡터의 거리는 문장이나 아이템이 서로 얼마나 가까운지를 나타내는 기준이 될 수 있습니다.
하지만 여기서 주의할 점이 있습니다. 거리와 유사도(similarity)는 비슷해 보여도 같은 말이 아닙니다. 거리가 작다고 유사하다고 말할 수는 있지만, "유사하다"는 것을 어떤 기준으로 정의할지는 문제마다 다를 수 있습니다. 특히 벡터 길이 차이를 무시하고 방향만 보고 싶을 때는 다음 글의 코사인 유사도(cosine similarity)가 더 적절할 수 있습니다.
단계별 예시
예시 1) 2차원 벡터의 길이
벡터 v = (3, 4)를 생각해 보겠습니다. 이 벡터의 유클리드 노름은 다음과 같습니다.
||v|| = sqrt(3^2 + 4^2) = 5
이 계산은 중학교 때 배운 피타고라스 정리와 같습니다. 그래서 유클리드 노름은 직관적으로 받아들이기 쉽습니다. 2차원에서는 평면 위 화살표 길이이고, 3차원에서는 공간 벡터 길이이며, 고차원에서는 같은 원리를 일반화한 것이라고 보면 됩니다.
예시 2) 예측 오차 벡터
어떤 모델의 실제값이 (10, 20, 30)이고 예측값이 (12, 18, 29)라고 합시다. 오차(error) 벡터는 다음처럼 계산합니다.
error = (12, 18, 29) - (10, 20, 30) = (2, -2, -1)
이 오차 벡터의 길이는
||error|| = sqrt(2^2 + (-2)^2 + (-1)^2) = 3
입니다. 즉 모델 오차를 한 숫자로 요약하면 3이라고 볼 수 있습니다. 물론 실제 모델링에서는 평균 제곱 오차(MSE)나 제곱합(SSE) 같은 다른 형태도 많이 쓰지만, 중심 아이디어는 동일합니다. 오차를 벡터로 보고 그 크기를 재는 것입니다.
참고로 제곱합 ||error||^2는 많이 최적화하는 대상이지만, 그 자체는 노름이 아니라 노름의 제곱입니다. 이 차이는 나중에 손실 함수(loss) 해석에서 중요해집니다.
예시 3) 이미지 차이
작은 흑백 이미지 두 장을 각각 벡터로 펼쳤다고 해 봅시다.
img1 = (0, 120, 255, 80)
img2 = (10, 110, 250, 100)
차이 벡터는 (10, -10, -5, 20)입니다. 이 벡터의 길이를 계산하면 두 이미지가 얼마나 다른지 정량적으로 말할 수 있습니다. 다만 실제 사람의 시각은 단순한 픽셀 Lp 거리와 정확히 일치하지는 않습니다. 그래서 이미지 품질 비교에는 더 정교한 지표를 쓰기도 합니다.
예시 4) 임베딩 거리와 방향 유사도
문장 임베딩 두 개가 있다고 합시다.
a = (0.3, -0.1, 0.8)
b = (0.2, -0.1, 0.75)
차이 벡터는 (0.1, 0, 0.05)이고 길이는 작습니다. 그래서 두 문장은 임베딩 공간에서 가까운 편이라고 해석할 수 있습니다. 다만 임베딩에서는 방향 정보가 더 중요할 수 있어, 단순 거리보다 코사인 유사도를 더 많이 쓰기도 합니다.
만약 두 벡터가 모두 길이 1로 정규화(normalization)되어 있다면 다음 관계도 성립합니다.
||u - v||^2 = 2(1 - cos(theta))
즉 단위벡터(unit vector) 위에서는 거리와 코사인 값이 서로 연결됩니다.
수학 주석
- 노름(norm)은 아무 함수나 되는 것이 아니라, 크기를 재는 규칙으로서 몇 가지 성질을 만족해야 합니다.
- 특히 항상 0 이상이어야 하고, 0이 되는 경우는 영벡터뿐이어야 하며, 스칼라배와 잘 호환되고, 삼각부등식(triangle inequality)을 만족해야 합니다.
- 거리(distance)는 보통 차이 벡터의 노름으로 정의됩니다. 그래서 노름을 이해하면 거리도 함께 이해됩니다.
노름의 핵심 성질을 식으로 쓰면 아래와 같습니다.
1. ||v|| >= 0
2. ||v|| = 0 <=> v = 0
3. ||a v|| = |a| ||v||
4. ||u + v|| <= ||u|| + ||v||
삼각부등식은 "직선으로 바로 가는 길이 꺾어서 가는 길보다 길지 않다"는 직관으로 이해하면 좋습니다. 두 벡터를 이어서 움직이는 길보다 한 번에 가는 길이 더 짧거나 같다는 뜻입니다.
자주 하는 오해
거리가 작으면 항상 의미적으로 비슷하다고 생각하기
항상 그런 것은 아닙니다. 벡터 공간이 무엇을 어떻게 표현하느냐에 따라 거리 해석은 달라집니다. 임베딩에서는 방향이 중요할 수 있고, 어떤 데이터에서는 특정 축의 크기가 더 중요할 수도 있습니다.
길이 공식만 외우고 왜 그런지 생각하지 않기
유클리드 노름은 단순한 공식이 아니라 피타고라스 정리를 고차원으로 일반화한 것입니다. 이 배경을 이해하면 이후 내적과의 연결도 훨씬 자연스럽게 받아들일 수 있습니다.
정규화(normalization)와 표준화(standardization)를 같은 것으로 보기
둘은 다릅니다.
- 정규화(normalization): 벡터 자체의 길이를 맞추는 일
- 표준화(standardization): 각 특성(feature)의 평균과 분산을 맞추는 일
예를 들어 표준화는 보통 다음처럼 씁니다.
z = (x - mu) / sigma
반면 벡터 정규화는 다음처럼 씁니다.
v_normalized = v / ||v||
L2만 알면 항상 충분하다고 생각하기
실무에서는 상황에 따라 기준이 달라집니다.
L2: 가우시안 잡음(Gaussian noise)처럼 큰 오차를 더 강하게 벌주고 싶을 때 자주 씁니다.L1: 이상치(outlier)에 더 강건한(robust) 기준이 필요할 때 유용합니다.- 후버 손실(Huber loss): 작은 오차에는 L2처럼, 큰 오차에는 L1처럼 동작해 절충안을 줍니다.
- 최대 노름(max norm): 최악의 오차 하나를 기준으로 보고 싶을 때 쓰입니다.
연습 또는 확장
아래 벡터에 대해 길이와 거리를 직접 계산해 보세요.
v = (6, 8)의 길이u = (1, 2),v = (4, 6)사이의 거리- 예측값
(5, 9, 2)와 실제값(4, 10, 1)의 오차 벡터 길이 L1노름과L2노름을 각각 비교해 보기
그리고 다음 질문도 생각해 보세요.
- 왜 거리 계산은 두 벡터를 바로 비교하지 않고 차이 벡터를 통해 정의하는가?
- 벡터 길이가 큰 것과 두 벡터가 비슷한 것은 어떤 점에서 다른 문제인가?
- 삼각부등식은 왜 거리 개념에 꼭 필요할까?
마무리
이번 글에서는 벡터의 길이와 거리를 정의했습니다.
- 노름 (norm)은 벡터 하나의 크기를 재는 규칙입니다.
- 거리(distance)는 두 벡터의 차이 벡터 크기입니다.
- 오차 분석, 이미지 비교, 임베딩 검색에서 이 개념이 계속 등장합니다.
- 다만 거리만으로 모든 "유사함"을 설명할 수는 없습니다.
- 정규화(normalization)와 표준화(standardization)는 목적이 다르므로 구분해야 합니다.
다음 글에서는 내적 (inner product)을 통해 벡터가 얼마나 같은 방향을 보는지 설명하고, 코사인 유사도(cosine similarity)와 연결해 보겠습니다.
💬 댓글
이 글에 대한 의견을 남겨주세요