【经验】刚读硕士怎么感觉学机器学习和深度学习越学越不懂?
有同學問:研一,在學機器學習和深度學習,為什么感覺越學越不會,怎么解決這個問題?
我搜集了一些意見和建議,供參考。
高贊回答一
作者:曲終人不散丶
來源:知乎
我的研一我記得是先找了一本比較薄的,通俗易懂的深度學習書,內容淺嘗輒止,但很基礎,主要介紹全連接層,反向傳播機制,然后過渡到CNN,池化,批量梯度下降,就這些了。
之后我又看了一本Tensorflow深度學習,代碼不看,只看內容。里面也大同小異,不過介紹更細了些,比如AlexNet, GoogleNet, ResNet等等,還有具體的一些任務。
之后我就不看了,我就去看我最感興趣的方向(CV的一個子領域)的最SOTA的算法的由來,CSDN上文章很多,多看幾個。剛接觸一個領域,起碼要知道這個領域目前最有影響力的算法的歷史及其發(fā)展吧?然后逐漸拓寬文獻面,個人比較喜歡看一些偏理論推廣的東西,特殊推廣至一般是常用的創(chuàng)新套路。舉幾個典型的例子,比如目標檢測的Soft-NMS是傳統(tǒng)NMS的推廣,SENet也是一種推廣,Group Normalization是BN和IN的結合,還有二階池化策略是比之一階池化更好的池化。
研一下我就看了少說七十篇文獻,都是CVPR, ECCV, ICCV的文章。然后創(chuàng)新點就很自然地出來了。看多了,多思考,自然就會發(fā)現(xiàn)目前尚未解決的問題,以及前人方法的次優(yōu)性。這里提一句,不同領域的專家,哪怕同為CV但卻是不同子領域的人,二者最大的差別不是別的,就是文獻量。
然后我就想解決方法啊(其實中國的學生解決問題的能力都很強,就看你能不能想到問題),特別是985研究生,不管大家承認與否,也是中國最優(yōu)秀的一批人了。
其實最開始我也就抓住了一篇CVPR的一個小問題,隨后想了解決方案,利用本科學的數(shù)學分析這樣的思維(要不怎么說考研要考數(shù)學一呢?)進行深入的打磨和推敲,其實問題都不難,這些問題不過都是有限維函數(shù),及其導數(shù)(梯度),極限等知識有關。
然后我就得想辦法編程了啊,我之前也只會matlab。沒試過python,連環(huán)境都不會裝。
最后磨蹭了一段時間,終于裝好了環(huán)境,跑通了一遍baseline。開始找別人代碼上我應該要改的地方在哪里。
接著就照著別人的代碼改,遇到不會就終端輸出啊,看一看tensor的size啊,具體的tensor運算啊,這些東西不超過高等代數(shù)的范疇(或線性代數(shù))。也得虧是我這個解決方法不涉及大的改動,比如修改網(wǎng)絡之類的,于是就做實驗吧。
邊做實驗的同時,也與一起合作的同學交流想法,于是就醞釀出來更好的方法,更進了一步。PS: 論文的層次感也是挺重要的。比起那種CVPR上見到過的一個算法一篇文章,或者一個公式寫一篇文章,如果你的文章能有2~3個創(chuàng)新點,無疑是好事。
可能是我個人追求完美的原因吧,加之我做科研具備嚴謹素養(yǎng),我會仔細推敲,對別人的repo我訓出什么結果就是什么結果,訓的高我論文就用訓的高的,低了那就是低了。
于是研二就中了一篇一作A會。
總結來說,
首先,不要著急練代碼,于我而言就是盲人摸象。
第二,基礎知識僅了解那些能助于你理解論文的部分就好了,難道你還指著把周志華的機器學習都看完才做研究嗎?書只是一種工具,一份參考,一本字典,不會帶給你任何的創(chuàng)新啟發(fā)。
第三,先從你領域內的最經(jīng)典的論文開始(可能有好幾種不同的經(jīng)典模型),統(tǒng)統(tǒng)了解來龍去脈。
第四,最經(jīng)典了解完后,就開始開枝散葉式地了解模型中的每一個細節(jié),因為每一個細節(jié)可能都有至少一篇的頂會論文在其中。
第五,不要死磕英語。CSDN,公眾號,知乎,有道劃線翻譯,都會加快你提煉論文核心的速度。
第六,量變產(chǎn)生質變。當你論文閱讀量達到五十篇后,基本對這個領域有個不錯的認識了,多個改進的算法有何特點,有何區(qū)別,你的心中也有了框架,此時產(chǎn)生idea也不奇怪。我目前總閱讀量也就180篇左右
第七,不要畏懼編程。你只有去適應它,習慣了之后,編程都是小意思。
第八,嚴謹性,不得意于眼前的成功。只有認真打磨,深入挖掘一項工作,才有可能做出真正solid的工作。
第九,能吃苦。現(xiàn)在的AI方向更新速度太快,你必須與別人拼速度,包括合作者,硬件設備。你知道何愷明為何能在2017的ICCV上大展手腳嗎?因為他與他的好朋友Ross Girshick兩個人加起來正好能工作滿24小時。其實我有時也是非常羨慕,如果能有一個人也與我工作滿24小時該多好。我醒了,他去睡了,我睡了他接著干了。當然這個也只能在大廠或者知名高校這樣的地方可能見到了,那么你未來如何進這樣的地方?只有取決于你的現(xiàn)在。設備不多,自然就要充分利用好每一秒,我的實驗由于不是恰好24小時的整數(shù)倍能做完的,所以經(jīng)常需要半夜爬起來去測試,去開下一個實驗。又或者我一個實驗凌晨一點出結果,我也要熬到那時候做完才回寢室。時間都是擠出來的。當然也不用太累,做實驗期間,你該上課上課,該打球打球,該看電影看電影,該約火鍋約火鍋,生活要豐富起來,精神才能豐富,鍛煉身體我也是沒有落下,羽毛球乒乓球三天不打就手癢。
第十,真心的熱愛。只有你熱愛了,你才會樂此不疲,甚至以此為一生的職業(yè)追求。邁克爾杰克遜老時可以說自己一生熱愛的是音樂與舞蹈,趙忠祥老時也可以說自己一生熱愛的是主持與播音事業(yè),我不希望我老時談及自己熱愛什么的時候,發(fā)現(xiàn)自己說不出來云云。可見一個人能一輩子從事自己所熱愛的事業(yè)將是多么不容易也是多么幸福的一件事,年輕人就該把握好,把力往最擅長的點上使。
當然了,最關鍵的是你要有拼勁。多少次我在實驗室看到美輪美奐的日出,多少次我大半夜頂著寒風騎電動車回寢室我就不說了。可能這對于身處大牛組的人來說感受會低一些,但對于我這種孤軍奮戰(zhàn)的人來說,所擁有的資源就是雙GPU顯卡,感觸會非常深,但同時對我個人能力的錘煉也無疑會更好,無論是科研能力,科研精神,還是工程代碼能力。
說了這么多突然感慨萬千,其實當你看到CMT上“Accept”這個詞時,一切的苦痛也都全然消失了,轉而來臨的是無盡的歡笑與成功的淚水……
——————————————————
感覺看的人挺多的,那就再更新一波,有關論文寫作。
其實很多公眾號如SCI,上面都會有詳細的論文寫作教程,都可以看看,但我當時寫論文卻沒有依賴這些教程。
寫論文的關鍵在于如何組織結構,如何寫好一個故事。哪些是不得不說的廢話,哪些才是真正的核心論點。初高中時我們都一直鍛煉過如何寫好一篇議論文,這時候就有用武之地了。大致可總結為自圓其說四個字。
首先,你得有相當量的文獻閱讀量,這樣你在寫論文時,下筆將非常有一種統(tǒng)領千軍的感覺。前人的工作,目前研究的現(xiàn)狀,別人都是如何解決問題的,卻又留下了哪些問題,這些東西不通過看文獻你是不會有足夠深的理解和意識的。
如果你缺乏這方面意識,比如你只看了10篇文獻,然后你相當天才也想出了絕佳的idea,并付出行動后成功了,此時你再面對文章,你將非常痛苦。這僅僅10篇的知識面,甚至只能讓你寫一章Proposed Method。這時你該怎么辦?基本上只能照搬別人論文里的句子,各個地方都借用一點,湊出一篇文章。
可是如果你有相當?shù)奈墨I儲備量,寫起來將輕松多了。首先你根本無需照搬別人的論文,你就像個音樂指揮家,用自己的話把這個故事寫了出來。
我舉個例子。
比如你解決的是目標檢測領域某篇CVPR 2020的一個尚未解決的問題,你想了改進方案,成功在ResNet50下提高了性能1.5個百分點。
這時你無比興奮地向導師匯報了成果,畢竟1.5個百分點可不是一個小數(shù)字了。
你要知道1.5個絕對百分點的提升,換做大牛組來做,可以必中A會,甚至oral。
那么你一個小白,該如何給這個小小的苗子一個適合它的家?
讓我來告訴你大牛組的人會怎么做。首先,已知你在A模型的ResNet50上比baseline提高1.5個點,接著馬上做ResNet101看看情況。如果你的提升是有理論依據(jù),并且不太可能是偶然因素的話(1.5的提升基本不可能是偶然),那么R101多半也是提升1.5±0.8。
這下基本確定這個idea是有效可行了之后,開始嘗試把改進方法移植到B模型,C模型(三個就夠了)。讓我們看看最終的實驗表格,以提升最多的那個模型為主要的結果。ABC三個表,Ablation study包括探究主干網(wǎng)絡是否影響,超參數(shù)的敏感性實驗,涉及改動網(wǎng)絡的還需要考慮bflops,探究是不是增加網(wǎng)絡層數(shù)帶來的提升。涉及降低推理速度的,還得探究這種犧牲大不大。
以上這些都是常見的Ablation。最好你在實驗過程中能醞釀出第二個更好的改進方案。這樣你在縱向上也能列出表格,這就是所謂的論文層次感。更有甚者,有人甚至可以一開始覺得想出的改進太成功了,卻又想不出更好的方法,可以在baseline和你的方法之間找一個中間狀態(tài)的方法,然后以這個中間狀態(tài)方法為第一個創(chuàng)新點,接著針對這個創(chuàng)新的不足,提出第二個創(chuàng)新點(實際就是你最開始想的那個),自己改進自己,自己革新自己,說不定還能從中找出事物背后的深刻道理,無疑都會為你的文章增添色彩。
回到論文寫作上來,假設你已經(jīng)有了所有的主要實驗和Ablation(當然實際上肯定是一邊寫一邊做)。abstract,Introduction,related work,這三大部分就是寫故事的關鍵了。
套路一般是,先說大環(huán)境下本領域的發(fā)展,分類,極其對其他領域的作用。進而轉到其中某某模塊(你針對的模塊)對整體的性能至關重要。該模塊已被多個其他領域應用,如U,V,W(列出參考文獻)。針對該模塊,大家都使用的方法是Z,近十年來一直如此。后續(xù)針對傳統(tǒng)方法Z的不足,近幾年有學者提出了D方法(ECCV2017),用以改善XXXX。接著針對D方法的不足,又有人提出了E,解決了D的問題,比如提高D的速度,或者D的穩(wěn)定性,或者是D的推廣版本。E是相當經(jīng)典的,這么多年以來成為了主導,可謂人盡皆知。最新的研究進展中,有學者還提出了F, H等變體,分別考慮了XXXX,有的還應用在其他領域中。但是(關鍵來了),上述這些方法,都僅僅考慮了XXXX層面,因素。However, we observed that......,they may suffer from……,they face the problem of……這個地方最好需要你用一句神來之筆的觀點說出這些方法的問題,從而讓人眼前一亮,讓人恍悟好像這些方法確實是這么一回事,甚至讓人恍悟原來E方法能有提升是出于背后這么個原因。總之你若能總結到類似于這樣的深刻道理,那基本上審稿人對你論文的看法就是very novel。加之你的提升有1.5個點這么多,那么審稿人對你實驗結果的看法也將是significant或very convincing。
上述這些東西挑最關鍵的部分放在abstract,占1/3到1/2左右。然后全部內容放在Introduction,作為引入你的觀點的背景故事。Introduction剩下兩段,一段用來說明你的改進方法的大致流程,最后一段用以總結本文的貢獻。還是那句話,只要你有足夠的文獻儲備量,這些東西寫起來信手拈來,幾乎是暢所欲言,寫的爽死。當然還需注意語言表達要客觀,要尊重,還要犀利。
related work,分兩種,一種是針對你改進點的相關工作,比如剛剛的傳統(tǒng)方法以及D, E, F, H方法。還有一種沒的寫了就寫大框架的工作,比如機器閱讀理解方法,目標檢測方法,圖像去噪方法,3D重建方法(根據(jù)你的領域),算是一個匯總性的介紹。
高贊回答二
作者:機器學習入坑者
來源:知乎
研一剛入學,一定要“小步慢跑”,學一個算法就一定要學透(公式推導+代碼編寫),不要今天看一下SVM、明天瞅一眼MLP。
寫代碼能夠學到東西,跑代碼是學不到任何東西的。
從基本的算法開始,比如KNN,花上一周時間按照類似下面的流程進行實驗:
(0)公式推理
(1)篩選數(shù)據(jù)
(2)模型搭建(編寫代碼)
(3)指標計算
(4)調參分析(不斷優(yōu)化)
(5)重新理解公式推理
按照上述步驟學完第一個算法以后,再以相同的過程學習第二個算法。對不同算法重復相同的實驗流程,能讓自己對模式識別那本書理解更深刻。
我認為從事深度學習最忌諱的就是“急”,python還沒學好,就去學pytorch;pytorch還沒學好,就去跑開源項目。編程基礎和理論基礎還沒打好,就去看論文跑開源代碼,時間都浪費在環(huán)境配置和版本兼容調試上面了。
美其名曰項目驅動學習,實際上就是浮土筑高臺。研一基礎不牢靠,研二很難靜下心來彌補缺失的知識。然后就有趣了,研一整年沒能學到扎實的技能,導致二年級做實驗的時候舉步維艱。在這種焦慮的情況下只能繼續(xù)聽從“項目驅動學習”這種策略,害怕組會、害怕導師催你。(我并非反對項目驅動學習,我反對的是沒有ML或DL基礎的情況下就搞項目)。
相反的,如果研一的基礎非常扎實,天天寫代碼夯實實踐基礎,天天推導公式夯實理論基礎。研二的時候就能水到渠成,自然就能把論文實驗做的很好,磨刀不誤砍柴工。
一步急,步步急,最后就只會跑別人代碼調調參數(shù),關掉github以后連一個基本的CNN分類pipeline都寫不出來(數(shù)據(jù)清洗+數(shù)據(jù)讀取+網(wǎng)絡設計+損失選擇+模型訓練+指標計算+調優(yōu))。
粗略的讀一讀理論證明,然后找個開源代碼跑一下,我認為這種方式真的學不好模式識別那門課。
補充:關于學習經(jīng)歷
如何系統(tǒng)型地學習深度學習?(https://www.zhihu.com/question/305745486/answer/557055667)
補充:關于pytorch
曾經(jīng)寫過一些pytorch的日志,包含數(shù)據(jù)采樣、增強、模型搭建等等:
(https://zhuanlan.zhihu.com/c_1176057805353766912)
補充:關于書籍選擇
if(good_at_math){ choose("西瓜書"); } else{ choose("機器學習實戰(zhàn)"); }補充:關于視頻學習資料
吳恩達老師有兩個視頻課程,建議選擇早期版本(好像是零幾年),那個版本的數(shù)學論證比較完整。
高贊回答三
作者:匿名用戶
來源:知乎
我認為在項目中學習機器學習和深度學習更加容易,主要是實際的例子會幫助你更好理解其中的思想和計算過程。越學越不會說明已經(jīng)開始會一些東西了,實踐之后可能明白更多東西。但是如果讓我回到研一,我會選擇放棄這個方向。
本人就讀于一所中上的211學校,還有1個月就畢業(yè)了。研一時候我和樓主一樣,一直在學習,自己也會找一些開源的項目,也參加過一些比賽,個別比賽成績也說得過去。但是學校位置比較偏,導師資源不好,實驗室不讓出去實習等因素,我處于單打獨斗階段。找工作之前我已經(jīng)能熟練推出各種主流機器學習公式,用Numpy寫出大部分模型,在力扣等網(wǎng)站上刷了500+的題目。
剛入坑的時候,網(wǎng)上的各種行業(yè)前景的評價蒙蔽了我的雙眼,我滿懷自信的參加了2019年的秋招,結果以失敗告終,ML、DL基礎知識、手撕代碼都沒什么問題。參加招聘的所有公司中,只有騰訊告訴了我的不足之處,沒有實習、沒有論文。(很多大佬這時會說了,沒有論文還想找算法工程師的職位,我只能告訴你們,實驗室只有自己研究這個方向時,需要踩的坑多到無法想象)。華為的招聘我走的最遠,但是終面被刷了,因為非科班,沒辦法這是事實。最后的最后,我去一家通信公司做軟開去了。這也算比較好的結果吧。
簡單總結一些招聘時候我都會什么了吧,ML基本模型的公式推導+numpy實現(xiàn),DL的基礎知識,CV領域自己手寫過SSD、Faster R-CNN、YOLO、retinanet這幾種基本目標檢測算法的全部代碼。改進了Faster R-CNN,但是沒來得及出文章。參加了幾次比賽,成績一般,最好成績是1000個隊伍比賽的前20名。數(shù)據(jù)結構方面,力扣里的中等題基本思路都有,大部分能寫出來,畢竟刷了500多個算法題。
我只想說如果是非985碩士,沒法發(fā)論文,沒法去實習,還是老老實實做些軟開的項目吧,這些可能更有用。當然,如果你是大佬,就當我在放屁好了。
學這方面的知識還是別看書了,每天認認真真學會一種模型,從公式到代碼,每個細節(jié)理清,你就可以說你會這個模型了。書上理論講的很好,但是我認為找一些項目更能幫助你理解這些。如果是數(shù)學知識不會的話,就需要好好補習一下了,其實里面的數(shù)學知識不算難。
祝您學有所成。
沒想到這么多評論和贊,謝謝知乎的大佬們。
學習機器學習和深度學習不要只關注項目上的東西,很多trick已經(jīng)是很通用的了,很多優(yōu)秀的公眾號和文章已經(jīng)分享了的差不多了,還有很多比賽大佬分享的競賽經(jīng)驗,數(shù)據(jù)科學比賽決賽的PPT也是一個收集trick的途徑。
個人認為:如果比賽成績沒進決賽或者項目沒有落地,一般情況下是沒什么價值的,除非基于這些能寫出來文章。這個過程能收獲到的也只有經(jīng)驗了。
如果出于找工作的考慮的話,非科班的大佬們一定一定要把CS基礎打牢(我就是折在了這里,半年時間惡補了一番,受益匪淺)。絕對不要把python作為第一語言,C\C++或者java作為第一語言最好,這個很重要。機器學習的那些理論知識要非常熟悉,最起碼要做到公式推導以及代碼實現(xiàn)。
現(xiàn)在算法崗工作真的比較難找了,要有拿得出手的項目、比賽、論文,基礎知識牢固,編程能力極強。滿足這些條件才能入得了面試官的眼吧。
大佬加油,堅持學習,雖然這幾年算法崗的工作就是獨木橋,但是相應的,網(wǎng)上公開的知識也越來越多了,認真學習的人一定能通過這個獨木橋。
評論區(qū)的大佬們就不要問我去哪工作或者面試經(jīng)驗什么的了,我就是一個渣渣,我的這些信息對你們來說也沒什么參考價值,有很多有價值的經(jīng)歷值得學習。而且我水平確實一般,找不到算法崗也正常,趁著現(xiàn)在更強迫自己學習基礎知識,這樣對我來說也很好。
總結
作者:黃海廣
學習路線可以參考這篇(適合初學者入門人工智能的路線及資料下載)
其實以上三位大佬把問題都回答得差不多了。再說說我的看法:
首先,務必要學基礎知識,學好數(shù)學,會手寫算法,最好能用Python復現(xiàn)下算法(主要用Numpy實現(xiàn)),不會手寫算法沒關系,看懂別人寫的代碼就行,依樣畫葫蘆改改。
最重要的一點:多記筆記!!!
可以看看我怎么記筆記(節(jié)選):
圖:我的筆記,好像是考研時候弄的,機器學習也用到
其次,多看論文,看一篇論文的關鍵,在于復現(xiàn)作者的算法(吳恩達老師說的)。
最后,多和人交流,我感覺水平提升最快的時候,是跟大神交流,跟優(yōu)秀的人在一起,前面有人拉你,后面有人推你,你就能前進。
微信群交流其實也不錯,不過只有200人能掃碼進群,需要用文末的擺渡方式進群了。
總結
以上是生活随笔為你收集整理的【经验】刚读硕士怎么感觉学机器学习和深度学习越学越不懂?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习基础】在机器学习项目中该如何选
- 下一篇: 【Python基础】高效的10个Pand