离散图扩散模型中的转移公式推导

问题

原文Digress项目源码中直接给出了这一段(类似)

python 复制代码
    # 二值边的 t 步边际混合(对应 docstring 里的 Q_bar_t):
    # - clean=1 的边,以概率 alpha_bar_t 保持原值;否则以概率 (1-alpha_bar_t) 按边际采样
    # - clean=0 的边,只能来自"按边际采样"的那部分
    p_keep = alpha_bar_t + (1.0 - alpha_bar_t) * p_e
    p_flip = (1.0 - alpha_bar_t) * p_e

在理解上就是已有边就有两种转移状态(保持原状或者变成空边),但是空边只有一种转移状态(变成实边)。空边:为什么?这不公平!!!

开庭

为什么这里是这种情况呢?其实源自后续要求的目标是 P(Et=1)P(E_t =1)P(Et=1) 的概率分布是边际分布,请听我细细道来:

首先整体上设置的转移矩阵形式是这样的,这里假定边类别只有两种 也就是在有边、无边的状态间转移,nnn是节点个数:
Qt=aIn×n+(1−a)MM=1−pepe⋮⋮1−pepen×2 Q_t = aI_{n \times n} + (1-a)M \qquad M = \begin{bmatrix} 1-p_e & p_e \\ \vdots & \vdots \\ 1-p_e & p_e \end{bmatrix}_{n \times 2} Qt=aIn×n+(1−a)MM= 1−pe⋮1−pepe⋮pe n×2

以上噪声强度也就是变化的概率,即以 aaa 的概率保持不变,1−a1-a1−a 的概率按边际分布采样; pep_epe 是期望最后数据集层面的实边密度(实边的密度,比如实边占了60%,那么这里就是0.6),令mmm是期望的边际概率密度向量 P(Et=0),P(Et=1)=1−pe,peP(E_t=0),P(E_t=1)=1-p_e,p_eP(Et=0),P(Et=1)=1−pe,pe,我们想让整体的边状态都符合期望也就是最终每条边的概率分布都是 mmm,所以确定了 MMM 的样子。

那么把上面的公式拆开:

1.原本为实边:

P(Et=1∣E0=1)=a+(1−a)pe P(E_t=1|E_0=1)=a+(1-a)p_e P(Et=1∣E0=1)=a+(1−a)pe

让最后的状态为实边的一种情况是保持不变的话就是概率 aaa,另一种情况如果变了的话还想让状态是实边就需要:变化的概率乘以最终实边的概率也就是 (1−a)∗pe(1-a)*p_e(1−a)∗pe,两者之和既是 P(Et=1∣E0=1)P(E_t=1|E_0=1)P(Et=1∣E0=1)

为了对称这里也可以得到实边最后变成空边的概率,但是这个没用,因为后面要的是实边的分布(但是也可以反向对应)
P(Et=0∣E0=1)=(1−a)(1−pe) P(E_t=0|E_0=1)=(1-a)(1-p_e) P(Et=0∣E0=1)=(1−a)(1−pe)

2.原本为空边

P(Et=1∣E0=0)=(1−a)pe P(E_t=1|E_0=0)=(1-a)p_e P(Et=1∣E0=0)=(1−a)pe

这里如果要让状态是实边那么,对原本是空的边只存在一种方法也就是按照边际分布采样并且选择实边(1−a)pe(1-a)p_e(1−a)pe

为了对称这里也可以得到空边保持不变的概率(后续不会用到,道理同上)
P(Et=0∣E0=0)=a+(1−a)(1−pe) P(E_t=0|E_0=0)=a+(1-a)(1-p_e) P(Et=0∣E0=0)=a+(1−a)(1−pe)

以上其实就足以回答为什么代码中要那样设置了。但是下面我们再推一步,验证这样可以符合我们的转移要求。

3.全概率公式

现在问题就变简单了,验证一下,我要求 P(Et=1)P(E_t=1)P(Et=1),全概率公式展开:
qt=P(Et=1)=P(E0=1)P(Et=1∣E0=1)+P(E0=0)P(Et=1∣E0=0)=q0a+(1−a)pe+(1−q0)(1−a)pe=aq0+(1−a)peq_t=P(E_t=1)=P(E_0=1)P(E_t=1|E_0=1)+P(E_0=0)P(E_t=1|E_0=0)=q_0a+(1-a)p_e+(1-q_0)(1-a)p_e=aq_0+(1-a)p_eqt=P(Et=1)=P(E0=1)P(Et=1∣E0=1)+P(E0=0)P(Et=1∣E0=0)=q0a+(1−a)pe+(1−q0)(1−a)pe=aq0+(1−a)pe

可以看到最后qt=aq0+(1−a)peq_t=aq_0+(1-a)p_eqt=aq0+(1−a)pe,这个时候就满足我们的需求了,因为:
a=1qt=q0完全保持原有边密度a=1\qquad q_t=q_0 完全保持原有边密度a=1qt=q0完全保持原有边密度a=0qt=pe完全是噪声分布(给定的边际分布)a=0\qquad q_t=p_e完全是噪声分布(给定的边际分布)a=0qt=pe完全是噪声分布(给定的边际分布)0<a<1qt=aq0+(1−a)pe0<a<1\qquad q_t=aq_0+(1-a)p_e0<a<1qt=aq0+(1−a)pe

也就是边密度是原始边密度和噪声边密度的凸组合,逐步向 pep_epe 靠拢。这个状态的实现和前面 QtQ_tQt 转移公式的形式相呼应。

注意这里Digress为了保证噪声偏得不是太远这里设定上是 q0=peq_0=p_eq0=pe 的也就是边密度全程是保持不变的,这确实意味着在边密度层面上"不用转换",但是:

  • 边的具体分布仍然会被扰动(因为噪声过程会随机翻转边)
  • 只是总体边密度不变

这里降低难度方便模型训练。

相关推荐
长三角智造观察28 分钟前
中小制造ERP+MES选型避坑:对接集成VS原生一体化,深度对比TCO与落地痛点
大数据·人工智能·制造
一水鉴天6 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
198******126346 小时前
2026 企业 AI 办公产品选型指南:从场景匹配判断工具价值
人工智能
玫瑰互动GEO7 小时前
GEO优化学习九级模型:开发者从认知层切入
人工智能·ai·ai搜索·gem·生成式引擎优化·gem优化
海绵宝宝转agent7 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
每天都要写算法(努力版)7 小时前
【行业前沿报告】DAgger:让智能体在自己走到的状态上学习
人工智能·学习·机器学习
liron717 小时前
智能实体演化系统的统一性概念
人工智能·深度学习·神经网络
小小龙学IT7 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
呆萌很7 小时前
常用骨干网络预训练输入尺寸
人工智能
Yolanda_20227 小时前
19.神经网络-最大池化的使用
人工智能·深度学习·神经网络