[벡터 압축 시리즈 3] RaBitQ와 TurboQuant: 같은 random matrix, 다른 목적

[벡터 압축 시리즈 3] RaBitQ와 TurboQuant: 같은 random matrix, 다른 목적
Photo by Dietmar Becker / Unsplash

이 글은 벡터 압축 시리즈의 세 번째 글입니다.

  1. RaBitQ: 이론적 error bound를 가진 randomized quantization
  2. TurboQuant: online vector quantization
  3. RaBitQ와 TurboQuant 비교

앞선 두 글에서는 각각 RaBitQ와 TurboQuant의 내부 동작을 따로 보았습니다.

이번 글에서는 세부 설명은 반복하지 않고, 두 방법이 어떤 점이 비슷하고 다른지 정리하고자 합니다. 두 논문은 모두 random matrix를 사용하는 것이 특징입니다. 하지만 실제로는 random rotation을 쓰는 목적, estimator를 만드는 방식, 잘 맞는 시스템 환경이 꽤 다릅니다.

그리고 TurboQuant를 둘러싼 논란도 함께 정리합니다. 2026년 6월 기준 공개 OpenReview와 RaBitQ 저자 측 글을 보면, 단순한 성능 비교 문제가 아니라 prior work 서술, 이론 비교, 실험 재현성까지 같이 얽혀 있습니다.

[요약]

  1. RaBitQ와 TurboQuant는 모두 random rotation/JL transformation을 사용합니다.
  2. RaBitQ는 randomization을 이용해 inner product estimator의 unbiasedness와 high-probability error bound를 얻는 쪽에 가깝습니다.
  3. TurboQuant는 random rotation 이후 coordinate가 Beta distribution을 따른다는 점을 이용해, 고차원 vector quantization을 coordinate별 scalar quantization으로 바꿉니다.
  4. RaBitQ는 ANN search, 특히 IVF처럼 후보 code를 많이 scan하고 re-ranking을 결합하는 구조와 잘 맞습니다.
  5. TurboQuant는 data oblivious하고 online이라는 점이 핵심입니다. 때문에 KV cache처럼 vector가 계속 생성되는 환경에서 적용하기 좋습니다.
  6. TurboQuant와 RaBitQ 간 비교에는 논란이 있으므로 어떤게 더 나은지 단정짓기는 어렵습니다.

둘 다 random matrix를 쓴다

두 방법의 공통점부터 보겠습니다.

RaBitQ와 TurboQuant는 모두 vector에 random rotation을 적용합니다. Random rotation은 vector의 norm과 inner product를 보존하는 orthogonal transform입니다. 따라서 원래 공간에서의 거리나 inner product 관계를 보존하면서, coordinate의 모양만 바꿀 수 있습니다.

RaBitQ에서 random rotation은 codebook을 분석 가능한 형태로 만들기 위한 장치입니다. RaBitQ는 hypercube vertex처럼 생긴 bi-valued codebook을 random하게 회전시키고, data vector를 회전시킨 codebook의 한 점으로 매핑하여 quantize합니다. 이후 inner product를 계산할 때는 query와 quantized vector의 inner product에 일정 값을 보정하는 estimator를 사용합니다. RabitQ는 query와 원본 data vector간 inner product와 estimator가 만든 inner product의 오차가 probabilistic error bound를 가진다는 것을 보였습니다.

TurboQuant에서 random rotation은 문제를 coordinate별 scalar quantization으로 바꾸기 위한 장치입니다. 어떤 input vector라도 random rotation 후에는 각 coordinate가 Beta distribution을 따르는 것으로 간주할 수 있습니다. 그러면 coordinate 하나를 어떻게 quantize할지 미리 계산해둘 수 있고, data vector가 들어올 때마다 별도 training 없이 바로 quantize할 수 있습니다.

정리하면 다음과 같습니다.

구분 RaBitQ TurboQuant
random matrix의 역할 randomized codebook과 estimator 분석 coordinate가 Beta distribution을 따르도록 회전
주된 목표 inner product/distance estimation의 error bound online, data-oblivious vector quantization
data code \(D\)-bit sign-bit string, padding으로 code length 확장 \(Q_{\mathrm{mse}}\): centroid index, \(Q_{\mathrm{prod}}\): index + residual QJL sign + norm
query 처리 normalize 후 \(P^{-1}\)로 변환하고 \(B_q\)-bit로 양자화해 estimator 계산 \(\Pi q\)로 centroid-index part를 계산하고, \(Q_{\mathrm{prod}}\)는 \(S q\)와 residual sign으로 QJL 보정
보장 방식 unbiased estimator와 probabilistic additive error bound MSE/inner product distortion rate, residual QJL을 통한 unbiased estimator
잘 맞는 문제 IVF + re-ranking streaming quantization, KV cache, online insertion

시스템 관점에서 차이가 나는 지점

벡터 검색 시스템만 놓고 보면 두 방법 모두 compressed code를 scan하는 구조와 잘 맞습니다. Query마다 필요한 값을 미리 계산하고, data side에는 짧은 code만 저장한 뒤, 많은 후보 code를 빠르게 훑는 방식입니다.

이 구조는 IVF와 조합이 좋습니다. IVF에서는 가까운 inverted list를 고른 뒤 그 안의 수백~수천 개 후보를 scan합니다. 두 방법은 query별 LUT 생성 비용이나 rotation 비용이 오버헤드로 발생하는데, IVF는 많은 후보를 방문하는 방식이므로 후보당 추가되는 비용이 상대적으로 덜합니다.

반대로 HNSW에서는 이 이득이 상대적으로 작을 수 있습니다. HNSW는 그래프를 이용해 방문할 후보 수를 줄입니다. 따라서 compressed code와 LUT를 사용할 수는 있지만, 상대적으로 한 query에서 scan할 code 수가 IVF보다 적을 가능성이 높고, 이 때문에 batch scan 최적화의 장점이 덜 드러납니다.

차이는 update와 streaming에서 더 분명해집니다.

RaBitQ는 ANN search에 맞춰 설계된 느낌이 강합니다. 특히 IVF와 결합하면 cluster centroid 기준 normalization, RaBitQ code scan, error bound 기반 re-ranking으로 이어지는 흐름이 자연스럽습니다. 원본 vector로 re-ranking할 후보를 bound로 줄일 수 있다는 점도 vector DB 운영 관점에서 매력적입니다.

TurboQuant는 online quantization이라는 성격이 더 강합니다. 데이터셋 전체로 codebook을 학습하지 않고, random rotation 이후의 Beta distribution에 대해 scalar codebook을 미리 만들어둡니다. 그래서 embedding이 계속 들어오거나, tenant마다 데이터 분포가 다르거나, KV cache처럼 token generation 중 vector가 계속 생기는 상황에서 장점이 있습니다.

두 논문의 이론적 보장


RaBitQ에서 중요한 것은 inner product estimator의 high-probability additive error bound입니다. 즉 compressed code로 계산한 값이 실제 inner product에서 얼마나 벗어날 수 있는지를 확률적으로 제어합니다. 앞선 글에서 본 것처럼 논문은 이 bound를 이용해 re-ranking 후보를 정하는 방법까지 직접 제시합니다.

TurboQuant도 inner product error를 통제합니다. Inner product용 \(Q_{\mathrm{prod}}\)는 MSE quantizer에 residual QJL을 붙여 unbiased estimator를 만들고, expected squared inner-product distortion \(D_{\mathrm{prod}}\)가 \(4^{-b}\) rate로 줄어드는 것을 보입니다. 동시에 MSE용 \(Q_{\mathrm{mse}}\)는 reconstruction error를 줄이는 쪽에 초점이 있습니다.

따라서 두 방법의 이론을 비교할 때는 “어떤 형태의 bound를 제공하는가”를 봐야 합니다. RaBitQ는 개별 distance estimate에 대한 confidence interval을 만들어 re-ranking 판단까지 이어집니다. TurboQuant의 \(Q_{\mathrm{prod}}\)도 ANN search에서 approximate inner product scoring에 쓸 수 있지만, 논문이 주는 보장은 주로 quantizer randomness에 대한 expected squared distortion입니다.

논란

TurboQuant는 ICLR 2026에 accept된 이후 꽤 큰 관심을 받았습니다. 동시에 OpenReview와 RaBitQ 저자 측 글에서는 몇 가지 문제 제기가 이어졌습니다.

첫 번째 논점은 prior work 서술입니다.

RaBitQ 저자 측은 TurboQuant가 random rotation을 핵심으로 설명하면서도, RaBitQ가 같은 random rotation/JL transformation을 사용한다는 점을 충분히 설명하지 않았다고 주장합니다. OpenReview의 한 reviewer도 RaBitQ와 TurboQuant가 모두 random projection을 사용하므로 두 방법의 차이를 더 충분히 비교해야 한다고 지적했습니다.

TurboQuant 저자 측의 반론도 있습니다. Random rotation 자체는 quantization literature에서 널리 쓰이는 표준 기법이고, TurboQuant의 novelty는 회전 후 coordinate distribution을 정확히 이용해 coordinate-wise quantization을 최적화한 데 있다는 입장입니다.

Random rotation 자체는 새로운 도구가 아닌 것이 맞습니다. 하지만 둘 다 vector quantization 문제를 다루기에 RaBitQ가 두 방법의 관계를 명확히 설명했으면 어땠을까하는 아쉬움이 있습니다.

두 번째 논점은 이론 비교입니다.

RaBitQ 저자 측은 TurboQuant가 RaBitQ의 theoretical guarantee를 suboptimal하다고 묘사한 것이 부정확하다고 주장합니다. 이후 OpenReview에서 TurboQuant 저자 측은 RaBitQ의 optimality가 내부 증명에서 도출될 수 있음을 확인했고, 이를 반영해 업데이트하겠다고 답했습니다.

세 번째 논점은 실험 비교와 재현성입니다.

RaBitQ 저자 측은 TurboQuant 논문에서 RaBitQ baseline이 Python translation, single-core CPU, multiprocessing disabled 조건으로 평가된 반면 TurboQuant는 A100 GPU에서 평가되었다고 주장합니다. 또 2026년 4월에 공개한 technical report에서는 TurboQuant 논문의 runtime과 recall 일부가 공개 artifact로 잘 재현되지 않는다고 주장합니다.

TurboQuant 저자 측은 runtime benchmark가 논문의 핵심이 아니며, 핵심은 compression-quality trade-off라고 답했습니다. 또한 OpenReview 리뷰 과정에서 KV cache와 ANN 실험에 대한 추가 baseline과 추가 실험이 제시되었습니다.]

개인적으로 TurboQuant측에서 이러한 실험 결과를 논문에 게재한 것은 아쉬움이 큽니다.

OpenReview에는 RaBitQ 외에도 DRIVE/EDEN과의 관계를 지적하는 공개 댓글이 있습니다. 이 댓글은 random rotation, Lloyd-Max codebook, inverse rotation이라는 구조가 이전 연구에서도 다뤄졌다고 주장합니다.

마무리

RaBitQ와 TurboQuant는 모두 random matrix를 사용합니다. 하지만 RaBitQ는 randomization을 이용해 estimator와 error bound를 만드는 쪽에 가깝고, TurboQuant는 random rotation을 이용해 online scalar quantization 문제로 바꾸는 쪽에 가깝습니다. 그래서 두 논문은 vector quantization 이라는 질문에 대해 서로 다른 답을 준 논문인 것 같습니다.

독자가 풀고자 하는 것이 “벡터 검색에서 quantization을 이용하고 re-ranking까지 recall 저하 없이 안정적으로 가져가고 싶다”라면 RaBitQ가 더 도움이 될 것입니다. IVF와 같이 사용하기 쉽고, error bound를 이용해 re-ranking 후보 개수를 정하는 것은 실무에서 큰 도움이 됩니다.

반면 풀고자 하는 것이 “데이터가 계속 들어오는 상황에서 codebook을 학습하지 않고 quantize하고 싶다”라면 TurboQuant 쪽이 더 맞을 수 있습니다. RabitQ는 centroid를 정하는 과정이 필요합니다. 하지만 TurboQuant는 그러한 과정이 없습니다. 특히 KV cache처럼 vector가 online으로 생성되는 상황에서는 data-oblivious quantizer라는 성격이 중요합니다. Inner product용 \(Q_{\mathrm{prod}}\)도 ANN scoring에 쓸 수 있으므로 TurboQuant를 검색과 무관한 방법으로 볼 필요는 없습니다. 다만 논문이 가장 강하게 밀고 있는 장점은 online quantization과 distortion-rate 보장에 있습니다.

목적이 “HNSW에 붙일 수 있는 qunatization 방법은 뭐가 좋을까?”라면 둘 다 최선이 아닐 수 있습니다. HNSW는 그래프를 이용해 방문하는 후보 수를 줄입니다. 따라서 두 방법을 사용함으로써 발생하는 오버헤드를 compressed code scan이 상쇄할 수 있을지는 구현에 달려있습니다.

TurboQuant의 비교와 홍보 문구는 현재 논란이 있습니다. RaBitQ와의 관계, 이론적 비교, 실험 재현성에 대해 공개적인 반박과 재반박이 이어졌습니다. 따라서 지금 단계에서는 어느 방법이 우위에 있다고 논하기는 어려워보입니다.

Reference