AI 科研入坑指南—中国人民大学赵鑫
本文來源于:中國人民大學趙鑫:AI 科研入坑指南_智源社區的博客-CSDN博客
趙鑫副教授在第十九屆中國計算語言學大會(CCL2020)上做的一份完整報告
這次的報告題目是《早期科研的入門》,主要面向本科生以及研一的同學。整體內容分為五個部分,先抽象概括科研是什么;然后介紹科研的一般步驟;重點談談如何進行日常學習;再簡略介紹一下深度學習如何入門;最后是從“零”起步,也就是如何打好基礎。
一、科研是提出問題、解決問題
在回答“科研是什么”這一問題時,大多數人對科研的定義都會涉及:創新、系統、知識等概念,看起來比較泛化。
本科生普遍將科研歸納為:做競賽、寫論文、做大作業等等;而我對科研的理解是:能在特定領域發現并解決問題的過程,因此科研不一定受限于發表論文,因此參加數據科學競賽本身、學習之前未知的理論也是一種科研的過程。
二、如何做科研:多嘗試,不灰心
如何選方向選題
科研除了把握住技術主線,還需要注意如何定義設計問題,也即如何選方向和選題。
下面介紹對初學者有一定作用的兩個方法:
1、關注頂級研究員,follow并研究他們“深思熟慮”的研究方向;
2、對于技術熟練的初學者,可以從技術出發,觀察模型在數據集上的效果,然后分析它的不足之處。
對于選題,一個原則是和頂級會議“零同步”。當頂級會議公布數據之后,初學者要花費一到兩天把所有的標題過一遍。頂級會議是研究的風向標,通過分析頂級會議,可以明確當前的研究熱點。
如何找參考文獻
確定題目之后,接下來如何找參考文獻?對于英文水平欠缺的初學者,建議從中文綜述入手找到合適的英文論文進行閱讀。
另外一個方式是,借助知乎等平臺找到相關的英文論文,然后用谷歌學術判斷論文的權威性,畢竟現在的英文論文的數量產出也是驚人的。
對于初學者來說,一開始讀不懂文獻很正常,建議借助一些自媒體平臺,找到有中文的論文概要。自媒體非常發達,一般把想要看的英文論文題目“丟”到搜索引擎里,70%~80%的概率能夠搜索到中文的介紹。換個角度想,如果找不到中文介紹,那么這篇論文大概率關注度不高。
此外,還要不斷積累領域單詞,這是領域積累的最基本要求。在讀論文的時候,我建議找到前繼論文,包括引用論文,仔細篩選,保留最小的核心閱讀集合,爭取一開始把小集合的論文快速閱讀完畢。
如何建立模型
對于初學者來說,最重要的一點是:必須能夠針對具體問題建立模型。那么如何建立模型呢?或者如何學習模型?建議初學者從工具去入手,熟悉模型的輸入輸出。也可以形式化觀察輸入輸出并進行描述。當熟悉數據之后,再慢慢了解背后的數學原理。
其實,建立模型絕大部分是進行偏增量性的工作,即如何改進模型,從而更好解決實際問題。
從長遠來看,還是需要掌握一套硬功夫,這里的硬功夫指的是非常熟悉模型,不用熟悉所有的數學原理,但是需要熟悉至少一類模型。
如何設計實驗
設計實驗具有固定的步驟,會涉及到數據集的劃分、評測指標的制定、對比方法的選取。當實驗效果不好的時候,要分析為什么不好,思考有哪些現象可以總結,以及模型是否適用。
如何寫論文
如何寫論文呢?對于初學者來說,寫英文文章需要基本語法過關。可能你很長時間沒用英文寫東西,語法水平還不如高中。
第二點,用詞要準確。很多時候問題可能不是出在語法,而是用詞錯誤。因此一定要把高頻詞匯、常用詞以及通用詞收集起來,然后進行系統的語法學習。一般來說,最多花費兩天就能達到高中水平。
第三點,確保論文邏輯清楚,這點尤為重要。要寫清楚先講清楚,不要出現邏輯的突然轉折、不清楚等問題。在寫作的過程中可以復用一些積攢的句子,形成一些固定的句式,減少重復寫作。
三、日常內功修煉:成體系、多精讀
讀論文
關于讀論文,前面也提到要關注自媒體,鎖定幾個目標會議期刊,有更新第一時間讀一下感興趣的論文摘要。也要分清楚精讀和粗讀論文,一般來說,研究生每周要精讀3~5篇相關的論文。如何算是精讀過一篇論文呢?上圖展示了幾個指標:
-
記住作者的名字
-
記住題目
-
能夠很容易地說出這篇論文的毛病
-
能夠很容易說出這篇工作的貢獻
-
能夠很容易說岀和這篇論文很類似的若干篇論文
-
能夠很容易說出這篇論文的技術細節
-
能夠很容易說出這篇論文的實驗細節
-
能夠想到這篇論文在自己的研究題目下該如何應用
除了上面幾點之外,大家還要有自己的判斷。題目和作者的名字是最基礎的,這和前面提到的“由人找論文”形成呼應。
如果看論文找不到毛病,或者感覺這篇論文滿篇都沒有問題,這就說明閱讀論文的深度不太夠,因此要帶著批判的眼光看論文。
關于實驗細節和技術細節,盲目深入可能對你的研究沒有特別大的幫助。有些論文的質量并不高,只要知道這篇論文對你接下來的研究題目有何幫助就可以了,其他的部分可能對你的收益并不大。
學機器學習
學習機器學習,是本領域研究者學習硬功夫的過程。我個人總結了以上方法,首先要系統地學習一本機器學習書籍,當遇到困難的時候,唯一的解決方法是要天天看,天天想,天天推導公式,多用搜索引擎。檢驗是否掌握的唯一標準是:是否能用代碼實現。
此外,還要積極參與學術報告或者預習講者之前發表過的論文,當場提問。因為現場交流能夠幫助你深入理解,解決閉塞。
?寫代碼
建議大家熟練掌握一門編程語言,或者一個框架。對于一般難度的模型,三天之內能夠基本完成。拋開數據處理,如果需要很長時間寫一個并不復雜的模型,那么這意味著你的代碼能力可能需要極大的加強。
初學者在初級階段不要“亂寫”。代碼要有規范,養成自己的代碼風格,做到能夠復用,寫一個功能爭取能夠“復制拷貝”。
建議沒怎么寫過代碼的同學,一定要找到成熟的工具包或者代碼庫入手,這樣能省去很多繞彎路的環節。
觀察數據、收集數據
科研人員對于數據一定要非常敏感。數據對科研人員來說,是和應用最直接的溝通,如果不了解真實數據中存在的問題,還進行研究的話,相當于在空想模型。
建議同學如果沒有感覺,就用一個方法去運行一個數據集,根據輸出結果看問題,總結規律,磨煉自己成為真正對數據極度敏感的人:看到一個數據集,就能想到相關方法,從而預估正確效果。換句話說,了解數據的大概和分布之后,能夠迅速在腦袋中找到相對的模型進行處理。
一名合格的碩士生
總結一下,怎么樣才算是一名合格的碩士生:
1、首先要熟練掌握一門編程語言,能夠在較短時間內實現一個基礎模型的開發;
2、熟悉基本的機器學習基礎,可以在白板上推導公式;
3、能夠快速解決本領域的之前自己未做過的任務:容易上手自己之前未做過的任務,保持開放心態;
4、能夠獨立發表一篇相關論文:研究生的精髓貴在“獨立科研”,如果能做到獨立,那么研究生2~3年的時間沒有白費;
5、最后,能夠帶領低年級同學做科研:帶領別人做科研是自己能力強悍的綜合體現。
在最后一個階段,需要幫助一名初學者提升數學基礎,提升代碼能力,然后解決一些問題,“幫助”他寫出一篇論文。如果能夠做到,說明你的能力已經很強了。
上面的標準雖然有點高,但卻是我們努力向往的目標。
當前在人工智能領域,深度學習為主流。建議大家在學習深度學習的時候,一定要系統地去上一門公開課,精髓在“系統”二字。不能今天學習這門課,明天學習那門課,一定從一而終。另外,推薦大家閱讀一些技術帖子、模型解析文章,多使用一個開源的軟件框架。國外網站也有很多文章很有深度,細讀之后,會發現里面的內容非常有“彈性”。
四、從零起步:打好基礎
確保基礎打好
強調一下如何從“零”起步,首先確保基礎打好。建議完整修完一門國外經典課程(從課程視頻、作業到項目),然后完整閱讀一本機器學習或者深度學習教科書,熟練掌握一門基本的編程語言以及深度學習框架。
鼓勵多讀經典論文,看文章的源代碼。建議大家讀論文時候配置源代碼,否則論文不一定能看懂。還可以從感興趣的研究領域去入手,比如自然語言處理,當你的研究已經有一些起色的時候,建議關注非常頂級的研究機構的工作。
頂級不一定是國外,國內有些研究機構也非常優秀。關注他們的報告,關注他們的演講。
開始閱讀論文
正如前面提到的,開始閱讀論文的時候,要大量的瀏覽標題,如果能讀懂,然后看看摘要。
當然你鎖定某一個方向之后,要確保在這個方向最近5年的論文都找到并做成列表。如果這個方向很火,那么可能有人已經幫你做成列表。反復閱讀列表的論文時,如果能做到基本一半的論文都能大概了解意思,那么就可以開啟找idea的過程。
在這一步的過程中,同樣要多閱讀論文,只不過多一些分析的色彩。了解每一篇文章的動機,比較研究工作之間的差異,最終聚焦到你非常熟悉的領域。將自己代入寫作者的角色,要考慮如果你來寫這篇文章,你所呈現的和他們有什么不一樣。
也可以從數據出發,運行應用模型發現問題。試圖將他們存在的問題進行建模或者定義,仔細琢磨是否有科學意義。
在建立模型的時候,初學者要善于做到模仿和遷移,可以聚焦某一類模型的解決方案。杜絕啟發式規則的方法,但是可以看看如何將規則數學化、通用化。
開始設計實驗
在開始設計實驗的時候,要堅持實驗部分有章可循的原則,不要“拍腦袋”決定,重點驗證所提出想法的新穎性,可以適當用輔助定性的例子進行說明。實驗過程要認真、要嚴謹,敢于把代碼和數據都公開。
投稿會議的時候,選擇適合水平的會議論文,明白不被錄取是常態,積極傾聽評審的修改建議。對于一些比較扎實、但是新穎性略遜的工作可以選擇期刊進行投稿。多投才能多中,即使被拒也能不斷改進。
最后講一些可能有用的“老生常談”,科研是自己的事,不是老師的事。網絡將教育資源逐步平均化,因此,勤奮是任何科研工作的基礎。可以一直沒有論文,但是確保一直處于進步狀態。拒絕紙上談兵、拒絕眼高手低,需要維持積極的心態和堅毅的態度利用好一切機會學習,不恥下問,重復是熟練的唯一途徑。
總結
以上是生活随笔為你收集整理的AI 科研入坑指南—中国人民大学赵鑫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java编程输出平行四边形_JAVA语言
- 下一篇: MTK芯片介绍