惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
Vector Quantization for Recommendation 笔记
绵满 · 2026-05-21 · via 博客园_首页

背景

在工业推荐系统中,特征通常被表示为高维稀疏的 One-Hot 向量,随后通过嵌入层映射为稠密向量。这种“参数化查表”的方式面临两个核心矛盾:

  • 嵌入表的内存爆炸:随着物品和用户规模激增,完整的嵌入表(Embedding Table)会占用数百 GB 甚至 TB 级显存,远超单机容量,迫使系统采用复杂的参数服务器,带来高昂的通信开销

  • 语义空间利用不足:庞大的嵌入表参数中,大量长尾物品的嵌入向量训练不充分,而表示能力却受限于表的大小,难以在有限的计算资源下进一步提升模型的表达力

传统解法如特征哈希虽然能压缩内存,但会带来严重的哈希冲突,损失语义信息。这催生了对更高效、更灵活的向量表示方法的需求,Vector Quantization 正是其中一类重要方法

组合式编码与码本

向量量化在推荐中的核心思想,是不再为每个物品学习一个独立的嵌入向量,而是学习多组共享的码本(codebook),每个物品的最终表示由其所属码本中基向量的组合来构成。这套框架和 NLP 中的 BPE 分词或 VQ-VAE 思路相似

Product Quantization

想象你有一个 1024 维的向量,PQ 的处理方式是:

  • 切分成子空间:把 1024 维向量横向切割成 8 段,每段 128 维。这 8 个 128 维的小向量,构成 8 个独立的子空间

  • 子空间码本:为每个子空间独立训练一个码本。假如码本大小 K=256,那么每个子空间码本包含 256 个 128 维的基底向量,8 个子空间共有 8 个独立码本

  • 独立量化:原向量的第1段(前128维),只在第1号码本内寻找最近邻,得到一个索引(比如 15);第2段(下一个128维)只在第2号码本内寻找,得到一个索引(比如 203)……依此类推

  • 最终表示:一个完整的 1024 维物品向量,被表示为一个 8 元组的索引序列 \([i_1, i_2, ..., i_8]\),比如 \([15, 203, 8, 77, 42, 189, 3, 254]\)

Residual Quantization

同样用 1024 维向量,RQ 的处理方式是不分段,而是用多级码本进行迭代式逼近:

  • 第一级粗量化:用第一级码本(全局唯一,1024 维,假设K=256)对整个向量做最近邻查找,找到第一个码字 c1

  • 计算残差:求出第一级量化后的残差(余量) r1 = 原始向量 - c1。这个残差代表了第一级没能捕捉的细节信息

  • 第二级残差量化:用第二级码本(专门学习如何量化残差,也是 1024 维)对残差 r1 进行最近邻查找,得到第二个码字 c2

  • 迭代:计算新的残差 \(r2 = r1 - c2\),再用第三级码本去量化它……如此重复 L 级

最终表示与重建:物品被表示为一个 L 元组的索引序列 \([j_1, j_2, ..., j_L]\)。重建时,直接把对应索引的各个码字加起来即可:最终向量 ≈ \(c_{j_1} + c_{j_2} + ... + c_{j_L}\)

VQ 的学习

向量量化(VQ)的学习通常不是一个独立的任务,而是和推荐模型的最终目标(如点击率预估)联合训练的。其核心挑战在于:“选码”操作(在码本中找最近邻)是不可导的,梯度无法通过离散的索引回传到编码器。围绕这一点,主流的学习方式分成了两大类

直通估计器(STE)

这是 VQ-VAE 中最经典的方法,也是推荐系统中联合训练最常用的方式

  • 前向传播:对于一个输入的稠密向量 \(z\)(比如物品经过某层网络后的表示),在大小为 K 的码本中找到距离最近的码字。假设第 k 个码字 \(e_k\) 距离向量 \(z\) 最近,那么量化后的向量就是 \(z_q = e_k\),但是在实际上只需要存储索引 k 就行了

  • 反向传播:由于 argmin 这个操作是不可导的,因此 STE 会假装寻找最近邻这一步不存在,直接把 \(z_q\) 的梯度作为 \(z\) 的梯度,原封不动地拷贝给编码器的输出

这相当于在反向传播时,把整个量化操作近似为一个恒等映射 \(z_q ≈ z\)。只要量化误差不太大,这个梯度近似就能引导编码器往正确的方向更新。为了让这个近似有效,训练时会在推荐主损失(如交叉熵)上,额外增加两个 VQ 专用的辅助损失,减小码本和输入的稠密向量 \(z\) 之间的距离(所以码本内容也是在不断更新的)

  • 码本损失(Commitment Loss):只更新码本,不更新编码器。让选中的码字 \(e_i\) 靠近编码器输出 \(z\),达到训练码本的目的。形式为 \(\| \text{sg}[z] - e_i \|_2^2\) 其中 \(\text{sg}[\cdot]\) 表示 stop gradient,即 \(z\) 在这里被截断梯度

  • 编码器约束损失(Codebook Loss 的对偶):只更新编码器,不更新码本。约束编码器的输出不要离码字太远,避免量化误差过大。形式为 \(\| z - \text{sg}[e_i] \|_2^2\) 其中 \(\text{sg}[\cdot]\)\(e_i\) 截断梯度

两者的权重通常由一个超参数 β 控制,典型值如 β = 0.25

软量化 Gumbel-Softmax

软量化就是把离散选择变成可导的连续近似,代表性方法是 Gumbel-Softmax:不再做硬最近邻查找,而是计算输入 \(z\) 与所有码字 \(e_j\) 的相似度(如内积)得到 logits,然后通过 Gumbel-Softmax 产生一个近似 one-hot 的软分配向量,最终的量化向量就是所有码字的软分配加权和,此时前向和反向都是连续可导的

在推荐中的应用

  • 嵌入层压缩:直接用 VQ 技术替换传统的巨型嵌入表,作为内存高效的嵌入层。这是最直接的应用,适用于召回和精排阶段的特征表达

  • semantic ID 生成:将物品的完整嵌入经过 RQ 量化后,得到的多级码本索引序列(如\([12, 5, 32, 8]\)),可视作该物品的 semantic ID。这种离散 ID 能直接接入大语言模型,成为连接推荐系统和生成式 LLM 的桥梁,用于端到端的生成式推荐

  • 用户行为压缩:对于用户超长的历史行为序列,可以将每个行为物品压缩为一组 VQ 索引,大幅减少序列存储和计算开销,实现高效的长期兴趣建模