신경망에서의 벡터화: 초보자를 위한 가이드

발행: (2025년 12월 24일 오후 03:02 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

번역을 진행하려면 번역하고자 하는 본문 텍스트를 제공해 주세요. 현재는 링크만 포함되어 있어 번역할 내용이 없습니다. 텍스트를 알려주시면 바로 한국어로 번역해 드리겠습니다.

벡터화란 무엇인가?

  • Vector: 데이터를 순서가 있는 숫자 목록으로 표현한 수학적 표현.
  • Vectorization: 원시 데이터(단어, 픽셀, 소리 등)를 벡터로 변환하여 신경망이 빠른 연산을 수행하고 패턴을 학습할 수 있게 함.

데이터를 벡터로 표현함으로써 컴퓨터는 느린 루프를 효율적인 배열 연산으로 대체할 수 있어 학습 및 추론 속도가 빨라집니다.

실제 활용 사례

  • 검색 엔진 – 쿼리와 문서를 벡터화하여 관련성을 비교합니다.
  • 스마트폰 어시스턴트 – 음성을 벡터화하여 Siri/Google Assistant가 명령을 이해할 수 있게 합니다.
  • 언어 번역 – 단어를 의미를 포착하는 벡터에 매핑합니다.
  • 교통 경로 탐색 – 지도 데이터를 벡터화하여 최적 경로를 계산합니다.
  • 전자 상거래 – 제품 및 사용자 행동을 벡터화하여 추천 시스템에 활용합니다.
  • 헬스케어 – 의료 스캔을 벡터화하여 이상 탐지를 수행합니다.
  • 금융 – 거래를 벡터화하여 사기를 감지합니다.
  • 스팸 필터 – 이메일을 벡터화하여 스팸과 정상 메일을 구분합니다.
  • 자율 주행 – 센서 데이터를 벡터화하여 차선 유지 및 충돌 경고를 제공합니다.

작동 원리

텍스트 데이터

각 단어는 벡터에 매핑됩니다(예: “king” → [0.25, 0.89, 0.12,…]). 일반적인 기법으로는 Bag‑of‑Words, TF‑IDF, 그리고 밀집 임베딩이 있습니다.

이미지 데이터

픽셀(RGB 값)은 벡터의 숫자가 됩니다. 64×64 크기에 색상 채널이 3개인 이미지는 길이 12 288인 벡터입니다.

연산

개별 요소를 반복하는 대신, 수학 연산을 전체 벡터에 한 번에 적용합니다:

[1, 2, 3] + [4, 5, 6] = [5, 7, 9]

장점

  • 속도 – 더 빠른 학습 및 추론.
  • 단순성 – 명시적 루프 없이 깔끔한 코드.
  • 확장성 – 대규모 데이터셋을 효율적으로 처리.
  • 정확도 – 텍스트의 의미와 이미지의 시각적 패턴을 포착.

파이썬 예제

import numpy as np

# 두 개의 간단한 벡터
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 벡터화된 덧셈
c = a + b
print(c)          # [5 7 9]
from sklearn.feature_extraction.text import CountVectorizer

texts = [
    "AI is amazing",
    "Vectorization makes AI fast",
    "AI AI is powerful"
]

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)

print(vectorizer.get_feature_names_out())
# ['ai' 'amazing' 'fast' 'is' 'makes' 'powerful' 'vectorization']

print(X.toarray())
# [[1 1 0 1 0 0 0]
#  [1 0 1 0 1 0 1]
#  [2 0 0 1 0 1 0]]

설명

  • 어휘는 모든 문장에 등장하는 고유 단어들로 구성됩니다.
  • 각 열은 단어에 해당하고, 각 행은 문장에 해당합니다.
  • 값은 단어 빈도수이며(예: 2는 해당 단어가 두 번 등장함을 의미합니다).

벡터화 유형

수치 벡터화

원시 숫자를 직접 사용 (예: 픽셀 강도, 센서 판독값).

범주형 벡터화

범주형 값을 숫자 형태로 변환.

원‑핫 인코딩

활성화된 범주를 나타내는 1 하나가 있는 이진 벡터를 생성합니다.

import pandas as pd

animals = pd.DataFrame({'pet': ['cat', 'dog', 'fish', 'cat']})
encoded = pd.get_dummies(animals, columns=['pet'])
print(encoded)
#    pet_cat  pet_dog  pet_fish
# 0        1        0        0
# 1        0        1        0
# 2        0        0        1
# 3        1        0        0

레이블 인코딩

각 범주에 고유한 정수를 할당합니다 (예: cat → 0, dog → 1, fish → 2). 간단하지만 우연히 순서 관계를 암시할 수 있습니다.

바이너리 인코딩

범주를 이진수로 표현하여 원‑핫에 비해 차원을 감소시킵니다.

빈도 인코딩

각 범주의 발생 횟수를 숫자값으로 사용합니다 (예: cat → 10, dog → 5, fish → 2).

텍스트 벡터화

단어나 문장을 벡터로 변환합니다.

  • Bag‑of‑Words / TF‑IDF – 단어 빈도 또는 가중 빈도에 기반한 희소 벡터.
  • 임베딩 – 대규모 코퍼스에서 학습된 조밀하고 저차원 벡터 (예: Word2Vec, GloVe, BERT).
    예시: king - man + woman ≈ queen.

연산 벡터화

전체 배열에 한 번에 수학 연산을 적용합니다 (예: NumPy, TensorFlow, PyTorch). 이는 효율적인 신경망 계산의 핵심입니다.


인코딩 방법—원‑핫, 레이블, 바이너리, 빈도, 그리고 임베딩—각각 장점과 트레이드오프가 있습니다. 적절한 접근 방식을 선택하려면 데이터셋 크기, 모델 아키텍처, 그리고 해결하려는 구체적인 문제에 따라 달라집니다.

Back to Blog

관련 글

더 보기 »

절대 초보자를 위한 신경망

소개 만약 기계가 얼굴을 인식하고, 언어를 번역하며, 심지어 예술을 생성하는 방법에 대해 궁금해 본 적이 있다면, 그 비밀은 종종 neural networks입니다. Do...