[SIGIR23]生成式推荐论文Diffusion Recommender Model算法/理论/代码简介

本文主要是介绍[SIGIR23]生成式推荐论文Diffusion Recommender Model算法/理论/代码简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Diffusion Recommender Model

论文链接:https://arxiv.org/abs/2304.04971

        本文涉及大量贝叶斯概率、变分推理(VI)和扩散模型的应用,为了更好地理解本文,可以先阅读以下文章:

https://arxiv.org/abs/1312.6114 (VAE的开山之作)

Variational Autoencoders for Collaborative Filtering | Proceedings of the 2018 World Wide Web Conference(VAE在推荐中的经典应用)

 https://arxiv.org/abs/2208.11970 (扩散模型数学原理的详细讲解)

背景/动机

        以生成对抗网络(Generative Adversarial Network,GAN)和变分自编码器(Variational Auto-Encoder,VAE)为代表的生成模型已经被广泛地应用于对用户交互的生成过程进行建模。然而,它们存在固有的限制,例如GAN的不稳定性,和VAE的有限表达能力。这些限制阻碍了复杂的用户交互行为的生成过程,例如由于各种原因产生的噪声交互

        一般地,生成式推荐模型学习生成过程来推断所有无交互物品的用户交互概率。这种生成过程通常假设用户与物品的交互行为(例如点击)是由一些潜在因素(即用户偏好)决定的。由于与现实世界的交互生成过程保持一致,生成式推荐模型取得了重大成功。不失一般性,生成式推荐模型可以分为以下两类:

        基于GAN的模型利用生成器来估计用户的交互概率,并利用对抗训练来优化参数。然而,对抗训练通常不稳定,因此表现并不理想。经典的基于GAN的推荐模型参见:

IRGAN | Proceedings of the 40th International ACM SIGIR Conference on Research and Development in Information Retrieval

        基于VAE的模型使用编码器来近似潜在因子的后验分布,并最大化观察到的交互的似然。虽然VAE在推荐方面通常由于GAN,但VAE中较为简单的编码器可能无法很好地捕捉不同用户的偏好分布,而复杂编码器的后验分布通常可能难以处理。经典的基于VAE的推荐模型参见:

Variational Autoencoders for Collaborative Filtering | Proceedings of the 2018 World Wide Web Conference

        扩散模型(diffusion model,DM)在计算机视觉领域取得了巨大成功,通过在正向过程中逐渐破坏图像并迭代地学习反向重构来实现权衡。

         如上图所示,DM向前逐步向输入x_0加入随机噪声以破坏,随后从x_T逐步恢复至x_0。这种正向过程产生易处理的后验,也为在反向生成过程中通过灵活的神经网络迭代建模复杂分布提供了机会。推荐模型的目标域DM保持着一致性,因为推荐模型本质上是基于损坏的历史交互来推断位置的交互概率,其中损坏(corruption)代表假阳性(false-positive,用户交互过,但实际上用户不喜欢)和假阴性(false-negative,用户没有交互过,但实际上用户喜欢)物品,这表明已观测到的交互充斥着噪声。关于假阴性样本和假阳性样本的更多介绍,可以参见:

Denoising Implicit Feedback for Recommendation | Proceedings of the 14th ACM International Conference on Web Search and Data Mining

        虽然传统的生成式推荐模型已经取得了巨大成功,但很少的工作考虑到交互中的噪声问题,而探索DM在推荐系统中的应用则具有强大潜力。

前置知识

扩散模型包含两个部分,即正向(forward)和反向(reverse)过程。

正向过程

        给定输入样本x_0 \sim q(x_0),在随后的T步中逐渐增加高斯噪声构造隐向量x_{1:T}。具体来说,DM定义正向迁移x_{t-1}\rightarrow x_tq(x_t|x_{t-1})=\mathcal N(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_t\mathbf I),其中t\in\{1, ..., T\}表示扩散步骤(diffusion step),\beta_t \in (0,1)控制增加至第t步的噪声规模。

反向过程

        DM学习从x_t中移除增加的噪声,并尝试恢复x_{t-1},旨在捕获复杂生成过程中的微小变化。形式上,以x_T为初始状态,DM通过下式迭代地学习降噪过程x_t\rightarrow x_{t-1}

 其中\mu_\theta(x_t, t)\Sigma _\theta(x_t,t)分别表示带有参数\theta的神经网络训练得到的高斯分布的均值和方差。

优化过程

        DM通过最大化输入数据的似然的经验下界(Evidence Lower Bound,ELBO)优化模型参数:

 从形式上来说,DM的目标函数与VAE具有一致性,均包含重构误差和先验近似项,考虑到该项没有可训练的参数,因为在优化中可以忽略。除此以外,DM额外包含降噪匹配项,其约束p_\theta(x_{t-1}|x_t)对齐于易处理的q(x_{t-1}|x_t,x_0)

        上述ELBO的推导来自于VAE和分层式VAE(HVAE),即最大似然需要计算T步的概率积分,可做如下推导:

推导过程中第(37)式为jensen不等式,第(39)式对T和t=2进行替换,分别变为第(40)式的T-1和t=1。考虑到上式的第三项KL散度之和通常难以计算,通过贝叶斯规则有:

该式的推导过程如下:

则可以对公式(34)做其他形式的推导:

 

在实际应用中,公式(58)即DiffRec所对应的损失项(忽略第一个KL散度,因为他与模型参数无关)。 

推断过程

        训练参数\theta后,DM可以抽样x_T \sim \mathcal N(0, \mathbf I)并且利用p_\theta(x_{t-1}|x_t)迭代地重复生成过程x_T\rightarrow x_{T-1}\rightarrow ...\rightarrow x_0

 扩散推荐模型(DIFFUSION RECOMMENDER MODEL)

        为了充分利用DM强大的生成能力,作者提出DiffRec从损坏的交互中预测用户在未来发生交互的概率。给定用户的历史交互,DiffRec通过在向前过程中添加噪声来逐渐破坏,随后迭代学习回复原始交互。通过这种迭代去噪训练,DiffRec可以对复杂的交互生成过程进行建模,并减轻噪声交互的影响。

DiffRec

        如下图所示,Diffrec包含两个核心过程:正向过程和反向过程:

         给定用户u和物品集合\mathcal I,用户u的交互向量被定义为:

其中每个元素为二元制,即可以为1(发生过交互),也可以为0(未发生交互)。为了简略,在后续定义中省略下标u。在任意第t步,有:

 得益于重参数技巧和两个独立高斯噪声的可加性,可以直接从x_0=x_u中获得x_t,即:

 其中

 并且

 该重参数过程让原本不可微的抽样过程可以以固定的数学形式进行反向更新。

推导过程:

        考虑到独立高斯分布的可加性,则可以对x_t进行如下推导:

 注意公式(63)至公式(64)的推导,例如\sqrt{1-\alpha_t}\epsilon_{t-1}^*被视为从高斯分布\mathcal N(0,(1-\alpha_t)\mathbf I)中抽样得到,以此方式,两个高斯分布的均值和方差对应相加,即可得到公式(65)。最后通过重参数技巧,即可得到x_t

        为了调节增加的噪声,作者设计了线性噪声进度:

超参数s\in [0,1]控制噪声规模,而其余两个超参数\alpha_{min}<\alpha_{max} \in (0,1)分别表示噪声的下界和上界。

        反向过程则从x_T开始,逐步恢复用户的交互:

其中\mu_\theta(x_t, t)\Sigma _\theta(x_t,t)分别表示带有参数\theta的神经网络训练得到的高斯分布的均值和方差。

        DiffRec的训练是优化如下的ELBO:

         降噪匹配项通过KL散度约束p_\theta(x_{t-1}|x_t)对齐于易处理的q(x_{t-1}|x_t,x_0)。通过贝叶斯规则,有:

推导过程:

本公式的推导需要注意公式(74)和(75),由于计算关于x_{t-1}的概率分布,则x_tx_0的相关项被整个为无光项C,并在后续的推导步骤中被忽略。

        通常为了训练的稳定性和简化,将p_\theta(x_{t-1}|x_t)中的\Sigma _\theta(x_t,t)忽略并直接设置\Sigma_\theta(x_t, t)=\sigma^2(t)\mathbf I。则在第t步的降噪匹配项\mathcal L_t可以通过下式计算:

式中\mu_\theta(x_t, t)可以简化定义为:

 其中\hat x_\theta(x_t, t)基于x_tt的预测x_0。进一步,可得:

 通过上述一系列估计和简化后,最终的降噪匹配项实际上是约束第t步预测值接近于真实输入值。

推导过程:

        两个高斯分布之间的KL散度可以通过下式进行计算:

         进而可得:

 由于\mu_\theta\mu_q的均值和方差均已确认,即可进一步推导:

 上式可以做进一步的化简:

 公式(108)即对应DiffRec的损失\mathcal L_t

        现在的核心在于需要通过神经网络实现\hat x_\theta(x_t, t),作者采取了和Multi-VAE相同的选择,通过多层感知机(MLP)预测x_0

        在解决了ELBO中棘手的降噪匹配项后,还需要定义重构误差项\mathcal L_1

 重构误差项用于估计第1步的重构值与输入值的高斯对数似然。

         综合考虑重构误差项和降噪匹配项,ELBO可以描述为

 形式上,\mathcal L_1等同于计算第1步的降噪匹配项(唯一的不同是缺少权重),因此可以通过最小化\Sigma_{t=1}^T\mathcal L_t来优化模型的参数。在实际实现中,作者均匀抽样步骤t来优化期望\mathcal L(x_0,\theta)

 DiffRec的完整训练过程如下所示:

         考虑到不同步骤对于优化的困难度的不同,作者使用重要性抽样(importance sampling)来强调具有较大损失值的步骤的学习过程。给定第t步,抽样策略定义为:

 其中

表示抽样概率,并且所有步骤的概率之和为1。在实际应用中,\mathbb E[\mathcal L_t^2]通过收集10个\mathcal L_t的值并采用平均值。在获得足够多的\mathcal L_t,仍然采用均匀抽样。直观地,具有较大\mathcal L_t损失值的步骤将更容易被抽样。

DiffRec的推断过程

        具体来说,DiffRec首先在正向过程中破坏x_0T'步,随后设置\hat x_T=x_{T'}来执行反向降噪共T步。反向的降噪过程忽略方差的计算(与Multi-VAE保持一致)并利用\hat x_{t-1}=\mu_\theta(\hat x_t, t)进行推断。

        考虑到实际收集到的用户交互充斥着大量噪声,通过设置T'<T减少正向过程中增加的噪声,以此保留用户的个性化信息。最终,DiffRec使用\hat x_0用于物品的全排序和top-K推荐任务。完整的推断过程如下所示:

 Latent Diffusion(L-DiffRec)

        DiffRec和Multi-VAE等生成式推荐模型需要同时月所有物品的概率分数,这需要大量的资源并在超大规模应用场景中受到限制。基于此,作者额外提出L-DiffRec,其通过多个VAE对物品进行聚类以进行维度压缩并在隐空间中进行扩散过程,如下图所示:

         给定物品集合\mathcal I,L-DiffRec首先采用k-means将物品聚类为C类\{\mathcal I_1, \mathcal I_2, ..., \mathcal C\}(基于通过LightGCN预训练的物品的嵌入表示),随后向用户交互向量x_0根据聚类结果划分为C个部分,例如x_0^c表示用户在物品子集\mathcal I_c的交互。进一步,L-DiffRec使用一个由\phi_c参数化的变分编码器将输入x_0^c

压缩为低维的向量z_0^c,这个编码器采用基于MLP的近似高斯分布,即:

         聚类可以有效地减少资源成本,因为可以实现不同类别的并行计算,此外与普通的VAE相比,断开多个编码器之间的全连接可以节省参数。

        通过将所有类别的隐向量z进行拼接,可以得到用于扩散的压缩向量z_0。与DiffRec不同,L-DiffRec在隐空间中使用z_0完成正向和反向过程。

        完成正向和反向过程后,将重构后的\hat z_0根据物品聚类划分为\{\hat z_0^c\}_{c=1}^C,每个z被输入独立的解码器并预测输出值,与Multi-VAE类似。

         编码器和解码器联合组成VAE,并可以采用ELBO进行优化:

其中\gamma用于控制KL散度的强度。L-DffiRec的推断过程与Multi-VAE一致,即解码器的输出即为所有物品的预测分数。

Temporal Diffusion(T-DiffRec/LT-DiffRec)

        由于用户偏好可能会随着时间的推移而变化,因此在DiffRec学习过程中捕获时间信息至关重要。假设最近的交互可以更好地代表用户的当前偏好,作者提出了一种时间感知的重新加权策略,为用户以后的交互分配更大的权重。

        形式上,给定用户uM个交互过的物品,并且交互时间可用,交互序列被定义为\mathcal S={i_1, i_2, ..., i_M}。则交互物品的权重被定义为

 其中

 随后,用户的交互向量x_0被重新权重化为

 其中\bar{\omega}是权重向量:

Idx(i)表示物品i在交互序列中的索引(index)。通过将重新权重化的交互向量输入DiffRec和L-DIffRec,可以分别得到T-DiffRec和LT-DiffRec。

实验

        为了验证所提出的DiffRec、L-DiffRec、T-DiffRec和LT-DiffRec的有效性,作者进行了一系列实验,在此列举一些比较重要的实验。

干净训练集对比实验

         上述实验结果表明所提出的DiffRec、L-DiffRec、T-DiffRec和LT-DiffRec在纯推荐和序列推荐任务中的有效性。L-DiffRec在极低的性能损失的代价下实现了模型参数和显存资源的大幅降低,证明可以有效地应用于大规模应用场景。在应用了重新权重化策略后,T-DiffRec和LT-DiffRec的性能有了明显的提升。

噪声训练集对比实验

         上述实验结果表明DiffRec对比自然噪声和随机噪声的鲁棒性。

(一个有趣的现象是DiffRec和L-DiffRec的鲁棒性。以Amazon-Book数据集的Recall@20为例,加入自然噪声后,DiffRec的性能变化为0.0695→0.0546,下降幅度为27.29%,L-DiffRec的性能变化为0.0694→0.0586,下降幅度为18.43%,而Multi-VAE的性能变化为0.0628→0.0536,下降幅度为17.16%。另一方面,图4中DiffRec和Multi-VAE的性能下降幅度保持近乎一致。)

深入分析

        作者进行一系列深层次分析以验证DiffRec的各个模块的合理性与有效性,以及探索不同超参数对于性能的影响。这一部分不进行介绍,读者可自行参阅原论文和官方代码进行研究:

GitHub - YiyanXu/DiffRec: Diffusion Recommender Model

总结

       受启发于计算机视觉领域提出的扩散模型,作者首次在推荐领域提出适用于协同过滤任务的DiffRec、L-DiffRec、T-DiffRec和LT-DiffRec。这项工作为基于DM的生成式推荐提供了全新的研究方向。

      本文的核心技术涉及以下论文,以供读者参考:

  1. Understanding Diffusion Models: A Unified Perspective https://arxiv.org/abs/2208.11970
  2. Denoising Diffusion Probabilistic Models https://arxiv.org/abs/2006.11239
  3. Improved Denoising Diffusion Probabilistic Models https://arxiv.org/abs/2102.09672
  4. What are Diffusion Models? What are Diffusion Models? | Lil'Log

代码

未完待续...

这篇关于[SIGIR23]生成式推荐论文Diffusion Recommender Model算法/理论/代码简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/172006

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n