[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를 활용해 작성되었습니다.
공감버튼이 큰힘이 됩니다
'AI > RAG 이론' 카테고리의 다른 글
벡터 데이터베이스 : Graph Index (0) | 2025.07.14 |
---|---|
벡터 데이터베이스 : Hash Index란 (0) | 2025.07.14 |
RAG 구현시 고려사항 : (6) 멀티턴 대화(ConversationBufferMemory) (0) | 2025.07.11 |
RAG 구현시 고려사항 : (5) RAG 성능 최적화 전략 (1) | 2025.07.11 |
RAG 구현시 고려사항 : (4) 프롬프트 설계 및 Generator 고려사항 (4) | 2025.07.11 |
댓글