本文创造性的使用积分函数来学习训练数据的分布,并提出
sliced score matching
解决了传统score matching
中存在的性能问题。♂️张同学 [email protected] 有问题请联系我~
已经大量应用,比如人脸生成模型中,生成的人脸已经和真实的人脸相差无几。
自然语言处理,一个语言模型本质上就是一个基于语言的生成式模型。
一般的生成模型
从一个数据集中来训练,这个数据集中有很多数据样本
生成模型是一个概率分布的集合
给定一个训练集,我们的目的是找到一个最佳的分布的模型
得到这个模型之后,我们可以进行源源不断的采样来获得一个新样本
生成式模型是一种对数据分布的表示,根据不同的表示,可以有以下生成式模型的分类:
隐式的生成式模型:GUN
生成一个随机噪声,将这个噪声通过一个神经网络映射到一个样本上,比如可以是一张图片。
显式的生成式模型
通过直接表示这个分布的概率密度函数来表示分布:显示分布
贝叶斯模型、等
这个和显式的分布有什么区别?
模型要使用概率密度的导数进行表示
KaTeX parse error: Undefined control sequence: \grad at position 2: \̲g̲r̲a̲d̲_xlog(p(x)) =>…
颜色表示概率密度函数,用向量场来表示积分函数。
结论 => 概率密度函数和积分函数,可以在可微的情况下表示同一种分布。 # 可微是为啥?
作者认为
- 概率密度函数表示的程度较低、没有积分函数灵活;
- 使用积分函数就不需要计算归一化函数了
通过训练一个积分函数的模型,
训练的损失函数是要求我们的向量场和数据分布的向量场一样
所以就需要计算两个向量场之间的距离 fisher divergence(这个距离不容易直接计算?依赖未知的积分函数对应的分布??听不懂)
=> score matching不依赖于未知的积分函数的分布,但是这个不容易计算(尤其是在神经网络的模型中)
!= 但是不能用于大规模维度的计算
score matching
算法低效的问题sliced score matching: 将高维的向量场变成一个低维的标量场。
提出目标函数:sliced fisher divergence
=> 作者的工作实现了只进行一次反向即可完成训练。
sliced score matching的实验结果极其迅速!且效果相当。
效果相似
使用积分函数构建模型来构建新样本
从积分函数中生成样本
在数据较多的地方积分场比较好,在数据量比较少的地方积分场比较差:
可以通过在原始数据中添加随机数来进行扰动
为什么要添加噪声呢?
添加噪声之后可以方便score matching计算,可以填补数据量少的地方。
所以最终的结果是使用多级噪声的原始数据进行训练。
采样时采用的是拉直满采样。
展示效果
原文献:Song Y, Ermon S. Generative modeling by estimating gradients of the data distribution[J]. arXiv preprint arXiv:1907.05600, 2019.
原作者的分享视频:https://www.techbeat.net/talk-info?id=509
GitHub源代码:https://github.com/ermongroup/ncsn?utm_source=catalyzex.com