编者按:去年12月,谷歌和NASA利用机器学习发现了两颗新的系外行星:开普勒80g和开普勒90i,后者正是开普勒90恒星的第八颗行星,这也使开普勒90成为太阳系外的第一个拥有8颗行星的星系。今天,谷歌大脑团队将这一机器学习的代码公开出来,并发表文章介绍其研究过程。以下是论智对原文的编译。
最近,我们通过训练神经网络,分析NASA开普勒太空望远镜的数据,确定了两颗系外行星的信号。尽管这只是对大约700颗行星的初步分析,但我们认为这是对用机器学习发现系外行星的有力证据,同时还是使用机器学习在各学科中取得有意义成果的另一个例子。
今天,我们很高兴将处理开普勒数据、训练神经网络模型和预测新行星信号的代码发布出来。我们希望这个版本为NASA的其他任务提供帮助,例如K2(开普勒的第二个任务)和即将进行的“凌日系外行星巡天卫星(TESS)”任务。除了发布代码,我们还希望借此机会深入了解模型的工作原理。
首先,让我们先看看开普勒望远镜收集到的数据是如何被用于检测行星的。下面的图被称为光变曲线(light curve),它体现的是恒星不同时间点的亮度变化(由开普勒光度测定器测量)。当一颗行星经过恒星前方,它会暂时挡住一部分光线,使亮度下降,之后又会增加,最终在光变曲线图中形成一个U型槽。
但是,其他天文现象和设备原因也会引起测量光线的减少,其中包括双子星系统、星斑、光度测定器收到宇宙射线的影响以及设备噪音。
为了在开普勒数据中寻找行星,科学家用自动软件(开普勒数据处理pipeline)探寻可能由行星发出的信号,然后手动确定哪些信号是正确的,哪些是误报。为了避免信号过多,科学家们对自动检测加了一个截断点(cutoff):那些信噪比超过固定阈值的将用于后续分析,而低于阈值的探测数据被丢弃。即使有了这个截止点,检测到的次数仍然非常多:到目前为止,研究人员已经手动检测了30000个开普勒信号,其中有2500个被证实是行星。
也许你会想:信噪比的截断点是否会漏掉一些真实的行星信号?答案是肯定的!但是,如果天文学系需要手动检测每次收集到的信号,那么就不值得降低阈值了,因为一旦这样做,误报率就会立即增加,行星就非常难发现了。然而,这种方法也有令人激动的一面:一些潜在的宜居星球相对较小,又在暗星的轨道周围运动,它们的信噪比可能在传统阈值之下。所以开普勒数据中也许有未发现的宝石!
谷歌大脑团队在多种数据上都运用了机器学习方法,从人类基因组到绘画再到形式数学逻辑(formal mathematics logistic)。考虑到开普勒望远镜收集到的庞大数据,如果用机器学习去预处理未被探测的数据会有何收获?为了弄清楚,我们和美国德克萨斯州大学奥斯汀分校的Andrew Vanderburg合作开发了一个神经网络,用来寻找低信噪比中的行星信号。
用CNN预测信号来源
幸运的是,我们已经得到了30000个由人类手动检查并分类的开普勒信号。我们利用其中的约15000个作为子集,在这之中,已经有3500个信号被证实是行星或有可能是行星。这15000个数据组成的子集将被用来训练神经网络,把误报的信号区分开来。输入网络的是同一张光变曲线的两个单独视图:一张完整视图,模型可以检查光变曲线上其他地方的信号(例如由双子星形成的第二个凹陷处信号),一张放大了的视图,能让模型仔细检查到信号的形状(例如将U型信号和V型信号区分开来)。
一旦模型训练完成,我们就用它来研究光变曲线的特征,看它们是否符合期望。我们使用的一种技术是之前提到过的,遮挡输入光线的一小片区域,查看模型的输出是否会改变。如果遮挡了对模型决策特别重要的区域,则会改变输出预测;如果遮挡不重要的区域,则不会对结果产生显著影响。下面双子星产生的光变曲线就被模型正确预测出不是行星。
绿色的点是对输出结果有决定性影响的区域,这里表示光线被遮挡,反映出是双子星造成的第二次遮挡。当这些点被遮挡时,模型的输出从0%的行星概率升至40%。所以,这些绿色点是模型判定其不是行星的重要证据。不过除此之外还有其他证据证明这不是行星,比如,当放大整张图后,可以发现第一个凹陷区呈V型,也暗示了这是个双子星系统。
在我们对模型有了足够的信心之后,我们用它测试在一个有670颗恒星的数据集中寻找一颗新行星。我们之所以选择这670颗恒星,是因为它们周围已知有多个行星。我们相信这些恒星中也许有未被发现的行星。重要的是,我们仍然考虑低于阈值的信号。最终结果如所期待的那样,神经网络过滤了大多数信号,但仍保留了可能是行星的信号,包括两个刚刚发现的行星:开普勒-90i和开普勒80g。
让我们看看今天发布的代码怎样能够发现行星。第一部是遵循代码主页的指导训练模型。下载并处理开普勒望远镜数据可能需要一会儿,当它完成后,训练模型和进行预测的速度就非常快了。在模型中找出新信号的一种方法是利用一种名叫Box Least Squares(BLS)的算法,它能在光变曲线图中寻找出盒型凹陷(如下图)。BLS算法能检测出U型行星信号、V型双子星信号以及其他类型的信号。BLS算法有很多免费的安装软件,包括VARTOOLS和LcTools。不过,除了利用算法,你还可以用眼睛查找行星信号。
在训练好的模型上寻找信号,只需执行以下指令:
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。
我们的工作到此并未结束,我们只研究了20万颗恒星中的670颗,在所有工作完成之前,研究的方法和模型还有待改进。正如论文中所提到的,模型在检测双子星和设备干扰时还不够完美。我们正努力改善模型,同时开源代码,希望其他人对此亦有贡献。
原文地址:research.googleblog.com/2018/03/open-sourcing-hunt-for-exoplanets.html
代码地址:github.com/tensorflow/models/tree/master/research/astronet
论文地址:arxiv.org/abs/1311.2901