我們的目標是星辰與大海:開源用於尋找系外行星的代碼
在上周六的 2018 TensorFlow 開發者峰會上,我們為大家介紹了天體物理學家使用 TensorFlow 分析開普勒任務中的大量數據,以發現新的行星。
通過訓練神經網路分析 NASA 開普勒太空望遠鏡的數據和準確識別最有希望的行星信號,我們發現了兩顆系外行星。儘管這期間僅對大約 700 顆恆星進行了初始分析,我們仍然認為這個結果成功地證明了可以使用機器學習發現系外行星,更概括地講,這是能夠使用機器學習在各個科學領域(例如,醫療保健、量子化學和核聚變研究)取得富有意義的收穫的另一個佐證。
我們高興地發布用於處理開普勒數據、訓練神經網路模型和根據新候選行星信號進行預測的代碼:
https://github.com/tensorflow/models/tree/master/research/astronet
我們希望這次發布成為一個良好的開端,激勵大家為 NASA 的其他任務(例如,K2:開普勒的第二個任務和即將開展的凌日系外行星巡天測量衛星任務)開發類似的模型。伴隨著代碼的發布,我們也希望藉此機會深入介紹一下我們使用的模型的工作方式。
發現行星的引子
首先,我們考慮一下如何使用開普勒望遠鏡收集的數據檢測是否存在行星。下圖稱為光變曲線,它顯示了恆星在一段時間內的亮度(由開普勒的光度計測得)。當行星經過恆星前方時,它會短暫地阻擋一些光線,這會導致測量亮度下降,然後在很短的時間內再次上升,從而在光變曲線中形成「U」形下沉。
開普勒太空望遠鏡的一條光變曲線,其中的「U」形下沉指示存在一顆凌日系外行星
不過,其他天文和儀器現象也可能導致恆星的測量亮度下降,包括聯星系統、星斑、宇宙射線擊中開普勒光度計,以及儀器雜訊。
第一條光變曲線呈「V」形,告訴我們有一個非常大的物體(即另一顆恆星)經過開普勒正在觀測的恆星的前方。第二條光變曲線包含兩個亮度下降的地方,這表明存在包含一明一暗兩顆恆星的聯星系統:較大下沉由較暗恆星經過較亮恆星前方引起,較小下沉則相反。第三條光變曲線是許多其他非行星信號的一個示例,其中,恆星的測量亮度看起來有所下降
為了在開普勒數據中搜索行星,科學家們使用自動化軟體(例如開普勒數據處理管道 Kepler and K2 data processing pipeline)檢測可能由行星引起的信號,然後手動跟進,確定每個信號是一顆行星,還是誤報。為了避免因為信號過多超出其控制範圍而無從應對,科學家們對自動檢測施加了一個限制:高於固定閾值的信噪比 (Signal-to-noise ratio) 將被視為值得進行跟進分析,而低於該閾值的所有偵測結果都會被捨棄。即使施加了此限制,偵測結果的數量仍然令人生畏:截至目前,我們手動檢查了超過 30,000 個開普勒偵測信號,其中的大約 2500 個已被驗證為是真正的行星!
您可能會想:信噪比限制是否會遺漏一些真正行星信號?答案是肯定的!但是,如果天文學家需要手動跟進每一個偵測結果,那就沒必要降低閾值,因為隨著閾值的減小,誤報偵測結果的比率會迅速增大,真正行星偵測結果將變得越來越少。不過,存在一種誘人的激勵:一些像地球一樣的潛在宜居行星可能就隱藏在傳統檢測閾值之下,這些行星相對較小,並且圍繞相對較暗的恆星旋轉 - 開普勒數據中可能存在未被發現的隱藏寶藏!
機器學習方法
Google Brain 團隊將機器學習應用到各類數據中,從人類基因組到簡筆畫,再到形式數理邏輯。考慮到開普勒望遠鏡收集的數據量非常大,我們想知道如果使用機器學習分析一些之前未探索的開普勒數據,我們能夠發現什麼。為此,我們與德克薩斯大學奧斯汀分校的 Andrew Vanderburg 合作開發了一個神經網路,幫助搜索低信噪比偵測結果中有無行星。
我們訓練了一個卷積神經網路 (CNN) 來預測給定開普勒信號由行星引起的可能性。我們之所以選擇 CNN,是因為它們在具有空間和/或時間結構的其他問題(例如音頻生成和圖像分類)中非常成功
幸運的是,我們擁有 30,000 個已經由人類手動檢查和分類的開普勒信號。我們使用了其中大約 15,000 個信號(3,500 個是確認行星或者強力候選行星)訓練我們的神經網路區分行星與誤報。我們網路的輸入是相同光變曲線的兩個不同視圖:廣角視圖讓模型可以檢查光變曲線上其他地方的信號(例如,由聯星引起的第二信號),放大視圖則讓模型能夠仔細檢查所檢測信號的形狀(例如,區分「U」形信號與「V」形信號)。
完成模型的訓練後,我們研究了它學到的光變曲線特徵,看看這些特徵是否符合我們的預期。我們使用的一種技術(https://arxiv.org/abs/1311.2901)是有系統地擋住輸入光變曲線的小部分區域,並查看模型的輸出是否變化。如果被擋住,對模型決策尤為重要的區域將改變輸出預測,但是,擋住不重要的區域不會產生顯著的影響。下面是聯星產生的一條光變曲線,我們的模型正確地預測出這不是一顆行星。用綠色突出顯示的點是在被擋住時將顯著改變模型輸出預測的點,這些點與指示聯星系統的第二個「下沉」準確對應。在這些點被擋住時,模型的輸出預測將從約為 0% 的可能性是行星變成大約 40% 的可能性是行星。因此,這些點是導致模型丟棄此光變曲線的部分原因,但是,模型還使用了其他證據 - 例如,放大中心的主要下沉顯示,它實際上是「V」形,這也是聯星的跡象。
搜索新行星
在對模型的預測有信心後,我們通過在一個包含 670 顆恆星的小數據集中搜索新行星測試了它的效果。我們之所以選擇這些恆星,是因為我們已經知道它們有多顆軌道行星,我們認為其中的一些恆星系可能存在尚未被發現的其他行星。重要的是,我們在搜索中包含了天文學家之前認為低於信噪比閾值的信號。不出所料,我們的神經網路將其中的大多數信號作為虛假偵測結果丟棄,但是也確定了一些有價值的候選行星,包括我們最新發現的兩顆行星:Kepler-90 i 和 Kepler-80 g。
發現您自己的行星!
我們來看一下我們發布的代碼怎樣幫助(重新)發現 Kepler-90 i 行星。第一步是按照代碼首頁上的說明訓練模型:
https://github.com/tensorflow/models/tree/master/research/astronet
下載並處理開普勒望遠鏡的數據需要一段時間,但是在這個過程完成後,訓練模型和根據新信號進行預測就會相對較快了。一種用於查找要向模型顯示的新信號的方式是使用邊界框最小二乘 (BLS) 演算法,這種演算法會搜索亮度的周期性「框型」下沉(參見下圖)。BLS 演算法將檢測要向模型顯示的「U」形行星信號、「V」形聯星信號和許多其他類型的誤報信號。BLS 演算法存在各種免費的軟體實現,包括 VARTOOLS 和 LcTools。或者,您甚至還可以像行星獵人一樣,用肉眼查找候選行星凌日。
通過 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% 的把握認為此信號是一顆真正的行星。當然,這只是系外行星整個發現和驗證過程的一小步:模型的預測不能得出肯定結論。驗證此信號是一顆真正的系外行星的過程需要一位專業的天文學家進行大量跟進工作 - 請參見我們論文 (http://iopscience.iop.org/article/10.3847/1538-3881/aa9e09/meta) 的 6.3 和 6.4 小節了解完整詳情。在這個特殊的情況下,我們的跟進分析驗證此信號確實是一顆系外行星,這顆系外行星現在的名稱為 Kepler-90 i!
我們在這方面的工作遠未完成。我們僅僅搜索了開普勒觀測到的 200,000 顆恆星中的 670 顆 - 誰知道如果我們將技術用於整個數據集會有什麼發現。不過,在開展這項工作之前,我們想要對模型進行多處改進。正如我們在論文中討論的一樣,我們的模型在丟棄聯星和儀器誤報信號方面的表現還不如一些更成熟的計算機啟發式演算法。我們正在努力改進模型,現在模型已經開源,我們希望其他人也能加入進來!
原文鏈接:
開源用於尋找系外行星的代碼
推薦閱讀:
※1.4 卷積神經網路初探
※TensorFlow 模型 Quantization 離散化或量化
※一個基於 TensorFlow 的「顏值評分」開源項目:FaceRank
※TF使用例子-情感分類
※如何看待Face++出品的小型化網路ShuffleNet?
TAG:TensorFlow |