返回列表

5th place solution: Stack-sliding and Differential Evolution

524. G2Net Detecting Continuous Gravitational Waves | g2net-detecting-continuous-gravitational-waves

开始: 2022-10-04 结束: 2023-01-03 物理与天文 数据算法赛
第5名方案:堆叠滑动与差分进化

第5名方案:堆叠滑动与差分进化

作者: Inar Timiryasov (Hidden Neural Layers 团队)

我们要感谢主办方和所有参与这次伟大活动的人!这是我们第一次参加 Kaggle 比赛,很高兴能赢得金牌。

我们是主要研究重中性轻子的理论粒子物理学家(因此团队名称使用了相同的缩写 HNL),没有引力波物理学的背景。最初的计划是提高我们的机器学习技能,但最终我们转向了基于物理学的方法。

方法思路

找到一个连续信号很容易——它只是傅里叶变换中的一个峰值。
然而,由于多普勒调制和中子星的自转减速,信号分散在多个频率仓上。
我们的方法(与 Jun Koda 的方案非常相似)旨在简化调制曲线,如下图所示:

StackSlide示意图

调制模式取决于源的位置(赤经 alpha,赤纬 delta)和频率的时间导数 F1,请参阅 pyFstat 教程

事实上,这种方法并不新颖,GW(引力波)社区以 StaSlide [1] 的名称使用过。一旦单个 SFT(短时傅里叶变换)被移动,使得信号位于一个频率仓中,我们只需将它们的功率(绝对值的平方)相加。如果调制模式与实际模式稍有偏差,信号就会分散到几个仓中,这会大大降低灵敏度。因此,必须在参数空间中扫描非常精细的网格。该方法对时间戳中的任何间隙不敏感。它对非平稳噪声也相当稳健,但对仪器谱线非常敏感。

实现细节

针对这次挑战,我们从零开始实现了该方法,先用 Python,然后用 Julia(优化的 Julia 代码比简单的 Python 实现快约 240 倍)。

处理过程遵循以下步骤:

  • 归一化数据。 使用 |SFT|² / std(Re(SFT)) 效果很好。当算法检测到强仪器谱线时,我们对此进行了一些调整,但这似乎并没有影响性能。经过这样的归一化,高斯噪声将遵循卡方分布,信号将遵循非中心卡方分布。
  • 参数空间扫描。 对于每个样本,扫描参数空间(alpha, delta, f1)并找到最大功率。以足够的分辨率扫描 alpha 和 delta 每个样本大约需要 20 秒,因此扫描 f1 对我们来说太耗时了。所以我们使用了差分进化算法,目标函数为 - max ( Power_L1 + Power_H1)。将两个探测器的功率相加极大地提高了我们的 LB 分数(从 0.747 提高到 0.804)。
  • 故障隔离。 在扫描过程中,我们的算法分析数据以隔离潜在的故障。改进该算法略微提高了我们的分数。
  • 最终预测。 简单地将逻辑函数应用于最大功率即可做出最终预测。AUC 分数在重新参数化下是不变的,因此逻辑函数的参数并不重要。

在一台 5 年前的 Linux 台式机(8 核)上处理测试集大约需要 10 个小时。

本可改进之处

  • 幅度调制。 信号强度取决于探测器相对于源的位置,以及额外的相位,这很复杂。我们希望以与该幅度调制成比例的权重对堆叠进行求和,但没有时间正确实现。如果我们理解正确的话,Jun Kodo 使用了幅度调制。较简单的滤波器(日/半日调制 ∝ exp(2πi t/T))表现不佳。
  • 故障隔离。 也许我们过于集中在隔离故障上,而故障最多只占测试集的 2%。
  • 最佳滤波。 我们注意到由于短 SFT 的时间有限,信号泄漏到了附近的频率仓。Jun Koda 利用最佳滤波缓解了这一问题,这是一个很棒的想法,让他获得了第一名。我们在研究 CNN 时最初尝试过滤 SFT,但是,我们没有时间在堆叠滑动中恢复这一努力。

早期失败的尝试

像优秀的 Kaggle 初学者一样,我们最初跳进了最高科技的解决方案:我们想使用应用于时间序列的 Transformer。我们意识到有一种现有的搜索连续引力波(CW)的方法可以生成序列数据:Viterbi 轨迹 [2]。

这次尝试失败后,我们决定降低期望,采用一种已知且经过测试的方法:卷积神经网络(特别是我们寻找抗噪

同比赛其他方案