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

问题

原文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−pepe]n×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,pe][P(E_t=0),P(E_t=1)]=[1-p_e,p_e][P(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)=q0[a+(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_0[a+(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)=q0[a+(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 的也就是边密度全程是保持不变的,这确实意味着在边密度层面上"不用转换",但是:

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

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

相关推荐
covco16 分钟前
矩阵管理系统指南:拆解星链引擎的架构设计与全链路落地实践
大数据·人工智能·矩阵
沪漂阿龙20 分钟前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
lifewange21 分钟前
AI编写测试用例工具介绍
人工智能·测试用例
陕西字符24 分钟前
2026 西安 豆包获客优化技术深度解析:企来客科技 AI 全域获客系统测评
大数据·人工智能
掘金安东尼27 分钟前
GGUF、GPTQ、AWQ、EXL2、MLX、VMLX...运行大模型,为什么会有这么多格式?
人工智能
新知图书27 分钟前
市场分析报告自动化生成(使用千问)
人工智能·ai助手·千问·高效办公
无心水30 分钟前
【Hermes:安全、权限与生产环境】38、Hermes Agent 安全四层纵深:最小权限原则从理论到落地的完全指南
人工智能·安全·mcp协议·openclaw·养龙虾·hermes·honcho
旦莫1 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
dfsj660111 小时前
第四章:深度学习革命
人工智能·深度学习
张伯毅2 小时前
如何构建一个生产级 AI Agent CLI —— 以 Claude Code 架构探索
人工智能·架构