再议扩散模型

目录

一、基础知识

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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch学习(五)tensorboard使用

1. 创建环境 首先创建一个环境: conda create -n pytorch conda activate pytorch 然后安装tensorboard pip install tensorboard 安装opencv pip install opencv-python 2. 简单的案例 标量和图像的显示: 2.1标量实现的方法是add_scalar,第一个参数是给显…

探索Puppeteer的强大功能:抓取隐藏内容

背景/引言 在现代网页设计中,动态内容和隐藏元素的使用越来越普遍,这些内容往往只有在特定的用户交互或条件下才会显示出来。为了有效地获取这些隐藏内容,传统的静态爬虫技术往往力不从心。Puppeteer,作为一个强大的无头浏览器工…

印尼语翻译通:AI驱动的智能翻译与语言学习助手

在这个多元文化交织的世界中,语言是连接我们的桥梁。印尼语翻译通,一款专为打破语言障碍而生的智能翻译软件,让您与印尼语的世界轻松接轨。无论是商务出差、学术研究,还是探索印尼丰富的文化遗产,印尼语翻译通都是您的…

Java(二十一)---栈的使用和模拟实现

文章目录 前言1.什么是栈(Stack)?2. 栈的模拟实现3.stack的使用![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/80c82d22f3ee49cfaa2915d1c961573e.png)4.关于栈的oj题4.1.有效的括号4.2.逆波兰表达式4.3.栈的压入、弹出序列4.4.最小栈 前言 前面几篇我们学习了顺序…

Vue--Router(路由)

目录 一 Router(路由) 1.作用 2.实现步骤 3.注意 一 Router(路由) 1.作用 Router又叫做路由,简单来说,就是用来实现vue的页面之间跳转的。 我们都知道,使用vue必然会涉及到很多个组件,也就是页面,而页面之间肯定需…

RK3588读取不到显示器edid

问题描述 3588HDMIout接老的显示器或者HDMI转DVI接DVI显示器显示不了或者显示内容是彩色条纹,但是这种显示器测试过如果接笔记本或者主机是可以直接显示的。这一类问题是HDMI下的i2c与显示器通讯没成功,读取不到设备的edid。问题包括全志的H3 、AML的S905都有遇到 测试环境…

Qt-事件与信号

事件和信号的区别在于,事件通常是由窗口系统或应用程序产生的,信号则是Qt定义或用户自定义的。Qt为界面组件定义的信号往往通常是对事件的封装,如QPushButton的clicked()信号可以看做对QEvent::MouseButtonRelease类事件的封装。 在使用界面组…

【QGroundControl二次开发】二.使用QT编译QGC(Windows)

【QGroundControl二次开发】一.开发环境准备(Windows) 二. 使用QT编译QGC(Windows) 2.1 打开QT Creator,选择打开项目,打开之前下载的QGC项目源码。 编译器选择Desktop Qt 6.6.3 MSVC2019 64bit。 点击运…

vue3-tree-org实现带照片的组织架构图

官方文档&#xff1a;vue3-tree-org 显示照片需要注意的地方 使用步骤 下载 npm install vue3-tree-org --save 在main.js中引入 import "vue3-tree-org/lib/vue3-tree-org.css"; import vue3TreeOrg from vue3-tree-org;app.use(vue3TreeOrg) 实现代码 <tem…

level 6 day2 网络基础2

1.socket&#xff08;三种套接字&#xff1a;认真看&#xff09; 套接字就是在这个应用空间和内核空间的一个接口&#xff0c;如下图 原始套接字可以从应用层直接访问到网络层&#xff0c;跳过了传输层&#xff0c;比如在ubtan里面直接ping 一个ip地址,他没有经过TCP或者UDP的数…

解决TypeError: __init__() takes 1 positional argument but 2 were given

问题描述&#xff1a; 如下图&#xff0c;在使用torch.nn.Sigmoid非线性激活时报错 源代码&#xff1a; class testrelu(nn.Module):def __init__(self):super().__init__()self.sigmoid Sigmoid()def forward(self, input):output self.sigmoid(input)return outputwriter…

Blackbox AI:你的智能编程伙伴

目录 Blackbox AI 产品介绍 Blackbox AI 产品使用教程 Blackbox AI体验 AI问答 代码验证 实时搜索 探索&代理 拓展集成 总结 Blackbox AI 产品介绍 Blackbox是专门为程序员量身定制的语言大模型&#xff0c;它针对20多种编程语言进行了特别训练和深度优化&#xff0c;在AI代…

React 从入门到实战 一一开发环境基础搭建(小白篇)

React 从入门到实战一一开发环境基础搭建&#xff08;小白篇&#xff09; React 介绍什么是 react &#xff1f;react 主要功能react 框架特点 开发工具渲染测试 React 介绍 最近两年&#xff0c;react 也愈来愈火热&#xff0c;想要在里面分一杯羹&#xff0c;那肯定逃不过 r…

Windows下使用Cygwin创建rsync服务端

1 下载Cygwin 访问官网Cygwin&#xff0c;点击setup-X86_64.exe即可开始下载 2 安装 前面全部默认。路径可以自己选择&#xff0c;站点选阿里云的&#xff0c;等待安装即可 3 配置 使用打开Cygwin安装后创建的快捷方式窗口&#xff0c;输入下面的指令将windows用户导入到cyg…

C语言中常见库函数(1)——字符函数和字符串函数

文章目录 前言1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现4.strcpy的使用和模拟实现5.strcat的使用和模拟实现6.strncmp的使用和模拟实现7.strncpy函数的使用8.strncat函数的使用9.strncmp函数的使用10.strstr的使用和模拟实现11.strtok函数的使用12.strerror函数的…

物联网平台有哪些?

随着科技的不断进步&#xff0c;物联网&#xff08;IoT&#xff09;已经成为我们生活中不可或缺的一部分。物联网平台作为连接设备、数据和应用的桥梁&#xff0c;扮演着至关重要的角色。本文将介绍一些主流的物联网平台&#xff0c;并特别关注ThingsKit物联网平台。 物联网平…

UE4-系统默认天空球的使用

当我们在调整平行光的时候&#xff0c;会发现场景中的光照改变了&#xff0c;但是太阳的位置并没有改变&#xff0c;此时就需要用到系统默认的天空球中的&#xff1a; 但是只有在选中是由平行光的改变而改变的情况下才会发生改变&#xff0c;如果没有选择或者选择其他的光源&am…

couldn‘t read native报错!Typora中使用Pandoc导出Word失败的解决方法

couldn‘t read native报错&#xff01;Typora中使用Pandoc导出Word失败的解决方法 一、问题描述 在Typora中使用Pandoc将markdown文件导出为word文件时&#xff0c;发生如下图所示错误: 在网上找了资料以后&#xff0c;发现是因为md文件里面有表格&#xff0c;如果把表格删掉…

学生管理系统(C语言)(Easy-x)

课 程 报 告 课 程 名 称&#xff1a; 程序设计实践 专 业 班 级 &#xff1a; XXXXX XXXXX 学 生 姓 名 &#xff1a; XXX 学 号 &#xff1a; 231040700302 任 课 教 师 &a…

Rust Result 与可恢复的错误

Result 与可恢复的错误 大部分错误并没有严重到需要程序完全停止执行。有时&#xff0c;一个函数会因为一个容易理解并做出反应的原因失败。例如&#xff0c;如果因为打开一个并不存在的文件而失败&#xff0c;此时我们可能想要创建这个文件&#xff0c;而不是终止进程。 回忆…