벡터? Vector?
2차원에 있는 함수랑 뭐가 다르길래 vector vector 하는거야?
🎯 수학 벡터와 NLP 벡터의 차이
항목 | 수학에서의 벡터 | NLP에서의 벡터 (임베딩) |
의미 | 방향 + 크기 | 단어의 의미와 문맥을 수치화 |
차원 | 보통 2~3차원 | 수십~수천 차원 (ex. 300, 768, 2048...) |
계산 | 거리, 내적 등 | 단어 간 유사도 계산 (ex. 코사인 유사도) |
용도 | 물리 공간 표현 | 의미 공간 표현 (semantic space) |
💡 벡터는 그냥 “수의 나열”이야.
v = [3, 4]
이건 2차원 평면에서 (x=3, y=4) 위치를 의미하는 2차원 벡터고,
길이, 방향이 있는 “방향과 크기”라고 배웠어.
📍 (3, 4)와 [3, 4] 차이 설명
- 벡터 [3, 4] 자체는 수의 집합
- 그 벡터의 크기는 5야 → 벡터가 5라는 말은 "길이"를 말할 때는 맞음.
- 하지만 [3, 4]와 5는 같은 건 아님
(마치 "집"과 "집의 크기 30평"은 다르듯)
표현 | 의미 |
(3, 4) | 보통은 “점(Point)” → 2차원 평면의 한 위치 (x=3, y=4) |
[3, 4] | 보통은 “벡터(Vector)” → 방향 + 크기 |
✅ 둘 다 x=3, y=4를 가리키지만…
- (3, 4) 는 “어디에 있냐?”에 집중 (좌표점)
- [3, 4] 는 “어디로 얼마나 가냐?”에 집중 (방향과 거리)
예시 1: 점으로써의 (3, 4)
“(0,0)에서 오른쪽으로 3, 위로 4만큼 떨어진 위치가 어디냐?” → 바로 (3,4) 좌표
예시 2: 벡터로써의 [3, 4]
“(0,0)에서 [3,4]라는 벡터를 적용하면?” → 똑같이 (3,4) 위치에 도착하지만, 이건 움직이는 방향과 거리를 표현.
만약 (1,1)에서 [3,4] 벡터를 더하면?
(1,1) + [3,4] = (4,5)
📐 수학적으로 벡터의 "크기"는?
[3, 4] 벡터의 길이는 피타고라스 사용 == 빗변의 길이, 벡터의 크기 (magnitude) 라고 해.
√(3² + 4²) = √(9 + 16) = √25 = 5
❓ “벡터가 5야?”
벡터 [3, 4]에 대해 "5야?"라고 물었을 때,
그건 벡터의 길이(크기) 를 말하는 거야.
✅ 벡터 [3, 4]의 크기는 5야.
📌 용어 정리
용어 | 의미 |
벡터 | 방향 + 크기를 가진 수의 집합 [3, 4] |
벡터의 크기 | 벡터가 나타내는 거리(길이) → 5 |
벡터의 방향 | (3,4)가 향하고 있는 방향 (단위 벡터로도 표현 가능) |
🔠 그런데 자연어에서는?
단어도 이렇게 수의 나열(벡터)로 표현할 수 있어!
예를 들어 **"cat"**이라는 단어를 벡터로 바꾸면:
"cat" → [0.13, -0.22, 0.88, ..., 0.04] (예: 768차원)
이걸 "단어 임베딩" (Word Embedding) 이라고 해.
즉, 단어 하나를 수백 차원의 벡터로 표현해서 컴퓨터가 수학적으로 처리할 수 있게 만드는 거야.
📌 예시: 단어 유사도 비교
vec("king") - vec("man") + vec("woman") ≈ vec("queen")
“남자”를 빼고 “여자”를 더하니까 “왕”이 “여왕”이 되는 구조
📌 1. 벡터의 방향
벡터는 단순히 [3, 4]처럼 값만 있는 게 아니라,
어느 방향으로 향하고 있는지도 포함돼 있어.
[3, 4] 벡터는 원점 (0,0)에서 출발해
오른쪽으로 3, 위로 4만큼 간 방향이야.
이걸 방향 벡터라고 하고, 방향만 보려면 "길이를 1로" 만든다 → 바로 단위 벡터!
📌 2. 단위 벡터 (Unit Vector)
"방향은 그대로, 길이는 1"로 만든 벡터
벡터 [3, 4]의 단위 벡터는:
크기 = √(3² + 4²) = √25 = 5
단위 벡터 = [3/5, 4/5] = [0.6, 0.8]
0.36 + 0.64 == √1.0 == 1
✅ 단위 벡터는 왜 중요하냐면?
- 방향만 필요할 때 사용 (속도, 이동 방향 계산 등)
- **정규화(Normalization)**라고도 불러
- AI/게임/그래픽/물리엔진 등에서 필수
💻 3. 벡터 계산 - 코드 예시 (Java)
public class VectorExample {
public static void main(String[] args) {
double[] v = {3, 4};
// 벡터의 크기
double magnitude = Math.sqrt(v[0] * v[0] + v[1] * v[1]);
System.out.println("벡터 크기: " + magnitude); // 5.0
// 단위 벡터 구하기
double[] unit = { v[0] / magnitude, v[1] / magnitude };
System.out.println("단위 벡터: [" + unit[0] + ", " + unit[1] + "]"); // [0.6, 0.8]
}
}
🎮 4. 단위 벡터는 어디에 쓰이나?
🕹 게임 개발 | 캐릭터 이동 방향 계산 (ex. 앞으로 걷기 방향) |
🧠 인공지능 | 문장의 방향(벡터 유사도 → 코사인 유사도) |
🎨 그래픽스 | 광선 방향, 회전 방향, 정규 벡터 계산 |
📐 물리 시뮬 | 속도, 가속도 방향 표현 |
🧭 단위 벡터를 이용한 방향 비교
두 개의 단어가 얼마나 비슷한 의미인지 비교할 때도,
두 벡터의 방향(=단위 벡터)을 비교해:
코사인 유사도 = 단위 벡터 간 내적
🚩 코사인?
수학시간에 배운 코사인(cos) 은 삼각함수 중 하나로,
cos(θ) = 밑변 / 빗변
이건 삼각형에서의 해석이고,
벡터에서는 두 벡터 사이 각도를 표현하는 데 써!
↑
| 벡터 A
| /
| /
| / ← 각도 θ (0도에 가까울수록 유사)
| /
| / 벡터 B
|___/____________________ →
- A와 B가 완전히 같은 방향이면 θ = 0 → cos(θ) = 1 (완전 유사)
- A와 B가 수직이면 θ = 90도 → cos(θ) = 0 (유사하지 않음)
- A와 B가 반대 방향이면 θ = 180도 → cos(θ) = -1 (정반대 의미)
🎯 코사인 유사도
“두 벡터의 방향이 얼마나 비슷한지” =========== “내적(방향성)” ÷ “각자의 길이(규모 보정)”
cos(θ) = (A · B) / (||A|| * ||B||)
- A · B: 벡터 A와 B의 내적
- ||A||: 벡터 A의 크기
- ||B||: 벡터 B의 크기
✅ 예시
A = [a1, a2] → 예: [3, 4]
B = [b1, b2] → 예: [2, 1]
✅ ||A||: 벡터 A의 크기 (길이)
||A|| = √(a1² + a2²)
A = [3, 4]
||A|| = √(3² + 4²) = √(9 + 16) = √25 = 5
이건 "벡터가 얼마나 긴가", 즉 벡터의 크기(magnitude) 를 뜻해.
✅ A · B: 벡터 A와 B의 내적 (dot product)
A · B = (a1 * b1) + (a2 * b2)
A = [3, 4], B = [2, 1]
A · B = (3 * 2) + (4 * 1) = 6 + 4 = 10
이 두 벡터의 내적 A · B = 10이란 건,
A와 B가 서로 일정 부분 같은 방향을 향하고 있다는 걸 의미해.
✔ 방향이 비슷할수록 내적 값이 크고,
✔ 서로 수직이면 0,
✔ 반대 방향이면 음수가 돼.
❓ 내적에서 “왜 곱해서 더하냐?” → 직관적으로 설명
내적은 두 벡터의 유사한 방향성을 수치로 표현해주는 거야.
✔ 방향이 같으면 → 큰 값
✔ 수직이면 → 0
✔ 반대 방향이면 → 음수
↑ A = [0, 1] (위로)
|
|
|
________|__________→ B = [1, 0] (오른쪽)
A와 B는 서로 수직 ---> 내적 = 0*1 + 1*0 = 0 → 내적 0 → 방향이 완전히 다름
🧠 왜 이걸 "문장"에 쓰냐?
문장을 임베딩하면 → n차원 벡터로 바뀜
그 벡터들의 방향이 비슷하다면 → 문장의 의미도 비슷한 거야!
예:
- "나는 고양이를 좋아해" → 벡터 A
- "난 냥이를 정말 좋아해" → 벡터 B
이 둘은 단어가 다르지만, 의미는 유사함 → 벡터의 방향이 비슷 → cos(θ) ≈ 1
문장 A | 문장 B | 코사인 유사도 |
"나는 축구를 좋아해" | "나는 야구를 좋아해" | 약 0.8 |
"나는 커피를 마신다" | "고양이는 귀엽다" | 약 0.2 |
"나는 영화를 봤어" | "나는 영화를 봤어" | 1.0 (동일!) |
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
A = np.array([[1, 2, 3]])
B = np.array([[2, 4, 6]]) # A의 2배 → 같은 방향
similarity = cosine_similarity(A, B)
print(similarity) # [[1.]]
📌 왜 방향을 비교하지, 거리를 안 쓰고?
- 거리(Euclidean distance)는 문장 길이에 민감해 (짧고 강한 의미도 있음)
- 방향(코사인)은 의미의 방향성만 보기 때문에 더 직관적이야
🧠 바이어스(bias)란?
"출력을 조정하는 추가 상수 값"
입력이 0이어도 뉴런이 어느 정도 활성화될 수 있게 해주는 값
- bias는 출력을 조정하는 상수값
- 뉴런이 항상 0 이상으로 활성화되도록 도와줌
- 모델이 더 유연하게 학습할 수 있게 함
- 실제 수식에서 +b가 bias임
🎯 쉽게
개념 | 비유 |
weight (가중치) | 스피커의 볼륨 조절기 (얼마나 크게 소리 낼지) |
bias (바이어스) | 전체적으로 항상 일정한 기본 볼륨 추가 |
x = 0일 때 | bias가 없다면 아무 소리도 안 나지만, bias가 있으면 기본 음량 유지 |
📐 수식으로 설명
딥러닝의 한 층에서 뉴런의 계산
y = w * x + b
- x = 입력값 (예: 단어 벡터, 픽셀 등)
- w = 가중치 (weight)
- b = 바이어스 (bias) ← 이게 바로 우리가 말하는 그 bias!
- y = 출력값 (예: 다음 층에 전달될 값)
📈 그래프로 보기
- y = 2x
- y = 2x + 1 ← 여기서 1이 bias
📌 → bias는 그래프를 위/아래로 평행 이동시켜주는 역할
y=2x | 원점(0,0)을 지남 | 기울기만 있음 |
y=2x+1 | y축을 1만큼 올림 | bias 덕분에 위치 조정 가능 |
🤖 딥러닝에서 왜 필요하냐면?
모델이 복잡한 데이터를 학습할 때,
- 편향된 분포
- 0 입력에도 동작해야 하는 경우
- 정확한 패턴 조정이 필요한 경우
이럴 때 bias가 없으면 아무리 학습해도 정확하게 맞추기 힘들어.
- 파란색 점선 (y = 2x): 바이어스가 없는 경우. 입력 x=0일 때 출력도 0. 즉, 항상 원점을 지나감.
- 주황색 실선 (y = 2x + 1): 바이어스가 있는 경우. x=0이어도 출력이 1. 즉, 출력을 기본값으로 "띄워주는" 역할
✅ 모델에서 Bias 역할
- Bias는 모델이 "기본 성향" 또는 "기본 출력값"을 유지할 수 있게 해줌
- 없으면 입력 없을 때 아무것도 못함
- 웹툰 캐릭터, 대사 말투, GPT 대화 톤 --> 다 bias의 도움으로 기본값 유지가 가능해
🎨 웹툰 생성, 대사 생성, GPT 대화 예시
등장인물마다 고유의 분위기/표정/톤이 있어야 함.
→ 입력 정보가 없더라도 캐릭터 기본 톤을 유지해야 함.
📌 바이어스가 없다면:
- 매번 입력된 정보에만 반응 → 캐릭터가 기복 없이 무표정하거나 단조롭게 나올 수 있음
📌 바이어스가 있다면:
- 캐릭터의 기본 성격, 표정 흐름 유지 가능 (예: 낙천적인 캐릭터는 항상 밝은 느낌 유지)
💬 대사 생성 모델에서 Bias는?
예를 들어, "감정"이 빠져 있더라도 대사가 자연스러워야 함
📌 바이어스가 없다면:
- 입력이 조금만 부족해도 "무반응" or "무표정"한 대사 생성
📌 바이어스가 있다면:
- 기본적으로 사람처럼 말하는 톤 유지 가능
- 예: 아무 정보 없이도 "안녕하세요, 무엇을 도와드릴까요?"처럼 기본 대사 가능
👩🏼💼 GPT랑 대화할 때 Bias는?
GPT는 기본적으로 친절한 비서 스타일로 대답하지?
→ 그게 바로 "기본 출력 방향성", 즉 바이어스 효과야.
📌 사용자가 아무 정보도 안 줘도:
- "안녕하세요", "무엇을 도와드릴까요?", "좋은 질문입니다!"
- → 이건 모델이 학습 과정에서 익힌 기본 응답 스타일(bias) 덕분이야.
'학습 기록 (Learning Logs) > Today I Learned' 카테고리의 다른 글
컴퓨터 핵심 부품(메모리, cpu, 보조기억장치, 보조기억장치) (0) | 2025.04.23 |
---|---|
실시간 데이터 동기화 (0) | 2025.04.17 |
GPT에서 웹툰을 그린다고?! (0) | 2025.04.17 |
이미지 모델 테스트 (0) | 2025.04.17 |
LLM (0) | 2025.04.17 |