参考与李宏毅老师diffusion model
一. denoising diffusion probabilistic model
- diffusion model是怎样运作的
- 首先sample一张噪声vector,size和图像的大小相同
- 经过多个denoise模块反复使用得到一张清晰的图片(这个过程被称为reverse process)
- denoise接受两个输入,一个是噪声图像,一个是目前的噪声程度(即当前运行的step,因为噪声程度是随着step减小而递减的)
- 如何训练一个denoise模块
每个denoise模块中包含一个noise predicter,他接受噪声图像和噪声程度两个输入,输出一张噪声图,负责预测图片中的噪声长什么样,再将噪声图与输入图像相减,最终输出。
我们需要训练一个noise predicter,这是在运行diffusion之前训练好的。首先,我们需要自己输入一张图片,然后不断的进行random sample,最后得到一张辨认不出来的图(这个过程被称为forward/diffusion process),这样就能得到训练的数据和标签(每次图像中的真实噪声)
二. stable diffusion
在每一步的denoise模块中加入了文字描述
- framework:先将文字输入进一个text encoder(clip)得到特征向量,再将特征向量与噪声feature map结合输入进入一个Generation Model得到一个中间产物(一个类似于凸图片压缩版本的feature map),最后通过一个decoder得到输出图片。三个模块独立训练,最终组合到一起
- 拓展模型
-
DALL-E模型
-
Imafen
- Encoder:相较于来说,文字的encoder带来的收益会比diffusion模块带来的收益会好很多,如下图所示曲线越靠近右下方表示模型效果越好
其中涉及了两个评价指标
- FID:将图片通过一个强有力的图像分类CNN得到latent representation,利用FID衡量生成的图片的representation和原始图片的representation的距离(假设所有分布都是Gaussians分布,该值越小越好。此过程需要大量的生成图片,FID-10K代表生成了10k张。
- CLIP sorce:clip是一个用400milion image-text pairs所训练出的大模型,利用clip sorce来表示文字和图像之间的匹配程度
- Decoder:利用已知数据集训练一个encoder,encoder负责提取latent representation,decoder负责还原。训练好之后,decoder直接用。
- generation model:首先将图片输入到encoder里面得到中间产物,不断的每一步上加上噪声,noise predicter接受步骤序号,text vector和加入了噪声之后的feature map。
三. DDPM
- VAE vs, Diffusion Model的直观体验
包括两个步骤:Training and Sampling - Traning:训练一个noise predicter
- 从一个干净的图片中采样
- 从1-T里面去一个t
- 从一个高斯白噪声里面采样一个 ε \varepsilon ε
- 红色方框表示将步骤2和步骤4得到的原图和噪声加权融合,t越小代表越接近原图,相应at越大。 ε θ \varepsilon _{\theta } εθ表示noise predicter,输入一张带有噪声的图像和步骤号(t),输出噪声图像。用原始噪声相减产生代价函数
- Sampling
- 在最开始的时候从高斯白噪声采样一个 X T X_{T} XT,T的值越大,表明越接近原始噪声
- 从T一直循环到1,表示整个denoise过程,这个过程的步骤数是一定的
- 每次从高斯白噪声里面采样一个z
- 第t-1次的x由第t次的xt减去经过加权noise predicter产生的噪声,再加权一个值,最后加上一个随机白噪声(在第二篇解释)。其中的系数只改变方差,因为所有分布都是均值为0,方差为1。
四. 数学模型
- diffusion本质想要生成一个分布无线接近于真实分布
- maximum likehood estimation(最大似然估计)
通过最大似然估计从真实分布 P d a t a ( x ) P_{data}\left(x\right) Pdata(x)中sample的多个样本和假设 P θ ( x ) P_{\theta }\left(x\right) Pθ(x)的分布是mean of Gussian来估计最好的参数 θ \theta θ
- VAE的推到过程
*这里采用最大似然估计的方法,数学原理会在后面展示。
通过式子变形,将最大化似然函数转化为最小化KL divergence
刚才介绍了最大似然估计中假设神经网络输出G(z)是mean of Gussian分布,这是因为:
- 高斯分布具有连续平滑的曲线,微小的z的变动会带到结果x的变化
- 可以简化KL计算
σ 2 \sigma ^{2} σ2是所说的每次添加的随机噪声,用来解决低密度问题
五. 一些数学背景知识
- auto-agressive and nan auto-agressive(自回归和非自回归)
参考https://www.cnblogs.com/ytxwzqin/p/12813965.html - 似然、估计和最大似然估计(参数估计(二).最大似然估计 - 知乎 (zhihu.com))
- 似然(likehood):
(1) 对于某个未知参数(对于一个network或者是noise predicter的参数不知道)的分布,但是分布形式已知(假设生成的数据是Po(x)是mean of Gussian).
(2) 需要来自经过这个分布独立同分布采样的一堆样本(Pdata(x)来自真实世界)
基于以上两个条件针对待估计的分布参数,使用这一堆已知的样本 去反推 某个参数估计值 作为这个分布参数的可能性(似然)。 - 概率(possibility)
已知分布的形式和参数,度量生成某个样本的可能性。已知因,度量果。P(样本|已知的参数),而似然是已知分布的形式和对应的已经生成样本,度量 某个未知分布参数的可能性。 已知果,度量因。P(参数|已知的样本) - 似然函数
- 最大似然估计
对与给定的观测的数据x,从所有参数中找到使得似然函数值最大的参数
对于所有观测值发生的概率,等于将每个概率连乘
- 离散随机变量的最大似然估计
在处理导数的时候,由于是连乘,首先进行log处理变为连加
- joint probability 联合概率 并集
- marginal probability 边缘概率 不考虑其他的情况下,只关注其中一个事件的结果