0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器學(xué)習(xí)研究項(xiàng)目的常見誤區(qū)

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-09-08 09:18 ? 次閱讀

編者按:FAIR研究科學(xué)家Tim Rockt?schel、牛津大學(xué)人工智能研究者Jakob Foerster、Greg Farquhar討論了機(jī)器學(xué)習(xí)研究項(xiàng)目的常見誤區(qū),同時(shí)給出了有助于項(xiàng)目成功的中肯建議。

每年都有很多學(xué)生聯(lián)系我們,表示想要和我們一起進(jìn)行短期的機(jī)器學(xué)習(xí)研究項(xiàng)目。到目前為止,我們已經(jīng)指導(dǎo)了不少學(xué)生了。我們注意到有一些反復(fù)出現(xiàn)的指導(dǎo)意見,因此寫了這篇文章分享。我們相信本文的建議會對機(jī)器學(xué)習(xí)領(lǐng)域的暑期實(shí)習(xí)研究項(xiàng)目或碩士論文項(xiàng)目有幫助。我們并不打算寫一篇全面指導(dǎo)的文章,而是想要強(qiáng)調(diào)我們反復(fù)碰到的誤區(qū)。例如,我們不會討論如何選擇一個(gè)好項(xiàng)目,或者進(jìn)行機(jī)器學(xué)習(xí)研究項(xiàng)目的一般方法。文中的一些建議適用于所有機(jī)器學(xué)習(xí)研究項(xiàng)目,特別是深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)研究項(xiàng)目。不過,有些建議只適用于短期項(xiàng)目,在3個(gè)月的時(shí)間限制下,這些建議很重要,但對于3-5年的博士生而言,相對而言不那么重要。

1 主要誤區(qū)

1.1 假設(shè)你的代碼沒有bug

眾所周知,機(jī)器學(xué)習(xí),特別是深度學(xué)習(xí)模型和強(qiáng)化學(xué)習(xí)模型,很難調(diào)試。Andrej Karpathy曾發(fā)推列舉一些常見的犯錯(cuò)情況:

沒有首先嘗試過擬合單個(gè)batch。

忘了切換訓(xùn)練/評估模式。

在.backward()前忘了.zero_grad()。

將softmax輸出傳給期望原始logit的損失函數(shù)。

搭配BatchNorm使用線性層/二維卷積層時(shí)沒有設(shè)置bias=False,或者相反,忘了在輸出層中設(shè)置bias。

以為view()和permute()是一回事(然后在該用permute的地方錯(cuò)誤地使用了view)。

我們所有人,甚至包括非常資深的研究者,都經(jīng)常犯這類錯(cuò)誤。由于有bug的模型經(jīng)常仍然能夠?qū)W習(xí)并生成有意義的輸出,所以很難檢測到這類錯(cuò)誤。bug也許會給你的模型帶來微妙的改變,而大多數(shù)情況下只有到了運(yùn)行時(shí)才會顯現(xiàn)。意識到這點(diǎn)后,假定你的代碼沒有任何錯(cuò)誤實(shí)在是大錯(cuò)特錯(cuò)。對自己代碼的態(tài)度常常能夠區(qū)分高效的研究者和低效的研究者。如果你的默認(rèn)假定是你的代碼可能有錯(cuò)誤,那么你會更仔細(xì)地檢查bug。逐行步進(jìn)代碼,仔細(xì)地檢查中間輸出??赡艿脑挘梢暬虚g輸出。張量的形狀對不對?張量的初始化、克隆、剝離是否恰當(dāng)?檢測訓(xùn)練過程中的梯度,留意NaN。編寫單元測試,還有通過設(shè)定隨機(jī)數(shù)生成器的種子使試驗(yàn)可重現(xiàn),這些都可能有幫助。關(guān)于更多神經(jīng)網(wǎng)絡(luò)調(diào)試的竅門,可以看Goodfellow等的Deep Learning(花書)的11.5節(jié)。

1.2 只看最終評估測度

盡管你的項(xiàng)目的目標(biāo)之一也許是提高某項(xiàng)評估測度的分?jǐn)?shù),但更重要的是發(fā)展模型如何起效和為何奏效的良好理解。特別是在項(xiàng)目的初期,最終評估測度幾乎不含有助于迭代和開發(fā)算法或模型的信息。相反,問一些深入的問題,開發(fā)信息豐富的診斷方法才是有幫助的。如果你引入了門控或注意力機(jī)制,那么你的模型是否實(shí)際利用了它呢?你提出的哪項(xiàng)模型創(chuàng)新對整體表現(xiàn)提升實(shí)際起到了作用?你做了消融測試嗎?為了達(dá)到合理的表現(xiàn),你的模型需要多少訓(xùn)練樣本,需要跑多少epoch,這些配置和你用的基線一樣嗎?你的模型表現(xiàn)良好和表現(xiàn)糟糕的測試實(shí)例之間有沒有什么系統(tǒng)性的差異?結(jié)果對超參數(shù)變動(dòng)的魯棒性有多好?基于模型的隱藏狀態(tài),可以預(yù)測重要的特征嗎?牢記你的研究和項(xiàng)目報(bào)告主要不是告訴研究社區(qū)相對之前最先進(jìn)模型的表現(xiàn),你取得了一些(微弱的)提升,而是要貢獻(xiàn)你對這一主題的理解。領(lǐng)域中的其他人想要知道什么有效,什么無效,你的發(fā)現(xiàn)的哪些部分可以應(yīng)用到他們的問題上。

1.3 嘗試解釋不清的隨機(jī)改動(dòng)

基于現(xiàn)在這些深度學(xué)習(xí)庫,讓模型變得復(fù)雜很容易,加上更多的組件、網(wǎng)絡(luò)層和優(yōu)化技巧。然而,當(dāng)你改動(dòng)代碼或模型時(shí),你至少應(yīng)該在直覺上理解改動(dòng)為何有幫助。同理,運(yùn)行試驗(yàn)時(shí),你應(yīng)該對它的輸出有清楚的預(yù)期。你期望繪制出的結(jié)果圖像看起來是什么樣的?你期望它們將告訴你什么?當(dāng)你發(fā)現(xiàn)模型的表現(xiàn)不對勁的時(shí)候,這些理解就更重要了。模型表現(xiàn)不對勁,更可能是bug的癥狀,這種情況下擴(kuò)展模型無助于找出bug,也許甚至?xí)尪ㄎ粏栴}變得更困難。在復(fù)雜化模型之前,深入問題的根源,找到可能出錯(cuò)的地方。另外,別忘了你的報(bào)告需要論證你所做的改動(dòng)的意義。報(bào)告的審閱人員對理解你的思考過程很有興趣。如果你不能形式化研究假說,并向自己解釋為何你做的能夠起效,那么很可能沒人能做到這一點(diǎn)。

1.4 過度復(fù)雜化

我們經(jīng)??吹椒e極性很高的學(xué)生直接上手困難問題,并且馬上嘗試復(fù)雜的方案。如果有地方出錯(cuò)了,很難分析錯(cuò)誤的原因。相反,你應(yīng)該問自己:應(yīng)該可以奏效的最小化的方案是什么?模型能夠?qū)W習(xí)記憶一個(gè)小型數(shù)據(jù)集嗎?只使用少量參數(shù)的情況下模型學(xué)到了什么?代碼可以在單個(gè)訓(xùn)練實(shí)例而不是一組樣本上訓(xùn)練嗎?我們期望看到的最簡單的概括性是什么樣的?我們期望會失敗的簡單基線是什么?給這一基線加上什么樣的最小擴(kuò)展應(yīng)該能讓它工作?

1.5 迭代過慢

試驗(yàn)可能需要很多時(shí)間。特別是深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí),極耗時(shí)間。因此,在短期項(xiàng)目中,不要過早地陷入緩慢的迭代周期很關(guān)鍵?;诤唵苇h(huán)境調(diào)試你的模型,實(shí)現(xiàn)一個(gè)可以在你的個(gè)人電腦上跑的概念證明實(shí)現(xiàn)。有時(shí)候簡單的矩陣操作或者網(wǎng)格試驗(yàn)有助于驗(yàn)證你的想法。有時(shí)你可以直接使用MDP的價(jià)值函數(shù)測試算法設(shè)想,無需擺弄梯度估計(jì)、actor-critic訓(xùn)練等。當(dāng)開始進(jìn)行大規(guī)模試驗(yàn)時(shí),流程化運(yùn)行試驗(yàn)和查看結(jié)果的過程。在試驗(yàn)完全進(jìn)行完畢之前,查看結(jié)果,看看表現(xiàn)是否失敗。剛開始,基礎(chǔ)設(shè)施上的投入可能會花不少時(shí)間,但到項(xiàng)目結(jié)束的時(shí)候,你會發(fā)現(xiàn)這很有價(jià)值。

2 一些建議

2.1 在開始項(xiàng)目之前閱讀背景內(nèi)容和相關(guān)工作

我們經(jīng)常在正式開始日期的幾個(gè)月前就公布項(xiàng)目。原因之一是三個(gè)月完成以下內(nèi)容實(shí)在是很緊張:1) 學(xué)習(xí)背景內(nèi)容和相關(guān)工作;2) 實(shí)現(xiàn)和試驗(yàn);3)撰寫一份好報(bào)告。另一個(gè)原因是,我們一般提出的項(xiàng)目,如果成功的話,是可以在機(jī)器學(xué)習(xí)期刊或會議發(fā)表的。雖然我們知道學(xué)生有很多事情需要忙的,但我們一般鼓勵(lì)學(xué)生至少提前開始閱讀相關(guān)文獻(xiàn)。理想情況下,當(dāng)你開始全職從事項(xiàng)目的時(shí)候,你應(yīng)該知道要做什么,它和現(xiàn)有的方法有什么關(guān)系,并且對如何做已經(jīng)有一些想法。另外,在全職從事項(xiàng)目之前,熟悉你選擇的機(jī)器學(xué)習(xí)框架也是一個(gè)好主意(我們推薦PyTorch?。?。

2.2 使用版本控制

你實(shí)在是應(yīng)該在研究代碼和項(xiàng)目報(bào)告上使用版本控制。沒有什么比在截止日期前丟失所有的辛勤工作更糟了。如果你還沒注冊過GitHub,那就去GitHub注冊個(gè)賬號。學(xué)生有免費(fèi)私有倉庫。如果你不知道什么是版本控制,現(xiàn)在就學(xué)習(xí),以后的你會對此感激不盡的。

2.3 基于隨機(jī)重復(fù)評估

在學(xué)術(shù)界,項(xiàng)目期間你一般最多能使用幾個(gè)GPU。然而,你不應(yīng)該從一次試驗(yàn)或幾次試驗(yàn)得出不成熟的結(jié)論,這一點(diǎn)在深度強(qiáng)化學(xué)習(xí)上尤其重要。理想情況下,你應(yīng)該多次重復(fù)試驗(yàn),并且像前文提到的,對不同初始情況和超參數(shù)的魯棒性有所了解。

2.4 及早開寫,持續(xù)地寫

如果你做的是碩士論文項(xiàng)目,對你工作的評估將基于你撰寫的報(bào)告,而不是基于你所做的缺乏足夠時(shí)間清楚報(bào)告的杰出工作。及早開始撰寫報(bào)告,不要低估傳播研究的作用。清晰地陳述你的目標(biāo)、假設(shè)和貢獻(xiàn),讓讀者可以領(lǐng)會你的進(jìn)展。清晰地解釋你的設(shè)計(jì)決策,清晰地討論你的發(fā)現(xiàn)。理想情況下,你應(yīng)該在進(jìn)行項(xiàng)目的過程中持續(xù)撰寫報(bào)告,這可以迫使你仔細(xì)思考下一步要做什么,也可以避免你因?yàn)樵诮刂谷掌谇摆s工而漏寫重要信息。

2.5 需要幫助的時(shí)候,主動(dòng)尋求幫助

你的指導(dǎo)者工作繁忙,但指導(dǎo)者的意義正是幫助你。遇到解決不了的問題,不要拖到下次約定好的碰面才提出來,在你需要的時(shí)候,聯(lián)系你的指導(dǎo)者。主動(dòng)地安排碰面,提前準(zhǔn)備好你打算討論的結(jié)果、代碼、報(bào)告文字,避免浪費(fèi)指導(dǎo)者的時(shí)間。最后,別恐慌!我們都經(jīng)歷過這類困境,知道這會是多么令人氣餒的經(jīng)歷,特別是你的工作機(jī)會和博士申請取決于研究項(xiàng)目的結(jié)果的時(shí)候。我們真心希望你能成功。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:短期機(jī)器學(xué)習(xí)研究項(xiàng)目的成功訣竅

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式系統(tǒng)的知識學(xué)習(xí)誤區(qū)

    本內(nèi)容介紹了嵌入式系統(tǒng)的知識學(xué)習(xí)誤區(qū),具體包括嵌入式系統(tǒng)的知識體系,嵌入式系統(tǒng)的學(xué)習(xí)誤區(qū),基礎(chǔ)階段的學(xué)習(xí)建議,非常適合嵌入式系統(tǒng)的
    發(fā)表于 11-03 16:32 ?1955次閱讀

    單片機(jī)學(xué)習(xí)常見的問題和誤區(qū)

    ,對一些知識把握不準(zhǔn),也不可避免地形成一些誤解。根據(jù)本人在教學(xué)及實(shí)踐中的探討和摸索,總結(jié)出這些在學(xué)習(xí)過程中常見的問題和誤區(qū)并給予分析和糾正。2.單片機(jī)學(xué)習(xí)中的
    發(fā)表于 02-09 00:11

    【瑞芯微RK1808計(jì)算棒試用申請】基于機(jī)器學(xué)習(xí)的視覺機(jī)械臂研究與設(shè)計(jì)

    過程③基于RK1808人工智能計(jì)算棒AI加速器完成機(jī)器學(xué)習(xí)的視覺機(jī)械臂研究與設(shè)計(jì)④項(xiàng)目開展,按時(shí)間計(jì)劃實(shí)施。⑤項(xiàng)目調(diào)試,優(yōu)化,分享。預(yù)計(jì)成果
    發(fā)表于 09-23 15:39

    初學(xué)單片機(jī)常見誤區(qū)?

    學(xué)習(xí)單片機(jī)常見誤區(qū)
    發(fā)表于 04-02 06:20

    電路設(shè)計(jì)思維常見誤區(qū)有哪些?

    電路設(shè)計(jì)思維常見誤區(qū)有哪些?
    發(fā)表于 06-18 09:53

    11個(gè)機(jī)器學(xué)習(xí)開源項(xiàng)目

    隨著機(jī)器學(xué)習(xí)越來越受到開發(fā)者關(guān)注,出現(xiàn)了很多機(jī)器學(xué)習(xí)的開源項(xiàng)目,在本文列舉的11個(gè)機(jī)器
    發(fā)表于 02-14 14:25 ?2829次閱讀

    自學(xué)機(jī)器學(xué)習(xí)誤區(qū)和陷阱

    /數(shù)據(jù)科學(xué)工具包,上文介紹的Python Machine Learning書中就大量使用Sklearn的API。和使用Kaggle的目的一致,學(xué)習(xí)的Sklearn的文檔也是一種實(shí)踐過程。比較推薦的方法是把主流機(jī)器
    的頭像 發(fā)表于 05-14 15:54 ?4799次閱讀
    自學(xué)<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>的<b class='flag-5'>誤區(qū)</b>和陷阱

    工業(yè)機(jī)器常見的三大應(yīng)用誤區(qū)盤點(diǎn)

    眾所周知,機(jī)器人投資通常從幾萬到百萬美元,在第一時(shí)間作出正確的選擇并且避免常見的錯(cuò)誤是非常重要的。錯(cuò)誤將導(dǎo)致不必要的開支或者任務(wù)的延期,接下來小編列出了機(jī)器人應(yīng)用的幾大誤區(qū),快來看看吧
    的頭像 發(fā)表于 07-24 11:00 ?2851次閱讀

    淺析機(jī)器學(xué)習(xí)建模中常見的7個(gè)誤區(qū)

    Cheng-Tao Chu總結(jié)了機(jī)器學(xué)習(xí)建模中常見誤區(qū),提醒讀者注意算法的假定未必適合手頭的數(shù)據(jù)。
    的頭像 發(fā)表于 07-28 09:27 ?3599次閱讀

    機(jī)器學(xué)習(xí)研究常見的七大謠傳總結(jié)

    學(xué)習(xí)深度學(xué)習(xí)的過程中,我們常會遇到各種謠傳,也會遇到各種想當(dāng)然的「執(zhí)念」。在本文中,作者總結(jié)了機(jī)器學(xué)習(xí)研究
    的頭像 發(fā)表于 02-26 14:05 ?2868次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>研究</b>中<b class='flag-5'>常見</b>的七大謠傳總結(jié)

    Everyday Robot項(xiàng)目啟動(dòng) 意在開發(fā)通用學(xué)習(xí)機(jī)器

    今天,Alphabet的X moonshot部門(以前稱為Google X)啟動(dòng)了Everyday Robot項(xiàng)目,該項(xiàng)目的目的是開發(fā)“通用學(xué)習(xí)機(jī)器人”。該想法是,其
    發(fā)表于 11-22 11:29 ?802次閱讀

    機(jī)器學(xué)習(xí)模型部署到ML項(xiàng)目的過程

    在構(gòu)建一個(gè)大的機(jī)器學(xué)習(xí)系統(tǒng)時(shí),有很多事情需要考慮。但作為數(shù)據(jù)科學(xué)家,我們常常只擔(dān)心項(xiàng)目的某些部分。
    的頭像 發(fā)表于 05-04 11:56 ?2164次閱讀

    機(jī)器學(xué)習(xí)研究現(xiàn)狀和發(fā)展趨勢 機(jī)器學(xué)習(xí)常見算法和優(yōu)缺點(diǎn)

    隨著計(jì)算能力和大數(shù)據(jù)的崛起,機(jī)器學(xué)習(xí)算法正迎來快速發(fā)展的時(shí)期。在研究層面上,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)
    發(fā)表于 08-22 17:49 ?4248次閱讀

    新手學(xué)習(xí)單片機(jī)最常見的六大誤區(qū)!

    ,扮演著至關(guān)重要的角色。然而,學(xué)習(xí)單片機(jī)并非一帆風(fēng)順,初學(xué)者常常會面臨各種挑戰(zhàn)和困惑。因此,了解并避免新手常見誤區(qū),將有助于使學(xué)習(xí)過程更加順利和愉快。新手
    的頭像 發(fā)表于 03-28 08:03 ?910次閱讀
    新手<b class='flag-5'>學(xué)習(xí)</b>單片機(jī)最<b class='flag-5'>常見</b>的六大<b class='flag-5'>誤區(qū)</b>!

    編程語言的誤區(qū)常見問題

    誤區(qū)一:編程語言的選擇 常見問題: 初學(xué)者在選擇編程語言時(shí),往往會被市場上的熱門語言所吸引,而忽視了自己的實(shí)際需求和興趣。 一些開發(fā)者認(rèn)為某種編程語言是萬能的,適用于所有類型的項(xiàng)目。 解決方案
    的頭像 發(fā)表于 11-15 09:35 ?344次閱讀