開源用於尋找系外行星的程式碼
來源 | TensorFlow(公眾號ID:tensorflowers)
在上週六的 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 顆 - 誰知道如果我們將技術用於整個資料集會有什麼發現。不過,在開展這項工作之前,我們想要對模型進行多處改進。正如我們在論文中討論的一樣,我們的模型在丟棄聯星和儀器誤報訊號方面的表現還不如一些更成熟的計算機啟發式演算法。我們正在努力改進模型,現在模型已經開源,我們希望其他人也能加入進來!
招聘
AI科技大本營現招聘AI記者和資深編譯,有意者請將簡歷投至:gulei@csdn.net,期待你的加入!
如果你暫時不能加入營長的隊伍,也歡迎與營長分享你的精彩文章,投稿郵箱:suiling@csdn.net
AI科技大本營讀者群(計算機視覺、機器學習、深度學習、NLP、Python、AI硬體、AI+金融、AI+PM方向)正在招募中,關注AI科技大本營微信公眾號,後臺回覆:讀者群,聯絡營長,新增營長請備註姓名,研究方向。
☟☟☟點選 | 閱讀原文 | 檢視更多精彩內容
相關文章
- 尋找寫程式碼感覺(十四)之 新增功能的開發
- 2021 中國開原始碼力榜啟動,尋找開源世界的超級碼麗原始碼
- 尋找寫程式碼感覺(十五)之 刪除功能的開發
- 尋找寫程式碼感覺(十三)之 編輯功能的開發
- 尋找在 GitHub 上參與開源專案的方法Github
- 開源專案「喵爪」尋找小夥伴啦
- 如何尋找Oracle相關的資源?Oracle
- 小程式導航來了,快速尋找屬於你的小程式
- The Data Way Vol.7|從故事裡尋找開源的『核心』
- 2021 中國開原始碼力榜合作社群招募:一起尋找開源世界的超級碼麗原始碼
- 使用grep命令,玩轉程式碼審計尋找Sink
- Android 尋找極限編碼的「快感」Android
- 知名開源工具被用於詐騙,作者無奈清空程式碼。。開源工具
- 尋找寫程式碼感覺(五)之Mybatis官方程式碼生成器的使用MyBatis
- 一個程式猿的2023總結:《尋找》
- 程式設計題:尋找木頭程式設計
- RefactorFirst:尋找Java程式碼庫中無所不包的大型“上帝”類Java
- 尋找真凶
- 160個CrackMe之108 mfc程式 尋找按鈕事件,程式碼還原(上)C程式事件
- 160個CrackMe之108 mfc程式 尋找按鈕事件,程式碼還原(下)C程式事件
- 【全開源】AJAX家政系統原始碼小程式前後端開源原始碼原始碼後端
- 尋找寫程式碼感覺(三)之使用 Spring Boot 編寫介面Spring Boot
- 最新脫單盲盒系統 程式程式碼全開源
- 尋找有生命的行星
- 找論文程式碼
- 尋找~PHP 開發工程師 - 全職PHP工程師
- 你還在尋找Navicat的破解版本?你應該瞭解開源免費的DBeaver
- 尋找邊境
- 尋找寫程式碼感覺(十六)之 整合Validation做引數校驗
- 尋找寫程式碼感覺(一)之使用 Spring Boot 快速搭建專案Spring Boot
- 尋找寫程式碼感覺(二)之 Spring Boot 專案屬性配置Spring Boot
- 尋找寫程式碼感覺(六)之列表查詢介面開發及返回結果的統一處理
- 開源AwaitableCompletionSource,用於取代TaskCompletionSourceAI
- 當AI開始尋找抗生素:人類終於摘取“高懸的果實”?AI
- 低程式碼適用於哪些應用開發場景
- 開源小程式原始碼原始碼
- 四千行程式碼寫的桌面作業系統GrapeOS完整程式碼開源了行程作業系統
- 尋找陣列的中心索引陣列索引