为高斯变分混合选择先验参数

机器算法验证 机器学习 贝叶斯 事先的 高斯混合分布 变分贝叶斯
2022-03-06 06:21:30

根据模式识别和机器学习(Bishop,2007)的第 10 章,我正在实现多元高斯的普通变分混合。

贝叶斯方法需要为 Gaussian-inverse-Wishart 先验指定(超)参数:

  • α0(Dirichlet 先验的浓度参数);
  • ν0(逆Wishart分布的自由度);
  • β0(高斯逆 Wishart 分布的伪观察);
  • m0(高斯分布的平均值)。
  • W0(逆 Wishart 的比例矩阵)。

常见的选择是α0=1,ν0=d+1,β0=1,m0=0,W0=Id, 在哪里d是空间的维度。

不出所料,后验很大程度上取决于参数的选择(特别是,我发现W0对元件数量的影响很大,远多于α0)。为了m0W0,只有在数据经过某种程度标准化的情况下,上述选择才有意义。

遵循一种经验贝叶斯方法,我正在考虑设置m0W01等于数据的经验均值和经验协方差矩阵(对于后者,我可能只考虑对角线;另外,我需要将样本协方差矩阵乘以ν0)。这会是明智的吗?对其他合理的参数设置方法有什么建议吗?(没有完全分层的贝叶斯和 DPGMM)

(这里有一个类似的问题,但没有与我的问题相关的答案。)

2个回答

好的先验取决于你的实际问题——特别是,我不相信有任何真正普遍的默认值。一种好方法是尝试制定(可能是薄弱和模糊的)关于生成数据的过程的特定领域知识,例如:

  • “极不可能有超过 12 个组件”
  • “极不可能观察到大于 80 的值”

请注意,这些信息通常不应以您收集的实际数据为依据,而应以您在收集数据之前能够说的话为依据。(例如,数据以摄氏度表示室外温度,因此它们很可能位于[50,80]甚至在查看数据之前)。也可以通过您使用的计算机器来激励您的先验(例如,我将收集 100 个数据点,因此我可以安全地假设它不太可能有超过 10 个组件,因为无论如何我都没有足够的数据来定位更多组件)

其中一些陈述可以直接翻译成先验 - 例如,您可以设置m0W01这样 95% 的先前质量超过了预期的值范围。

对于不太直观的参数(或只是作为另一个稳健性检查),您可以按照贝叶斯工作流程中的可视化论文并进行先前的预测检查:这意味着您从先前的开始模拟大量新数据集。然后,您可以将它们可视化以查看它们是否

  1. 不要太频繁地违反你的期望(最好留出一些惊喜的空间,因此目标是在你的约束范围内进行 90% 或 95% 的模拟)
  2. 否则很好地涵盖了整个价值范围

如果您对性能感兴趣而不是优雅,您可以定义一些经验拟合优度度量并运行超参数搜索以最大化它。