返回列表

1st place solution: Bayesian Inference, of course

670. NeurIPS - Ariel Data Challenge 2025 | ariel-data-challenge-2025

开始: 2025-06-26 结束: 2025-09-24 物理与天文 数据算法赛
第一名解决方案:当然是贝叶斯推断

第一名解决方案:当然是贝叶斯推断

这里没有神经网络...
作者: Jeroen Cottaar (Grandmaster)
发布时间: 2025 年 9 月 30 日
竞赛: ARIEL Data Challenge 2025

训练和提交代码链接
今年我也发布了完整的开发历史:https://github.com/jcottaar/ariel2

首先,我要感谢组织者举办了另一场精彩的比赛。我的开局相当令人沮丧(不知何故弄丢了去年的所有代码),但总体来说非常享受这个过程。如今贝叶斯方法的使用频率远不及应有的水平,我很高兴有机会在这里展示它的价值。

我的解决方案与去年非常相似;我在相关研讨会上的 NeurIPS 演讲 可以作为一个有用的介绍。我将在本帖的回复中简要讨论与去年的差异。

1. 引言

凌日分析是探测和研究系外行星最常用的方法。当行星相对于地球穿过其恒星前方时,就会发生凌日现象,遮挡部分星光。通过观察光线减少的程度(凌日深度)随波长的变化,我们可以了解行星的性质。但是,当一颗微小的行星穿过一颗巨大的恒星前方时,这个问题的信噪比非常低。我们要面临的挑战是:从未来 Ariel 卫星可能看到的合成原始光谱信号中,找到凌日深度及其置信区间(更多概述请参阅 竞赛概述)。

凌日现象示意图

乍一看,这次竞赛像是去年类似竞赛的重演,但这次的数据要现实得多。我想我弄清楚了一些变化,但不是全部——正如我们稍后将看到的那样。

注意这里涉及两个传感器:单波长 FGS 传感器和光谱 AIRS 传感器。在这篇 writeup 中,我将主要关注 AIRS 传感器。

我的总体方法包括三个步骤,如下所示:

  • 预处理:从原始传感器数据(以计数表示)开始,计算作为波长 λ 和时间 t 函数的幅度信号 S(λ,t)
  • 贝叶斯推断:从 S(λ,t) 计算推断出的凌日深度 D(λ) 及其不确定性边界 σ(λ)。此步骤使用原则性的贝叶斯方法完成。
  • 后期修正 (Fudging):将原则抛诸脑后,对 D(λ)σ(λ) 应用各种修正因子。这些修正因子的选择是为了优化训练数据上的得分。

方法流程图

在第 2、3 和 4 节中,我将依次讨论这三个步骤。我将在第 5 节以一些结束语收尾——主要讨论为什么我的方法实际上并不完美...

2. 预处理

原始数据是每个像素的计数;我们首先需要应用几个步骤来得出每个像素的光子计数。这在 主办方分享的一个 notebook 中有解释。我对 AIRS 使用 5 帧的时间 binning,对 FGS 使用 50 帧(这使它们大致同步)。热像素失效被禁用。我还添加了一个简单的宇宙射线去除。

真正改进的机会在于波长 binning 步骤,即在色散轴上求和。基线是简单求和,但数据中有几种效应使得可以做得更好。最值得注意的是著名的抖动(jitter),我们可以通过对训练数据中的所有 AIRS 帧进行 PCA(以及一些额外的预处理)最清楚地看到这一点:

PCA 抖动形状

抖动形状 presumably 对应于指向误差和散焦。

抖动形状在色散轴上的总和近似为零;这就是为什么简单求和效果还可以的原因。这也意味着任何更先进的预处理方案都必须处理抖动,因此入门门槛很高。尽管如此,这种方案可以利用数据中的几种效应:

  • 存在无效像素。
  • 噪声不完全符合泊松噪声(简单求和仅最小化了泊松噪声的噪声);较亮像素的噪声较低,且偶尔会出现噪声非常大的像素。
  • 抖动形状并不完全总和为零, presumably 是因为探测器校准不完美。
  • 存在我们想要去除的恒定背景信号。

我花了这次比赛超过一半的时间试图建立一个原则性的预处理流程来优化处理所有这些效应。不幸的是,我还没有成功——你会在代码中发现几个 disjointed 步骤试图处理上述问题。它们也往往只在某些配置和组合中起作用,我还没有完全理解。尽管如此,与简单求和相比,它仍然带来了约 0.01 的改进——我明年会解决这个问题...

3. 贝叶斯推断

现在我们有了作为波长和时间函数的光子计数,准备好使用贝叶斯推断来推断系外行星凌日深度。

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

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

应用 BI 有两个关键要素:定义先验(第 3.1 节),以及应用贝叶斯定律进行推断(第 3.2 节)。

3.1 先验定义

信号被分解为四个关键组成部分,如下所示:

信号分解图

此表显示了所有先验元素的详细描述:

先验元素 描述 调整和超参数 自由度
噪声 每个时间和波长的不相关高斯噪声 预处理中发现的标准差 1350 (FGS) + 317250 (AIRS)
恒星光谱 每个波长的不相关值 未正则化(无限 sigma) 283
漂移 时间和波长上的三阶多项式 未正则化(无限 sigma) 3 (FGS) + 12 (AIRS)
凌日窗口 使用 batman 包找到,具有以下自由参数:
- 凌日中点时间 t0 (FGS 和 AIRS 分开)
- 半长轴 sma
- 周期 P
- 轨道倾角 i
- 二次临边昏暗 u0 和 u1 (包括对波长的线性依赖)
- 凌日深度 Rp^2/Rs^2 (见下文)
使用最大似然估计 (MLE) 在训练集上学习的协方差矩阵 11 (6 个临边昏暗,2 个 t0, sma, P, i)
凌日深度:均值 单个值 轻度正则化 (sigma=0.01) 1
凌日深度:变化 分解为以下三个组成部分 使用 MLE 确定每个行星的缩放因子(这是推断过程中唯一调整的超参数) N/A
凌日深度:变化 FGS 单个高斯值 在训练集上发现的标准差 1
凌日深度:变化 AIRS 波长上的高斯过程,两个平方指数核的和 使用最大似然估计在训练集上找到的核超参数 282
凌日深度:变化 PCA 从 PCA 分析获得的固定基函数 在训练数据上找到的 PCA 形状和变化幅度(今年凌日深度似乎没有训练 - 测试群体偏移) 5

3.2 求解器

定义了先验后,找到后验“只是”应用贝叶斯定律的问题。先验完全是高斯的,这意味着推断应该只是一个矩阵运算。但像往常一样,有个陷阱。在我们的案例中,先验参数和观测值之间的关系是非线性的(因为 batman 中的非线性建模,以及因为某些先验元素是相乘而不是相加)。

为了处理这种非线性,我们在后验均值周围线性化模型。这是迭代重复的(即 应用 BI -> 围绕新的后验均值线性化 -> 重复)。每一步我们还使用梯度下降更新单个超参数(凌日深度的缩放)。

这种方法确实意味着我们需要一个不错的起点,处理如下:

  • 网格搜索:扫过凌日深度和凌日中点时间的网格以找到初始值。其他凌日参数设置为每个行星的给定近似值(无临边昏暗)。
  • BFGS:拟合漂移和所有凌日参数,使用 scipy.optimize.minimize 中实现的 BFGS。在这一步中,我们只考虑 AIRS 信号在波长上的均值。
  • 贝叶斯推断:如上所述的完整非线性 BI 求解器。我的获胜提交使用了 8 次求解器迭代;这里链接的代码只做了 4 次迭代,以适应 9 小时的提交限制(这在得分上仅损失 0.001)。

凌日深度的预测及其不确定性的协方差矩阵可以直接在后验中读出。协方差矩阵基于 200 个样本近似;这主要是去年的遗留问题,当时参数太多无法显式构建它。

如果前两步(网格搜索->BFGS)的残差可疑地高,我会应用两个额外的技巧:

  • 使用不同行星的凌日参数作为起点。
  • 尝试切除信号的前几帧和最后几帧(由于我不理解的原因,这些有时会有高残差)。

4. 后期修正 (Fudging)

上述获得的预测和不确定性仍然可以通过一些后验校准进一步改进。注意,这对于正确的贝叶斯方法来说是禁忌的——详见下文。

我们基于拟合调整每个传感器的凌日深度均值:

  • 常数偏移
  • 乘法因子
  • 对第一个临边昏暗参数的依赖

凌日深度随波长的变化在此步骤中不进行修正,即不改变。

我们基于拟合调整每个传感器的凌日深度不确定性:

  • 常数偏移
  • 凌日深度均值的乘法因子
  • 凌日深度随波长变化的乘法因子
  • 对凌日深度随波长变化幅度的依赖

总的来说,修正共有 12 个参数要拟合。这些是在完整训练集上确定的,基于优化竞赛指标的值。

5. 最终思考 - 我们遗漏了什么!

修正有助于提高分数这一事实非常令人担忧。而且这并不微妙:去年,我没有修正的解决方案本可以获得第一名;今年,我没有修正的解决方案只能排在第 20 名左右。这意味着先验中缺少了一些东西,即它不能准确描述现实(或者更准确地说是合成数据生成过程)。

我花了很多时间试图找到这个差距,但没有取得太大进展。我开始相信问题在于凌日建模,但我尝试的任何变体(例如不同的临边昏暗模型)都没有帮助。我确信找到问题所在可以将我们的分数提高到 0.700 以上。

关于这个问题的更直接证据可以通过比较同一行星的不同凌日来找到;下图显示了凌日剖面的比率(经过一些预处理包括低通滤波)。先验中的任何东西(以及我能想到的其他任何东西)都无法解释这一点。另见 此讨论代码

凌日剖面比率图
我希望组织者愿意透露一些关于此的线索,因为我认为如果没有一些帮助,我们明年也搞不清楚。

最后,我将总结一下我的解决方案的各个元素对分数的贡献:

模型变更 对私有测试分数的影响
简化的加载器(主办方的流程 + 宇宙射线去除),无抖动校正或背景去除 -0.013
不切除可疑凌日的前几帧或最后几帧 -0.002
不对凌日深度使用高斯过程,只使用 PCA
注意:此变体不涉及任何高斯过程
-0.007
不对凌日深度使用 PCA,只使用高斯过程 -0.011
禁用所有修正 - 完全依赖贝叶斯预测的结果 -0.152
(去年:-0.000...)
将所有修正替换为不确定性的单个乘法因子 -0.017
禁用基于 AIRS 变化的 sigma 预测修正 -0.005
禁用基于临边昏暗参数的均值预测修正 -0.005
不正则化先验中的 11 个凌日参数 -0.003
同比赛其他方案