论文笔记:Recommendation via Collaborative Diffusion Generative Model

news/2025/1/18 8:57:35/

1 简介

论文: Recommendation via Collaborative Diffusion Generative Model
源代码:https://github.com/WorldChanger01/CODIGEM
主要思想:将基于文本用AI生成图像的扩散模型 (Denoising Diffusion Probabilistic Model, DDPM)迁移到推荐系统领域。生成模型就是通过给定的一组数据来获取有关数据本身的概率分布函数的信息,从而可以生成与最初给定数据类型风格相似的新数据。这一模型可以用于生成图片、音乐、文本等,增强原有数据库的丰富性。
主要步骤:DDPM模型在进行基于文本用AI生成图像的时候,有两个主要的步骤:前向扩散过程反向生成过程前向扩散过程是对一张图像逐渐添加高斯噪音直至变成随机噪音,而反向生成过程是去噪音过程,我们将从一个随机噪音开始逐渐去噪音直至生成一张图像。
在这里插入图片描述

1.1 Diffusion

扩散过程是指的对数据逐渐增加高斯噪音直至数据变成随机噪音的过程。
在这里插入图片描述

xtx_txtttt时刻加了噪声的图片,xt−1x_{t-1}xt1t−1t-1t1时刻加了噪声的图片,ztz_tztttt时刻的噪声。
加噪声过程:
xt=1−βtxt−1+βtzt,x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t}z_t, xt=1βtxt1+βtzt,
其中系数βt∈[10−4,2×10−2]\beta_t \in [10^{-4}, 2 \times 10^{-2}]βt[104,2×102],将区间等为200020002000份, βt\beta_tβt依次取等分后值;zt∼N(0,σ)z_t \sim N(0, \sigma)ztN(0,σ), T=2000T = 2000T=2000
αt=1−βt\alpha_t = 1 - \beta_tαt=1βt, 则有:
xt=αtxt−1+1−αtzt,xt−1=αt−1xt−2+1−αt−1zt−1.\begin{array}{l} x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t}z_t, \\ x_{t-1} = \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_{t-1}}z_{t-1}. \end{array} xt=αtxt1+1αtzt,xt1=αt1xt2+1αt1zt1.
可以推导得到:
xt=α‾tx0+1−α‾tz,x_{t}=\sqrt{\overline{\alpha}_{t}} x_{0}+\sqrt{1-\overline{\alpha}_{t}} z, xt=αtx0+1αtz,
其中α‾t=∏i=1Tαi\overline{\alpha}_{t} = \prod_{i = 1}^{T} \alpha_iαt=i=1Tαizzz表示噪声变量。

1.2 Reverse Diffusion

根据条件概率的知识可知:
q(xt−1∣xt)=q(xt−1,xt)q(xt)=q(xt∣xt−1)q(xt−1)q(xt)q\left(x_{t-1} \mid x_{t}\right)=\frac{q\left(x_{t-1}, x_{t}\right)}{q\left(x_{t}\right)}=\frac{q\left(x_{t} \mid x_{t-1}\right) q\left(x_{t-1}\right)}{q\left(x_{t}\right)} q(xt1xt)=q(xt)q(xt1,xt)=q(xt)q(xtxt1)q(xt1)
只要计算出q(xt−1),q(xt),q(xt∣xt−1)q(x_{t-1}), q\left(x_{t}\right), q\left(x_{t} \mid x_{t-1}\right)q(xt1),q(xt),q(xtxt1),就可以得到q(xt−1∣xt)q\left(x_{t-1} \mid x_{t}\right)q(xt1xt)
根据下面的公式可以计算:
xt=αtxt−1+1−αtzt∼N(αtxt−1,(1−αt)σ)⟹q(xt∣xt−1)∼N(αtxt−1,(1−αt)σ)\begin{array}{l} x_{t}=\sqrt{\alpha_{t}} x_{t-1}+\sqrt{1-\alpha_{t}} z_{t} \sim N\left(\sqrt{\alpha_{t}} x_{t-1},\left(1-\alpha_{t}\right) \sigma\right) \\\Longrightarrow q\left(x_{t} \mid x_{t-1}\right) \sim N\left(\sqrt{\alpha_{t}} x_{t-1},\left(1-\alpha_{t}\right) \sigma\right) \\ \end{array} xt=αtxt1+1αtztN(αtxt1,(1αt)σ)q(xtxt1)N(αtxt1,(1αt)σ)
xt=αt‾x0+1−αt‾z∼N(αt‾x0,(1−αt‾)σ)⟹q(xt)∼N(α‾tx0,(1−αt‾)σ)q(xt−1)∼N(α‾t−1x0,(1−α‾t−1)σ)x_{t}=\sqrt{\overline{\alpha_{t}}} x_{0}+\sqrt{1-\overline{\alpha_{t}}} z \sim N\left(\sqrt{\overline{\alpha_{t}}} x_{0},\left(1-\overline{\alpha_{t}}\right) \sigma\right) \\ \Longrightarrow \begin{array}{c} q\left(x_{t}\right) \sim N\left(\sqrt{\overline{\alpha}_{t}} x_{0},\left(1-\overline{\alpha_{t}}\right) \sigma\right) \\ q\left(x_{t-1}\right) \sim N\left(\sqrt{\overline{\alpha}_{t-1}} x_{0},\left(1-\overline{\alpha}_{t-1}\right) \sigma\right) \end{array} \\ xt=αtx0+1αtzN(αtx0,(1αt)σ)q(xt)N(αtx0,(1αt)σ)q(xt1)N(αt1x0,(1αt1)σ)
推导后可以得到:
xt−1=1αt(xt−βt1−α‾t−1z~)+1−α‾t−11−α‾tβtzx_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\overline{\alpha}}_{t-1}}\widetilde{z}\right) + \sqrt{\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_{t}}\beta_t}z xt1=αt1(xt1αt1βtz)+1αt1αt1βtz
此处z~=UNet(xt,t)\widetilde{z} = \mathrm{UNet}(x_t, t)z=UNet(xt,t)

2 DDMP4Rec

在这里插入图片描述


http://www.ppmy.cn/news/38570.html

相关文章

Springboot application.yaml中配置json格式的数据

只需要把json数据加上单引号即可,示例如下: demo:header: {"context":{"CultureName":"zh-CN"}}

计算并输出所有的玫瑰花数

如果一个n位正整数等于它的n个数字的n次方和&#xff0c;则称该数为n位自方幂数。四位自方幂数称为玫瑰花数。编程计算并输出所有的玫瑰花数。 #include <stdio.h> #include <math.h>int main() {for (int i 1000; i < 10000; i){if (i pow(i%10, 4) pow((i/…

[c++17] --- constexpr if

1 constexpr if介绍和注意点 constexpr if是C++17引入的一个重要特性,可以使得编译器在编译时进行条件判断,并根据条件选择不同的代码路径。相比于传统的运行时条件判断,constexpr if可以提高代码的可读性和执行效率,特别是在模板编程中,可以避免因条件分支导致的代码膨胀…

ToBeWritten之IoT Web、移动应用、设备硬件、无线电通信、IoV威胁建模

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

讲解如何从内核角度理解K8s CPU限流的原理

在使用 Kubernetes&#xff08;简称K8s&#xff09; 时&#xff0c;通常会在同一台机器上部署多个 Pod。如果某个 Pod 中的服务出现问题&#xff08;如出现死循环&#xff09;&#xff0c;将会导致占用大量的 CPU 时间&#xff0c;从而影响到其他 Pod 的正常运行。 为了解决这…

Cocos Creator 如何处理物理和碰撞检测?

Cocos Creator 如何处理物理和碰撞检测&#xff1f; cocos creator 版本:v3.6.1 Cocos Creator 3.x 实现碰撞检测 Cocos Creator 通过使用物理引擎来处理物理和碰撞检测。Cocos Creator 默认使用 Box2D 物理引擎&#xff0c;也支持使用 Chipmunk 物理引擎。以下是处理物理和碰撞…

花生壳诊断连接时出现1007错误的解决方案

在内网配置好花生壳客户端后&#xff0c;发现连接失败 经搜索&#xff0c;在这个页面找到了原因&#xff0c;使用2和3中的命令测试都没有得到正确结果&#xff0c;说明DNS有问题 在Linux平台上修改DNS&#xff0c;注意要用sudo获取只读文件的修改权限 首先sudo vi /etc/reso…

scala泛型

目录 类型参数 泛型函数&#xff1a; 协变&#xff0c;逆变&#xff0c;不变 泛型上下限&#xff1a; 上下文限定&#xff1a; 泛型是一种类型参数&#xff0c;该类型参数可以用在类、接口和方法中&#xff0c;分别被称为泛型类、泛型接口、泛型方法 类型参数 调用时不指定…