AI/RAG 이론

벡터 데이터베이스 : 양자화 기법(SQ, PQ)

_쿡북_ 2025. 7. 14. 13:52

[1] Scalar Quantization

 

1. Scalar Quantization이란?

Scalar Quantization (스칼라 양자화)는 고차원 벡터를 저장하거나 검색할 때 메모리를 줄이고 처리 속도를 높이기 위해 벡터 값을 압축하는 기법입니다. 특히, 벡터 데이터베이스(Vector DB)나 유사도 검색 시스템에서 자주 사용됩니다.

고차원 벡터의 각 **스칼라 값(1차원 수치)**을 일정한 범위의 **이산값(quantized value)**으로 근사화하여 표현하는 방식입니다.

예:

  • 원래 벡터: [0.12, -1.75, 3.90]
  • 양자화 후: [1, -2, 4] (정수 근사)

실제 예 (int8 양자화)

원래 벡터 값                 범위: -1.0 ~ 1.0 
0.34 round( (0.34+1)/0.01 ) → 134
-0.75 → 25
0.00 → 100
→ int8(0~255) 범위 내 값으로 표현됨

 2. 왜 사용하는가?

목적                                              설명
메모리 절약 float32 → int8, int4 등으로 압축 (4~10배 절약)
연산 속도 향상 압축된 벡터끼리의 유사도 연산 속도 ↑
검색 최적화 Approximate Nearest Neighbor (ANN) 검색에 적합

 

[2] Product Quantization(PQ)

고차원 벡터를 **여러 개의 서브 벡터(sub-vector)**로 나누고, 각각을 **코드북(codebook)**으로 압축해 표현하는 방식입니다. 벡터 전체를 저장하지 않고, 압축된 코드만 저장하므로 메모리를 줄이고, 근사 유사도 검색(ANN)에도 효과적입니다.


작동 원리 요약

  • 입력 벡터: 128차원 → 8개의 서브 벡터로 분할 (각 16차원)
  • 각 서브 벡터에 대해 k-means로 256개의 대표 벡터 (codewords) 생성
  • 서브 벡터마다 가장 가까운 코드워드의 **인덱스 (0~255)**만 저장 → 1 byte
  • 전체 벡터는 8 bytes로 표현 가능 (128D → 8D처럼 압축)

아래 그림 처럼 초기의 Vector 값을 그룹으로 나눠서 chunk로 분할하고 이를 각각의 할당된 공간에 Centroid된 값을 찾는 방식

[출처 : https://qdrant.tech/articles/product-quantization/]

AI를 활용해 작성되었습니다.

공감버튼이 큰힘이 됩니다