實驗做不出效果是該放棄還是繼續做下去?
本人計算機研一,數據挖掘方向,從有想法到做實驗快兩個月了,但是實驗效果一直不理想,和導師討論感覺也沒有什麼大的進展,不知道是該放棄,還是繼續做下去?第一次獨立做研究,不知道能否有大佬給些建議?謝謝!
很難一概而論。
不過我覺得很多同學會有一種傾向:不觀察數據特點,硬套機器學習模型,期待一下就能得到特別好的結果,一勞永逸。這種偷懶的做法,反而往往導致嘗試很多不同模型無功而返,事倍功半。原因在於,即使一個模型的確有可能在這個任務上有效,大概率也會因為代碼bug或預處理/細節處理不當而效果不佳。如果既不觀察數據又不觀察實驗結果進行有針對性調試,淺嘗輒止,就會誤以為這個模型不適用,反而會誤導後面的研究路線。
很多同學說,實驗代碼我反覆檢查好幾遍,感覺不會有錯。我的感受是,如果你心裡已經預設這個代碼沒錯,那就永遠找不出錯來。很多錯誤需要通過反覆觀察中間結果才能找到。
所以,即使實驗做不出效果,那也要拚命找到沒有效果的原因,而不是輕易換模型,不然很容易陷入下個模型也做不出效果的怪圈。
我第一份課題做了整整一年........整整一年。
近似最近鄰檢索,有人聽過嗎……算冷門了。當初做的差點要放棄,可最終堅持下來了,也出了些滿意的結果。
看一個項目該不該堅持主要看兩方面。
第一,大方向是否正確。
比如,image caption剛出來的時候如果你想到了video QA,那無論多難都要做下去,做出來了就是先驅(臭挖坑的),就是baseline,就將會有源源不斷的引用。
但是,也有反例。比如GAN出來了以後,有些人什麼都想GAN特么的。可GAN不是他娘的義大利炮,不是所有應用場景都特么能GAN,233333。GAN的能力範圍你需要去動手考量。比如文本目前就只能GAN出屎,GAN不出詩。聽說VAE還不錯......
第二,你還有沒有合理的創新方向。
比如你覺得resnet可壓縮,那麼你會在那些方面壓縮它又能不損失表達能力?做哈希、二值化?層重複利用?共享權值?聽起來都似乎reasonable,可以嘗試。這裡面又有很多細節要思考,是壓縮的trick用到所有層還是部分層?如何挑選?能不能參數自動config?
你要做的事就是把你覺得可靠的想法和你導師討論,列舉記錄下來。不厭其煩一個一個嘗試到成功或者全部失敗。
這裡的想法驗證不是說隨便拍腦袋。你要首先想清楚你要解決什麼問題。比如就是網路壓縮,參數二值化一定會造成性能損失。如果損失過多的時候,就要增加信息量來換回表達能力。那麼你就要想,有沒有信息損失介於單精度和二值化之間的數據壓縮方法?於是你有了新的驗證方向。
這個新方向是從你上次失敗的教訓中總結得到的,邏輯上合理,技術上如果找到可行方案那就去做。這是一個迭代式有條理的模式。
這裡面你需要權衡這個工作的成本價值比。
也就是說,你付出的時間與你的工作的影響力的對比。如果你覺得你的工作很重要,像我一樣,付出一年絲毫不會吃虧,這裡面你學到的不僅僅是這個領域的知識,還可以培養洞察力和實驗能力,不要覺得一年只出一篇paper還不保證能中很吃虧,否則就用我們地方話說叫
熊瞎子掰苞米,掰多少撂多少。
注意,是你自己覺得工作是否重要。因為結果很可能不如預期。你覺得有影響的工作不一定就產生高引用,但也許它會具有很高實用價值。
通常情況下,經過以上兩方面思考你還覺得這個工作有做的必要,那麼你就要拼到沒想法為止。而且我敢說,如果能過了以上兩關這種工作最終都是能做出來的。
總結來說,就是不要盲目實驗。
要充分思考討論,並有條理地驗證一切合理可能,切忌浮躁。
念念不忘,必有迴響。
祝順利。兩個月沒結果...我上個項目兩個月連bug都沒修完...準確點說,兩個月的時候我們都沒發現生成的數據是錯的,我們一直在錯誤數據上做訓練...後來發現結果一直不盡人意,後來不斷的檢查和嘗試,終於發現我們用別人的程序,程序負責生成rgba圖片,結果rgb是對的,a是錯的,肉眼根本看不出來...但是放到計算機上就不行,錯的就是錯的...然後我們興緻勃勃的把這個bug修了。
然後我們就發現那個bug屁影響都沒有,該出問題還是出問題。經過我們不斷的檢查,不斷的嘗試,一個月後發現我們生成的圖片ambient occlusion的sample size不對,我們又用超算生成了三批超級圖片
當時剛好趕上出去開會,一個星期就用來生成數據了。開完會回來,大家興緻勃勃的說終於可以發paper了!然後數據跑了一遍,發現還是不對...
終於,我們在energy function里加了個L1 norm。至此,問題解決。至今也沒有人知道,為什麼要這樣做,為什麼會這樣,問題到底出在哪了...
反正我們剋制住了自己強烈的好奇心,開始了下一個糟踐NN的項目...
話說回來,兩個月沒結果怎麼辦,第一看別人怎麼辦,看相關paper啊,科研大部分結果都是堆paper堆出來的,別人嘗試過什麼,效果如何,加到自己的model里會有什麼效果,值不值得嘗試,這些都是看paper看出來的。
如果你說你沒有相關領域的話,那你就看不相關的領域啊,做NLP你可以看vision,做OS你可以看database啊,實在不行還有數學和統計在背後呢,肯定有什人做過什麼神奇的,你能借鑒的東西。
如果你說相關的你都看完了,有用的你都實現了,那你就回去查bug啊,從輸入到計算到輸出,這麼多地方會出bug呢,而且你還借鑒了那麼多別人的東西,幫他們也把bug查一下啊。
bug查完了,你說你的程序絕對不可能有任何問題,但就是跑不出來結果,這個時候你就要考慮你項目的理論基礎了,你要做的東西理論上是不是可行,能不能證明。我假設你立項的時候考慮過這個,現在有了這麼多實踐經驗,你需要重新考慮了。如果你立項的時候就沒有考慮過這事,這個應該是你第一個查的問題。
如果可行的話,你要回去讀paper了,你項目的設計的思路是錯的。如果不可行的話,證出來,發paper。
關於跟導師交流的問題,不知道你怎麼跟你導師交流的,但是導師的作用大概有三個,第一給你發錢。第二「我有一個問題,你知道關於xxx的都有什麼你覺得我需要看paper嗎?」。第三「這是我寫的稿子,你看完改改就發出去吧」。跟導師的交流目的主要是讓他了解你的水平,然後利用他在行業內的經驗,讓你少走點彎路,而不是讓他解決你的問題。不然他就去讀研就行了,要你幹嘛?你不要指望導師能夠在一個未知的領域比你強多少,雖然我的導師全面碾壓我,但是在完全未知的領域我們是兩臉蒙逼的...
科研是一種態度,在完全未知的領域裡系統而又瘋狂的探索這種態度。不是你今天寫了個程序改變了世界所以你很成功,也不是你的程序沒改變世界所以你很失敗。這個世界關你屌事啊?!你發現一個問題,你好奇,你探索,你碰壁,你生氣,你就接著探索,直到你死了或者問題死了,你就是個科學家了。
最後...區區兩個月沒結果...兩個月有結果說明你做的東西太簡單了。你需要擔心的是兩個月沒進度,而不是兩個月沒結果。不斷嘗試,不斷改進,不斷讀paper,自然而然你問題就解決了,或者你就退學了。
加油~同學你知道deadline的力量嗎!到deadline實驗就自己跑出來了。。
補充一些:我自己做研究是會越想越多的,總想這裡試一下那裡試一下。但是deadline會給你做剪枝,迫使你在一個方向上想的更細,而不會把時間分散了。很正常,一定要問自己why, 為什麼實驗結果不好? 模型對所有benchmark都不好,還是只有對某些數據特性的訓練集不好? 模型哪個細節是最能導致模型效果不好的?dig into the details about the results, not just for final number, once figure this out, becomes much closer to your next paper.
做做做,反正有五年時間可以慢慢做呢。。
然而我的實驗已經毫無進展了兩年了。。
T_T
這個實驗有哪些希望?有哪些難點?局外人是看不清的,只有你自己最清楚應不應該做下去。
我研二開始養原代血管平滑肌細胞,養了快一年,失敗了二十多次,最後有一次成功了,細胞長得飛快,趕緊凍存了。接下來實驗兩個月就搞定,寫畢業論文,順利答辯,畢業。寫文章發表。可是在做的時候自己心裡真的沒譜這次細胞能不能活,會不會污染了。當然事後來看我那時也蠢,一次原代細胞培養試驗從取材開始,到知道這次細胞又養不活,又要重來了,期間至少一周,長的半個月,除非是污染了那很快能看出來。我就在傻等結果。最後統計下來我做原代細胞試驗的成功率是20%,當時如果我連續五天每天做一次,至少有一次能成功的概率是67%,應該不會再要那麼長時間了。雖然學科不同,但我想科研的過程應該是共通的。這種堅持,還是蠻鍛煉人的,這也是讀研的收穫之一吧。
首先,對於初學者,實現一個具體的方法,還是非常值得投入90天*14小時的。哪怕最後做出來的效果仍然不理想,但是通過這個磨鍊,你的工具用熟了、背景知識弄懂了、好像也開始看懂了一些基礎理論。所以說,成功和失敗都有會收穫。
其次,對於進階者,可以好好思考下自己的方法的本質問題,即從理論上來說方法為什麼work,為什麼不work?一般來說,當你能夠保證你的方法在理論上work的時候,你的是實驗結果就自然而然的出色了,這也方便你的工作被審稿人接受,因為他會像你一樣被你自己說服。
最後,願您有信心能夠克服困難,實在不行還可以自我嘲諷下,「不就是個應用嗎,又不是純理論有啥難的,還有在搞數學人的眼裡計算機弄出來的理論都是渣渣hh」
個人經驗,這個時候才是你在實質性地從事科研活動的開始:你投入了時間、精力,但得不到預期的結果; 你開始懷疑實驗,懷疑方向,甚至質疑能力,而又尋不到實質性的外界幫助; 再向後,你可能還會糾結於求助同行,還是要避免研究工作的過分曝光。
能夠分享的有限建議是:
- 質疑研究問題的前提,看看通過約束問題或者問題應用的場景,能否「繞過」一些不易解決的問題
- 文獻研究,看一看過去學者的研究中,此類問題是否被「過度」研究過了,如果一個問題在相當長的一個時間段內(如 5-8 年)被反覆在各類學術刊物及會議上被討論過,那麼相對「簡單」的想法會被研究殆盡,剩下的往往會難度較高,因此這種情況之下,倒是可以認真權衡一下,是否有必要繼續
- 嘗試直接寫郵件給相關領域的學者,尋求幫助或合作。一般來說,這類郵件顯有回復,不過也不能一概而論,因此嘗試一下不會有什麼損失
- 拓展領域,看看能否將當下研究的問題或採用的方法映射到其它領域裡面去
- 耐心,被一個問題困擾數周或者數個月,在科研上是常態,因此不要過早地將懷疑的情緒夾雜進來
供你參考
這個我有發言權,我碩士主要做的貝葉斯網路分類器(BNC),其實這個領域算比較成熟了,早年做BNC的那些大牛都已經改行,比如aode模型的提出者Webb Geffery,花了很大精力在BNC的研究上,前兩年發現實在沒什麼做的,現在已經轉行做神經生物學了。。。而且他提出aode之後,陸續在BNC上的研究成果也是亮點不多。說了這麼多就是想說這個領域真的很難出成果。下面來說說我的經歷吧。
研一的時候我們有課,其餘時間老師會提出想法讓我們實現,同時閱讀相關論文。基本一個月一個模型,直到研一結束也沒有做出效果好的模型。
到研二時間充裕了,那段時間大概花了3個月,做出了效果很好的BNC,之後兩個月在這個基礎上進一步做的模型,可以說
是目前state-of-art的BNC了吧,目前正在準備發論文,老師建議我發頂刊......但是深感寫論文是個技術活,還是要多看多總結,目前水平可能發頂刊比較考驗文筆構思布局等等...經歷講完了,總結一點乾貨,按重要性排序:
1. 觀察運行結果,這點看了 @劉知遠 老師的回答深有體會,儘管效果不好,但是分析結果非常重要,儘管這是個比較繁瑣的事情,但是從運行結果中仔細思考,一定會有收穫。
2. 多做想法!多做想法!多做想法!我那三個月平均3天實現一個模型,加上結果分析整理和總結,差不多10天2個模型,這樣算起來我總共做了18個模型!大部分結果也都不好,真正能用的就2個。科研是有運氣成分的,有很多模型不是說推理出來的,而是試出來的,多試才有希望。想法這個也看天賦,我就是各種奇思妙想都有,實驗室有同學他就是覺得思路枯竭,沒什麼想法,這也可能和閱讀量有關,所以這裡再附加強調一點多看論文,不另單說了。
3. 同樣強調一下 @劉知遠 老師說的,排bug很重要!所以好的實驗平台扮演著比較強大的作用,當然做深度學習有pytorch,tf這些非常成熟的平台,我們實驗室做BNC有自己的平台,經歷各種版本,代碼的坑比較少,自己添加模型也方便。不知道你做數據挖掘是不是用weka? 為了排除bug,你可以單拿出一個小數據集專門做測試用,寫一個腳本算好各種要計算的新的定義的量,甚至可以手算出來,記錄下來,檢查看看你代碼有沒有錯,有時候你覺得這個計算很簡單,的程序百分百不會算錯,但莫名其妙他就是算錯了。導致這種情況可能是你的基礎功不紮實,也有可能是平台的問題。
說的這些每個都考驗你對科研的熱情和興趣,我就覺得專註做科研的感覺還是很好玩的事情,儘管有很多失敗,但內心依然堅信希望。
你這才兩個月,繼續加油。晚上睡不著打開知乎看到這個問題深有感悟順手答了一下,先說這幾點重要的,明天回顧一下再更新。希望對你有幫助。
在研究過程中,不可避免的會遇到瓶頸。
遇到困難,不輕言放棄,就算放棄,也要知道放棄的理由。是自己想不到?還是此路不通?如果是前者,建議外花時間思考,後者則放棄。
人都有畏難情緒,當一個問題長期無法克服的時候,會不自覺的把注意力轉移到不那麼重要的問題上,以緩解自己的情緒,給自己信心。然而對問題的進展沒有實質性的幫助。或者選擇放棄。
遇到瓶頸怎麼辦?我通常會讓自己休息幾天,然後直面問題。換種思路去想問題,由於自身的限制。我會去找人討論,找導師討論,找師兄討論。複述給別人聽,能夠檢查自己對問題的認識程度,發現問題。同時,其他人能夠不經意間幫你轉換思考的角度,戳中重點。大規模看論文回來評估自己工作的可行性
有個實驗我做了6年,業餘愛好,我分析的是金融數據,期望靠這個做為一個副業賺錢。第二年的時候把之前的一切推翻換個方法重來。第四年的時候再推翻一次。第六年再來一次。然後現在終於摸到點門道了。一條路,只要堅持走下去,最終都會達到目的地。大部分人不是能力不行,只是堅持不下來放棄了,或者他們認為這樣堅持不值得。
博士題目,研究一段時間之後,發現那個題目是一個無解問題,至少對某些情況下是無解的。所以最後發的文章是關於何種條件下此問題有解的研究。
研究過程中的思維轉變,終生收益。
我覺得科研不可能一帆風順,都會有一道門檻,但是越過了它,後面的路會平坦很多。儘管這樣想,但還是要注重方法,不能盲目地往牆上撞,多看看paper,多嘗試一些方法,還有就是多與業界人士交流,這些都是有幫助的。
那是deadline不夠近
研一而已,才兩個月而已,急啥。
程序寫錯了,模型參數沒調好,選擇的數據集不對,公式推導錯了等,都有可能。從提出想法到做實驗才兩個月的時間,太心急了少年。失敗是成功之母,你要堅持,才可以娶到成功。
失敗成功都是成功,人永遠比想像的耐艹。別放棄就好,越痛苦離結果越近
推薦閱讀:
※做學術非常辛苦嗎,即便是到了四五十歲?
※2017 年,數學界都發生了哪些大事件?
※如何看待學術界聯合抵制 Elsevier 事件?
※法學領域有哪些著名的學術會議、期刊、論壇以及資料庫?
※如何看待德國科學家與出版業巨頭愛思唯爾 (Elsevier) 的對抗?