前言
这篇文章是Score-base Model的理论文章,主要介绍了一种新的扩散模型,样本是通过朗之万动力学产生的,通过估计数据分布梯度来生成数据。由于以往的生产模型主要分为两种(提出的时候扩散模型还没有完全出来),一种是基于概率的模型,例如自回归模型,需要特殊的网络架构或者使用替代的损失;另外一种是基于GAN的生产模型,缺点是不稳定训练过程困难。于是作者提出了这种新的生成模型,存在的一个问题就是在低密度区域的数据难以估计梯度,解决方案是在不同step下加入逐渐递减的噪声可以更加准确地估计出地图的scores,优点是不需要特别设计模型架构,在训练过程不需要采样,也不需要对抗性学习的策略,产生了非常不错的生成结果。
理论推导
主要的过程分为两步,第一步是通过一个网络模型例如Unet估计出当前step对应的数据分布梯度,即score,第二步是用朗之万动力学的迭代过程使得从任意一个数据分布走到目标分布。本质是通过求score从随机采样的噪声一步步逼近目标数据的方法。下面左图对应的就是数据的概率分布图,深色代表数据的概率越大;右图对应的就是score图,即数据分布的梯度,箭头代表梯度的方向,目的就是在任意一个数据点,通过估计出的score不断一步步逼近数据概率大的地方。
score估计过程
以下式子为score估计模型的目标函数,在训练过程中通过Unet估计的当前数据的score即和当前数据分布梯度应该尽可能接近,在论文中的目标函数分为两类,这里不再详细写出来了,但是本质上都是一样的,希望两者的差最小化。
怎么计算当前数据分布梯度的真实值,下面以DDPM的噪声假设为例,参考了B站一位UP主的讲解,原视频链接如下:
扩散模型 Diffusion Model 3-1 Score-based Model_哔哩哔哩_bilibili
通过当前数据分布函数求log后再求导可以得到其表达式,观察可以得出结论score和加在原图上的噪声只是相差一个系数,也就是说估计score等同于在估计当前数据的噪声,同时也是估计数据分布的梯度。可以扩散模型提供另外一个理解噪声的方式,数据的噪声其实就是数据分布的对数梯度,扩散模型估计噪声也就是在估计数据分布的梯度,使得数据向着数据分布的方向更进一步。
朗之万动力学采样
从t-1步到t步的采样公式如下,为固定的采样步长,为随机的高斯噪声。
存在问题及解决办法
整个过程关键存在的问题是当对数据进行随机采样至低密度数据区域时,对score的估计会不准确,而且低密度数据区域占的比例较大,导致在推理的早期非常容易根据错误估计的score而导致“脱轨”。于是为了解决这个问题,更加准确地估计score,需要给原始数据加入噪声。如下图,加入噪声相当于让概率分布图“膨胀”,从而更加准确地估计score。但是又会面临另外一个问题,如果过度地加入噪声会导致原来的数据分布被污染,所以加入的噪声也不能很大。为了权衡这个问题,论文提出了加入逐渐减少的噪声,即随着推理的进行越接近于真实的噪声分布时,加入的噪声越小。
算法思路
首先,初始化一个x0,然后进入两层循环,最里面那层循环就是迭代推理的过程,外面那层循环相当于一个level,在每个level定义了加入的噪声大小和梯度的步长,每个level内设定的噪声大小进行推理,一共进行L×T步。
实验
生成图像实验
在CIFA10数据集上的生成结果,用的是FID作为指标判断,可以看到很GAN产生的结果差距不算大,有一定的可比性。
图像修复(图像半生成)实验
论文还展示了当在数据集上训练好的生成模型时,在不做额外的迁移学习的条件下,直接应用到图像修复任务上,即只给定半张图像作为条件,让模型自动生成另外半张图像并最后进行合并。可以看到下图,取得了不错的效果,在实验性上也给人一定的启发。
总结
整篇论文给出了另外一种基于数据梯度的郎之万采样扩散模型,与DDPM本质上差不多但是思路上完全不同。从另外一个角度理解了对于扩散模型来说为什么需要添加噪声来进行更好的数据生成,实际上是为了更好地对图像分布梯度进行估计,Unet或者其他模型在估计噪声时实际上就是在估计当前数据的梯度,使得向数据概率大的方向进行移动。最后,在实验部分,score-base Model在图像生成与GAN有一定的可比性,并且在image inpainting任务上,在不经过额外fine-tuning的情况下,可以在已知半幅图像作为条件的情况下对另外半幅图像进行不错的生成。