当不可解析但只能通过样本访问时,我有兴趣估计对数概率分布的梯度。
似乎有各种可能的解决方案利用最近邻、核估计等。例如,参见“密度函数梯度的估计,以及模式中的应用 - 识别”。
我对这个具体问题不是很了解,所以我正在寻找一种在统计学界广泛采用的高维分布方法,并且具有理想的计算特性。如果有该方法的开源实现,那也将非常有用。
当不可解析但只能通过样本访问时,我有兴趣估计对数概率分布的梯度。
似乎有各种可能的解决方案利用最近邻、核估计等。例如,参见“密度函数梯度的估计,以及模式中的应用 - 识别”。
我对这个具体问题不是很了解,所以我正在寻找一种在统计学界广泛采用的高维分布方法,并且具有理想的计算特性。如果有该方法的开源实现,那也将非常有用。
这个问题有时被称为分数估计,因为是任何模型关于假设位置参数的分数。在 Aapo Hyvärinen 的称为拟合(非标准化)统计模型的分数匹配技术之后,我已经看到它称为 Hyvärinen 分数。
分数估计的一些风格:
只需做任何形式的密度估计,并区分它的对数,也许像其他答案一样使用自动微分。
深度密度估计模型非常适合这种设置,因为它们已经使用了 autodiff。最近的一个很好的模型是
帕帕马卡里奥斯、帕夫拉库和穆雷。用于密度估计的掩蔽自回归流。NIPS 2018。
这种方法在计算上比 KDE 更昂贵,但可以产生出色的结果,尤其是在您拥有大量数据和 GPU 的情况下。代码可从作者处获得。
非归一化的对数密度有时称为能量。区分这些估计值之一将是分数。
通过分数匹配拟合的核指数族是分数估计的合理自然拟合。(它们很难归一化,但幸运的是,这对分数无关紧要。)有一些证据表明,至少在某些类型的密度下,这些比例在中等维度上比 KDE 更好。对于最近的计算合理的方法,请参阅
萨瑟兰(咳咳)、斯特拉斯曼、阿贝尔和格雷顿。使用 Nyström 核指数族进行高效且有原则的分数估计。人工智能统计 2018。
这些具有一些很好的理论特性,但是,作为该论文的作者之一,我认为:实际应用仍然需要大量手动工作来选择内核和超参数(我们现在正在研究的东西)。作者提供了代码,但如果您想实际尝试,请给我发电子邮件。:)
这是一种更新的方法,使用分数匹配变体直接训练网络输出能量。我不熟悉这里的实用性,但它似乎很有希望:
Saremi、Mehrjou、Schölkopf 和 Hyvärinen。深度能量估计器网络。arXiv,2018 年 5 月。
您还可以训练模型以直接输出分数。
这种方法的一个问题是,您可能会或可能不会得到实际上是某个矢量场的有效梯度的东西。下面的第一种方法肯定会遇到这个问题,我不确定后面的方法。
理论上,如果你训练一个去噪自动编码器,其中,那么你有在一些关于自动编码器架构的强度和你优化它的能力的假设下。
本文所写的估计器似乎不是特别好(参见上面的内核 exp 系列和深度能量估计器网络论文的实验结果),但它可能适用于更复杂的网络结构和更仔细的参数调整/ 等等。我不会特别推荐这种策略,但它很有趣。
阿兰和本吉奥。正则化自动编码器从数据生成分布中学到了什么。JMLR 2014。
以下论文(在第 3.1 节中)提出了一个专门针对的估计器,仅给定,基于反转 Stein 的身份(也取决于内核选择)。我不熟悉它的实际性能,但想象一下,如果你选择一个合理的内核并且只评估的分数就可以了。
李和特纳。隐式模型的梯度估计器。ICLR 2018。
这篇论文是前一篇论文的续集,它给出了一个不同的(基于 Stein 的)估计器,可以在样本外点进行评估,并提供一些理论保证。我还没有读过它,但它在列表中很高:
施、孙、朱。一种用于隐式分布梯度估计的谱方法。arXiv,2018 年 6 月。
为了让事情开始并为开源实现提供一些建议,我知道theano(通过Python访问)允许使用theano.gradient.numeric_grad(http://deeplearning.net/software/ )以数字方式计算梯度theano/library/gradient.html#module-theano.gradient)。
还有一个名为 PyMC3 的 Python 包,它允许在 Python 中实现贝叶斯方法,并且它还大量使用了 theano。它提供哈密顿蒙特卡洛:
https://pymc-devs.github.io/pymc3/notebooks/getting_started.html:
PyMC3、Stan(Stan Development Team,2014)和 R 的 LaplacesDemon 包是目前唯一提供 HMC 的 PP 包。
这可能会帮助您实施一些建议。