Stable diffusion文生图大模子——隐扩散模子原理分析

[复制链接]
发表于 2026-2-20 00:02:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、前言

本篇文章,我们将讲这些年非常盛行的文生图大模子——Stable Diffusion。该模子也不难,乃至说很简单。创新点也相对较少,假如你学会了我从前的文章讲过的模子,学习这个也自然水到渠成!
视频:[Stable diffusion天生大模子——隐扩散模子原理分析-哔哩哔哩]
演示:

2、Stable Diffusion

2.1、隐空间扩散

在传统的扩散模子中,都是一上来就对图像就行加噪去噪。这种做法有一些难以克制的题目——服从。一方面,图像的像素假如非常大,那么盘算量将是不可思议地;另一方面,我们在VAE那里说到过,图像之中,总是存在一些冗余地部门。我们直接拿图像去扩散,相称于也把那些冗余的部门也一起盘算了。
以是,作者选择先把图像编码成一个维度相对较小的编码向量(或特性图)。然后再训练扩散模子
那么,该怎样举行编码呢?答案就是利用VAE(具体请看VAE变分自编码器原理)。总所周知,利用VAE可以把图像编码成维度相对较小的向量(或特性图)
除此之外,就是利用离散化的编码器——VQGAN(具体请看VQGAN原理分析)
这两种方法,都可以举行图像的压缩。压缩完成之后,在举行扩散过程

此中编码器对应图中的                              E                          \mathcal{E}               E,解码器对应                              D                          \mathcal{D}               D。也就是说,先把图像x通过                              E                          \mathcal{E}               E举行编码,再举行Diffusion Process
2.2、条件天生

假如你用过Stable Diffusion。就肯定知道它可以举行条件天生。那么该怎样把条件引入Diffusion内里呢?在Diffusion系列内里,我着实从没有讲过怎样举行条件天生。
着实举行条件天生有一个很简单的明白方式。那就是直接接纳下面的丧失函数
                                                                              L                                  =                                  ∣                                  ∣                                  ϵ                                  −                                               ϵ                                     θ                                              (                                               x                                     t                                              ,                                  t                                  ,                                  y                                  )                                  ∣                                               ∣                                     2                                                                                 (1)                                                  L=||\epsilon-\epsilon_\theta(x_t,t,y)||^2\tag{1}                   L=∣∣ϵ−ϵθ​(xt​,t,y)∣∣2(1)
为什么可以如许?我们回想一下DDPM内里的丧失函数
                                                                              L                                  =                                  ∣                                  ∣                                  ϵ                                  −                                               ϵ                                     θ                                              (                                               x                                     t                                              ,                                  t                                  )                                  ∣                                               ∣                                     2                                                                                 (2)                                                  L=||\epsilon-\epsilon_\theta(x_t,t)||^2\tag{2}                   L=∣∣ϵ−ϵθ​(xt​,t)∣∣2(2)
区别在那里,那就是Eq.(1)内里神经网络的输入多加了一个条件y。这个条件y可以是标签,文本等等信息。
为什么多加了一个y就可以举行条件天生?
我们从一个比力简单的方面的来明白。在DDPM内里,我们层提到三种推测方式——均值、原始图像,噪声
我们终极只利用噪声而已。那假如我们推测的是原始图像呢?
                                    L                         =                         ∣                         ∣                                   x                            0                                  −                                   x                            θ                                  (                                   x                            t                                  ,                         t                         )                         ∣                                   ∣                            2                                        L=||x_0-x_\theta(x_t,t)||^2                   L=∣∣x0​−xθ​(xt​,t)∣∣2
假如我们到场一个条件y
                                    L                         =                         ∣                         ∣                                   x                            0                                  −                                   x                            θ                                  (                                   x                            t                                  ,                         t                         ,                         y                         )                         ∣                                   ∣                            2                                        L=||x_0-x_\theta(x_t,t,y)||^2                   L=∣∣x0​−xθ​(xt​,t,y)∣∣2
到场的一个条件y(比如假设它是图像的种别标签),这就意味着什么呢?意味着我们告诉了神经网络图像                                       x                         0                                  x_0               x0​的种别是什么。那么让神经网络去推测                                       x                         0                                  x_0               x0​,肯定会相对轻易,由于神经网络已经知道了图像的种别,清除了其他种别图像的大概。
以是,对于推测噪声也是同理。那么Eq.(1)也是同理,到场一个条件y。更加有利于去噪。
2.3、丧失函数和网络结构

对于DIffusion的网络结构,着实我从来没说过。我只讲了用神经网络去推测噪声。对网络结构这些东西,我以后筹划出一个单独的系列来讲。
现在紧张讲模子原理。但为了完备性。我照旧简单讲一下吧。万一有些读者已经有这些方面的根本呢
那么网络的结构该怎样呢?在DDPM中,着实用的是U-Net结构的神经网络去推测噪声。在Stable Diffusion内里的,也相沿了这个结构。
我们前面说过,要给推测噪声的神经网络到场条件。但我们不是纯粹的把条件直接送进去。而是对条件举行编码表征之后再送进去。我们用                                       T                         θ                              (                      y                      )                          \mathcal{T}_\theta(y)               Tθ​(y)表现把条件编码成对应的中心表征。以是丧失函数酿成了如许
                                              L                                       L                               D                               M                                            =                                   E                                                   E                                  (                                  x                                  )                                          ,                               ϵ                               ∼                               N                               (                               0                               ,                               1                               )                               ,                               t                                                      [                            ∣                            ∣                            ϵ                            −                                       ϵ                               θ                                      (                                       z                               t                                      ,                            t                            ,                                       T                               θ                                      (                            y                            )                            ∣                                       ∣                               2                                      ]                                        L_{LDM}=\mathbb{E}_{{\mathcal{E}(x)},\epsilon\sim \mathcal{N}(0,1),t}\left[||\epsilon-\epsilon_\theta(z_t,t,\mathcal{T}_\theta(y)||^2\right]                   LLDM​=EE(x),ϵ∼N(0,1),t​[∣∣ϵ−ϵθ​(zt​,t,Tθ​(y)∣∣2]
此中,                                       z                         t                                  z_t               zt​是                              E                          \mathcal{E}               E编码得到图像加噪之后的效果。t代表时候。
除此之外,假如你看了上面那张图,就能看到有一个Q,K,V的东西。那着实自留意力机制。这玩意儿是Transformer内里的。本来属于自然语言处置惩罚那里的。我筹划以后分出一个系列讲自然语言处置惩罚。
在这里我简单讲一下,假如你会Transformer,应该不会陌生。假如不会,你听了估计也不会明白,我在这里不深入讲。讲到自然语言处置惩罚再讲
下面我们来简单过一下。对于内里的Q,K,V。盘算如下
                                    Q                         =                                   W                            Q                                       (                               i                               )                                            ⋅                                   ϕ                            i                                  (                                   z                            t                                  )                         ,                         K                         =                                   W                            k                                       (                               i                               )                                            ⋅                                   T                            θ                                  (                         y                         )                         ,                         V                         =                                   W                            V                                       (                               i                               )                                            ⋅                                   T                            θ                                  (                         y                         )                               Q=W^{(i)}_Q\cdot\phi_i(z_t),K=W_k^{(i)}\cdot \mathcal{T}_\theta(y),V=W_V^{(i)}\cdot\mathcal{T_{\theta}}(y)                   Q=WQ(i)​⋅ϕi​(zt​),K=Wk(i)​⋅Tθ​(y),V=WV(i)​⋅Tθ​(y)
此中,                                       ϕ                         i                              (                               z                         t                              )                          \phi_i(z_t)               ϕi​(zt​)是推测                                       ϵ                         θ                                  \epsilon_\theta               ϵθ​的U-Net的中心表征。
那么,内里的                                       T                         θ                                  \mathcal{T}_\theta               Tθ​究竟是什么呢?这要看具体环境,要根据具体特定范畴而选择。比如当y是文本时,我们可以利用Transformer,大概利用CLIP等等。要根据具体环境而定。
2.4、训练

对于Stable Diffusion的训练。DIffusion和编码解码部门,并不是并行训练。
而是先训练好一个编码器息争码器。然后在训练Diffusion。对于条件的编码,一样平常环境下也是要一个训练好的,而不是跟着Diffusion一起训练。
2.5、采样

很简单,从高斯分布中采样一个                                       z                         T                                  z_T               zT​,然后设置条件。渐渐去噪。到了                                       z                         0                                  z_0               z0​之后,利用解码器,就可以得到图像
3、竣事

本篇文章到此竣事,如有题目,还望指出。阿里嘎多!

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表