벡터
한 줄 정의
숫자를 한 줄로 늘어놓은 것. 1차원
1. 비유로 이해하기
숫자를 담는 그릇을 아파트로 생각하면, 벡터는 한 층이다. 복도 하나에 방이 여러 개 있다.
방을 찾아가려면 “몇 번째” 하나만 대면 된다. 필요한 정보가 하나라서 1차원이다.
[5, 3, 8, 1]
↑
0번째 방
2. 왜 필요한가
숫자를 한 줄로 묶으면 비교할 수 있다
친구들의 성격을 숫자로 적어 본다고 하자.
활발함 차분함 운동 독서
민수 [ 9, 2, 8, 1 ]
영희 [ 8, 3, 7, 2 ]
철수 [ 2, 9, 1, 9 ]
민수와 영희의 숫자가 비슷하다. 두 사람은 실제로 성격이 비슷하다. 철수는 숫자가 완전히 다르다.
여기서 벌어진 일이 중요하다. 성격을 안 보고 숫자만 비교해도 누가 누구와 비슷한지 알 수 있게 됐다. 숫자 네 개를 한 줄로 묶어 놨기 때문이다.
컴퓨터는 “사과”라는 글자를 봐도 그게 “배”와 비슷하고 “자동차”와 다르다는 걸 모른다. 벡터로 바꿔 놓으면 계산으로 비교할 수 있게 된다.
사과 → [0.8, 0.2, 0.9, ...] ┐
배 → [0.7, 0.3, 0.9, ...] ┘ 가깝다
자동차 → [0.1, 0.9, 0.1, ...] 멀다
이게 의미 검색의 바닥이고, 그걸로 문서를 찾아 답하는 구조가 RAG다.
AI에서 만나는 벡터들
| 무엇 | 길이 |
|---|---|
| 임베딩 | 숫자 768개 · 1536개 · 3072개 |
| 로짓 | 사전에 있는 모든 단어의 점수. 10만 개쯤 |
| 소프트맥스 결과 | 로짓과 같은 길이. 다만 값이 확률이고 다 더하면 1 |
| 토큰 ID 줄 | 문장을 토큰으로 쪼갠 번호들 |
길이가 곧 정보의 세밀함이다
임베딩의 숫자가 768개인지 3072개인지는 뜻을 얼마나 잘게 나눠 담느냐의 차이다. 칸이 많을수록 미묘한 차이를 담을 수 있지만, 저장 공간도 계산량도 늘어난다.
그리고 각 숫자가 무슨 뜻인지는 사람이 정한 게 아니다. AI가 학습으로 알아낸 것이라 아무도 정확히 모른다. 다만 뜻이 담겨 있다는 증거는 있다.
왕 − 남자 + 여자 ≈ 여왕
서울 − 한국 + 일본 ≈ 도쿄
3. 어디서 만났나
이 용어는 수업에서 정식으로 다루기 전에 따로 정리한 것이다.
다만 6회차에 벡터가 왜 필요한지를 보여 주는 자리가 있었다. 데이터베이스에서 WHERE user = '민수' 같은 검색은 글자가 정확히 같아야 찾아진다. “고양이”로 검색하면 “냥이”도 “반려묘”도 안 나온다.
벡터로 바꿔 두면 뜻으로 찾을 수 있다. 6회차에서 배운 검색의 한계가, 곧 벡터가 필요한 이유였다.
6회차 — 데이터베이스, 서비스의 기억을 어디에 어떤 모양으로 둘까
4. 헷갈리는 개념
| 이 용어 | 비슷하지만 다른 것 | 차이 |
|---|---|---|
| 벡터 | 스칼라 | 스칼라는 숫자 하나. 벡터는 그걸 한 줄로 여러 개 |
| 벡터 | 행렬 | 벡터를 여러 줄 쌓으면 행렬. 벡터는 가로 한 줄, 행렬은 표 |
| 벡터 | 배열 · 리스트 | 담는 모양은 비슷하지만, 벡터는 전부 같은 종류의 숫자이고 길이가 고정이며 통째로 더하고 곱하는 계산이 정의돼 있다 |
| 딥러닝의 벡터 | 수학·물리의 벡터 | 물리에서는 크기와 방향이 있는 양(바람의 세기와 방향). 딥러닝에서는 대개 그냥 숫자 배열로 읽으면 된다 |
5. 많이들 오해하는 지점
ㄱ. “벡터니까 화살표와 방향을 떠올려야 한다”
학교에서 배운 벡터(크기 + 방향, 화살표) 때문에 생기는 부담이다. 딥러닝에서 벡터라고 하면 대개 “숫자를 한 줄로 늘어놓은 것”으로 읽으면 된다. 화살표를 그릴 필요도, 방향을 상상할 필요도 없다.
다만 완전히 버리지는 말자. “두 임베딩이 얼마나 가까운가”를 잴 때는 방향 개념이 돌아온다. 두 숫자 뭉치가 같은 방향을 가리키는지 재는 방법을 코사인 유사도라고 하고, 결과는 -1(정반대)에서 1(똑같음) 사이로 나온다. 의미 검색은 이걸로 굴러간다.
ㄴ. “벡터는 그냥 파이썬 리스트다”
비슷해 보이지만 약속이 더 많다. 리스트에는 숫자와 글자를 섞어 넣을 수 있고 길이도 마음대로 바뀐다. 벡터는 전부 같은 종류의 숫자이고 길이가 정해져 있으며, 통째로 더하고 곱하는 연산이 정의돼 있다. 이 약속 덕분에 빠르게 계산할 수 있다.
ㄷ. “벡터 DB에서 말하는 벡터는 다른 뜻인가”
같은 것이다. 임베딩 벡터를 모아 두고 비슷한 걸 빨리 찾아 주는 창고라서 벡터 데이터베이스다. Pinecone, Chroma, Qdrant 같은 것들이고, 확장 기능을 붙이면 SQLite로도 할 수 있다.