NCSN
已知很多样本 ,要估计 的概率分布,待学习参数为 。然而问题是归一化常数 很难求,因为没办法积分。
一般有两种解决方案,要么控制模型结构使得 能处理,要么近似估计。而 Score-Based 使用 score function 绕开了这个问题:
然后就只需要训练一个函数 来拟合 ,训练目标是最小化:
我们不知道 ,但这个可以通过 score matching 方法获得,一般两种方法: denoising score matching 或者 sliced score matching,NCSN 用的是前者去噪分数匹配。
然后就可以用类似退火爬山的朗之万动力学,通过一步步更新来采样了:
其中 用于增加随机性不至于卡在局部最小, 使得步长从大到小最后收敛,而 是通过 来拟合的。
还有问题是 较小的地方没有梯度数据,使得这些地方更新不对,解决方法是在数据样本 上加噪声,类似于模糊滤镜,这样样本就扩散到稀疏的地方了,但准确性降低,因此让模糊程度从高到低,这可以通过直接在样本上加噪实现:
其中 是模糊程度,通过这些样本得到 并训练得到 。
这时候的训练目标是:
其中 是权重参数,用来平衡不同模糊程度的贡献。实际生成时,使模糊程度从大到小递减,这样可以前期走对方向,后期走得精准。
SDE
不同噪声程度划分得越细效果当然越好,所以使用随机微分方程使得离散的噪声程度变为连续的。
前向过程:
其中 叫 drift coefficient ,对应离散形式的 , 叫 diffusion coefficient ,对应离散形式的 。 可以当作无穷小的噪声。前半部分描述采样运动,后半部分描述布朗运动。
反向过程:
类似离散版本,我们可以训练一个 :
其中 ,用于平衡贡献,选择 效果较好。
TODO:怎么得出反向过程公式和 的, 是什么?