返回列表

3rd Place Solution

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

开始: 2025-06-26 结束: 2025-09-24 物理与天文 数据算法赛
第三名解决方案 - ARIEL Data Challenge 2025

第三名解决方案

移动平均 + CNN + RQ 神经网络集成

作者: moonpole (zayyyy)
发布日期: 2025-09-25
竞赛排名: 第 3 名
竞赛: ARIEL Data Challenge 2025

引言与总结

非常感谢组织者以及工作人员举办这场精彩的竞赛!我在数据工程和建模技术方面学到了很多,期待未来继续参赛!

我的方法包含以下步骤:

  • 步骤 1:预处理与校准
  • 步骤 2:信号提取
  • 步骤 3:输入 CNN 进行额外的特征提取
  • 步骤 4:将信号特征和 CNN 特征输入到有理二次神经网络(RQ NN)集成中

预处理与校准

我使用了竞赛本身提供的标准校准技术。它包括增益/偏移校正的校准,并处理非线性、暗像素、坏点和热像素。此外,在校准步骤的最后,我移除了时间维度上偏离超过 $8 \sigma$ 的信号。仅这一项添加就使我的 CV(交叉验证,仅仅是简单的 80-20 分割,结果与 LB 几乎相同;LB 反馈时间为 5-8 小时)提高了约 0.05。我在这个部分没能花太多时间,因为即使使用 joblib,对所有数据重新运行也需要 1 个多小时。

mean = np.nanmean(signal, 0)[None, :, :]
std = np.nanstd(signal, 0)[None, :, :]
signal[(signal > mean + 8.0 * std) | (signal < mean - 8.0 * std)] = np.nan

以上是推理中使用的确切添加代码。

给定包含诸如 Rs 之类的特征以及少量的特征工程,如 Rs ** 2,但它们似乎不太重要。

信号提取

相位提取是通过梯度的极值完成的。

  1. 校准后的信号除以其自身的均值
  2. 对信号应用周期为 k 的简单移动平均(airs 为 k = 88,fgs1 为 655,通过 Optuna 找到)
  3. 然后对信号的梯度应用一组移动平均,提取 p,q = argmin,argmax
  4. 然后将 p,q 向左、右移动,直到它们的梯度 within 所有梯度的某些四分位距内,以便它们覆盖整个凌日相位

然后通过每个相位的简单均值/最小值/最大值/范围/最小值除以边缘(近似凌日深度)/8 次多项式拟合等提取特征。此外,airs 数据沿频率维度(大小 356)被 array_split 成 32 块。每块然后像上面一样以相同方式处理,它们的特征被添加到我们的特征列表中。这增加了很多分辨率,并使 CV 提高了约 0.025。

输入 CNN

CNN 不关心相位;输入 simply 是第一次移动平均后的 airs 和 fgs1 信号,跨时间分成 92 块,每块取平均。额外的步骤可能包括将相位信号加入 CNN,以及将 airs/fgs1 数据分离到不同的子网中,因为它们可能没有时间对齐,但这些想法并未实施。

有很多 CNN 实例,因为它们被集成到 RQ NN 集成中。为了防止过拟合,CNN 的几乎所有层都具有相同的权重和形状。除了最大池化外,未使用其他激活函数。

有理二次神经网络集成

准备特征

一个想法 borrowed from https://arxiv.org/pdf/2407.04491

  • 我使用了相同的特征缩放,但使用 $\frac{x}{\sqrt{18+x^2/9}}$

训练

这个想法是深度集成,集成中的每个实例都以完全相同的方式训练,只是权重初始化不同。我们直接预测所有内容,即 predsigma,不使用采样或分位数回归。

  • 优化器是 AdaBelief (b1=0.999, b2=0.9998)
  • 带有平方根整形的余弦单周期学习率调度
  • 36 个集成,带有 88 个 RQ 聚类

直观地说,我选择了 soft RBF/RQ(它们表现相似,都增加了约 0.15 CV),因为有很多凌日曲线形状(提到添加了许多不同的临边昏暗模型)。所以这个 soft RQ 旨在首先将实例分类到软组中,然后在组内执行简单的线性回归。图片显示了第一个实例的第一个 RQ 聚类的分布。

训练非常独特;我不是在损失的平均值(竞赛指标)上训练,而是花更多精力训练表现较差的模型。类似于进化,最好的模型不再需要变得更好。这避免了过拟合,并使我的 CV 提高了约 0.03+。

m = jnp.median(losses, 0) # 0 是集成维度
w = jax.nn.relu(losses - m)
w = w / w.sum(0, keepdims=True) # 缩放以便每个通道被平等对待
w = jax.lax.stop_gradient(w)
return (losses * w).sum() / w.sum()

以上是训练中使用的确切代码。只有比中位数差的值才会被训练。

无效尝试与结论

  • L1, L2 正则化。
  • Dropout(在非常特定的情况下有效;不稳定)。
  • 通过随机拼接凌日数据进行数据增强(虽然我看到有些实例的相位被切断了)。
  • 用于 RBF/RQ 的费雪信息类似或基于熵的正则化,以鼓励组的不确定性更大
  • 完全可训练的马氏距离

如果在训练期间存在同一行星的两个观测值,我都使用了,但在推理期间只使用第一个观测值。NN 推理是瞬间的,数据读取占据了大部分时间。

总之,在对 underlying physics 几乎没有理解,也没有使用先进的漂移/凌日窗口去噪技术的情况下,取得了可接受的结果。

同比赛其他方案