扩散模型的发展过程梳理 多个扩散模型理论知识总结/DDPM去噪扩散概率/IDDPM/DDIM隐式去噪/ADM/SMLD分数扩散/CGD条件扩散/Stable Diffusion稳定扩散/LM

本文主要是介绍扩散模型的发展过程梳理 多个扩散模型理论知识总结/DDPM去噪扩散概率/IDDPM/DDIM隐式去噪/ADM/SMLD分数扩散/CGD条件扩散/Stable Diffusion稳定扩散/LM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

1.最近发现自己光探索SDWebUI功能搞了快两个月,但是没有理论基础后面科研路有点难走,所以在师兄的建议下,开始看b站视频学习一下扩散模型,好的一看一个不吱声,一周过去了写个博客总结一下吧,理理思路。不保证下面的内容完全正确,只能说是一个菜鸟的思考和理解,有大佬有正确的理解非常欢迎评论告知,不要骂我不要骂我。

2.这里推荐up主,deep_thoughts投稿视频-deep_thoughts视频分享-哔哩哔哩视频 (bilibili.com)

我觉得对于学习而言只有学到了和没学到的差别,以前可能更多的是直接阅读文献,但如果有这样好的学者录个视频带你精读论文是比你自己埋头苦读五百年好太多太多了,学习有时候真的要讲方法和技巧,说白了就是要聪明点,有捷径为什么不走, 真是笨!再强调一点,提到的论文直接搜都可以在arXiv里找到,就不用另附论文链接了。

一、DDPM 去噪扩散概率模型

1. 论文及视频

DDPM是扩散模型的开山之作,《Denoising Diffusion Probabilistic Models》,附一下up主的论文原理讲解和pytorch代码讲解视频。54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读_哔哩哔哩_bilibili

DDPM在直接上手学SD功能的时候完全不了解不知道,甚至以为SD那篇才是开篇之作,原来人家这里早有痕迹了。

2. 扩散过程

DDPM是所有扩散模型的基础,主要是分为两个过程,前向扩散过程和反向去噪过程,我们需求的是反向去噪过程,给定一张高斯噪声图片就能通过反向一步一步迭代来生成我们所需的目标样本,但是得到反向过程需要先训练,就要了解前向过程。

大致想法是如图,在用文字来讲讲。

1)前向扩散

该过程是给定X0原始样本然后通过每一步逐层随机加高斯噪声来使得最后的XT变成一个符合标准分布的样本~N(0,1),这里的加噪过程是符合马尔科夫链的,也就是说未来Xt只与当前Xt-1有关,与之前的X0都无关,但因为是随机加的高斯噪声,符合高斯分布,所以整个前向过程都可以通过一系列计算得到,Xt可以通过t、X0计算得来,有了Xt,同样计算就能得出Xt-1,知道了Xt和Xt-1之后,就能得出前向过程Xt-1到Xt的后验概率q,q也是服从高斯分布的,然后贝叶斯公式推导起来,得到q的均值、方差公式,公式只有对固定参数的计算,这些是设置的固定值不是要求通过迭代优化的,所以整个前向过程是不含参数不需要用网络训练的过程;

2)反向去噪

该过程的目的就是给定一张高斯噪声图片即Xt,然后用模型比如NN模型来预测出一个Xt到Xt-1之间的p条件概率,因为加噪过程是一步步慢慢加噪的,所以近似的p也是服从高斯分布,这里目标函数loss就是要使得这个p和q之间的差值越来越小,越接近越好,这样才可以还原出原始X0。论文设计了三种loss:1)直接对p、q进行KL散度,优化过程就是最小化这个loss,对qp进行其实对它们的均值进行预测,这里有几种预测或者说求解的方法(线性加权),不展开讲了;2)对预测的原始X0进行KL散度;3)第三种是论文推荐的,就是说预测噪声,大概的思路就是前向过程X0、t可以求出Xt,所以有个关系式表示出这三者之间的关系,转换成等式加个噪声就可以,把这个等式在代入之前推导的目标函数中,得出一个新的loss即Lsimple,最后实验证明预测噪声的方法生成质量最好也最快。反向去噪的过程是含参的过程,需要网络一步步迭代优化,使得两个分布越来越接近,或者说loss最小化。

3. 网络架构U-Net

DDPM常用的训练网络是U-Net,这里也跑去再温习了一遍U-Net网络的原理,《U-Net: Convolutional Networks for Biomedical Image Segmentation》56、U-Net用于图像分割以及人声伴奏分离原理代码讲解_哔哩哔哩_bilibili

这个网络重点就是这张示例图,是编码器-解码器的过程,通过卷积、上下采样、最大池化以及跳跃连接的方式,学习图像特征的同时也保留高层特征信息不丢失。

二、IDDPM

1. 论文及视频

《Improved Denoising Diffusion Probabilistic Models》,这篇是在DDPM的基础上进行改进,58、Improved Diffusion的PyTorch代码逐行深入讲解_哔哩哔哩_bilibili

2. 改进点

1)引入了Noise Schedule算法来对网络比如U-Net预测的噪声进行优化处理,以前是在每步训练中都应用固定的噪声水平,Noise Schedule使得模型可以使用不同的噪声水平可以在不同阶段学习到更多的细节信息,统筹生成进度,是一种更灵活的噪声策略;

2)使用了新的训练策略,DDPM通常采用预训练和微调,IDDPM加入了Refinement Stage 一个额外训练阶段,更长的训练时间、更小的学习率、更强的梯度惩罚,使得模型可以生成更高质量的样本;

3)使用了一种改进的优化算法SGLD(Stochastic Gradient Langevin Dynamics),DDPM是通过随机梯度下降SGD进行模型训练。

学习得不够细致,但其实目前大多数的论文代码不是按照原始DDPM来改的,而是基于IDDPM这篇论文来改的,还是有很多的知识点需要重视,也需要更关注它的代码。

三、ADM 自回归去噪扩散模型

1. 论文及视频

《Autoregressive Denoising Diffusion Models for Multivariate Probabilistic Time Series Forecasting》,用于序列预测的扩散模型。看完视频也没怎么看懂,给人一种打白工的感觉(可恶!)57、Autoregressive Diffusion Model自回归扩散模型用于序列预测论文讲解_哔哩哔哩_bilibili

2. 模型流程 

AMD主要是RNN+DDPM, 针对的是时间序列预测任务、信号处理啊啥的,和我的研究关系不大。但是看图稍微讲讲,左图很明显,是在反向去噪过程过加入RNN,RNN的输入是Xt-1,然后Ct-1表示基于Xt-1的上下文信息,然后模型会输出一个隐含状态ht-1,然后会把这个ht-1也加入到给定的Xt求Xt-1中,持续作用下去,右图是核心伪代码,也可以看出h也进入了计算式中。

四、SMLD 分数扩散模型

1. 论文及视频

《SCORE-BASED GENERATIVE MODELING THROUGH STOCHASTIC DIFFERENTIAL EQUATIONS》

62、Score Diffusion Model分数扩散模型理论与完整PyTorch代码详细解读_哔哩哔哩_bilibili

63、必看!概率扩散模型(DDPM)与分数扩散模型(SMLD)的联系与区别_哔哩哔哩_bilibili

2. 模型流程

貌似后续对于扩散用这个分数的比较多,引入了这个分数、评分、分数网络等一系列知识点。SMLD分数扩散模型是基于求解随机微分方程来建模,loss的计算也是基于此设计的分数目标函数,是用预测的原始X0来计算的loss。DDPM是一步一步逐步地去加噪声,而SMLD是给X0加不同量级的噪声来训练一个分数网络,使得XT~N(0,σ^2),ODE采样。此外还有一些知识点,NCSN/SDEs/郎之万采样,都是比较生涩的东西,后续搞明白了再编辑。

五、DDIM 扩散隐式去噪模型

1. 论文及视频

《DENOISING DIFFUSION IMPLICIT MODELS》,算是除了DDPM之外更需要多关注的论文和模型,是在DDPM基础上一个较大的突破。

64、扩散模型加速采样算法DDIM论文精讲与PyTorch源码逐行解读_哔哩哔哩_bilibili

2. 模型原理

DDIM是为了提高采样速度等原因出现的,当时DDPM虽然生成质量和GAN打成平手或者优于GAN,但是出图的速度是远远不如GAN的,所以诞生了DDIM扩散隐式去噪模型。DDIM突破的点在于改变了前向扩散模型的方式,这里结果的得出也是基于分数模型发现的,所以先学学分数模型是有必要的。原DDPM的前向扩散过程是马尔科夫链的形式,虽然计算啥的比较方便也不含参,但是你的样本后面的结果必须要等前面结果出来才能进行计算,未来与当前状态有关,就是要等前面出了结果才能计算后面,所以导致采样速度不OK,出一张图要十几分钟,黄花菜都凉了。所以DDIM根据分数模型分析出前向扩散模型其实不需要真的符合马尔科夫链的形式,将其改为非马尔科夫链,反向扩散那些都不变,所以可以继续延续使用DDPM的loss,改变的只是前向q(Xt|X0),然后利用respacing替换这个技巧来提高采样速度,这个技巧大概就是说在迭代过程中,不用等到所有步骤都完成才开始采样,而是在每步迭代时只更新部分样本,在下一步只用这些部分样本来进行新的更新,采取只用短的子序列来采样,这样采样速度就提上去了。

而且通过计算得出,其实DDIM是更一般化的DDPM,它的公式loss、q啥的在特定情况下取值就是DDPM的形式,所以其实DDIM更具有普遍性。

3. 客观判断指标 IS/FID

另外,上面64的视频不仅讲解了DDIM,也讲了两个客观性指标来分析生成式模型的好坏,即IS(Inception Score)和FID(Fréchet Inception Distance),前者是将生成图像直接进行一个评测,是内部的比较,值越大越好,后者是将生成图像和真实图像作对比,会与外部比较,值越小越好。一般来说对于生成模型的好坏判断,两者都会进行计算,综合看待两个值来判断模型好坏。

六、CGD 条件扩散模型

1. 论文及视频

CGD,Classifier Guided Diffusion,《Diffusion Models Beat GANs on Image Synthesis》66、Classifier Guided Diffusion条件扩散模型论文与PyTorch代码详细解读_哔哩哔哩_bilibili

2. 模型原理

条件扩散模型的创新在于在DDPM的基础上额外加了一个分类器,感觉有点SD的影子了。具体来说就是guided diffusion加入了一个标签,本身DDPM是无条件的扩散模型,这里的CGD就是有条件的扩散,引入一个分类器网络,前向扩散过程不只是单纯的加噪声而是将噪声和标签作为输入,其他的不变,所以导致反向p的均值计算变了,公式里多了一个额外的g偏移量,使得模型生成更具语义上正确性的图像,SD文生图的前身?

七、Diffusion-LM 基于扩散模型的语言模型

1. 论文及视频

《Diffusion-LM Improves Controllable Text Generation》

 67、DiffusionLM 基于扩散模型的语言模型论文原理精讲_哔哩哔哩_bilibili

2. 模型原理

与DDPM不同,语言模型没有涉及到图像或者其他类型的生成,就是用来做可控的文本生成任务的,是纯文本生成模型,比如你输入“今天天气很”到训练好的LM模型里,然后模型就会给出几个可能得预测结果,比如“好”“热”“不好”等,这样来生成连贯的文本序列,和图像没啥关系,就不多说了。

八、SD Stable Diffusion 稳定扩散模型!!!

1. 论文

终于讲到最后的重点的了!!!《High-Resolution Image Synthesis with Latent Diffusion Models》

这个up主没有专门分个视频讲,但其实原理和DDPM大差不离,是一种改进的DDPM模型,但是由于设计了SDWebUI,使用率是很高的,衍生出了很多功能。

2. 模型架构

论文里的这张图可以充分的说明SD的训练流程,SD的创新点就在于中间绿色部分的Latent Space,是把前向扩散过程、反向U-Net编码解码过程等等这些东东都放到了这隐空间去完成,里面的数据被映射成潜在的向量,是低维表示,包含数据的重要特征和结构,通过在这个隐空间去调整这些潜在变量,提高模型的灵活性和表达能力,更多样更可控,再加上旁边引入的conditioning条件,这个条件包括语义、文本、表征信息、图片,然后输入到隐空间的反向过程的每一步中,以此实现对生成样本特征的精确控制。条件这里也可以看出文生图、图生图等等功能的影子。

深入浅出完整解析Stable Diffusion(SD)核心基础知识 - 知乎 (zhihu.com)

 

最后总结一下,扩散模型的基础是DDPM,训练过程为前向扩散和反向去噪的过程,其他的扩散模型都是在此基础上进行改进或者说针对某个任务来修改。这个理论学起来比较繁琐,但是希望对我后面训练SD模型会有一些帮助?

之后就接着总结一下多模态的部分东东:CLIP/BLIP~多模态 CLIP/BLIP/BLIP-2论文理论知识总结-CSDN博客

这篇关于扩散模型的发展过程梳理 多个扩散模型理论知识总结/DDPM去噪扩散概率/IDDPM/DDIM隐式去噪/ADM/SMLD分数扩散/CGD条件扩散/Stable Diffusion稳定扩散/LM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834894

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu4865(概率DP)

题意:已知前一天和今天的天气概率,某天的天气概率和叶子的潮湿程度的概率,n天叶子的湿度,求n天最有可能的天气情况。 思路:概率DP,dp[i][j]表示第i天天气为j的概率,状态转移如下:dp[i][j] = max(dp[i][j, dp[i-1][k]*table2[k][j]*table1[j][col] )  代码如下: #include <stdio.h>#include

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言