RQ-VAE(残差量化-变分自编码器)

目录

AE对比VAE:

自编码器(Autoencoder):

变分自编码器(VAE)

KL散度:

为什么要学习高斯隐空间:

VQ-VAE对比VAE:

RQ-VAE对比VQ-VAE:

实现

训练过程:

码本更新和encoder同时训练,如何保证能训练好?

快手是如何利用其来做推荐的?


AE对比VAE:

自编码器(Autoencoder):

目标:学习数据的有效压缩表示(降维,去噪)

核心结构:编码器->潜向量 z → 解码器

**输出:**输出是对输入的尽可能精确的复现。

损失函数:MSE

潜空间:不规则,难以生成

变分自编码器(VAE)

目标:学习数据的潜在概率分布,成为一个生成器

核心结构:编码器输出分布的参数(均值μ、方差σ²)→ 采样 z → 解码器。

输出:可以从潜空间随机采样生成新的数据

损失函数:重构损失+ 分布正则化损失(KL散度)

潜空间:连续,结构化,支持平滑插值

KL散度:

  • -它衡量的是编码器输出的概率分布(由μσ定义)与一个标准正态分布(均值为0,方差为1)之间的相似度。
  • 作用 :它像一个正则化项 ,强迫编码器学习到的所有分布都向标准正态分布看齐。这带来了两个至关重要的特性:
    • 连续性 (Continuity):由于所有数据的编码分布都被拉向中心(原点),不同数据(比如手写数字'1'和'7')的编码分布会在潜在空间中产生重叠。这意味着在'1'的区域和'7'的区域之间没有"断崖",而是平滑过渡的。如果你在这个过渡区域采样,解码器就能生成一个既像'1'又像'7'的图像。
    • 规整性 (Regularity):潜在空间变得非常规整、结构化。大部分数据都被编码到了一个可控的、以原点为中心的区域内。

为什么要学习高斯隐空间:

如果我们只追求数据压缩和重构,普通自编码器就够了,为什么非要强迫隐空间(latent space)服从高斯分布呢?

简单来说,将隐空间规整为高斯分布的优越性在于:**它把一个混乱无序、充满"空洞"的编码空间,变成了一个连续、规整、且"可被探索"的地图,**使得这个空间中的每一个点都具有解码的意义。这使得"生成"成为可能。

优点:

  • 泛化性能:解码器学会了将这个规整空间中的任意一个点z映射回一个逼真的数据。它不仅学会了从训练数据采样到的z进行解码,还学会了对潜在空间中从未见过的点进行解码,并生成合理的结果。

VQ-VAE对比VAE:

VQ-VAE通过使用 codebook(码本)进行离散编码,相较于原始的 VAE 模型,潜在空间从连续变为了"离散化"和"结构化":

  • 潜在空间是离散的 。编码器输出一个或多个向量,然后在 码本(Codebook) 中找到与这些向量最接近的"码字"(codeword)。最终的编码是这些码字在码本中的索引(index)。
  • 解决"后验坍塌"(Posterior Collapse) 问题,即解码器(Decoder)可能学会忽略潜在编码 z,直接生成平均化的、模糊的输出。
  • 降低数据保存开销

RQ-VAE对比VQ-VAE:

RQ-VAE(Residual Quantized Variational Autoencoder)变比VQ-VAE多了学习残差的过程,一个码本变为多个码本

  • 码本小,组合多 :每一层只需要一个小型 码本(例如 1024 个向量)。但通过 8 层的组合,理论上可以表示 1024^8种不同的特征,这是一个天文数字。这意味着用极小的存储成本实现了极高的表示能力。

  • 降低预测空间维度:将在一个大空间维度预测改为分层预测;

  • 高质量的生成和重建 :分层量化的方式使得模型能够捕获从全局轮廓到局部细节的丰富信息,从而生成非常精细和高质量的图像。著名的 Parti ​ 和 **Muse**​ 等文生图大模型都采用了 RQ-VAE 作为图像分词器。

  • 解决了 VQ-VAE 的码本坍塌问题:在 VQ-VAE 中,码本中的很多向量可能永远不被使用(码本坍塌)。而在 RQ-VAE 中,由于每层码本负责不同粒度的信息,所有码本向量都被充分利用起来。

实现

训练过程:

L = 重构损失 + 码本损失 + 承诺损失

码本更新和encoder同时训练,如何保证能训练好?

  • 双向对齐 :通过码本损失承诺损失,从两个方向拉近编码器输出空间和码本向量空间,迫使它们对齐。
  • 稳定更新 :采用EMA等技巧,确保码本能够平滑、稳定地学习到编码器输出的核心分布。

技巧:

  1. 码本初始化 :码本向量初始值很重要。常用策略是从第一批数据编码器输出的 z_e 中随机采样初始化,这样码本一开始就落在真实的数据分布区域内。

  2. 码本更新方式 :除了使用码本损失进行梯度下降,更稳定的一种方法是采用 指数移动平均(EMA) 。即,对编码到每个码本向量 e_i 的所有 z_e 进行统计并更新:

N_i = 衰减率 * N_i + (1 - 衰减率) * 当前批次中分配到 e_i 的样本数

m_i = 衰减率 * m_i + (1 - 衰减率) * 当前批次中所有分配到 e_i 的 z_e 之和

e_i = m_i / N_i

这种方式能更平滑、更稳定地更新码本,尤其适用于批次小或码本使用分布不均匀时。

  1. 学习率策略 :通常,码本的学习率会设置得比编码器/解码器更高(例如10倍)。这是为了鼓励码本更快地适应编码器输出的分布,尤其是在训练初期。

  2. 解决"码本坍缩" :训练早期,可能只有少数码本向量被使用,大部分未被激活。除了承诺损失,有时会采用 "重启"策略 :当某个码本向量在很长一段时间(如一定步数)内未被使用,则将其重新初始化为一个当前正在被使用的编码器输出 z_e

快手是如何利用其来做推荐的?

https://blog.csdn.net/yinyu19950811/article/details/151834292?spm=1001.2014.3001.5502

参考:

https://zhuanlan.zhihu.com/p/1948761095876621200

https://zhuanlan.zhihu.com/p/1969198880924083875

相关推荐
LadenKiller7 小时前
近期AI协作写量化规则,要按阶段安排任务
人工智能·python
天天进步20157 小时前
Python全栈项目--基于深度学习的图像超分辨率系统
开发语言·python·深度学习
网易云信7 小时前
制造业、零售与物流的“神经末梢”:为什么企业级IM是这些行业的数字基建?
人工智能·agent
千瓜8 小时前
用户洞察:负鼠走红?解读新世代“动物人格”
大数据·人工智能·数据分析·生活·新媒体
中微极客8 小时前
2026年生产级RAG技术栈选型:LangChain+Cohere Rerank实战
人工智能·langchain
ai_coder_ai8 小时前
在自动化脚本中如何实现播音?
人工智能·自动化·语音识别
硅徒8 小时前
红蓝对抗实战复盘:一场攻防演练里暴露的真实短板
人工智能
ksueh8 小时前
什么AI工具可以写小说?2026实测10款工具横评:从免费通用到专业工作台,一篇说透
人工智能·ai写作·ai助手
ellenwan20268 小时前
近期AI协作量化实现,先补规则清晰度和流程完整性
人工智能·python
陆枫Larry8 小时前
为什么 AI 平台选择「月租套餐 + 点数计费」双轨模式?
人工智能