編者按:FAIR研究科學(xué)家Tim Rockt?schel、牛津大學(xué)人工智能研究者Jakob Foerster、Greg Farquhar討論了機器學(xué)習(xí)研究項目的常見誤區(qū),同時給出了有助于項目成功的中肯建議。
每年都有很多學(xué)生聯(lián)系我們,表示想要和我們一起進行短期的機器學(xué)習(xí)研究項目。到目前為止,我們已經(jīng)指導(dǎo)了不少學(xué)生了。我們注意到有一些反復(fù)出現(xiàn)的指導(dǎo)意見,因此寫了這篇文章分享。我們相信本文的建議會對機器學(xué)習(xí)領(lǐng)域的暑期實習(xí)研究項目或碩士論文項目有幫助。我們并不打算寫一篇全面指導(dǎo)的文章,而是想要強調(diào)我們反復(fù)碰到的誤區(qū)。例如,我們不會討論如何選擇一個好項目,或者進行機器學(xué)習(xí)研究項目的一般方法。文中的一些建議適用于所有機器學(xué)習(xí)研究項目,特別是深度學(xué)習(xí)和強化學(xué)習(xí)研究項目。不過,有些建議只適用于短期項目,在3個月的時間限制下,這些建議很重要,但對于3-5年的博士生而言,相對而言不那么重要。
1 主要誤區(qū)
1.1 假設(shè)你的代碼沒有bug
眾所周知,機器學(xué)習(xí),特別是深度學(xué)習(xí)模型和強化學(xué)習(xí)模型,很難調(diào)試。Andrej Karpathy曾發(fā)推列舉一些常見的犯錯情況:
沒有首先嘗試過擬合單個batch。
忘了切換訓(xùn)練/評估模式。
在.backward()前忘了.zero_grad()。
將softmax輸出傳給期望原始logit的損失函數(shù)。
搭配BatchNorm使用線性層/二維卷積層時沒有設(shè)置bias=False,或者相反,忘了在輸出層中設(shè)置bias。
以為view()和permute()是一回事(然后在該用permute的地方錯誤地使用了view)。
我們所有人,甚至包括非常資深的研究者,都經(jīng)常犯這類錯誤。由于有bug的模型經(jīng)常仍然能夠?qū)W習(xí)并生成有意義的輸出,所以很難檢測到這類錯誤。bug也許會給你的模型帶來微妙的改變,而大多數(shù)情況下只有到了運行時才會顯現(xiàn)。意識到這點后,假定你的代碼沒有任何錯誤實在是大錯特錯。對自己代碼的態(tài)度常常能夠區(qū)分高效的研究者和低效的研究者。如果你的默認假定是你的代碼可能有錯誤,那么你會更仔細地檢查bug。逐行步進代碼,仔細地檢查中間輸出??赡艿脑?,可視化中間輸出。張量的形狀對不對?張量的初始化、克隆、剝離是否恰當(dāng)?檢測訓(xùn)練過程中的梯度,留意NaN。編寫單元測試,還有通過設(shè)定隨機數(shù)生成器的種子使試驗可重現(xiàn),這些都可能有幫助。關(guān)于更多神經(jīng)網(wǎng)絡(luò)調(diào)試的竅門,可以看Goodfellow等的Deep Learning(花書)的11.5節(jié)。
1.2 只看最終評估測度
盡管你的項目的目標(biāo)之一也許是提高某項評估測度的分數(shù),但更重要的是發(fā)展模型如何起效和為何奏效的良好理解。特別是在項目的初期,最終評估測度幾乎不含有助于迭代和開發(fā)算法或模型的信息。相反,問一些深入的問題,開發(fā)信息豐富的診斷方法才是有幫助的。如果你引入了門控或注意力機制,那么你的模型是否實際利用了它呢?你提出的哪項模型創(chuàng)新對整體表現(xiàn)提升實際起到了作用?你做了消融測試嗎?為了達到合理的表現(xiàn),你的模型需要多少訓(xùn)練樣本,需要跑多少epoch,這些配置和你用的基線一樣嗎?你的模型表現(xiàn)良好和表現(xiàn)糟糕的測試實例之間有沒有什么系統(tǒng)性的差異?結(jié)果對超參數(shù)變動的魯棒性有多好?基于模型的隱藏狀態(tài),可以預(yù)測重要的特征嗎?牢記你的研究和項目報告主要不是告訴研究社區(qū)相對之前最先進模型的表現(xiàn),你取得了一些(微弱的)提升,而是要貢獻你對這一主題的理解。領(lǐng)域中的其他人想要知道什么有效,什么無效,你的發(fā)現(xiàn)的哪些部分可以應(yīng)用到他們的問題上。
1.3 嘗試解釋不清的隨機改動
基于現(xiàn)在這些深度學(xué)習(xí)庫,讓模型變得復(fù)雜很容易,加上更多的組件、網(wǎng)絡(luò)層和優(yōu)化技巧。然而,當(dāng)你改動代碼或模型時,你至少應(yīng)該在直覺上理解改動為何有幫助。同理,運行試驗時,你應(yīng)該對它的輸出有清楚的預(yù)期。你期望繪制出的結(jié)果圖像看起來是什么樣的?你期望它們將告訴你什么?當(dāng)你發(fā)現(xiàn)模型的表現(xiàn)不對勁的時候,這些理解就更重要了。模型表現(xiàn)不對勁,更可能是bug的癥狀,這種情況下擴展模型無助于找出bug,也許甚至?xí)尪ㄎ粏栴}變得更困難。在復(fù)雜化模型之前,深入問題的根源,找到可能出錯的地方。另外,別忘了你的報告需要論證你所做的改動的意義。報告的審閱人員對理解你的思考過程很有興趣。如果你不能形式化研究假說,并向自己解釋為何你做的能夠起效,那么很可能沒人能做到這一點。
1.4 過度復(fù)雜化
我們經(jīng)??吹椒e極性很高的學(xué)生直接上手困難問題,并且馬上嘗試復(fù)雜的方案。如果有地方出錯了,很難分析錯誤的原因。相反,你應(yīng)該問自己:應(yīng)該可以奏效的最小化的方案是什么?模型能夠?qū)W習(xí)記憶一個小型數(shù)據(jù)集嗎?只使用少量參數(shù)的情況下模型學(xué)到了什么?代碼可以在單個訓(xùn)練實例而不是一組樣本上訓(xùn)練嗎?我們期望看到的最簡單的概括性是什么樣的?我們期望會失敗的簡單基線是什么?給這一基線加上什么樣的最小擴展應(yīng)該能讓它工作?
1.5 迭代過慢
試驗可能需要很多時間。特別是深度學(xué)習(xí)和強化學(xué)習(xí),極耗時間。因此,在短期項目中,不要過早地陷入緩慢的迭代周期很關(guān)鍵。基于簡單環(huán)境調(diào)試你的模型,實現(xiàn)一個可以在你的個人電腦上跑的概念證明實現(xiàn)。有時候簡單的矩陣操作或者網(wǎng)格試驗有助于驗證你的想法。有時你可以直接使用MDP的價值函數(shù)測試算法設(shè)想,無需擺弄梯度估計、actor-critic訓(xùn)練等。當(dāng)開始進行大規(guī)模試驗時,流程化運行試驗和查看結(jié)果的過程。在試驗完全進行完畢之前,查看結(jié)果,看看表現(xiàn)是否失敗。剛開始,基礎(chǔ)設(shè)施上的投入可能會花不少時間,但到項目結(jié)束的時候,你會發(fā)現(xiàn)這很有價值。
2 一些建議
2.1 在開始項目之前閱讀背景內(nèi)容和相關(guān)工作
我們經(jīng)常在正式開始日期的幾個月前就公布項目。原因之一是三個月完成以下內(nèi)容實在是很緊張:1) 學(xué)習(xí)背景內(nèi)容和相關(guān)工作;2) 實現(xiàn)和試驗;3)撰寫一份好報告。另一個原因是,我們一般提出的項目,如果成功的話,是可以在機器學(xué)習(xí)期刊或會議發(fā)表的。雖然我們知道學(xué)生有很多事情需要忙的,但我們一般鼓勵學(xué)生至少提前開始閱讀相關(guān)文獻。理想情況下,當(dāng)你開始全職從事項目的時候,你應(yīng)該知道要做什么,它和現(xiàn)有的方法有什么關(guān)系,并且對如何做已經(jīng)有一些想法。另外,在全職從事項目之前,熟悉你選擇的機器學(xué)習(xí)框架也是一個好主意(我們推薦PyTorch?。?。
2.2 使用版本控制
你實在是應(yīng)該在研究代碼和項目報告上使用版本控制。沒有什么比在截止日期前丟失所有的辛勤工作更糟了。如果你還沒注冊過GitHub,那就去GitHub注冊個賬號。學(xué)生有免費私有倉庫。如果你不知道什么是版本控制,現(xiàn)在就學(xué)習(xí),以后的你會對此感激不盡的。
2.3 基于隨機重復(fù)評估
在學(xué)術(shù)界,項目期間你一般最多能使用幾個GPU。然而,你不應(yīng)該從一次試驗或幾次試驗得出不成熟的結(jié)論,這一點在深度強化學(xué)習(xí)上尤其重要。理想情況下,你應(yīng)該多次重復(fù)試驗,并且像前文提到的,對不同初始情況和超參數(shù)的魯棒性有所了解。
2.4 及早開寫,持續(xù)地寫
如果你做的是碩士論文項目,對你工作的評估將基于你撰寫的報告,而不是基于你所做的缺乏足夠時間清楚報告的杰出工作。及早開始撰寫報告,不要低估傳播研究的作用。清晰地陳述你的目標(biāo)、假設(shè)和貢獻,讓讀者可以領(lǐng)會你的進展。清晰地解釋你的設(shè)計決策,清晰地討論你的發(fā)現(xiàn)。理想情況下,你應(yīng)該在進行項目的過程中持續(xù)撰寫報告,這可以迫使你仔細思考下一步要做什么,也可以避免你因為在截止日期前趕工而漏寫重要信息。
2.5 需要幫助的時候,主動尋求幫助
你的指導(dǎo)者工作繁忙,但指導(dǎo)者的意義正是幫助你。遇到解決不了的問題,不要拖到下次約定好的碰面才提出來,在你需要的時候,聯(lián)系你的指導(dǎo)者。主動地安排碰面,提前準備好你打算討論的結(jié)果、代碼、報告文字,避免浪費指導(dǎo)者的時間。最后,別恐慌!我們都經(jīng)歷過這類困境,知道這會是多么令人氣餒的經(jīng)歷,特別是你的工作機會和博士申請取決于研究項目的結(jié)果的時候。我們真心希望你能成功。
-
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8547瀏覽量
136597 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5594瀏覽量
124216
原文標(biāo)題:短期機器學(xué)習(xí)研究項目的成功訣竅
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式系統(tǒng)的知識學(xué)習(xí)及誤區(qū)
單片機學(xué)習(xí)中常見的問題和誤區(qū)
【瑞芯微RK1808計算棒試用申請】基于機器學(xué)習(xí)的視覺機械臂研究與設(shè)計
11個機器學(xué)習(xí)開源項目
自學(xué)機器學(xué)習(xí)的誤區(qū)和陷阱
工業(yè)機器人常見的三大應(yīng)用誤區(qū)盤點
淺析機器學(xué)習(xí)建模中常見的7個誤區(qū)
機器學(xué)習(xí)研究中常見的七大謠傳總結(jié)
Everyday Robot項目啟動 意在開發(fā)通用學(xué)習(xí)機器人
機器學(xué)習(xí)模型部署到ML項目的過程
機器學(xué)習(xí)的研究現(xiàn)狀和發(fā)展趨勢 機器學(xué)習(xí)的常見算法和優(yōu)缺點
新手學(xué)習(xí)單片機最常見的六大誤區(qū)!
機器學(xué)習(xí)研究項目的常見誤區(qū)
評論