Stable Diffusion原理剖析

【Stable Diffusion原理剖析】李宏毅2023春机器学习课程笔记

考虑到个人在一些问题上需要李宏毅教授在2023年课程中讲到的内容补充,所以我会把部分李宏毅教授在2023年的课程内容提上来挑着学习,因为是挑着看的,我也不知道会不会全部看完,所以这里就不分EP了。课程的地址:【授权】李宏毅2023春机器学习课程_哔哩哔哩_bilibili


前言

在2021/2022年的课程笔记博客里面我说听懂这门课需要有一点基本功,数学方面比如线性代数和概率论与统计这一方面的内容,但说是这么说,博主个人目前才区区大一,根本没有时间修概率论这方面的内容,但又偏偏恰好今天的博客是从数学和实操角度对Diffusion Model的原理解析,涉及到了大量概率论方面的推导。那这里我听课的时候也是迷迷糊糊的,读者也就不要指望这篇博客能说出什么东西了,您要是想看也可以当作一个参考。

DDPM中暗藏玄机

首先像说的是,对比Diffusion模型和VAE模型,其实你会发现两者很像,所以等会会对VAE做一点简单的说明。

那么现在我们来说一下DDPM这篇文章,我们之后的基本所有内容都是在简单解析这篇文章,DDPM对于图像生成领域来说是革命性的,原文最早发表于2020.6,这是最早将Diffusion Model运用在图像生成领域的文章!

那在之前浅谈Diffusion Model的原理的博客(【浅谈图像生成模型Diffusion Model原理】李宏毅2023春机器学习课程笔记 – -TobyKSKGD的个人博客-)的时候,我们最后是停在了DDPM的完整演算这里。

我们就从DDPM的演算开始说起,这里要说的就是仔细看这一篇演算就会发现里面是暗藏玄机的。

Training

我们之后会谈到为什么说这里暗藏玄机。我们先来看看这里的完整演算过程。

如下图,Training的第一步先是一个循环的说明,就是一直做2-5行的事情,直到聚合(converged)为止。

然后说两个定义,x0是我们真实的图像,我们一般会说是干净的图像。然后ε是杂讯。

第二步我们要做的就是从x0里面simple出来图像。

第三步我们会从1到T里面simple出来一个数字。

第四步是从一个normal distribution里面simple出来一个杂讯ε。这个distribution的平均mean是0,然后每一个维度的方差(variance)都固定是1。

接着我们就做一个运算。第五步里面这个红色框框里面在做的就是对x0和ε做权重相加(weight sum),就是把x0跟ε用某种比例混合起来得到一个有杂讯的图。然后这个权重weight是我们固定好的α从1到T由大到小排列起来的,T simple到越到就代表说杂讯加得越多。

然后下面是对以上过程更直观的写法。

实际上和现实的差别

在之前说概念的时候,我们说在训练的时候杂讯是一点点加进去的,然后去杂讯也是一点点去的。

但其实在实际上我们操作的时候,加杂讯和去杂讯都是一次性完成的。

Sampling

接着我们来看图像生成的过程。

首先第一步就是simple一个全部都是杂讯的图xT。

然后再是一个重复3-4步的说明。

接着simple出来一个杂讯图z。

然后我们看第四步里面,红色框框里面就是Denoise里noise predictor里输出的杂讯。这个式子再前面一点的这个xT就在前三个步骤里面跑出来的图。

在最后输出的时候,我们会再simple出来一个杂讯加到输出的影像里面去。这个步骤很奇怪啊,这也是这个DDPM里面暗藏玄机的地方。之后我们会说为什么要加这个杂讯进去。

Diffusion Model的原理剖析

影像生成模型本质上的共同目标

影像生成模型本质的共同目标就是先从distribution中simple出向量。然后经过影像生成的Network得到一个生成的图像的distribution。接着我们期望这个生成图像的distribution跟真实图像的distribution越接近越好。

之后我们加上我文字的情况也是差不多的,所以在时候的讲解中为了简洁,我们就先把文字输入的情况给省去了。

Maximum Likelihood Estimation

然后我们说影像生成模型的目标其实都是在做Maximum Likelihood Estimation。

这个Maximum Likelihood Estimation是这个样子的,我们先从真实图像分布中simple出一组图像。

接着我们先来做个定义,Pθ(x)是我们生成出来的图像的distribution,然后Pdata是真实图像的distribution。

现在假设我们可以计算从Pθ,也就是生成图像的distribution中simple出某个图像的概率,当然实际上因为这个Pθ很复杂,我们根本不知道这个Pθ长什么样子,也就无从计算这个概率。

然后Maximum Likelihood Estimation做的就是找一个θ,让Pdata中simple到的图产生出来概率最高。

你可能会问:让从Pdata中simple出来图像的几率越大越好,跟期望Pdata跟Pθ越接近越好有什么关系?

下面这个式子就是在解释这个问题。

上图这个红色框框就相当于Pdata跟Pθ的区别。

总之,经过上面的变化演算,所有影像生成模型的共同目标就是Maximum Likelihood Estimation,也就等同于Minimize KL Divergence。

VAE中计算Pθ(x)的方法

上面部分是我们一般想象的计算方法,但是因为simple出来的图像几乎不可能完完全全一模一样,所以上面的计算方法最后得到的很可能几乎都是0。

然后我们就会用下面这个方法。输入一个z经过Network,得到一个输出G(z),然后我们对这个G(z)做mean,就是Gaussian的Mean。

声明

接下去的地方很多都涉及概率论的推导,个人没听太懂,所以很多地方可能只会放一个课上的PPT。

logP(x)的下界

DDPM中计算Pθ(x)的方式

DDPM当中logP(x)的下限

这里面红色框框的q(x1😡T|x0)指的是x1😡T在给定干净的图像x0的情况下,x1😡T的分布。

q的计算方法

Maximize Eq的计算方式

整体的计算流程:

各个部分放大看:

这里是DDPM文献当中的推导过程。

最下面红色框框部分放大:

如何minimize KL divergence

下图中红色框框中的ε就是实际需要network predict的部分。

这里红色框框实际上对应的就是文献当中计算式的其中一部分:

暗藏玄机里面的奥秘

最后来看看为什么在输出的最后要给结果加一个simple出来的杂讯。也就是在最后的结果里面为什么不直接取Mean,为何不能一次到位?

声明一下,这里DDPM的原文文献里面其实没有讲啦,但是这里李老师做了一个猜想解释,我觉得很有道理,不过要是有错误绝对不是博主本人的错误!

那我们类比文字生成,我们不可以只选可能性最大的情况,不然生成出来的文章很可能跳帧,导致生成出来的文章一直不断复读一段文字。

然后语音处理方面也是一个道理。

所以我们给DIffusion Model的结果加噪,其实是为了加一点结果生成的随机性。

Diffusion Model也可以用在语音合成上

Diffusion Model用在文字处理上

这里要说的是,Diffusion Model不可以直接用在文字处理上面,要做出一些改变,这里就不细说了。

Diffusion Model的核心思想

通过前面的说明你会发现,Diffusion Model的创新点和重点是把AT的优势假如到NAT中。

其实只要用到这个思路,不仅仅是Diffusion Model,其它的Model也一样会有很不错的效果表现。


以上就是对于Diffusion Model的原理剖析。

评论

  1. SuRI
    7 月前
    2024-5-09 22:26:35

    太强了!

    • 博主
      SuRI
      7 月前
      2024-5-12 0:10:57

      😂

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇