模型層 開放閱讀

HNSW

Hierarchical Navigable Small World

概念 ID
hierarchical-navigable-small-world
更新時間
2026-05-29
來源數量
待補

HNSW

3 秒看懂

一句話定義: HNSW 是一種基於多層跳錶 + 小世界圖的近似最近鄰(ANN)搜尋演算法,以”在海量高維向量中極速找到相似向量”為核心能力,是當前幾乎所有主流向量資料庫的預設索引方案。

類比: 想像一本詞典——最頂層索引只覆蓋極少數字母(“A、M、Z”),快速鎖定大區間;逐層下降到更密的索引,直到最終頁逐詞查詢。HNSW 對向量做的就是這件事,只不過”字母順序”被替換成了高維空間中的圖導航。

一句話投資意義: RAG(檢索增強生成)的底層基礎設施,沒有 HNSW 級別的 ANN 引擎,大型模型就無法高效檢索外部知識。

3 分鐘產業解釋

為什麼 HNSW 突然變重要?

2023 年以來,大語言模型(LLM)從”純引數記憶”走向”檢索增強生成(RAG)“範式:先把文件切成 chunk、編碼為高維向量(通常 768-4096 維),存入向量資料庫;推論時對使用者 query 做向量編碼,在庫中做最近鄰檢索,將 Top-K 結果拼入 prompt 送入 LLM。

向量檢索的效能瓶頸直接決定了 RAG 的延遲和吞吐。 精確最近鄰(暴力掃描)在百萬級以上向量庫中不可接受(O(n) 複雜度),必須用 ANN(近似最近鄰)做剪枝。HNSW 恰好是當前 ANN 領域綜合召回率/延遲/QPS 最優的通用演算法之一。

產業定位

使用者 Query


┌──────────────┐
│ Embedding 模型 │ ← 產生高維向量
└──────┬───────┘
       │ (query vector, e.g. 1536-d)

┌──────────────┐
│  向量資料庫    │
│ ┌──────────┐ │
│ │ HNSW 索引 │ │ ← 本頁主角: ANN 檢索
│ └──────────┘ │
└──────┬───────┘
       │ (Top-K 相似文件 chunk)

┌──────────────┐
│  LLM 生成器   │ ← RAG 推論
└──────────────┘

幾乎所有主流向量資料庫(Milvus、Weaviate、Qdrant、Pinecone、pgvector、Vespa 等)均將 HNSW 作為預設或主力 ANN 索引選項。Meta 的 FAISS 庫實現了 HNSW,而 Google 的 ScaNN 未採用 HNSW,其核心演算法是基於各向異性量化結合 IVFPQ 等方案。在 RAG 成為 LLM 應用主流範式的當下,HNSW 是 AI 基礎設施棧中”資料層”的核心演算法元件


15 分鐘專家深入

1. 核心思想:跳錶 + 小世界圖

HNSW 由 Yu. A. Malkov 和 D. A. Yashunin 在論文 “Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs”(首次提交於 2016 年 arXiv,正式發表於 IEEE TPAMI 2018)中提出。其核心融合了兩個經典結構:

經典結構貢獻在 HNSW 中的角色
Skip List(跳錶,Pugh 1990)多層連結串列,上層稀疏 → 快速定位區間多層架構:上層節點稀疏,用於快速粗定位
Navigable Small World (NSW) 圖每個節點連向遠距離”高速公路”鄰居 + 近距離鄰居底層圖結構保證區域性精確搜尋 + 全域性快速跳轉

2. 結構解析

多層圖(Hierarchical Graph):

  • Layer 0(最底層): 包含全部 n 個向量節點,每個節點最多有 M 條雙向邊(M 是核心引數,典型值 16-64)。
  • Layer 1, 2, … L(逐層向上): 每個向量被隨機分配到某個最高層 l_{max}。分配機率通常按指數衰減——層數越高,節點越稀疏。l_{max} 的選取通常按 l_{max} = \lfloor -\ln(text(uniform)(0,1)) \cdot m_L \rfloor,其中 m_L = 1 / \ln(M)(論文預設設定)。
  • Layer L(最頂層): 僅包含極少數”高速公路入口”節點。

搜尋過程(Query-Time Greedy Search with Beam):

  1. 從最頂層 L 的某個入口點(通常是首次插入的節點,記為 entry_point)開始。
  2. 在當前層執行 貪心波束搜尋(beam search,寬度 = ef):從入口點出發,沿圖邊跳到離 query 更近的鄰居,直到區域性最優(所有鄰居都不比當前最近點更近)。
  3. 將當前層的最近點作為下一層的入口點,下降到下一層。
  4. 重複步驟 2-3,直到 Layer 0。
  5. 在 Layer 0 做最終的 beam search(寬度 ef 或 ef_search),返回 Top-K 結果。

建置過程(Insert-Time):

  1. 新節點 $q$ 被分配到最高層 l_{max}
  2. 從 Layer L 的 entry_point 開始,逐層貪心搜尋到 l_{max}+1 層的最近鄰,作為 l_{max} 層的入口。
  3. l_{max} 層及以下各層,分別做 beam search(寬度 = efConstruction),找到最近的 M 個鄰居(Layer 0 為 2M),建立雙向邊。
  4. 對每個鄰居,檢查其邊數是否超過 M(或 2M),若超過則做 剪枝(pruning):保留離鄰居最近的 M 條邊(啟發式剪枝在論文中有詳細描述,核心是保持圖的連通性和多樣性)。

3. 關鍵引數

引數含義典型值影響
M每節點最大鄰居數(Layer 0 為 2M)16(預設), 32, 64M↑ → 召回↑、記憶體↑、建置慢
efConstruction建置時 beam search 寬度200(預設)efConstruction↑ → 圖質量↑、建置慢
ef / efSearch查詢時 beam search 寬度50-500ef↑ → 召回↑、延遲↑(執行時可調)
maxM / maxM0非底層/底層最大鄰居數與 M 相關控制記憶體和搜尋廣度

⚠️ ef 是執行時可調的,這意味著使用者可以在召回率和延遲之間動態權衡,無需重建索引——這是 HNSW 相比 IVF 等靜態索引的顯著優勢。

4. 複雜度分析

維度複雜度備註
建置時間O(n \cdot M \cdot text(efConstruction) \cdot \log n)(估)主要是每個節點插入時的 beam search
查詢時間O(\log n)(平均,高召回場景)小世界圖性質保證對數跳數
空間/記憶體O(n \cdot M \cdot bar(L)),$bar(L)$ 為平均層數記憶體密集型——圖的鄰接表常駐記憶體是主要瓶頸
$bar(L)$\approx \ln(n) / \ln(M)層數的期望值

核心痛點:記憶體。 對於 1 億條 768 維 float32 向量,僅原始向量約佔 307.2 GB(1e8 × 768 × 4 位元組),加上 HNSW 圖的鄰接表(每條邊 4 位元組 int × 每節點約 2M-4M 條邊 × 1e8 節點),圖結構本身可能額外佔用數十到數百 GB。實際部署中,HNSW 索引的記憶體佔用通常為原始向量的 1.2-2 倍 [行業估算]。


技術原理(最深)

多層圖結構詳解

Layer L (最稀疏):     ●─────────●
                      ↑ 高速公路入口
Layer L-1:        ●───●─────●───●
                      ↑ 節點密度增加
Layer 1:      ●─●─●─●─●─●─●─●─●─●─●─●
                      ↑ 更密
Layer 0 (全集): ●●●●●●●●●●●●●●●●●●●●●●●●●●●●
               ↑ 所有 n 個向量,每節點 ≤ 2M 邊

搜尋過程虛擬碼

def hnsw_search(query, ef, K, entry_point, layers):
    # Step 1: 從頂層貪心下降到 Layer 1
    curr_nearest = entry_point
    for layer in range(max_layer, 0, -1):
        curr_nearest = greedy_search(query, curr_nearest, layer)
        # 在當前層沿最近鄰邊跳到區域性最優(單點貪心)

    # Step 2: 在 Layer 0 做 beam search
    candidates = beam_search(query, curr_nearest, layer=0, ef=ef)
    # candidates: 一個大小 ≤ ef 的有序集合(按距離排序)
    # beam search 過程:
    #   - 維護 candidates (小根堆) 和 visited set
    #   - 從 entry_point 出發, 取堆頂(最近未訪問節點)
    #   - 遍歷其鄰居, 若更近則入堆
    #   - 直到堆中最近的 ef 個節點都不再更新

    return top_k(candidates, K)  # 返回最近的 K 個

剪枝策略(Heuristic Pruning)

建置時,每個新節點找到 M 個候選鄰居後,不是簡單取最近的 M 個,而是執行啟發式剪枝:

Prune(neighbors, M, new_node):
    result = []
    sorted_by_dist = sort(neighbors, by=distance_to(new_node))
    for candidate in sorted_by_dist:
        if |result| >= M: break
        # 只有當 candidate 比 result 中已有節點都"更不同"時才保留
        # (即 candidate 不被 result 中任何節點"覆蓋")
        if dist(candidate, new_node) < dist(candidate, any_in(result)):
            result.append(candidate)
    return result

這一策略的核心目的是 保持圖的多樣性(diversity)——避免所有鄰居都聚集在同一區域,從而保證搜尋的全域性可達性。這是 HNSW 召回率顯著優於樸素 NSW 的關鍵設計之一 [Malkov & Yashunin, IEEE TPAMI 2018]。

小世界性質的保證

HNSW 繼承了小世界圖的長程/短程連線特性:在 Layer 0 的圖中,每個節點既連線”近距離”鄰居(greedy 搜尋的有效區域性導航),又連線”遠距離”鄰居(實現 O(log n) 跳數的”高速公路”)。上層進一步放大了”遠距離跳躍”的效果——這正是 skip list 的核心思想,多層結構共同保證了搜尋的對數擴充套件性。


技術演進史

時間事件意義
1990Pugh 發明 Skip List多層索引思想的奠基
2002Kleinberg 提出 Navigable Small World 網路模型社會網路中的”六度分隔”理論數學化
2011-2014NSW 演算法(Malkov 等)將 NSW 理論付諸近似最近鄰搜尋實踐
2016HNSW 論文首版(arXiv 1603.09320)融合 skip list + NSW,奠定基礎
2018HNSW 正式發表於 IEEE TPAMI被學術界和工業界廣泛採納
2017+hnswlib 開源(Malkov 維護)C++ 參考實現,成為事實標準
2019+FAISS(Meta)整合 HNSW進入主流 ML 基礎設施
2020+Milvus、Weaviate、Qdrant 等向量資料庫湧現HNSW 成為預設索引
2021+DiskANN(Microsoft Research)提出 Vamana 圖在 HNSW 基礎上引入 SSD 儲存降低記憶體需求
2023-2024RAG 範式爆發,HNSW 成為 LLM 基礎設施產業價值躍升
2024+GPU 加速 HNSW 探索(如 CAGRA/NVIDIA、VSPANN 等)解決 HNSW 的建置/查詢並行化瓶頸

技術路線對比

ANN 索引演算法橫向對比

維度HNSWIVF-Flat / IVF-PQScaNN (Google)DiskANN (MSR)暴力掃描 (Flat)
資料結構多層可導航圖倒排索引 + 聚類各向異性量化Vamana 圖 + SSD無索引
召回率 @ 10★★★★★(>95%@ef=200 常見)★★★★(需足夠 nprobe)★★★★★★★★★★★★★★(100%精確)
查詢延遲★★★★★★★★★★★★★★★★★(SSD 讀取)★(最慢)
記憶體佔用★★(高,需存圖)★★★★(PQ 壓縮後低)★★★★★★★★★(向量在 SSD)★★(存原始向量)
建置速度★★★(序列插入是瓶頸)★★★★(聚類較快)★★★★★★★★★★★★
可增量更新★★★★★(直接插入)★★(需重建聚類)★★★★★★★★★★
GPU 友好度★★(貪心搜尋難並行)★★★★(批次掃描)★★★★★★★★★★
適用規模1M-100M [行業估算]10M-1B+10M-1B+1B+ (SSD 級)<1M
典型使用者Milvus/Weaviate/QdrantFAISS 使用者Google CloudAzure AI Search小規模精確場景

注: 以上星評基於行業共識和典型 benchmark(ANN-Benchmarks、Big-ANN-Benchmarks)的定性總結,實際表現高度依賴資料集維度、分佈、硬體配置。召回率/延遲的精確數字因測試條件不同差異較大,不在此編造具體數值。


上下游

上游(HNSW 依賴什麼)

┌──────────────────────────────────────────────────────┐
│                    上 遊                               │
├───────────────┬──────────────────────────────────────┤
│ Embedding 模型 │ OpenAI text-embedding-3,              │
│               │ Cohere embed-v3,                       │
│               │ BGE/Jina/BAAI 等開源模型                │
│               │ → 產出高維向量(768-4096維)              │
├───────────────┼──────────────────────────────────────┤
│ 距離度量       │ Cosine, L2 (歐氏), Inner Product       │
│               │ → HNSW 圖中邊的距離計算基礎              │
├───────────────┼──────────────────────────────────────┤
│ 計算基礎設施   │ 大記憶體 CPU 伺服器(DDR5)                 │
│               │ → HNSW 圖需常駐記憶體                     │
├───────────────┼──────────────────────────────────────┤
│ SIMD/向量化指令│ AVX-512, NEON, SVE 等                  │
│               │ → 距離計算的硬體加速                     │
└───────────────┴──────────────────────────────────────┘

下游(誰消費 HNSW 的結果)

┌──────────────────────────────────────────────────────┐
│                    下 遊                               │
├───────────────┬──────────────────────────────────────┤
│ 向量資料庫     │ Milvus/Zilliz, Weaviate, Qdrant,      │
│               │ Pinecone, pgvector, Vespa, ChromaDB    │
├───────────────┼──────────────────────────────────────┤
│ RAG 應用      │ 企業知識庫問答、程式碼檢索、法律/醫療AI     │
├───────────────┼──────────────────────────────────────┤
│ 推薦系統      │ 使用者/物品 embedding 的即時匹配           │
├───────────────┼──────────────────────────────────────┤
│ 多模態搜尋    │ 圖文檢索(CLIP embedding)、音影片檢索      │
├───────────────┼──────────────────────────────────────┤
│ 去重/聚類     │ 近重複檢測、語義去重                      │
└───────────────┴──────────────────────────────────────┘

關鍵指標

效能評估指標體系

指標定義HNSW 典型表現
Recall@K返回的 Top-K 中包含真正 Top-K 的比例Recall@10 > 95% 當 ef ≥ 100 [典型 benchmark 觀測]
QPS每秒查詢數(單執行緒)數百到數千 QPS(取決於維度和 ef) [行業估算]
P99 延遲99 分位查詢延遲通常 < 10ms @ 10M 向量 [行業估算]
建置時間索引建置總耗時10M × 768-d 向量:數十分鐘到數小時 [行業估算]
記憶體佔用 (GB)索引全部駐留記憶體≈ 原始向量大小 × 1.2-2.0 [行業估算]
節點度 (平均)每節點平均邊數接近但不超過 M (Layer 0 為 2M)

關鍵權衡三角

         召回率 (Recall)

           / \
          /   \
         / HNSW \
        /  sweet  \
       /   spot    \
      /             \
     ▼───────────────▼
 延遲/吞吐          記憶體
 (Latency/TP)     (Memory)

→ M↑ / ef↑: 召回↑, 延遲↑, 記憶體↑
→ M↓ / ef↓: 召回↓, 延遲↓, 記憶體↓
→ ef 執行時可調, M 需建索引時確定

供需與市場資料

需求側驅動力

驅動因素量化訊號對 HNSW 的意義
RAG 應用爆發主要雲端廠商均推出向量資料庫服務(AWS OpenSearch Serverless、Azure AI Search、GCP Vector Search)向量索引需求從”可選”變為”必選”
Embedding 模型標準化OpenAI、Cohere 等均提供 embedding API,維度趨於穩定在 768-3072向量規模穩定增長
企業知識庫建設全球企業 RAG 試點專案增長(具體資料各家口徑不一,無統一來源)百萬-億級向量庫成為常態

供給側格局

層級玩家備註
開源庫hnswlib(參考實現)、FAISS(Meta)、USearch大多數向量資料庫底層呼叫這些庫
向量資料庫Milvus/Zilliz、Weaviate、Qdrant、Pinecone、ChromaDBHNSW 是預設或主力索引
雲端廠商內建AWS(OpenSearch KNN)、Azure(AI Search)、GCP(ScaNN/Matching Engine)部分用自研 ANN 演算法替代或補充 HNSW
硬體加速NVIDIA(cuVS/CAGRA)、Intel(oneAPI 級最佳化)GPU 加速 ANN 搜尋是活躍方向

注意: 向量資料庫市場的精確規模資料各家口徑差異大,Gartner/IDC 尚未給出統一的獨立分類報告。市場處於早期高速增長階段,具體 TAM 數字不在此編造。


代表公司與資本對映

公司/專案與 HNSW 的關係

公司/專案角色與 HNSW 的關係融資/估值訊號
Zilliz(Milvus 母公司)向量資料庫Milvus 核心索引之一即 HNSW2022 年 B 輪 6000 萬美元 [公開資訊]
Weaviate開源向量資料庫預設 HNSW 索引2023 年 B 輪 5000 萬美元 [公開資訊]
Qdrant開源向量資料庫Rust 實現的 HNSW2024 年 A 輪 2800 萬美元 [公開資訊]
Pinecone全託管向量資料庫底層包含 HNSW 類圖索引 [估算]2023 年 B 輪 1 億美元,估值 7.5 億 [公開資訊]
ChromaDB輕量級嵌入資料庫使用 hnswlib 作為後端開源為主,具體融資不詳
Meta (FAISS)ANN 庫整合 HNSW 實現內部基礎設施
Microsoft (DiskANN)ANN 研究提出 Vamana 圖(HNSW 的”磁碟友好”演進)MSR 研究專案
NVIDIA (cuVS/CAGRA)GPU ANN提出 CAGRA 圖索引,思路與 HNSW 相關但針對 GPU 最佳化GPU 生態戰略

投資視角: HNSW 本身是開源演算法,無法直接”投資 HNSW”。投資路徑是通過搭載 HNSW 的向量資料庫公司、使用向量檢索的 AI 應用公司、以及為 HNSW 提供硬體加速的晶片公司。


投資邏輯

看多邏輯

  1. RAG 是 LLM 落地的必經之路:純引數記憶的 LLM 存在幻覺和知識過時問題,RAG 通過外部檢索彌補。只要 RAG 繼續是主流範式,向量檢索基礎設施就有剛需。
  2. HNSW 是事實標準:在 ANN-Benchmarks 等公開評測中,HNSW 在中等規模(1M-100M 向量)場景下的 recall-latency 綜合表現長期位居前列,生態鎖定效應強。
  3. 向量資料庫是新基礎設施層:類比關係型資料庫之於 Web 應用,向量資料庫之於 AI 應用有”必經之路”屬性。
  4. 增量更新能力:相比 IVF 需要定期重建聚類,HNSW 天然支援增量插入,適合生產環境中資料持續寫入的場景。

看空/風險邏輯

  1. 記憶體瓶頸:HNSW 的最大短板是記憶體佔用大。當向量規模達到 10 億級,即使有 PQ 壓縮輔助,記憶體成本也極高。DiskANN 等”磁碟友好”方案可能在超大規模場景蠶食份額。
  2. GPU 加速難:HNSW 的貪心搜尋本質上是序列的(每步依賴上一步的結果),難以充分利用 GPU 的大規模並行能力。NVIDIA 的 CAGRA 等方案用不同的圖建置/搜尋策略來適配 GPU,可能在高吞吐場景替代 HNSW。
  3. 長上下文/大視窗 LLM 的衝擊:如果 LLM 的上下文視窗持續擴大(如 1M+ tokens),部分 RAG 場景可能被”塞進上下文”替代,減少向量檢索需求。
  4. 演算法迭代風險:新 ANN 演算法不斷湧現(如 HNSW2、Vamana、NSSG、CAGRA 等),HNSW 的”事實標準”地位並非不可撼動。

關鍵觀察點

  • 向量資料庫公司的真實 ARR 和客戶留存率
  • 主要雲端廠商是自研 ANN 還是依賴開源庫
  • GPU-native ANN 索引(CAGRA 等)是否在 benchmark 上系統性超越 HNSW
  • RAG 範式是否被長上下文 LLM 侵蝕

常見誤讀糾偏

❌ 誤讀 1:“HNSW 是精確搜尋”

糾偏: HNSW 是 近似 最近鄰(ANN)搜尋。它不保證返回真正的 Top-K,而是在 ef 引數足夠大時以高機率接近精確結果。當 ef = n(等於全部向量數)時退化為精確搜尋,但此時無加速效果。實際部署中,Recall@10 在 95%-99.5% 的區間被認為是可接受的。

❌ 誤讀 2:“HNSW 只能在記憶體中工作”

糾偏: 經典 HNSW(如 hnswlib)確實要求全圖駐留記憶體,但後續研究已將 HNSW 擴充套件到磁碟友好場景。典型代表包括:

  • DiskANN(Microsoft Research):使用 Vamana 圖(與 HNSW 思路相似但做了磁碟 I/O 最佳化),向量儲存在 SSD 上,僅將圖結構和導航資訊保留在記憶體中。
  • hnswlib 的 mmap 模式:可通過記憶體對映將索引檔案對映到虛擬記憶體,利用 OS 的頁面管理做部分換入換出。
  • SPANN(Microsoft Research):將向量聚類到磁碟上的 posting list 中,僅在記憶體中保留索引結構。

因此更準確的表述是:經典 HNSW 是記憶體優先(memory-centric)的演算法,但已有變體將其擴充套件到磁碟輔助場景。

❌ 誤讀 3:“HNSW 不支援刪除”

糾偏: HNSW 原始論文未詳細討論刪除操作,但實踐中主流實現(如 FAISS、Milvus、Weaviate)都通過 標記刪除(tombstone/deletion flag)+ 定期 compaction 的方式支援刪除。即:邏輯刪除時僅標記節點為已刪除,查詢時跳過;物理刪除在後臺 compaction 時重建受影響的邊。這會帶來一定的空間浪費和召回率波動。

❌ 誤讀 4:“HNSW 不需要調參,開箱即用”

糾偏: HNSW 的效能高度依賴 M、efConstruction 和 ef 三個引數的配置。M 和 efConstruction 在索引建置時確定且不可更改(需要重建索引),ef 可執行時調整。不當的引數選擇會導致:

  • M 過小 → 圖連線度不足 → 召回率下降
  • efConstruction 過小 → 圖質量差 → 召回率天花板低
  • ef 過大 → 延遲過高

生產環境中,引數調優通常是基於業務的資料規模、維度分佈和延遲 SLA 的反覆實驗過程。


學習路徑

推薦學習路徑

Level 0: 概念理解
├── 閱讀本文
├── 理解"為什麼需要 ANN"和"HNSW 的多層圖思想"

Level 1: 動手實驗
├── 安裝 hnswlib (pip install hnswlib)
├── 在 10 萬條隨機向量上體驗 M/efConstruction/ef 的效果
├── 用 ann-benchmarks 跑對比測試

Level 2: 原理深入
├── 精讀原論文: Malkov & Yashunin, IEEE TPAMI 2018
├── 閱讀 hnswlib 原始碼(C++,約 2000 行,可讀性好)
├── 理解 heuristic pruning 的數學直覺

Level 3: 系統整合
├── 在 Milvus/Weaviate/Qdrant 中部署 HNSW 索引
├── 測試不同 M/ef 對召回率/延遲/QPS 的影響
├── 研究標量過濾 + HNSW 搜尋的融合策略(如 pre-filter vs post-filter)

Level 4: 前沿研究
├── 對比 DiskANN (Vamana)、CAGRA、HNSW2 等變體
├── 研究 GPU 加速 ANN 的並行化挑戰
├── 關注標量-向量混合索引(hybrid index)的最新進展

關鍵論文/資源

資源說明
Malkov & Yashunin, IEEE TPAMI 2018HNSW 原始論文
hnswlib GitHub 倉庫C++ 參考實現,廣泛使用
ann-benchmarks.comANN 演算法線上 benchmark 平台
FAI
source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型