欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 再议扩散模型

再议扩散模型

2024/10/24 7:33:34 来源:https://blog.csdn.net/m0_60177079/article/details/140494022  浏览:    关键词:再议扩散模型

目录

一、基础知识

1、数学期望

2、概率表示

3、KL散度

二、扩散过程

三、理想的去噪过程

四、真实的去噪过程

五、噪声生成 


导言

       笔者早些时候曾粗略看过扩散模型的流程,但对于底层算法(尤其是概率论方面),理解不够透彻,所以重新解释底层算法。

一、基础知识

1、数学期望

       在扩散模型中经常使用数学期望来计算扩散模型的损失函数,其中期望符号的写法与概率论有所不同。

        期望计算:对于变量x在概率密度函数为p(x)下的期望(亦说为变量x在p(x)分布下的期望)记作:E_{p(x)}\left ( x \right )。由于一般来说概率密度函数p(x)已知,所以也缩写为E(x)。而扩散模型中分布函数未知,所以记作前者。

2、概率表示

        p(x_0)表示:0时刻下的概率分布。

        p(x_0:T)表示:0到T时刻下,变量x的联合概率分布,此时不一定等于\prod_{t=0}^T p(x_t),因为不一定相互独立。

        p(x_1:T|x_0)表示:考虑0时刻情况x_0成立下,1到T时刻下,变量x的联合概率分布。

        由于扩散模型遵循马尔科夫链,所以一定有1时刻完全依赖于0时刻,2时刻完全依赖于1时刻,则可以理解为相互独立。

        此时遵循贝叶斯公式:p_\theta(x_0)=\frac{p_\theta(x_0:T)}{p_\theta(x_{1:T}|x_0)}

        对于T时刻与0时刻之间的关系:q(x_1:T|x_0)=\prod _{t=1}^T q(x_t|x_{t-1})

3、KL散度

        KL散度定义:

                                               D_{KL}(p||q)=\sum_{i=1}^n p(x_i)log \frac{p({x_i})}{q(x_i)} \\ D_{KL}(p||q)=\int p(x_i)log \frac{p({x_i})}{q(x_i)}

        KL散度用来描述两个分布之间的距离,KL散度为0则两个分布相同,散度越大则越不相关。

        KL散度非负性证明?

        从凸函数定义延伸出Jetson不等式:

凸函数定义f(\lambda x_1+(1-\lambda )x_2) \leqslant \lambda f(x_1)+(1-\lambda)f(x_2)

Jensen不等式(琴生不等式):当f(x)是区间[a,b]的凸函数,则对于任意实数x_1,x_2,...,x_n \in [a,b],对所有非负实数 a_1,a_2,...,a_n \geqslant 0 ,且a_1+a_2+...+a_n=1,下式成立:

        f(a_1x_1+a_2x_2+...+a_nx_n) \leqslant a_1f(x_1)+a_2f(x_2)+...+a_nf(x_n)

由KL散度定义:

        D_{KL}(p||q)=\sum_{i=1}^n p(x_i)log \frac{p({x_i})}{q(x_i)}

其中:

        \sum_{i=1}^np(x_i)=1 , \ \ \sum_{i=1}^nq(x_i)=1

由于-log(x)为凹函数所以提取负号,进行变换:

        D_{KL}(p||q)=\sum_{i=1}^n p(x_i)log \frac{p({x_i})}{q(x_i)} \\ =\sum_{i=1}^n p(x_i)(-log \frac{p({x_i})}{q(x_i)}) \\ \geqslant -log(\sum_{i=1}^n p(x_i)\frac{q({x_i})}{p(x_i)}) \\ =-log(\sum_{i=1}^n q(x_i)) \\ =-log(1) \\ =0\beta_t

因此KL散度恒为非负。

二、扩散过程

        扩散模型就是逐次往图片里加入高斯噪声直到完全变为噪声的过程,问题在于噪声如何加,与上一帧的加权关系。

        噪声模型,本身是从一个正态分布中采样而来,分布遵循N(0,I)。

        扩散前提:保证扩散后图像仍然是一个高斯噪声图像。

        扩散迭代公式:q(x_t|x_{t-1})=N(x_t|\sqrt{1-\beta_t}x_{t-1},\beta_t \mathbf{I}),保证扩散过程是一个均值\sqrt{1-\beta_t}x_{t-1},方差为\beta_t \mathbf{I}的正态分布,\beta_t是一个随时间变化的值,满足特定的差异时间表。

        均值为什么要乘以\sqrt{1-\beta_t}?

        由于T\rightarrow \infty时刻,保证x_t仍然是一个正态分布,但显然现实场景T达不到无穷大,该想法只是一个理想条件。

        扩散模型满足马尔科夫链:q(x_1:T|x_0)=\prod _{t=1}^T q(x_t|x_{t-1})

        对于扩散模型T时刻的通项公式:q(x_t|x_0)=N(x_t;\sqrt{\bar{\alpha}_t}x_0,(1-\bar{\alpha}_t)I)

        通项公式计算如下:

        令\alpha_t=1-\beta_t ,\ \bar{\alpha_t}=\sum_1^n\alpha_i

三、理想的去噪过程

        去噪过程的思想就是从随机噪声中还原一个图像。

        目的:求出q(x_{t-1}|x_t)迭代公式。

        但由于我们无法通过原有的q(x_t|x_{t-1})来反向推导该目标,所以我们尝试用神经网络(一般用u-net)拟合一个p_\theta(x_t|x_{t-1}),与目标近似。

        迭代公式推导主体思想:化反向过程为前向过程!

        首先对于q(x_{t-1}|x_t,x_0)公式进行转化:

        7.1步用贝叶斯公式替换,7.2步乘法公式展开,7.3步进行整理,7.4步带入正态分布函数公式,由于差了一个\frac{1}{\sqrt{2 \pi \sigma}},所以不完全等价,保证正比于。7.5步转换为关于x_{t-1}的二次项函数,此时可以抽出方差和均值,这两者均\alpha_t有关。

        迭代公式q(x_{t-1}|x_t,x_0)=N(x_{t-1};\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t} }\epsilon),\frac{(1-\bar{\alpha}_{t-1})(1-\alpha_t)}{1-\bar{\alpha}_t}I)

        最后证明为一个变量为t-1时刻的前向过程。

四、真实的去噪过程

         真实的去噪过程是预测噪声分布,一般计算变分自编码器的最大化证据下界,训练方法就是最小化负对数似然。

        上面结果中第一项约束最终第T步得到的加噪结果 X_t接近于完全的高斯噪声,最后一项约束模型生成的结果与真值接近,而中间的 t-1 项约束逆向过程的马尔科夫链中,神经网络估计出的每一个条件分布接近于对应的真实的数据分布。

         中间的第t项的KL散度可以进行化简,最后将收敛于真实噪声,如下。

      代入推导出来的均值,此时正比于一个真实噪声与预测噪声的均方误差,这个结构最后作为损失函数用于最小化。

五、噪声生成 

        噪声生成模型一般用U-net或U-net结合transformer,输入带有噪声的图像和时间步t,输出是预测出的\epsilon_\theta(x_t,t),损失函数用真实噪声与预测噪声的均方误差。

参考一年前我写过的扩散模型:NLP(6)--Diffusion Model_diffusion model nlp-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com