IVF+PQ原理概述

1️⃣k-Meansk\text{-Means}k-Means分簇方法

  1. 含义:一种无监督学习,用于将数据集分为kkk个簇(每簇一个质心),使同簇点靠近/异簇点远离

  2. 流程:

    image-20241031100601961

2️⃣PQ\text{PQ}PQ算法流程

  1. 给定kkkDDD维向量

    {v1=[x11,x12,x13,x14,...,x1D]v2=[x21,x22,x23,x24,...,x2D]            .........vk=[xk1,xk2,xk3,xk4,...,xaD]↔{v1={[x11,x12,x13],[x14,x15,x16],...,[x1(D−1),x1(D−1),x1D]}v2={[x21,x22,x23],[x24,x25,x26],...,[x2(D−1),x2(D−1),x2D]}            .........vk={[xk1,xk2,xk3],[xk4,xk5,xk6],...,[xk(D−1),xk(D−1),xkD]}\small\begin{cases} \textbf{v}_1=[x_{11},x_{12},x_{13},x_{14},...,x_{1D}]\\\\ \textbf{v}_2=[x_{21},x_{22},x_{23},x_{24},...,x_{2D}]\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_k=[x_{k1},x_{k2},x_{k3},x_{k4},...,x_{aD}] \end{cases}\xleftrightarrow{} \begin{cases} \textbf{v}_{1}=\{[x_{11},x_{12},x_{13}],[x_{14},x_{15},x_{16}],...,[x_{1(D-1)},x_{1(D-1)},x_{1D}]\}\\\\ \textbf{v}_{2}=\{[x_{21},x_{22},x_{23}],[x_{24},x_{25},x_{26}],...,[x_{2(D-1)},x_{2(D-1)},x_{2D}]\}\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{k}=\{[x_{k1},x_{k2},x_{k3}],[x_{k4},x_{k5},x_{k6}],...,[x_{k(D-1)},x_{k(D-1)},x_{kD}]\} \end{cases}v1=[x11,x12,x13,x14,...,x1D]v2=[x21,x22,x23,x24,...,x2D].........vk=[xk1,xk2,xk3,xk4,...,xaD]v1={[x11,x12,x13],[x14,x15,x16],...,[x1(D1),x1(D1),x1D]}v2={[x21,x22,x23],[x24,x25,x26],...,[x2(D1),x2(D1),x2D]}.........vk={[xk1,xk2,xk3],[xk4,xk5,xk6],...,[xk(D1),xk(D1),xkD]}

  2. 分割子空间:将DDD维向量分为MMMDM\cfrac{D}{M}MD维向量

    子空间1{v11=[x11,x12,x13]v21=[x21,x22,x23]            .........vk1=[xk1,xk2,xk3]&子空间2{v12=[x14,x15,x16]v22=[x24,x25,x26]            .........vk2=[xk4,xk5,xk6]&...&子空间M{v1M=[x1(D−1),x1(D−1),x1D]v2M=[x2(D−1),x2(D−1),x2D]            .........vkM=[xk(D−1),xk(D−1),xkD]\small子空间1\begin{cases} \textbf{v}_{11}=[x_{11},x_{12},x_{13}]\\\\ \textbf{v}_{21}=[x_{21},x_{22},x_{23}]\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{k1}=[x_{k1},x_{k2},x_{k3}] \end{cases}\&子空间2 \begin{cases} \textbf{v}_{12}=[x_{14},x_{15},x_{16}]\\\\ \textbf{v}_{22}=[x_{24},x_{25},x_{26}]\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{k2}=[x_{k4},x_{k5},x_{k6}] \end{cases}\&...\&子空间M \begin{cases} \textbf{v}_{1M}=[x_{1(D-1)},x_{1(D-1)},x_{1D}]\\\\ \textbf{v}_{2M}=[x_{2(D-1)},x_{2(D-1)},x_{2D}]\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{kM}=[x_{k(D-1)},x_{k(D-1)},x_{kD}] \end{cases}子空间1v11=[x11,x12,x13]v21=[x21,x22,x23].........vk1=[xk1,xk2,xk3]&子空间2v12=[x14,x15,x16]v22=[x24,x25,x26].........vk2=[xk4,xk5,xk6]&...&子空间Mv1M=[x1(D1),x1(D1),x1D]v2M=[x2(D1),x2(D1),x2D].........vkM=[xk(D1),xk(D1),xkD]

  3. 生成PQ\text{PQ}PQ编码:

    子空间1{v11←替代Centriod11v21←替代Centriod21            .........vk1←替代Centriodk1&子空间2{v12←替代Centriod12v22←替代Centriod22            .........vk2←替代Centriodk2&...&子空间M{v1M←替代Centriod1Mv2M←替代Centriod2M            .........vkM←替代CentriodkM\small子空间1\begin{cases} \textbf{v}_{11}\xleftarrow{替代}\text{Centriod}_{11}\\\\ \textbf{v}_{21}\xleftarrow{替代}\text{Centriod}_{21}\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{k1}\xleftarrow{替代}\text{Centriod}_{k1} \end{cases}\&子空间2 \begin{cases} \textbf{v}_{12}\xleftarrow{替代}\text{Centriod}_{12}\\\\ \textbf{v}_{22}\xleftarrow{替代}\text{Centriod}_{22}\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{k2}\xleftarrow{替代}\text{Centriod}_{k2} \end{cases}\&...\&子空间M \begin{cases} \textbf{v}_{1M}\xleftarrow{替代}\text{Centriod}_{1M}\\\\ \textbf{v}_{2M}\xleftarrow{替代}\text{Centriod}_{2M}\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \textbf{v}_{kM}\xleftarrow{替代}\text{Centriod}_{kM} \end{cases}子空间1v11替代Centriod11v21替代Centriod21.........vk1替代Centriodk1&子空间2v12替代Centriod12v22替代Centriod22.........vk2替代Centriodk2&...&子空间Mv1M替代Centriod1Mv2M替代Centriod2M.........vkM替代CentriodkM

    • 聚类:在每个子空间上运行k-Meansk\text{-Means}k-Means算法(一般k=256k\text{=}256k=256)→\to每个vij\textbf{v}_{ij}vij都会分到一个DM\cfrac{D}{M}MD维的质心

    • 编码:将每个子向量vij\textbf{v}_{ij}vij所属质心的索引作为其PQ\text{PQ}PQ编码,并替代原有子向量

  4. 生成最终的压缩向量→{v1~={Centriod11,Centriod12,...,Centriod1M}v2~={Centriod21,Centriod22,...,Centriod2M}            .........vk~={Centriodk1,Centriodk2,...,CentriodkM}\small\to\begin{cases} \widetilde{\textbf{v}_{1}}=\{\text{Centriod}_{11},\text{Centriod}_{12},...,\text{Centriod}_{1M}\}\\\\ \widetilde{\textbf{v}_{2}}=\{\text{Centriod}_{21},\text{Centriod}_{22},...,\text{Centriod}_{2M}\}\\\\ \,\,\,\,\,\,\,\,\,\,\,\,.........\\\\ \widetilde{\textbf{v}_{k}}=\{\text{Centriod}_{k1},\text{Centriod}_{k2},...,\text{Centriod}_{kM}\} \end{cases}v1={Centriod11,Centriod12,...,Centriod1M}v2={Centriod21,Centriod22,...,Centriod2M}.........vk={Centriodk1,Centriodk2,...,CentriodkM}

    • 存储阶段:存储的内容实质上是质心索引,每个向量只占用MMM
    • 使用阶段:所有的质心索引被解压为质心,每个向量维度又恢复M×DM=DM\text{×}\cfrac{D}{M}\text{=}DM×MD=D

3️⃣IVF+PQ\text{IVF+PQ}IVF+PQ原理

  1. 离线索引阶段:
    • 构建IVF\text{IVF}IVF:使用K-Menas\text{K-Menas}K-Menas将原始向量集合划分为nnn簇(即nnn个质心)
    • 簇内压缩:对每个簇执行PQ\text{PQ}PQ压缩,即将每个簇内向量替换为质心索引
  2. 在线查询阶段:
    • IVF\text{IVF}IVF部分:计算与查询qqq与所有簇质心的距离,由此选定前nproben_{\text{probe}}nprobe个簇的所有向量
    • PQ\text{PQ}PQ部分:由质心索引还原选定向量→\text{→}计算qqq之的距离(遍历子空间)dist(q,v)≈∑i=1Mdist(qi,cji)→\displaystyle{}\text{dist}(q, v) \text{≈} \sum_{i=1}^M \text{dist}\left(q_i, c_{j i}\right)\text{→}dist(q,v)i=1Mdist(qi,cji)返回最近邻
大模型技术栈学习资料共享池 1.智能体行动 1.1大模型开发技术栈 1.1.1langchain 开源框架支持构建链式任务流程,实现模型调用与工具集成。 官方文档:[LangChain Documentation](https://docs.langchain.com/) 实战教程:[智能体开发指南](https://python.langchain.com/v0.1/docs/modules/agents/) 1.1.2langgraph 多智能体状态管理工作流引擎,优化复杂决策场景。 官方教程:[状态工作流实现](https://python.langchain.com/v0.1/docs/langgraph/) 2.智能体记忆 2.1检索增强 2.1.1向量RAG 结合语义检索与大模型生成能力 论文精讲:[RAG技术原理解析](https://arxiv.org/abs/2005.11401) 2.1.2GraphRAG 基于知识图谱的增强检索 微软开源方案:[GraphRAG实现](https://github.com/microsoft/graphrag) 2.2知识库 2.2.1向量知识库--Milvus 亿级向量毫秒检索,性能超传统方案2-5倍 部署指南:[Docker安装](https://milvus.io/docs/install_standalone-docker.md) 索引优化:IVF_PQ算法实现O(log n)复杂度 2.2.2图知识库--Neo4j 关系型知识存储与推理 实战课程:[Cypher查询精要](https://neo4j.com/graphacademy/) 3.智能体工具 3.1工具交互协议 3.1.1MCP协议 智能体工具调用标准规范 协议要素: 工具元数据描述规范 异步回调机制 输入/输出类型约束 参考实现:[Toolformer论文](https://arxiv.org/abs/2302.04761) 4.智能体交互 4.1前端交互 4.1.1fastapi 高性能API服务栈 生产部署方案:[ASGI服务器配置指南](https://fastapi.tiangolo.com/deployment/) 4.1.2uvicorn 4.1.3gunicorn 4.2智能体间交互协议 4.2.1A2A协议 分布式智能体通信标准 核心特性: 基于JWT的身份认证 消息路由R=f(agentID,topic) 服务发现机制 5.智能体其他辅助技术栈 5.1包依赖管理工具 5.1.1UV包 Rust编写的高速依赖管理器 性能对比:[UV vs pip](https://github.com/astral-sh/uv) 5.2数据库方面相关 5.2.1SQLAlchemy 关系型数据库ORM框架 联机文档:[1.4版本手册](https://docs.sqlalchemy.org/en/14/) 5.3图数据库方面 5.3.1NetworkX 实战案例:[知识图谱分析](https://networkx.org/documentation/stable/tutorial.html)根据这个编写这个表格类型,链接,概述。例如github地址,https://github.com/langchain-ai/langchain,langchain-github地址
07-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值