본문 바로가기

학습 기록 (Learning Logs)/Today I Learned

머신러닝에서 나오는 vector, bias 뭔데?

벡터? 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 = [3, 4] , 벡터 B = [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 = 출력값 (예: 다음 층에 전달될 값)

 

📈 그래프로 보기

  1. y = 2x
  2. 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) 덕분이야.