返回列表

2nd place solution - pure Bayesian Inference, no deep learning

626. NeurIPS - Ariel Data Challenge 2024 | ariel-data-challenge-2024

开始: 2024-08-01 结束: 2024-10-31 物理与天文 数据算法赛
第二名解决方案 - 纯贝叶斯推断,无深度学习

第二名解决方案 - 纯贝叶斯推断,无深度学习

作者: Jeroen Cottaar (Grandmaster)

发布日期: 2024-11-01

竞赛排名: 第 2 名

寻找机会和指导:我在下面描述的贝叶斯推断方法不仅适用于竞赛——它适用于许多现实世界的问题,并且在当今以深度学习为导向的时代中被低估了。我相信我可以利用这些知识 meaningful 地影响我们的世界,但目前我正在努力寻找正确的职业道路来实现这一目标。如果您有关于如何使用贝叶斯方法产生更大影响的见解,我将感激任何指导,也许是导师形式的指导。

引言

凌日分析是探测和研究系外行星最常用的方法。当行星相对于地球穿过其恒星前方时,就会发生凌日现象,遮挡部分星光。通过观察光线减少的程度(凌日深度)作为波长的函数,我们可以了解行星的性质。但是,当一颗微小的行星穿过一颗巨大的恒星前方时,这个问题的信噪比非常低。我们要面临的挑战是:从 Ariel 卫星未来可能看到的合成原始光谱信号中找出凌日深度,包括置信区间(有关更详细的概述,请参阅 https://www.kaggle.com/competitions/ariel-data-challenge-2024/overview)。

凌日分析示意图

我对这个挑战的解决方案建立在贝叶斯推断高斯过程的相关概念之上。

贝叶斯推断 (BI) 是一种强大的统计方法,基于定义先验(对现实的统计信念)和观测(某种形式的新信息)。然后使用贝叶斯定律,我们将这些结合起来找到后验(对现实的更新信念)。在我们的案例中,这意味着:

  • 先验:影响最终测量信号的物理描述,例如将探测器噪声、漂移和凌日行为(包括凌日深度本身)描述为形式分布。
  • 观测:提供的测量值。
  • 后验:将观测值分解为先验中定义的各种元素(见下图)。从中我们可以直接读出所需的凌日深度。重要的是,后验不仅仅是一个单点,它是一个分布。通过从这个分布中采样,我们可以找到所需的置信区间(甚至是完整的协方差矩阵,尽管这里没有要求我们提供)。

对我来说,贝叶斯推断最吸引人的地方在于它让我们能够将物理思维与求解器分开。我们所有的领域知识都用于定义先验,在那里我们可以一次考虑一个物理元素;然后进行实际的贝叶斯推断以找到后验就只是“数学问题”。不一定是简单的数学——但它与我们的领域知识完全分开。

下图显示了一个示例凌日如何在后验中被分解:

后验分解示意图

我们的几个先验元素是平滑函数;例如,凌日深度是波长的函数,漂移是波长和时间的函数等。这意味着我们需要在先验中描述函数的分布。高斯过程 (GPs) 是一种自然的方法。GPs 是非参数方法,意味着它们不依赖于一组固定的基函数。相反,它们允许任何函数,但为不同的函数分配不同的概率。例如,低频漂移比高频漂移更有可能。学习 GPs 的一个很好的起点是 https://arxiv.org/abs/2009.10862

在我的这篇文章中,我将主要专注于提供模型的细节,这在 BI 框架中仅仅意味着描述先验。最后我将涵盖一些琐事(预处理以及我们实际上如何进行 BI 数学计算)。

先验定义

在本节中,我将提供一些视觉分解、各种元素的概述以及一些说明。你会看到对单独传感器(AIRS 和 FGS)的引用,但我没有真正讨论我对这些传感器的使用;AIRS 是主要传感器(光谱仪)。本节假设熟悉 GPs,但希望无论如何你都能得到要点。如果你想知道所有细节,你必须查看代码 (ariel_gp.py)。

先验元素图示 1 先验元素图示 2
先验元素 描述 调整和超参数 自由度
噪声 (Noise) 每个时间和波长的不相关高斯噪声 预处理中发现的标准差 114340
恒星光谱 (Star spectrum) 每个波长的不相关值 未正则化(无限 sigma) 283
漂移:1D (Drift: 1D) 2x 时间上的 GP,1 个用于 AIRS,1 个用于 FGS 在训练集上调整 816
漂移:2D (Drift: 2D) 时间和波长上的 GP 在训练集上调整 113928 -> 使用 KISS-GP 后为 800
凌日窗口 (Transit window) 固定函数,拟合入凌/出凌时间和宽度 在训练集上找到固定函数 3
凌日深度:均值 (Transit depth: mean) 单个值 未正则化 1
凌日深度:变化 FGS (Transit depth: variation FGS) 单个高斯值 在训练集上找到的标准差 1
凌日深度:变化 AIRS (Transit depth: variation AIRS) 波长上的 GP 在训练集上调整 282
凌日深度:PCA (Transit depth: PCA) 从 PCA 分析获得的固定基函数 PCA 形状来自测试数据的初步粗略拟合 1

细节说明:

  • 所有 GPs 使用多个平方指数核(即它们本身是多个 GPs 的组合,每个都有自己的固定长度尺度)。超参数(每个长度尺度的 sigma 值)使用各种技术在训练数据上调整(目前未包含在提交代码中)。
  • 我们在测试集上的推理期间为每个行星调整一个超参数:凌日深度的非均值部分的大小(即变化和 PCA 分量)。这本质上是应用于所有 underlying 超参数的缩放。它是使用最大似然估计找到的,并应用了最小值(MLE 倾向于过于频繁地估计为零)。
  • 所有 GPs 都作为密集 GPs 求解,除了光谱漂移(尝试这样做会导致 100k x 100k 密集矩阵);在那里我们使用 KISS-GP 来稀疏化 GP。这很有效,因为形状一开始就是非常低频的。
  • 每个行星的凌日深度之间存在共同形状,对应于大气中的特定元素。我使用不带中心化的主成分分析 (PCA) 来找到这些形状。我们不能在训练标签上这样做,因为测试集遵循非常不同的分布。所以方法是:
    • 使用除 PCA 形状外的完整模型对所有 800 个行星进行粗略拟合。
    • 对找到的 800 个凌日深度进行 PCA(1 或 2 个分量在测试集上似乎最好;我在最终提交中使用 1 个)。
    • 对所有 800 个行星重新进行拟合,这次包括我们刚刚找到的 PCA 形状。这导致最终报告的凌日深度。
  • 入凌和出凌剖面是固定函数,在训练数据上找到。我们确实拟合了三个参数:宽度(即入凌是突然的还是宽阔的)、入凌时间和出凌时间。
  • 恒星光谱是每个波长的不相关高斯分布,随时间恒定。这不是最优的;我花了很多时间试图利用这样一个事实,即一颗恒星的不同行星具有相同的恒星光谱。这在训练上效果很好 (+0.005),但在测试上是灾难性的(我最终的得分是 0.110)。
  • 在所有适当的贝叶斯建模之后,应用了一些额外的修正因子。这些在训练集上优化,并在测试集上应用额外的偏移(通过爬山法找到)。这些是:
    • 应用于所有置信区间的固定缩放因子。对于最终提交,该值约为 +10%。它对最终得分的影响有限。
    • 应用于凌日深度均值的缩放因子。对于最终提交,均值乘以约 1.0064。这是至关重要的(如果没有它,得分将低于 0.7),我不知道为什么需要它...

(编辑:我后来从 @cnumber 那里了解到,这是因为我错过了一个恒定的背景信号;如果你在代码中打开 include_later_optimization,这将得到纠正,并且这两个修正值都被禁用)

实现说明

预处理

我的一般预处理流程如下(详细信息见 ariel_support.py):

  • 遵循组织者提供的一般预处理流程,翻转 ADC 偏移符号并进行 several 加速。我还切断了 AIRS 信号的顶部 8 行和底部 8 行,这些行似乎噪声更大,反正包含的信号很少。
  • 应用图像修复 (inpainting) 以移除无效值(按行线性插值)。这相当重要,因为抖动导致信号在行之间移动,所以无效值会导致偏差。
  • 对列求和。
  • 估计入凌和出凌时间,以及噪声值。
  • 随时间分箱以减少数据大小。我在入凌和出凌附近使用较小的块以便更好地捕捉那里的剖面。

我实际上有一个更复杂的替代方案,包括抖动校正和加权列求和(以减少整体噪声)。我认为这些东西对于最佳性能是必要的,但我没有看到足够的增益来证明额外的复杂性是合理的(尽管我现在看到了一些未 selected 的第一名提交使用了这个替代流程...)

求解高斯过程

正如引言中所述,实际上在 BI 中找到后验只是“数学问题”——不再涉及领域知识。但我们当然也必须实现数学。关于这方面的一些说明:

  • 我制作了一个自定义 GP 工具箱 (gp.py)。我不确定我在多大程度上可以使用标准的工具箱如 GPyTorch,但我想确保我完全知道底层发生了什么。
  • 我们的先验是非线性的,即预测的测量值不是参数的线性函数,例如因为一些先验元素是相乘而不是相加。我迭代地处理这个问题(7 次迭代):
    • 为参数选择一些合适的起始猜测。
    • 在这些参数周围线性化先验。
    • 使用标准方法求解 GP。
    • 使用后验的均值作为下一次迭代的起点。
  • 凌日深度的大小(推理期间调整的唯一超参数)是通过对数似然的梯度下降找到的(每次迭代更新一次,如上所述)。

结论

通过应用贝叶斯推断,我们可以解开模型的复杂性。我们可以单独考虑每个物理贡献者(噪声、漂移、凌日等),并将所有这些都与求解器的实际数学分开。这导致了一个强大且灵活的模型——例如,如果我们需要添加额外的物理现象如临边昏暗,我们只接触模型的一个元素。最后,它还提供了准确的误差估计——包括每个行星的完整协方差矩阵,这对于准确的进一步建模至关重要。我确信贝叶斯推断是 Ariel 项目的正确方向。

如果你有任何关于如何使用这些贝叶斯方法增加我的影响的想法,或者仅仅认识到这个挑战,请联系我!

同比赛其他方案