上文讲过了VAE的生成方法,今天继续来讲flow-based & Diffusion Model
Flow-based
之前我们讲过VAE的模型,它是训练了一个Encoder 用来从图片抽取额外资讯,又训练了一个decoder,从额外资讯生成图片,如下:
然后很快就有人发现了,Encoder和Decoder不正好是一个相反的功能么,encoder抽取,Decoder还原,所以就可以用一个Decoder,另外一个模型用它的反函数,这不就可以完成这个操作了,Flow-based的Method正是基于这样的想法:
在很多论文里把encoder抽取出来的信息叫做noise,但是不要误解,这个Noise是非常有用的。
Diffusion Model
diffusion Model的训练跟上面的模型很像,都是输入一个额外的资讯,去生成最终的图片,只不过它没有用encoder,而是执行多次的decoder的Denoise的操作,去除杂讯,一直到生成图片,通常这个过程要持续几百次甚至上千次。
资料是怎么来的
其他两个模型用现成的图片就可以训练,但是这个模型明显是需要很多张有杂讯的图片。我们可以用人工的添加杂讯的方式来生成这些训练图片:
随机生成一个杂讯(其实就是一个向量),然后加到图片上,生成一个 有杂讯的图片,然后用这个图片继续加随机杂讯,所以想要生成有杂讯的图片并不是难事,生成这些杂讯图片后,decoder需要一点点的去掉杂讯,还原为图片。
神经网络架构diffusion transformer
diffusion model的内部当然还是transformer,所以叫diffusion transformer。
所以模型实际上的运作机制我们添加多次的杂讯,然后decoder来denoise操作,直到生成原图片,这个过程可能持续上千次,这也是它为人诟病的。所以很多论文在研究的方向都是怎么减少这个过程的次数,今年爆火的sora正是基于这种架构训练而成的。