DIY發現新行星操作指南 | 谷歌開源了行星發現代碼
原作 Chris Shallue
Root 編譯自 Google Research Blog量子位 出品 | 公眾號 QbitAI
去年12月,谷歌大腦用機器學習發現了兩個系外行星,分別是開普勒80 g和開普勒90 i。
開普勒90 i還是顆類地行星誒!
這還只是在分析了670個恆星的數據之後的收穫。而已有觀察數據的恆星有20萬個。
能不能從中刨出更多新行星,尤其是類地行星,得靠更多的人。
所以,谷歌大腦研究員Chris Shallue今天開源了發現新行星的AstroNet演算法。
借這次開源的機會,谷歌大腦順便給大家講講該演算法模型的原理。
發現新行星的思路
開普勒望遠鏡,會收集恆星亮度變化的數據。
當一顆行星經過恆星前方時,它會暫時阻擋一些光線,導致開普勒光度計測的亮度下降。
等行星繞遠之後,亮度會再爬升回原來的水平。所以從亮度變化的數據圖上,我們可以看到一個「U形」凹陷。
不過,恆星亮度降低也還有其他的可能。比如說雙恆星,恆星斑,開普勒光度計被宇宙射線干擾了或儀器本身的雜訊。
光度曲線有「V形」的話,意味著一個非常大的物體(即另一顆恆星)在開普勒觀測的恆星前面經過;如果光度曲線有兩次亮度下降的話,那麼說明這是一個較亮和一顆較淡的雙恆星系統,較大的亮度下降,是由較暗的那顆恆星跑到較亮的那顆前面去了,反之則反;最下方那個光度曲線的變化原因不詳。
本來,從開普勒資料庫里找行星的辦法是這樣的↓
天文學家們用軟體,自動批量處理開普勒數據,尋找光度曲線中的U形信號。
只有那些信噪比超過一定的閾值,是值得後續分析的信號,他們才會手動跟蹤,再確認篩選出來的信號是不是行星。
而低於閾值的所有信號都扔掉。
不過即使設置了閾值,再次確認的工作量還是很龐大。到目前為止,手動判斷的信號超過30000個,但只有大概2500個才是行星。
也就是說,每12個已被軟體篩選過的信號里,只有一個是天文學家要找的行星。
還有另外一種情況,有一些真正行星的信號被軟體的閾值給篩掉了。這相當於得到了假陰性的結果。
完全有可能存在著一些行星,是在軟體篩選閾值以下的。比如地球,因為圍繞著相對較暗的恆星,就低於閾值。
試試機器學習大法?
開普勒近四年來觀察了約20萬顆恆星,每30分鐘拍攝一張照片,得到了140億個數據。這就意味著有大約2萬億個可能的行星!即使用當前最強的算力去分析這些信息,也很費時費力。
為了加快這個過程,提高效率,谷歌大腦嘗試用機器學習,分析那些還沒處理過的開普勒數據。
與德州大學奧斯丁分校的Andrew Vanderburg合作,谷歌大腦研發了發現新行星的神經網路AstroNet。
通過訓練CNN,預測給定的開普勒信號是不是行星。之所以選CNN,是因為它們在其他空間、時間結構類的問題上表現不錯,比如說,音頻生成,圖像分類等。
目前,有3萬個開普勒數據是已經被人類手動處理過的,並有最終的判斷結果,這等於說已經有了標註好的訓練集。
谷歌拿了其中的一半數據作訓練集,其中有約3500個是經過驗證的行星或強烈的行星候選者,來訓練AstroNet神經網路,怎麼區分行星。
AstroNet模型的輸入數據是同一光度曲線的兩個獨立視圖:一個寬視圖,一個放大視圖。
寬視圖檢查光度曲線上是否有除了U形以外的其他信號,像前面提到過的,雙恆星系統就有第二次光度降低;放大視圖,可仔細檢測信號的形狀,看是U形還是V形。
訓練完成之後,谷歌開始研究哪些光度曲線的特徵重度影響AstroNet演算法最後的判斷結果。
由此來看,這些特徵與之前討論的行星發現原理是否相符。
方法就是,遮擋住輸入數據光度曲線的一小部分區域,看輸出結果會不會變。
那些對模型決策特別重要的區域,如果它們被遮擋的話,則演算法會認為,這個信號是行星的可能性大大減小。
而遮擋不重要的區域就不會產生顯著的影響。
以下,是AstroNet準確預測出該光度曲線對應的是雙恆星,而不是行星。
綠點,指的是這些點被遮擋時,預測結果會反轉。
比如說,一個雙恆星系統的第二個U形被遮擋時,AstroNet會改變原有預測結果:原先,認為這個是行星的概率是0%,被遮擋之後,其行星概率飆升到40%。
那麼就可以說明,這部分的綠點,是AstroNet否認這條光度曲線對應的星是行星的充分不必要依據。
當然,如果光度下降部分,放大之後實際上是個「V形」,這也表明這是個雙恆星,而不是行星。
AstroNet立功,找到之前被漏掉的行星
在確認了AstroNet的行星判斷依據和谷歌之前討論的原理一致之後,谷歌就可以放心地用AstroNet了。
為了測試AstroNet的效果,谷歌用一組670顆恆星的數據跑一遍,看能不能發現被之前方法閾值錯漏掉的行星。
選這些恆星,是因為已知這些恆星有多個行星了。也許,這些恆星還有些尚未被發現的行星。
谷歌大腦把搜索條件放寬,比之前天文學家設置的信噪比閾值要更低。然後才發現了開普勒90 i和開普勒80 g。
泥萌要不要自己動手試試?
來,我們走一遍開普勒-90 i發現的過程。
回頭泥萌可以參考這個找新的。
第一步,是按照代碼主頁上的說明來訓練模型。
從開普勒望遠鏡下載和處理數據會花一段時間,這之後模型的訓練、新數據的預測速度會相對較快。
使用一種Box Least Squares(BLS)的演算法,篩查出新輸入數據中的「U形」行星信號。 BLS演算法可用VARTOOLS、LcTools等軟體實現。
這個圖就是開普勒90 i的光度曲線。當時BLS演算法就檢測到了這個持續時間長達2.7小時的U形信號,每14.4天出現一次。該數據取自開普勒從2009年1月3號16:48開始記錄的信號。
為了用已訓練好的模型運行這個檢測信號,只需執行以下命令:
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
輸出的預測結果是0.94,這意味著該模型判斷,該信號有94%的可能性是真的行星。
當然,這只是發現和驗證系外行星的整個過程中的一小步:這個模型做的只是預測工作,並不是有很強說服力的論證。
還得把這個信號交給天文學家來複核,只有天文學家再次確認之後,才算是真的系外行星。
至於後續天文學家的工作,詳細過程請參考谷歌1月30號發表的論文Identifying Exoplanets with Deep Learning: A Five-planet Resonant Chain around Kepler-80 and an Eighth Planet around Kepler-90中的第6.3和6.4節。
經過後續天文學家的分析,確認了這個信號是一個真正的系外行星,就是後面我們大家都知道的開普勒90 i了。
這次撿漏到了的兩顆新行星,還是從670顆恆星數據里刨出來的。
要知道開普勒觀測的數據有20萬顆恆星!這個巨大的寶藏需要更多的人一起來挖。想發現顆新行星嗎?開始動手吧!
BTW,前天3月7號,是開普勒望遠鏡上天的九周年。尋找太陽系外類地行星這麼多年,布吉島適合我們搬遷的那一顆在哪裡。
最後,附AstroNet代碼,
https://github.com/tensorflow/models/tree/master/research/astronet
& 1月30號發表的論文,
http://iopscience.iop.org/article/10.3847/1538-3881/aa9e09/pdf
& 原文鏈接,
https://research.googleblog.com/2018/03/open-sourcing-hunt-for-exoplanets.html
— 完 —
歡迎大家關注我們的專欄:量子位 - 知乎專欄
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。
量子位 QbitAI · 頭條號簽約作者
?? ? 追蹤AI技術和產品新動態
推薦閱讀: