自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

機(jī)器學(xué)習(xí)論文復(fù)現(xiàn),這五大問題你需要注意

開發(fā) 開發(fā)工具 機(jī)器學(xué)習(xí)
論文復(fù)現(xiàn)一直是機(jī)器學(xué)習(xí)領(lǐng)域的難題,雖然最近多個(gè)學(xué)術(shù)會(huì)議提倡大家提交代碼,但解決論文復(fù)現(xiàn)問題仍然任重而道遠(yuǎn)。在試圖復(fù)現(xiàn)機(jī)器學(xué)習(xí)論文時(shí),我們經(jīng)常遇到哪些問題呢?新加坡機(jī)器學(xué)習(xí)工程師 Derek Chia 對此進(jìn)行了總結(jié)。

我最初接觸機(jī)器學(xué)習(xí)時(shí),花費(fèi)了大量時(shí)間來閱讀論文,并嘗試實(shí)現(xiàn)。當(dāng)然,我不是天才。實(shí)現(xiàn)它意味著要執(zhí)行 git clone 并嘗試運(yùn)行論文作者的代碼。對于我感興趣的概念,我可能還手動(dòng)輸入一些代碼并進(jìn)行注釋,以便更好地理解論文和項(xiàng)目。

[[350120]]

這樣的學(xué)習(xí)方法令人沮喪。嘗試復(fù)現(xiàn)論文的流程大致如下:

  • 一些達(dá)到新 SOTA 的論文在新聞媒體中引起關(guān)注;
  • 讀者深入研究或快速瀏覽論文內(nèi)容;
  • 讀者對論文中的實(shí)驗(yàn)結(jié)果印象深刻,并產(chǎn)生復(fù)現(xiàn)的興趣。

接下來就是瘋狂搜索項(xiàng)目代碼,并嘗試在作者所用的數(shù)據(jù)集上運(yùn)行代碼。這時(shí),你需要祈禱該項(xiàng)目具備以下要素:運(yùn)行說明(README.md)、代碼、參數(shù)、數(shù)據(jù)集、數(shù)據(jù)集路徑、軟件環(huán)境、所需依賴項(xiàng)以及硬件條件。了解這些,才能順利復(fù)現(xiàn)論文中的 SOTA 結(jié)果。

而在這個(gè)過程中,你可能會(huì)遇到很多常見問題(參見下文)。遇到問題之前先了解它們是很有幫助的,畢竟,沒人喜歡空手而歸。

復(fù)現(xiàn)機(jī)器學(xué)習(xí)論文時(shí)的常見問題

復(fù)現(xiàn)過程中的常見問題如下所示:

  • README 文件不完整或缺失;
  • 未定義依賴項(xiàng)、代碼存在 bug、缺少預(yù)訓(xùn)練模型;
  • 未公開參數(shù);
  • 私有數(shù)據(jù)集或缺少預(yù)處理步驟;
  • 對 GPU 資源的需求不切實(shí)際。

1. README 文件不完整或缺失

如果一篇論文在發(fā)表時(shí)開源了代碼,那么 README 就是你著手開始復(fù)現(xiàn)項(xiàng)目的文檔之一。好的 README 文件通常具備以下幾個(gè)組成部分:依賴項(xiàng)列表、訓(xùn)練腳本、評(píng)估腳本、預(yù)訓(xùn)練模型以及運(yùn)行腳本得到的結(jié)果。

實(shí)際上,這些內(nèi)容已經(jīng)在 Papers with Code 發(fā)布的《機(jī)器學(xué)習(xí)代碼完整性自查清單》中列出(該清單已成為 NeurIPS 2020 代碼提交流程的一部分)。該清單受到麥吉爾大學(xué)副教授、Facebook 蒙特利爾 FAIR 實(shí)驗(yàn)室負(fù)責(zé)人 Joelle Pineau 的啟發(fā)。

Papers with Code 提供的 README 樣例參見:

https://github.com/paperswithcode/releasing-research-code

不完整的 README 文件對運(yùn)行代碼而言是一個(gè)壞的開端。

一個(gè)需要注意的信號(hào)是示例 notebook 或示例代碼。notebook 的用途是演示代碼的使用。理想情況下,除了點(diǎn)擊「Run all」以外,不需要任何其他調(diào)整就能夠運(yùn)行 notebook。預(yù)填充參數(shù)和數(shù)據(jù)路徑的命令行也能夠?qū)崿F(xiàn)同樣的效果。

還有一些次要但有用的信息,比如作者的聯(lián)系方式或展示模型架構(gòu)或數(shù)據(jù)轉(zhuǎn)換流程的 gif 圖片等,這些都是完備的 README 文件應(yīng)該包含的。如果代碼庫托管在 GitHub 上,請檢查 Issue 區(qū)域的問題是否得到了積極回復(fù),以及 pull request 是否定期被查看。這些事項(xiàng)均能證明庫得到精心維護(hù),確保后續(xù)復(fù)現(xiàn)工作得到有效支持。當(dāng)然會(huì)有例外,但請慎重考慮以上各項(xiàng)出現(xiàn)缺失的情況。

Joelle Pineau 發(fā)布的機(jī)器學(xué)習(xí)可復(fù)現(xiàn)性檢查清單

(圖源:https://www.cs.mcgill.ca/~jpineau/ReproducibilityChecklist.pdf)

2. 未定義依賴項(xiàng)、代碼存在 bug、缺少預(yù)訓(xùn)練模型

當(dāng)你對示例 notebook 覺得滿意后,你或許想嘗試用不同的參數(shù)在自己的數(shù)據(jù)集上試用模型。在這一階段,你或許會(huì)調(diào)用示例 notebook 中未用到的函數(shù),或者在自己的數(shù)據(jù)集上嘗試預(yù)訓(xùn)練模型,這時(shí)可能會(huì)遇到問題。

例如,你可能注意到 requirements.txt 缺失,或者軟件包版本未固定(如 tensorflow==2.2)想象一下當(dāng)你發(fā)現(xiàn) TensorFlow 版本是 1.15 而不是 2.2,原因只是作者沒有指定版本時(shí)的爆炸心態(tài)吧。

假設(shè)你檢查過了依賴項(xiàng),然而現(xiàn)在卻發(fā)現(xiàn)預(yù)訓(xùn)練模型失蹤了!這種情況下,你要么 debug 代碼,要么提交 bug 報(bào)告,要么忽略代碼。請謹(jǐn)慎選擇第一個(gè)選項(xiàng),因?yàn)槟憧赡軙?huì)在這上面花費(fèi)好幾個(gè)小時(shí)。當(dāng)然有的 bug 很容易解決,如果我能修復(fù)的話,我會(huì)提交 pull request。但并不是每次都那么好運(yùn),這些隨手可及的果子有時(shí)候很難摘。

預(yù)訓(xùn)練模型缺失是一個(gè)危險(xiǎn)信號(hào),但這其實(shí)并不罕見。畢竟,論文作者沒有義務(wù)發(fā)布模型。那么,另一個(gè)替代方法是使用公開的參數(shù)訓(xùn)練模型進(jìn)行復(fù)現(xiàn)。不過參數(shù)也不總是公開……

3. 未公開參數(shù)

根據(jù)模型情況來看,超參數(shù)對于實(shí)現(xiàn) SOTA 結(jié)果是非常重要的。下圖展示了不同參數(shù)產(chǎn)生不同的 f1 分?jǐn)?shù)(范圍從 0.5 到 1.0)。模型中的參數(shù)通常是學(xué)習(xí)率(learning rate)、嵌入尺寸(embedding size)、層數(shù)、dropout 量、批處理大小、訓(xùn)練 epoch 數(shù)量等。

因此,如果作者沒有提供他們使用的確切參數(shù),你可能必須自己進(jìn)行所有實(shí)驗(yàn)才能復(fù)現(xiàn) SOTA 結(jié)果。

順便說一句,F(xiàn)acebook 的 HiPlot 是一個(gè)很好的工具,幫助你在使用不同參數(shù)組合時(shí)將模型結(jié)果可視化。

HiPlot 地址:https://github.com/facebookresearch/hiplot

4. 私有數(shù)據(jù)集或缺少預(yù)處理步驟

從很多方面來說,我們很幸運(yùn)地?fù)碛惺澜绺鞯匮芯空咛峁┑拈_源數(shù)據(jù)集。事實(shí)就是如此,數(shù)據(jù)的收集絕非易事,而清理這些數(shù)據(jù)并將其格式化以供研究使用,就更加麻煩一些。在此需感謝學(xué)術(shù)機(jī)構(gòu)和 Kaggle 免費(fèi)托管這些開源數(shù)據(jù)集,因?yàn)閹捄痛鎯?chǔ)成本是很高的。

然而想使用私有數(shù)據(jù)集,并非易事。數(shù)據(jù)集可能包含受版權(quán)保護(hù)的信息,比如 ImageNet。通常你需要填寫一份申請表,版權(quán)所有者將自行決定是否批準(zhǔn)。

某些時(shí)候這個(gè)過程會(huì)很麻煩,如果你所需的數(shù)據(jù)集不可用,在申請行動(dòng)之前要先認(rèn)真考慮一下。或者你可以從其他渠道搜索或者下載數(shù)據(jù),比如 Academic Torrents:

https://academictorrents.com/。

5. 對 GPU 資源的需求不切實(shí)際

近期出現(xiàn)了一股趨勢:模型越大性能越好。一些論文使用了整個(gè)數(shù)據(jù)中心的算力才達(dá)到 SOTA 結(jié)果,這些論文復(fù)現(xiàn)起來當(dāng)然很難。例如,2019 年 10 月谷歌發(fā)表論文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》,嘗試通過將參數(shù)擴(kuò)展到 110 億來探索 Transformer 模型架構(gòu)的局限性。然而幾個(gè)月后微軟用 170 億參數(shù)創(chuàng)建了 Turning-NLG,不久 OpenAI 放出 1750 億參數(shù)的預(yù)訓(xùn)練語言模型 GPT-3……

要想訓(xùn)練數(shù)十億參數(shù)的模型,你需要使用分布式訓(xùn)練方法以及某種形式的高性能計(jì)算(HPC)或 GPU 集群。具備 110 億和 170 億參數(shù)的模型分別需要約 44GB 和 68GB 的內(nèi)存,因此這些模型無法僅使用一塊 GPU 完成訓(xùn)練。

簡而言之,盡早發(fā)現(xiàn)論文所用大模型是否超出你的個(gè)人能力。

微軟訓(xùn)練 Turning-NLG。

總結(jié)

復(fù)現(xiàn)論文代碼并非易事,不過越來越多的項(xiàng)目嘗試標(biāo)準(zhǔn)化 SOTA 模型。我個(gè)人最喜歡的是 HuggingFace 的 Transformers,它為研究者和開發(fā)者提供了足夠低的進(jìn)入門檻。另外,TensorFlow 的 Model Garden 和 PyTorch 的 Model Zoo 也發(fā)展迅速(其中分別是 TensorFlow 和 PyTorch 團(tuán)隊(duì)構(gòu)建的預(yù)訓(xùn)練模型)。

這些庫旨在標(biāo)準(zhǔn)化預(yù)訓(xùn)練模型的使用,并為模型貢獻(xiàn)和分發(fā)提供合適的條件。它們對代碼質(zhì)量提供了保障,并且具備不錯(cuò)的文檔。我希望社區(qū)能從這些庫中獲益,并幫助復(fù)現(xiàn) SOTA 結(jié)果,輕松地使用 SOTA 模型。

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2010-07-26 15:50:03

Perl腳本語言

2022-08-30 18:13:38

機(jī)器學(xué)習(xí)

2017-11-02 06:18:26

2011-11-16 09:46:14

IaaS云計(jì)算

2013-03-26 10:45:00

2011-08-23 12:11:45

2010-06-29 15:54:36

UML建模

2016-06-08 11:44:37

2016-09-23 16:09:01

2015-09-30 10:09:35

2011-02-22 09:34:33

2013-09-30 10:13:42

2016-04-19 10:23:48

2010-07-09 13:28:10

UML建模

2015-03-11 09:55:12

2020-10-14 15:03:07

編程PythonJava

2009-11-02 16:48:45

虛擬機(jī)管理

2016-12-16 14:57:19

2015-06-02 17:05:53

軟件定義數(shù)據(jù)中心

2013-02-28 09:50:39

戴爾問題私有化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)