欢迎光临散文网 会员登陆 & 注册

快速学会Diffusion模型(不含公式推导)

2023-02-19 09:35 作者:茯苓猫不黑  | 我要投稿

前些天看到AudioLDM的语音效果非常棒,忽然想起来之前想要写一篇简单易懂的Diffusion教程,但一直没想起来写,趁着休息日赶紧写一下w。按照惯例,这篇文章的标题应该叫《三岁小可爱也能学会Diffusion模型》。


之前很流行的图片生成模型DALL-E-2,以及今天看到的音频生成模型AudioLDM的背后都是Diffusion模型。在这之前,GAN模型几乎统治了生成模型,但由于GAN模型不易训练,模型复现困难等原因大家纷纷感到扩散模型真香(其实是GAN模型卷不动了,但是用扩散模型能把GAN做过的事情重新水水论文)。


扩散模型与墨水扩散很像,但有些差别,扩散模型是在图像中不断加入噪声,加到最后一步时,整个图像都会被噪声覆盖。


从猫猫头到一张都是噪声的图片

不要将噪声当作环境中的让人感到不愉快的声音,可以简单的理解为在图像中用随机颜色画了个点。假设上面猫猫头图片的横纵都为3厘米,然后用间隔一厘米的方式划分成一个网格,取网格中的1x1小块,然后给这个小块染上一个不同的颜色,这里的小块上的不同颜色就是噪声。


所以简单理解扩散就是:在最开始是一张正常的猫猫头,然后不断的给小块染色,最后会得到一个五颜六色的图像。


扩散模型分为前向和后向,前向是给猫猫头染色的过程,后向就是将这个过程逆过来做一遍:
不断的移除五颜六色的图片上的噪声,最后得到一个猫猫头。


以上就是理论部分,下面我们来看看具体是怎么做的。

首先看一下几个符号的读音(以防有小伙伴不知道怎么读):

读作阿尔法,写作Alpha

读作贝塔,写作Beta

上面的横杠是bar,在中文环境被人习惯的读作拔,所以这个读作阿尔法拔(怪怪的)

Bar代表累乘,Alpha bar就是Alpha的累乘。



DDPM论文中,beta是一个从0.00010.002的线性值[0.0001, 0.002]

alpha等于1- beta

T代表某一时刻,已知t0时,beta0.0001, 所以t0alpha1-0.0001

下面是论文中前向的最终公式:

T时刻,图像加噪声的Xt就长这样

Beta越来越大,alpha越来越小,所以图像受alpha的影响越来越小,受到噪声的影响越来越大


逆向时,Xt-1长这样:

已知Xt就可以逐渐求到X0


前向和后向公式后面都跟着一个噪声,噪声是没办法直接知道的,所以就需要借助模型的帮忙。


所以扩散模型的训练可以简单的描述为:

训练一个模型,让它能够根据图片预测出噪声 (学习Xt与噪声的关系)


知道噪声后就可以逐渐预测出X0的图片,预测过程是这样的:

输入Xt,预测噪声,根据噪声计算Xt-1

计算Xt-2

计算Xt-3

…..

得出X0


我们能看到训练过程是比较简单的,不需要像训练GAN模型一样训练生成器和判别器,同时也很容易理解。


我们可以融入一些其他的特征,比如文字,将之融入到模型中,这样就可以根据文字输出相关的图片。DALL-E-2大概就是这样做的。


由于视频有一堆图像构成,音频也有频谱图,所以用扩散模型生成图片,音频,视频都是非常适合的。


当然在实际应用中不会直接用这样原始的模型,因为计算从XtX0的时间还是蛮长的,所以要缩减计算步数(比如DDIM)。


给红豆做了个网站用来放文章还有其他的东西(歌声合成也会放在这里),可以在通过

https://azuki.im 访问

本篇文章也在这里阅读 https://azuki.im/blog/快速学会diffusion模型/

Azuki是红豆的意思,感觉比red bean好听许多www

快速学会Diffusion模型(不含公式推导)的评论 (共 条)

分享到微博请遵守国家法律