• 论文阅读_扩散模型_DM


    英文名称: Deep Unsupervised Learning using Nonequilibrium Thermodynamics
    中文名称: 使用非平衡热力学原理的深度无监督学习
    论文地址: http://arxiv.org/abs/1503.03585
    代码地址: https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models
    时间: 2015-11-18
    作者: Jascha Sohl-Dickstein, 斯坦福大学
    引用量: 1813

    读后感

    论文目标是建立灵活且易用数据生成模型。它利用非平衡统计物理学原理:通过扩散过程(少量加噪)系统地、缓慢地破坏数据分布中的结构;然后,学习反向扩散过程,恢复数据结构。

    介绍

    扩散模型与变分模型

    扩散模型与变分模型原理类似,都是将图片拆成一系列高斯分布的均值和方差,而扩散模型是一个逐步变化的过程,主要差别如下:

    • 原理不同:扩散模型使用物理学、准静态过程和退火采样的思想。由于任何平滑目标分布都存在扩散过程,因此理论上该方法可以捕获任意形式的数据分布。
    • 展示了用简单的乘法,将一个分布逐步转换为另一分布的过程。
    • 解决了推理模型和生成模型之间目标的不对称性,将正向(推理)过程限制为简单的函数形式,反向(生成)过程将具有相同的函数形式。
    • 可训练具有数**千层(时间步)**的模型。
    • 精细控制每层中熵产生的上限和下限。

    方法

    请记住图中这些符号,很多后续文章都延用了这些符号的定义。

    向前轨迹

    其中蓝色是扩散过程,从左往右看,总共T步,每步加一点高斯噪声,将瑞士卷图扩散成了高斯分布,扩展过程设为q。每步都根据上一步数据而来:
    q ( x ( 0 ⋯ T ) ) = q ( x ( 0 ) ) ∏ t = 1 T q ( x ( t ) ∣ x ( t − 1 ) ) q\left(\mathbf{x}^{(0 \cdots T)}\right)=q\left(\mathbf{x}^{(0)}\right) \prod_{t=1}^{T} q\left(\mathbf{x}^{(t)} \mid \mathbf{x}^{(t-1)}\right) q(x(0T))=q(x(0))t=1Tq(x(t)x(t1))

    反向轨迹

    中间红色部分是扩散的逆过程,从右往左看,图片逐步恢复,恢复过程设为p;在训练过程中,通过学习高斯扩散的逆过程,使数据转换回原分布,从而生成数据。
    p ( x ( 0 ⋯ T ) ) = p ( x ( T ) ) ∏ t = 1 T p ( x ( t − 1 ) ∣ x ( t ) ) p\left(\mathbf{x}^{(0 \cdots T)}\right)=p\left(\mathbf{x}^{(T)}\right) \prod_{t=1}^{T} p\left(\mathbf{x}^{(t-1)} \mid \mathbf{x}^{(t)}\right) p(x(0T))=p(x(T))t=1Tp(x(t1)x(t))
    最后一行展示了反向扩散过程的漂移项。fμ (x(t), t) 是高斯逆马尔可夫转移的均值和协方差的函数。

    扩散的原理是通过马尔可夫链逐渐将一种分布转换为另一种分布。最终,估计概率分布的任务简化为对高斯序列的均值和协方差函数的回归任务(这里的0状态指的是原始图,T状态指高斯分布图);由于扩散链中的每个步骤都具有可分析评估的概率(对比正向和反向变化中每一步数据的相似度),因此也可以对整个链进行分析评估。

    模型概率

    计算将图像恢复成原图的概率,可拆解成每一步变化的累积。
    p ( x ( 0 ) ) = ∫ d x ( 1 ⋯ T ) p ( x ( 0 ⋯ T ) ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) = ∫ d x ( 1 ⋯ T ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) p ( x ( 0 ⋯ T ) ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) = ∫ d x ( 1 ⋯ T ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) p ( x ( T ) ) ∏ t = 1 T p ( x ( t − 1 ) ∣ x ( t ) ) q ( x ( t ) ∣ x ( t − 1 ) )

    p(x(0))=dx(1T)p(x(0T))q(x(1T)x(0))q(x(1T)x(0))=dx(1T)q(x(1T)x(0))p(x(0T))q(x(1T)x(0))=dx(1T)q(x(1T)x(0))p(x(T))t=1Tp(x(t1)x(t))q(x(t)x(t1))" role="presentation">p(x(0))=dx(1T)p(x(0T))q(x(1T)x(0))q(x(1T)x(0))=dx(1T)q(x(1T)x(0))p(x(0T))q(x(1T)x(0))=dx(1T)q(x(1T)x(0))p(x(T))t=1Tp(x(t1)x(t))q(x(t)x(t1))
    p(x(0))===dx(1T)p(x(0T))q(x(1T)x(0))q(x(1T)x(0))dx(1T)q(x(1T)x(0))q(x(1T)x(0))p(x(0T))dx(1T)q(x(1T)x(0))p(x(T))t=1Tq(x(t)x(t1))p(x(t1)x(t))

    训练

    具体方法是计算熵 H 和 KL 散度。其推导与变分贝叶斯方法中对数似然界限的推导类似。DK散度描述了每一时间步数据分布的差异,熵描述了数据的混乱程度。
    L ≥ K K = − ∑ t = 2 T ∫ d x ( 0 ) d x ( t ) q ( x ( 0 ) , x ( t ) ) . D K L ( q ( x ( t − 1 ) ∣ x ( t ) , x ( 0 ) ) ∥ p ( x ( t − 1 ) ∣ x ( t ) ) ) + H q ( X ( T ) ∣ X ( 0 ) ) − H q ( X ( 1 ) ∣ X ( 0 ) ) − H p ( X ( T ) ) .

    LKK=t=2Tdx(0)dx(t)q(x(0),x(t)).DKL(q(x(t1)x(t),x(0))p(x(t1)x(t)))+Hq(X(T)X(0))Hq(X(1)X(0))Hp(X(T))." role="presentation" style="position: relative;">LKK=t=2Tdx(0)dx(t)q(x(0),x(t)).DKL(q(x(t1)x(t),x(0))p(x(t1)x(t)))+Hq(X(T)X(0))Hq(X(1)X(0))Hp(X(T)).
    LK=Kt=2Tdx(0)dx(t)q(x(0),x(t)).DKL(q(x(t1)x(t),x(0))p(x(t1)x(t)))+Hq(X(T)X(0))Hq(X(1)X(0))Hp(X(T)).
    设置扩散率 βt
    热力学中,在平衡分布之间移动时所采取的时间表决定了损失多少自由能。简单地说,就是如何设置每一步变化的大小。一般情况下,第一步β设成一个很小的常数,以防过拟合,然后2-T步逐步扩大。将在之后的DDPM中详述。

    乘以分布计算后验

    对大多数模型而言,乘以分布计算量大,而在扩散模型中则比较简单,第二个分布可以被视为扩散过程中每个步骤的小扰动。

  • 相关阅读:
    跨模态神经搜索实践VCED CLIP简介
    yarn install 这个命令安装如何加速
    c++实现计时器(精确到秒)
    R语言编写用户自定义函数:编写自定义函数并创建局部变量(函数内部的变量、在函数内部使用、函数运行完成后自动删除)
    信息安全服务资质认证CCRC证书‖中国网络安全审查技术与认证中心
    栈的应用场景(三)
    【Java】泛型
    6套台式组装机电脑配置清单大全(2022年618)
    第七部分:Maven(项目管理工具)
    Matlab导入log(或txt)文件,提取数据或其他信息
  • 原文地址:https://blog.csdn.net/xieyan0811/article/details/132640875