扩散模型pytorch简单案例 扩散概率模型_方差


引入:大自然中的扩散现象都遵循一个熵增的过程,比如一滴墨水滴到清水里,比如罐子里的气体一步一步扩散到空气中,都是一个不可逆的过程,但当前状态是包含着上一个状态的信息且扩散规律是可遵循的。Diffusion Models 就是基于一些假设条件,通过找到并掌握扩散过程的每一个步骤与当前的状态,从一个初始的各向同性的高斯噪声分布来一步一步逆推上一个的状态,经过不断的逆推得到了粒子原来的状态。

扩散模型pytorch简单案例 扩散概率模型_python_02 是从输入空间 扩散模型pytorch简单案例 扩散概率模型_方差_03 采样而来的样本,且用概率密度分布函数 扩散模型pytorch简单案例 扩散概率模型_人工智能_04 来逼近真实分布 扩散模型pytorch简单案例 扩散概率模型_方差_05。Diffusion Model 是一个包含隐变量的生成式模型 扩散模型pytorch简单案例 扩散概率模型_方差_06 其中扩散模型pytorch简单案例 扩散概率模型_python_07 是 D 维的隐变量。
扩散过程:
扩散模型的后验分布 扩散模型pytorch简单案例 扩散概率模型_方差_08表示为:扩散模型pytorch简单案例 扩散概率模型_机器学习_09
  扩散模型的后验分布 扩散模型pytorch简单案例 扩散概率模型_方差_08 是一个不包含训练参数的确定的马尔科夫过程(当前状态只与前一个时刻的状态有关)。扩散模型的扩散过程是一个逐步加高斯噪声的过程:
扩散模型pytorch简单案例 扩散概率模型_机器学习_11
  扩散过程中使用的方差 扩散模型pytorch简单案例 扩散概率模型_扩散模型pytorch简单案例_12 是一个单调递增的序列。在此过程中使用重参数化技巧(Re parameter Trick)先从一个标准的高斯分布中采样得到噪声 扩散模型pytorch简单案例 扩散概率模型_人工智能_13 然后将 扩散模型pytorch简单案例 扩散概率模型_人工智能_13 乘以方差 扩散模型pytorch简单案例 扩散概率模型_扩散模型pytorch简单案例_15 再加上均值 扩散模型pytorch简单案例 扩散概率模型_人工智能_16 来获得样本 扩散模型pytorch简单案例 扩散概率模型_机器学习_17。给定输入样本 扩散模型pytorch简单案例 扩散概率模型_机器学习_18,经 N 步的扩散过程得到加噪后的样本 扩散模型pytorch简单案例 扩散概率模型_方差_19
  扩散过程中要经过多步的加高斯噪声的过程得到最终的 扩散模型pytorch简单案例 扩散概率模型_方差_19, 经过证明,其中每一步加噪后的采样值 扩散模型pytorch简单案例 扩散概率模型_方差_21 可以由 扩散模型pytorch简单案例 扩散概率模型_机器学习_18 直接计算(将中间的加高斯噪声的步骤合并)如式(3)所示:
扩散模型pytorch简单案例 扩散概率模型_人工智能_23
其中, 扩散模型pytorch简单案例 扩散概率模型_方差_24扩散模型pytorch简单案例 扩散概率模型_机器学习_25

逆扩散过程:
  假设逆扩散过程的联合概率分布 扩散模型pytorch简单案例 扩散概率模型_扩散模型pytorch简单案例_26 是一个马尔科夫过程, 且每一步的转移概率服从一个带有学习参数的高斯分布(通过神经网络拟合)。此外,逆扩散过程的起始点 扩散模型pytorch简单案例 扩散概率模型_人工智能_27 是一个标准的高斯分布(扩散过程不断加噪声,最后得到一个标准的噪声分布),则逆扩散过程的联合分布如式(4)所示:
扩散模型pytorch简单案例 扩散概率模型_python_28
由于扩散过程的每一步都加了很小的高斯噪声,不妨假设每一步的逆扩散过程也服从高斯分布:
扩散模型pytorch简单案例 扩散概率模型_方差_29
其中均值 扩散模型pytorch简单案例 扩散概率模型_人工智能_30 与方差 扩散模型pytorch简单案例 扩散概率模型_机器学习_31 是输入为当前时刻的 扩散模型pytorch简单案例 扩散概率模型_机器学习_17 与 时刻扩散模型pytorch简单案例 扩散概率模型_机器学习_33 的函数(用神经网络来逼近这个函数,参数为 扩散模型pytorch简单案例 扩散概率模型_python_34),扩散模型pytorch简单案例 扩散概率模型_方差_35 是为了消除在扩散过程中增加的高斯噪声。
  模型训练使得似然函数达到最大,也就是负对数似然函数最小,使用Jensen’s 不等式可以得到负对数似然函数的上界:
扩散模型pytorch简单案例 扩散概率模型_人工智能_36
等价于优化:
扩散模型pytorch简单案例 扩散概率模型_机器学习_37
由于这些过程都假设为马尔科夫过程,式(7) 可以简化为:
扩散模型pytorch简单案例 扩散概率模型_人工智能_38
其中,扩散模型pytorch简单案例 扩散概率模型_人工智能_39 为逆扩散过程最后一步的条件概率,扩散模型pytorch简单案例 扩散概率模型_机器学习_40 不包含训练参数,对于模型优化目标而言是个常量,可以省略,扩散模型pytorch简单案例 扩散概率模型_机器学习_41 为分布 扩散模型pytorch简单案例 扩散概率模型_机器学习_42 与高斯分布 扩散模型pytorch简单案例 扩散概率模型_方差_35

对于前向扩散过程中的后验概率 扩散模型pytorch简单案例 扩散概率模型_机器学习_42 服从高斯分布:
扩散模型pytorch简单案例 扩散概率模型_python_45
其中均值与方差:
扩散模型pytorch简单案例 扩散概率模型_机器学习_46
则式(8)中表示两高斯分布的KL散度可以表示为:

扩散模型pytorch简单案例 扩散概率模型_机器学习_47

我们的目标是优化模型的权重扩散模型pytorch简单案例 扩散概率模型_python_34 使得扩散模型pytorch简单案例 扩散概率模型_人工智能_49,由于直接预测均值得到的效果不好,由公式(3)有扩散模型pytorch简单案例 扩散概率模型_人工智能_50, 其中扩散模型pytorch简单案例 扩散概率模型_人工智能_51,则用扩散模型pytorch简单案例 扩散概率模型_机器学习_17来表示扩散模型pytorch简单案例 扩散概率模型_机器学习_53扩散模型pytorch简单案例 扩散概率模型_python_54
我们可以训练模型,使得:
扩散模型pytorch简单案例 扩散概率模型_python_55
其中,扩散模型pytorch简单案例 扩散概率模型_方差_56 是一个神经网络,这个网络用来预测扩散模型pytorch简单案例 扩散概率模型_人工智能_51,最后模型的优化目标可以表示为:
扩散模型pytorch简单案例 扩散概率模型_python_58
其中 扩散模型pytorch简单案例 扩散概率模型_人工智能_13 为给定 扩散模型pytorch简单案例 扩散概率模型_机器学习_18扩散模型pytorch简单案例 扩散概率模型_方差_21 所增加的高斯噪声,并且构建神经网络扩散模型pytorch简单案例 扩散概率模型_方差_62,使得网络的输出与 扩散模型pytorch简单案例 扩散概率模型_人工智能_13 相等,等价于 扩散模型pytorch简单案例 扩散概率模型_人工智能_49。有了 扩散模型pytorch简单案例 扩散概率模型_方差_65便可以由公式(9)得到扩散模型pytorch简单案例 扩散概率模型_机器学习_42,由于训练过程中,目标是损失最小化,等价于(8)中第三项的两个分布的KL散度为0,也就是扩散模型pytorch简单案例 扩散概率模型_python_67, 便可以由 扩散模型pytorch简单案例 扩散概率模型_机器学习_17不断计算得到 扩散模型pytorch简单案例 扩散概率模型_方差_69,最后得到 扩散模型pytorch简单案例 扩散概率模型_机器学习_53,也就是训练完成,则有 扩散模型pytorch简单案例 扩散概率模型_方差_71:

扩散模型pytorch简单案例 扩散概率模型_python_72
其中 扩散模型pytorch简单案例 扩散概率模型_python_73

Diffusion Model 的核心思想是使用以 扩散模型pytorch简单案例 扩散概率模型_扩散模型pytorch简单案例_74 为输入的神经网络来逼近后验分布 扩散模型pytorch简单案例 扩散概率模型_机器学习_42 , 最后达到使用 扩散模型pytorch简单案例 扩散概率模型_方差_76 来预测 扩散模型pytorch简单案例 扩散概率模型_方差_69