DM学习笔记

本文介绍了生成模型,特别是生成对抗网络(GAN)、变分自编码器(VAE)和DM扩散模型在图像生成中的工作原理。它们通过不同的策略处理无监督学习中图像生成的挑战,包括GAN的对抗训练、VAE的向量生成和逆向建模,以及DM扩散模型的噪声添加和反向过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.前言

一个图的风格就是他所在的样本分布。随机从中采样,得到一个向量就像是一串秘钥、DNA,生成式模型从向量映射到整张图片。生成模型无外乎做的就是这个任务,只不过做的方式或者说工具不一样。

相比其他任务,生成任务更加困难。因为其在监督学习中训练集会给出一个标准答案,而图像生成的数据集里只有同类型的图片,并没有指导信息。为了解决这一问题,人们专门设计了一些用于生成图像的神经网络架构。这些架构中比较出名的有生成对抗模型(GAN)和变分自编码器(VAE)。

GAN算法思想是,既然不知道一幅图片好不好,就干脆再训练一个神经网络,用于辨别某图片是不是和训练集里的图片长得一样。生成图像的神经网络叫做生成器,鉴定图像的神经网络叫做判别器。两个网络互相对抗,共同进步。GAN的做法是让你写篇paper,你老板只告诉你写的好和不好。

VAE算法思想为使用了逆向思维:学习向量生成图像很困难,那就再同时学习怎么用图像生成向量。这样,把某图像变成向量,再用该向量生成图像,就应该得到一幅和原图像一模一样的图像。每一个向量的绘画结果有了一个标准答案,可以用一般的优化方法来指导网络的训练了。VAE中,把图像变成向量的网络叫做编码器,把向量转换回图像的网络叫做解码器。其中,解码器就是负责生成图像的模型。VAE的做法是让你看一篇文章,充分理解后,让你一字不落的默写出来。

DM扩散模型的做法则是给你一篇paper,不断往里面掺本科生毕设,让你从中找到本科生写的东西并改掉。最后给你一篇本科生的毕设让你改成一篇正经paper

1.算法详解

1.1.前向过程

训练集的图像 x 0 x_0 x0添加 T T T次噪声,使得 x T x_T xT符合标准正态分布。准确来说,「加噪声」并不是给上一时刻的图像加上噪声值,而是从一个均值与上一时刻图像相关的正态分布里采样出一幅新图像。如下面的公式所示, x t − 1 x_{t-1} xt1是上一时刻的图像, x t x_t xt是这一时刻生成的图像,该图像是从一个均值与 x t − 1 x_{t-1} xt1有关的正态分布中采样出来的。
x t ∼ N ( μ ( x t − 1 ) , σ 2 I ) x_t \sim N(\mu(x_{t-1}), \sigma^2I) xtN(μ(xt1),σ2I)
该过程为马尔科夫过程,即当前时刻的状态仅由上一时刻的状态决定,而不由更早的状态决定。加噪声过程大概可以理解为一种特殊的加权平均,对每个像素值加噪声,表示为:
x t = 1 − β t x t − 1 + β t ϵ x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt\beta_t\epsilon xt=1βt xt1+β tϵ
归纳可推导:
( 1 − β t ) ( 1 − β t − 1 ) ( 1 − β t − 2 ) x t − 3 + 1 − ( 1 − β t ) ( 1 − β t 1 ) ( 1 − β t 2 ) ϵ \sqrt{(1-\beta_{t})(1-\beta_{t-1})(1-\beta_{t-2})}x_{t-3} + \sqrt{1-(1-\beta_{t})(1-\beta_{t_1})(1-\beta_{t_2})}\epsilon (1βt)(1βt1)(1βt2) xt3+1(1βt)(1βt1)(1βt2) ϵ
α t = 1 − β t , α ˉ = ∏ i = 1 t α i \alpha_t=1-\beta_{t},\bar\alpha=\prod_{i=1}^{t}\alpha_i αt=1βt,αˉ=i=1tαi则:
x t = α ˉ t x 0 + 1 − α t ˉ ϵ x_t=\sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar{\alpha_t}}\epsilon xt=αˉt x0+1αtˉ ϵ
其中 β t \beta_t βt是一个小于1的常数,在DDPM论文中, β 1 = 1 0 − 4 \beta_1=10^{-4} β1=104 β T = 0.02 \beta_T=0.02 βT=0.02线性增长。随着 β t \beta_t βt变大, α t \alpha_t αt越小, α ˉ t \bar\alpha_t αˉt趋于0的速度越来越快,最后为0,图片也就等于 ϵ \epsilon ϵ所代表的正态分布。

1.2.反向过程

**正向过程加了T次随机噪声,反向过程为减去T次随机噪声。**大概形式为:
x t − 1 = a ⋅ x t − b ⋅ ϵ θ x_{t-1} = a \cdot x_t - b \cdot \epsilon_\theta xt1=axtbϵθ
x t − 1 x_{t-1} xt1服从正态分布,表示为
x t − 1 ∼ N ( μ ~ t , β ~ t I ) x_{t-1} \sim N(\widetilde\mu_t, \widetilde\beta_t I) xt1N(μ t,β tI)
x t − 1 x_{t-1} xt1的分布可以通过贝叶斯公式计算(其中q表示概率分布):
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(x_{t-1}|x_t,x_0) = q(x_t|x_{t-1},x_0)\frac{q(x_{t-1}|x_0)}{q(x_t|x_0)} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)
其中:

q ( x t − 1 ∣ x t , x 0 ) = N ( μ ~ t , β ~ t I ) q(x_{t-1}|x_t,x_0) = N(\widetilde\mu_t, \widetilde\beta_t I) q(xt1xt,x0)=N(μ t,β tI)为加噪声的逆操作

q ( x t ∣ x t − 1 , x 0 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1},x_0)=N(x_t;\sqrt{1-\beta_t}x_{t-1}, \beta_t I) q(xtxt1,x0)=N(xt;1βt xt1,βtI)为加噪声的分布

q ( x t ∣ x 0 ) = N ( x t ; α t ˉ x 0 , ( 1 − α ˉ t ) I ) q(x_t|x_0)=N(x_t;\sqrt{\bar{\alpha_t}}x_0, (1-\bar\alpha_t)I) q(xtx0)=N(xt;αtˉ x0,(1αˉt)I)

将全部式子带入右边并化简后:
μ ~ t = 1 α t ( x t − 1 − α t 1 − α ‾ t ϵ t ) \widetilde\mu_t = \frac{1}{\sqrt\alpha_t}(x_t - \frac{1 - \alpha_t}{\sqrt{1 - \overline\alpha_t}}\epsilon_t) μ t=α t1(xt1αt 1αtϵt)

β ~ t = 1 − α ˉ t − 1 1 − α ˉ t ⋅ β t \widetilde\beta_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \cdot \beta_t β t=1αˉt1αˉt1βt

计算中 x t − 1 x_{t-1} xt1 μ ~ t \widetilde\mu_t μ t加上一个正态分布的随机变量 β ~ t ⋅ t o r c h . r a n d n \widetilde\beta_t\cdot torch.randn β ttorch.randn

由于 α , x t \alpha,x_t α,xt全都已知,仅有噪声 ϵ \epsilon ϵ未知,因此只需要让网络预测噪声 ϵ \epsilon ϵ即可。损失函数为:
L = ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ L = ||\epsilon_t - \epsilon_\theta(x_t, t)|| L=∣∣ϵtϵθ(xt,t)∣∣

1.3.算法流程

在这里插入图片描述

1.3.1训练过程

从数据集中取一个数据 x 0 x_0 x0,随机从1,…,T中抽一个为t,随机一个噪声torch.randn用来正向过程加噪 x t = α ˉ t x 0 + 1 − α t ˉ ϵ x_t=\sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar{\alpha_t}}\epsilon xt=αˉt x0+1αtˉ ϵ

第五步中包含几个计算过程:生成加噪后的图 x t x_t xt,把 x t x_t xt输入到网络中预测噪声图 ϵ θ \epsilon_{\theta} ϵθ,计算L2损失,回传梯度。注意 x t 和 ϵ θ x_t和\epsilon_\theta xtϵθ有相同形状

1.3.2.推理过程(采样过程)

随机生成一个正态分布的噪声图 x T x_T xT,计算样本分布的均值 1 α t ( x t − 1 − α t 1 − α ‾ t ϵ t ) \frac{1}{\sqrt\alpha_t}(x_t - \frac{1 - \alpha_t}{\sqrt{1 - \overline\alpha_t}}\epsilon_t) α t1(xt1αt 1αtϵt),注意此处 x t x_t xt和均值都是一张图,都是在 x t x_t xt图像的像素上做去噪操作。均值图加上正态随机变量 z z z(也是张图),就完成了这次采样。循环T次得到 x 0 x_0 x0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值