Google开源用于寻找系外行星的代码

1,239 阅读9分钟
发布人:Google Brain 团队高级软件工程师 Chris Shallue
最近,通过训练神经网络分析 NASA 开普勒太空望远镜的数据和准确识别最有希望的行星信号,我们发现了两颗系外行星。尽管这期间仅对大约 700 颗恒星进行了初始分析,我们仍然认为这个结果成功地证明了可以使用机器学习发现系外行星,更概括地讲,这是能够使用机器学习在各个科学领域(例如,医疗保健量子化学核聚变研究)取得富有意义的收获的另一个佐证。

我们高兴地发布用于处理开普勒数据、训练神经网络模型和根据新候选行星信号进行预测的代码。我们希望这次发布成为一个良好的开端,激励大家为 NASA 的其他任务(例如,K2(开普勒的第二个任务)和即将开展的 凌日系外行星巡天测量卫星任务)开发类似模型。伴随着代码的发布,我们也希望借此机会深入介绍一下我们使用的模型的工作方式。

发现行星的引子
首先,我们考虑一下如何使用开普勒望远镜收集的数据检测是否存在行星。下图称为光变曲线,它显示了恒星在一段时间内的亮度(由开普勒的光度计测得)。当行星经过恒星前方时,它会短暂地阻挡一些光线,这会导致测量亮度下降,然后在很短的时间内再次上升,从而在光变曲线中形成“U”形下沉。
开普勒太空望远镜的一条光变曲线,其中的“U”形下沉指示存在一颗凌日系外行星。
不过,其他天文和仪器现象也可能导致恒星的测量亮度下降,包括联星系统、星斑宇宙射线击中开普勒光度计,以及仪器噪声。
第一条光变曲线呈“V”形,告诉我们有一个非常大的物体(即另一颗恒星)经过开普勒正在观测的恒星的前方。第二条光变曲线包含两个亮度下降的地方,这表明存在包含一明一暗两颗恒星的联星系统:较大下沉由较暗恒星经过较亮恒星前方引起,较小下沉则相反。第三条光变曲线是许多其他非行星信号的一个示例,其中,恒星的测量亮度看起来有所下降。
为了在开普勒数据中搜索行星,科学家们使用自动化软件(例如开普勒数据处理管道)检测可能由行星引起的信号,然后手动跟进,确定每个信号是一颗行星,还是误报。为了避免因为信号过多超出其控制范围而无从应对,科学家们对自动检测施加了一个限制:高于固定阈值的信噪比将被视为值得进行跟进分析,而低于该阈值的所有侦测结果都会被舍弃。即使施加了此限制,侦测结果的数量仍然令人生畏:截至目前,我们手动检查了超过 30,000 个开普勒侦测信号,其中的大约 2500 个已被验证为是真正的行星!

您可能会想:信噪比限制是否会遗漏一些真正行星信号?答案是肯定的!但是,如果天文学家需要手动跟进每一个侦测结果,那就没必要降低阈值,因为随着阈值的减小,误报侦测结果的比率会迅速增大,真正行星侦测结果将变得越来越少。不过,存在一种诱人的激励:一些像地球一样的潜在宜居行星可能就隐藏在传统检测阈值之下,这些行星相对较小,并且围绕相对较暗的恒星旋转 - 开普勒数据中可能存在未被发现的隐藏宝藏!

机器学习方法
Google Brain 团队将机器学习应用到各类数据中,从人类基因组简笔画,再到 形式数理逻辑。考虑到开普勒望远镜收集的数据量非常大,我们想知道如果使用机器学习分析一些之前未探索的开普勒数据,我们能够发现什么。为此,我们与德克萨斯大学奥斯汀分校的 Andrew Vanderburg 合作开发了一个神经网络,帮助搜索低信噪比侦测结果中有无行星。
我们训练了一个卷积神经网络 (CNN) 来预测给定开普勒信号由行星引起的可能性。我们之所以选择 CNN,是因为它们在具有空间和/或时间结构的其他问题(例如音频生成图像分类)中非常成功。
幸运的是,我们拥有 30,000 个已经由人类手动检查和分类的开普勒信号。我们使用了其中大约 15,000 个信号(3,500 个是确认行星或者强力候选行星)训练我们的神经网络区分行星与误报。我们网络的输入是相同光变曲线的两个不同视图:广角视图让模型可以检查光变曲线上其他地方的信号(例如,由联星引起的第二信号),放大视图则让模型能够仔细检查所检测信号的形状(例如,区分“U”形信号与“V”形信号)。

完成模型的训练后,我们研究了它学到的光变曲线特征,看看这些特征是否符合我们的预期。我们使用的一种技术(在 这篇论文中首次提出)是有系统地挡住输入光变曲线的小部分区域,并查看模型的输出是否变化。如果被挡住,对模型决策尤为重要的区域将改变输出预测,但是,挡住不重要的区域不会产生显著的影响。下面是联星产生的一条光变曲线,我们的模型正确地预测出这不是一颗行星。用绿色突出显示的点是在被挡住时将显著改变模型输出预测的点,这些点与指示联星系统的第二个“下沉”准确对应。在这些点被挡住时,模型的输出预测将从约为 0% 的可能性是行星变成大约 40% 的可能性是行星。因此,这些点是导致模型丢弃此光变曲线的部分原因,但是,模型还使用了其他证据 - 例如,放大中心的主要下沉显示,它实际上是“V”形,这也是联星的迹象。
搜索新行星
在对模型的预测有信心后,我们通过在一个包含 670 颗恒星的小数据集中搜索新行星测试了它的效果。我们之所以选择这些恒星,是因为我们已经知道它们有多颗轨道行星,我们认为其中的一些恒星系可能存在尚未被发现的其他行星。重要的是,我们在搜索中包含了天文学家之前认为低于信噪比阈值的信号。不出所料,我们的神经网络将其中的大多数信号作为虚假侦测结果丢弃,但是也确定了一些有价值的候选行星,包括我们最新发现的两颗行星:Kepler-90 i 和 Kepler-80 g

发现您自己的行星!
我们来看一下今天发布的代码怎样帮助(重新)发现 Kepler-90 i 行星。第一步是按照代码首页上的说明训练模型。下载并处理开普勒望远镜的数据需要一段时间,但是在这个过程完成后,训练模型和根据新信号进行预测就会相对较快了。一种用于查找要向模型显示的新信号的方式是使用 边界框最小二乘 (BLS) 算法,这种算法会搜索亮度的周期性“框型”下沉(参见下图)。BLS 算法将检测要向模型显示的“U”形行星信号、“V”形联星信号和许多其他类型的误报信号。BLS 算法存在各种免费的软件实现,包括 VARTOOLSLcTools。或者,您甚至还可以像 行星猎人一样,用肉眼查找候选行星凌日。
通过 BLS 算法在 Kepler 90 恒星的光变曲线中获得的一个低信噪比侦测结果。该侦测结果的周期为 14.44912 天,持续时间为 2.70408 小时(0.11267 天),从 2009 年(开普勒望远镜的发射年份)1 月 1 日中午 12 点后的 2.2 天开始。
为了通过我们的训练模型运行这个侦测信号,我们只需执行下面的命令:
python predict.py  --kepler_id=11442793 --period=14.44912 --t0=2.2
--duration=0.11267 --kepler_data_dir=$HOME/astronet/kepler 
--output_image_file=$HOME/astronet/kepler-90i.png 
--model_dir=$HOME/astronet/model
命令的输出为 prediction = 0.94,表示模型有 94% 的把握认为此信号是一颗真正的行星。当然,这只是系外行星整个发现和验证过程的一小步:模型的预测不能得出肯定结论。验证此信号是一颗真正的系外行星的过程需要一位专业的天文学家进行大量跟进工作 - 请参见我们论文的 6.3 和 6.4 小节了解完整详情。在这个特殊的情况下,我们的跟进分析验证此信号确实是一颗系外行星,这颗系外行星现在的名称为 Kepler-90 i!
我们在这方面的工作远未完成。我们仅仅搜索了开普勒观测到的 200,000 颗恒星中的 670 颗 - 谁知道如果我们将技术用于整个数据集会有什么发现。不过,在开展这项工作之前,我们想要对模型进行多处改进。正如我们在论文中讨论的一样,我们的模型在丢弃联星和仪器误报信号方面的表现还不如一些更成熟的计算机启发式算法。我们正在努力改进模型,现在模型已经开源,我们希望其他人也能加入进来!

如果您想要了解详情,Chris 在最新一集的 This Week In Machine Learning & AI 中讨论了他的工作。